3、直流电机开环控制:H桥驱动原理、PWM调速、死区时间设置、开环调速仿真

各位同学,欢迎来到第三章。

前两章我们把直流电机的基本模型和数学方程捋了一遍。从这章开始,咱们要动真格的了——让电机真正转起来。

开环控制,说白了就是“我让你转你就转,转成啥样我不管”。听起来有点粗暴?但在很多场合,比如风扇、水泵、玩具车,开环完全够用。而且,它是理解闭环控制的基础。

3.1 H桥驱动原理:让电机正反转

直流电机怎么才能正转、反转?

答案很简单:改变电流方向。电流从A端进B端出,电机正转;反过来,从B端进A端出,它就反转。

那问题来了——我们只有一个电源(比如12V),怎么实现电流换向?

这就轮到H桥登场了。

H桥的基本结构

H桥由四个开关管(通常是MOSFET或IGBT)组成,接成“H”形。电机接在中间横杠上。

四个开关管分别叫:Q1(左上)、Q2(右上)、Q3(左下)、Q4(右下)。

工作模式就两种:

  • 正转:导通Q1和Q4,电流从电源正极→Q1→电机→Q4→地。
  • 反转:导通Q2和Q3,电流从电源正极→Q2→电机→Q3→地。

嗯,这里要注意:绝对不能同时导通Q1和Q2,或者Q3和Q4。为什么?因为那等于把电源正负极直接短路,瞬间电流能把管子烧成灰。我刚开始做驱动板时就犯过这个错,啪的一声,MOS管直接炸了,板子上一股焦味……从那以后,我每次上电前都会用万用表量一遍逻辑。

核心要点:H桥的本质是四个开关,通过不同组合改变电机两端电压极性。

3.2 PWM调速:用占空比控制速度

电机转起来了,但怎么控制它转多快?

你可能会想:调电压呗。电压高转得快,电压低转得慢。

没错,道理是这个道理。但实际中我们很少直接调模拟电压,而是用PWM——脉冲宽度调制。

PWM的原理

说白了就是:把电源电压(比如12V)以很高的频率(比如20kHz)不停地开关。开的时间长,关的时间短,平均电压就高;反过来平均电压就低。

这个“开的时间占整个周期的比例”,就叫占空比

  • 占空比100%:一直开着,平均电压=12V,电机全速。
  • 占空比50%:一半时间开一半时间关,平均电压=6V,电机半速。
  • 占空比0%:一直关着,电机停转。

你想想看,电机是个大电感,电流不会突变。PWM频率足够高时,电流纹波很小,电机转起来就很平滑。

个人经验:我一般把PWM频率设在16kHz~20kHz之间。低于16kHz人耳能听到啸叫声,很烦人;高于20kHz开关损耗会明显增加。20kHz是个不错的折中点。

PWM与H桥的结合

实际驱动时,我们不会傻傻地让四个管子全硬开关。常用的方式是:

  • 正转时:Q1常开,Q4用PWM控制。或者反过来,Q4常开,Q1用PWM。
  • 反转时:Q2常开,Q3用PWM控制。

这样只需要一个PWM通道,控制简单,开关损耗也小。

3.3 死区时间设置:别让上下管直通

刚才我说过,上下管不能同时导通。但实际中,开关管不是理想器件——它关断需要时间。

比如,你让Q1关断、Q2导通。如果Q1还没完全关断,Q2就已经导通了,那瞬间就是上下管直通,短路!

这就是死区时间存在的意义。

死区时间是什么?

就是在切换上下管时,故意插入一段“两个管子都关断”的时间。比如:

  1. 先关断Q1。
  2. 等待死区时间(比如1微秒)。
  3. 再导通Q2。

这样,无论Q1关断多慢,都不会和Q2同时导通。

死区时间设多大?

这取决于你用的MOSFET的关断延迟时间。一般数据手册会给出td(off)和tf。

我个人的经验公式:

死区时间 ≥ (td(off) + tf) × 1.5

留50%的余量,安全第一。

MOSFET型号 典型关断延迟 建议死区时间
IRF540 约50ns 200~500ns
IRF3205 约60ns 300~600ns
IGBT(如FGA25N120) 约300ns 1~2μs

警告:死区时间不是越大越好。死区太长,电机在换向时会有短暂的“无驱动”状态,导致电流断续,转矩波动变大。我曾经在一个项目中把死区设成5μs,结果电机低速时抖得像筛子……后来改成1μs就正常了。

3.4 开环调速仿真:让模型跑起来

理论讲完了,咱们来点实际的——在Simulink里搭一个开环调速模型。

仿真模型结构

我习惯这样搭:

  1. PWM生成模块:用Repeating Sequence或PWM Generator,设置频率20kHz,占空比可调。
  2. H桥模型:用四个MOSFET(可以用理想开关代替),加上死区时间逻辑。
  3. 直流电机模型:用前两章讲的电枢方程和机械方程。
  4. 示波器:看电压、电流、转速波形。

关键参数设置

电机参数我用一个实际的小直流电机:

  • 额定电压:12V
  • 电枢电阻:2Ω
  • 电枢电感:5mH
  • 反电动势常数:0.1 V/(rad/s)
  • 转动惯量:0.001 kg·m²

仿真代码(MATLAB脚本方式)

如果你不想拖模块,也可以用脚本跑。下面是我常用的一个简化版:

% 直流电机开环PWM调速仿真
% 参数定义
R = 2;      % 电枢电阻,Ω
L = 0.005;  % 电枢电感,H
Ke = 0.1;   % 反电动势常数,V/(rad/s)
J = 0.001;  % 转动惯量,kg·m²
B = 0.0001; % 阻尼系数,N·m/(rad/s)

Vdc = 12;   % 电源电压,V
f_pwm = 20000; % PWM频率,Hz
T_pwm = 1/f_pwm;
duty = 0.6; % 占空比60%

% 仿真时间
t_end = 0.5; % 0.5秒
dt = 1e-6;   % 步长1微秒
t = 0:dt:t_end;
n = length(t);

% 状态变量初始化
i = 0;      % 电流,A
w = 0;      % 转速,rad/s
theta = 0;  % 角度,rad

% 存储结果
i_rec = zeros(1, n);
w_rec = zeros(1, n);

% 主循环
for k = 1:n
    % 生成PWM信号
    pwm = (mod(t(k), T_pwm) < duty*T_pwm);
    
    % H桥输出电压(简化:忽略死区)
    Va = pwm * Vdc;
    
    % 电机方程
    di = (Va - R*i - Ke*w) / L;
    dw = (Ke*i - B*w) / J;
    
    % 更新状态(欧拉法)
    i = i + di * dt;
    w = w + dw * dt;
    
    % 记录
    i_rec(k) = i;
    w_rec(k) = w;
end

% 画图
figure;
subplot(2,1,1);
plot(t, i_rec);
xlabel('时间 (s)'); ylabel('电流 (A)');
title('电枢电流');

subplot(2,1,2);
plot(t, w_rec);
xlabel('时间 (s)'); ylabel('转速 (rad/s)');
title('电机转速');

跑完这个仿真,你会看到:

  • 电流在启动瞬间有个很大的冲击(因为反电动势还没建立起来)。
  • 转速慢慢上升,最后稳定在一个值。
  • 如果占空比从60%改成80%,稳态转速也会跟着升高。

避坑指南:仿真步长别设太大。我曾经用10微秒步长跑这个模型,结果电流波形全是锯齿,还以为程序写错了。后来换成1微秒,波形就平滑了。记住,PWM频率20kHz时,一个周期才50微秒,步长至少要比这个短一个数量级。

好了,这一章的内容就到这儿。

从H桥的四个开关管,到PWM的占空比控制,再到死区时间的设置,最后用仿真验证了整个开环调速过程。你现在应该能自己搭一个简单的直流电机驱动系统了。

下一章,我们会给这个系统加上反馈——让电机转速更精确、更稳定。闭环控制,才是真正有意思的地方。

课后小作业:把上面代码中的占空比改成0.3和0.9,分别跑一次,看看稳态转速和电流有什么变化。再试试把死区时间加进去(在H桥输出那里加一个延迟逻辑),看看波形有什么不同。