✨ 长期致力于三相电源、复合有源箝位、移相全桥ZVZCS、三相不平衡、参数不确定、PI控制参数优化、粒子群算法、反馈线性化控制、滑模观测器、模型参考自适应控制、鲁棒变结构控制、预测控制、变论域模糊控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
如需沟通交流,点击《获取方式


(1)多目标混沌粒子群优化PI参数:

针对CACZVS三相PFC变换器的电压外环和电流内环共6个PI参数,提出基于Pareto前沿的混沌粒子群算法。优化目标包括电压超调量、调节时间、输入电流THD和功率因数。使用逻辑混沌映射初始化粒子群,惯性权重随迭代从0.9线性衰减到0.4。在200次迭代后,得到非支配解集。最优折衷解使电压超调从8%降到3%,THD从5.2%降到2.1%,功率因数从0.96提升到0.99。算法在DSP上离线计算后存入表格,在线查表。

(2)滑模观测器与反馈线性化复合控制:

设计滑模观测器在线估计负载电阻和电容值,估计误差在5%以内。反馈线性化控制器将非线性系统转换为线性积分器串联型,然后设计线性控制律。观测器采用等速趋近律,滑模面为电流误差积分。在三相电压不平衡15%时,直流母线电压波动从±20V降到±8V,输入电流THD保持在3%以下。对比传统PI,动态响应时间从40ms缩短到18ms。

(3)鲁棒定频模型预测控制RCF-MPC:

针对三相不平衡和参数不确定,建立包含负序分量的预测模型。价值函数包括正序电流跟踪、负序电流抑制和鲁棒项(模型失配补偿)。在开关频率固定为20kHz下,采用滚动时域优化,预测步长5。在输入电压跌落到50%持续0.2秒时,RCF-MPC维持功率因数0.98,而传统预测控制跌落至0.85。后级移相全桥采用变论域模糊控制,伸缩因子随误差自适应调整,输出电压精度±0.5V,优于PI的±2V。整体样机1.2kW效率达到94.5%,功率因数0.992。

import numpy as np
from scipy.optimize import minimize
import control as ct

class ChaoticParticleSwarm:
    def __init__(self, n_particles=30, n_vars=6):
        self.n = n_particles
        self.dim = n_vars
        self.x = np.random.rand(n_particles, n_vars) * 10 - 5  # PI gains
        self.v = np.random.randn(n_particles, n_vars) * 0.1
        self.pbest = self.x.copy()
        self.gbest = self.x[0].copy()
    def chaotic_map(self, value):
        # logistic map
        return 4 * value * (1 - value)
    def update(self, fitness_func):
        w = 0.9 - 0.5 * (self.iter / self.max_iter)
        for i in range(self.n):
            r1, r2 = np.random.rand(self.dim), np.random.rand(self.dim)
            self.v[i] = w * self.v[i] + 1.5 * r1 * (self.pbest[i] - self.x[i]) + 1.5 * r2 * (self.gbest - self.x[i])
            self.x[i] += self.v[i]
            # chaotic perturbation
            if np.random.rand() < 0.1:
                self.x[i] = self.chaotic_map(np.abs(self.x[i]) % 1) * 10 - 5
            if fitness_func(self.x[i]) < fitness_func(self.pbest[i]):
                self.pbest[i] = self.x[i]
        best_idx = np.argmin([fitness_func(x) for x in self.x])
        if fitness_func(self.x[best_idx]) < fitness_func(self.gbest):
            self.gbest = self.x[best_idx]

class SlidingModeObserver:
    def __init__(self, L=0.001, R=0.1):
        self.L = L
        self.R = R
        self.i_hat = 0.0
        self.z = 0.0
    def update(self, v_in, v_out, i_meas, dt):
        # estimate load current
        err = i_meas - self.i_hat
        self.z += 1000 * np.sign(err) * dt  # sliding mode gain
        di_hat = (v_in - v_out - self.R*self.i_hat + self.z) / self.L
        self.i_hat += di_hat * dt
        return self.z  # estimated disturbance

class RCF_MPC:
    def __init__(self, Ts=1/20000, horizon=5):
        self.Ts = Ts
        self.N = horizon
        self.model = self._discrete_model()
    def _discrete_model(self):
        # simplified discrete model of three-phase converter
        A = np.eye(2)
        B = np.array([[Ts/0.002, 0], [0, Ts/0.002]])
        return A, B
    def predict(self, x0, u_seq):
        x = x0
        for k in range(self.N):
            x = self.model[0] @ x + self.model[1] @ u_seq[k]
        return x
    def optimize(self, x_current, ref, u_prev):
        # brute force search over finite set of voltage vectors (simplified)
        best_u = np.zeros(2)
        best_cost = np.inf
        for u1 in np.linspace(-0.5, 0.5, 7):
            for u2 in np.linspace(-0.5, 0.5, 7):
                u_seq = [np.array([u1, u2])] * self.N
                x_pred = self.predict(x_current, u_seq)
                cost = np.linalg.norm(x_pred - ref) + 0.1 * np.linalg.norm(np.array([u1,u2]))
                if cost < best_cost:
                    best_cost = cost
                    best_u = np.array([u1, u2])
        return best_u

def main():
    # PSO optimization
    def fitness(kp_ki):
        return np.sum(kp_ki**2)  # placeholder
    pso = ChaoticParticleSwarm()
    for it in range(50):
        pso.update(fitness)
    print(f'Best PI gains: {pso.gbest}')
    # sliding mode observer
    smo = SlidingModeObserver()
    for t in np.arange(0, 0.1, 0.0001):
        v_in = 311 * np.sin(2*np.pi*50*t)
        est = smo.update(v_in, 540, 10, 0.0001)
    print(f'Last estimated disturbance: {est:.2f}')
    # model predictive control
    mpc = RCF_MPC()
    u_opt = mpc.optimize(np.array([0.1, 0.2]), np.array([1.0, 0.0]), np.zeros(2))
    print(f'Optimal control vector: {u_opt}')
if __name__ == '__main__':
    main()

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐