无刷直流电机带霍尔传感器仿真,采用自建的无刷直流电机部分。 转速波形完美跟踪给定值,效果良好,只有仿真

先看模型结构(假装这里有张仿真框图)。核心就是咱们自己搭的六步换向无刷电机本体,霍尔传感器模块和双闭环控制。重点说说那个霍尔信号生成模块,用MATLAB Function写了个状态机:

function hall_signal = getHallPosition(theta_e)
    sector = floor(theta_e/(pi/3)) + 1;
    switch sector
        case 1
            hall_signal = [1 0 0];
        case 2
            hall_signal = [1 1 0];
        case 3 
            hall_signal = [0 1 0];
        % ...其他扇区类似
    end
end

这个函数把电角度θ_e转换成三个霍尔信号,注意这里的电角度范围要映射到0-2π。有个坑是当转速突变时霍尔信号跳变可能不连续,后来在速度环PI控制器里加了个抗积分饱和才搞定。

无刷直流电机带霍尔传感器仿真,采用自建的无刷直流电机部分。 转速波形完美跟踪给定值,效果良好,只有仿真

转速环的PI参数调得我头大,最后锁定在Kp=0.15,Ki=2.8。测试时发现响应超调,灵机一动在误差计算后加了个速率限幅器:

classdef RateLimiter
    properties
        T_up = 1000; % 上升速率限制
        T_down = -1000; % 下降速率限制
        prev_val = 0;
    end
    methods
        function y = step(obj,u)
            delta = u - obj.prev_val;
            if delta > obj.T_up*Ts
                y = obj.prev_val + obj.T_up*Ts;
            elseif delta < obj.T_down*Ts
                y = obj.prev_val + obj.T_down*Ts;
            else
                y = u;
            end
            obj.prev_val = y;
        end
    end
end

这个自定义模块有效防止了转速突变时控制器输出抽风。仿真结果(此处脑补完美跟踪的转速曲线)显示,从1000rpm阶跃到2000rpm时调节时间不到0.2秒,稳态误差控制在±3rpm以内。

最后分享个血泪经验:仿真步长千万别设太大!开始用变步长跑结果震荡得跟心电图似的,改成固定步长1e-5秒后波形立马顺滑。下次试试注入霍尔信号噪声,看咱这控制算法能不能扛住干扰~

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐