3、静态死区设置方法:基于阈值的死区配置、查表法实现死区、寄存器配置实例
好,咱们接着聊死区设置。上一章讲了死区的基本概念,这一章我直接上干货——静态死区到底怎么配?
说白了,静态死区就是固定不变的死区值。你设好它,它就老老实实待在那儿,不会因为系统状态变化而改变。这在很多工业现场里其实够用了,尤其是那些工况相对稳定的场合。
3.1 基于阈值的死区配置
这是最直观的方法。你设定一个阈值,误差信号小于这个阈值,控制器就不响应。
我个人的习惯是,先把阈值设得稍微大一点,然后慢慢往下压。为什么?因为一开始你并不知道系统的噪声底噪有多大。设小了,执行器会频繁动作,磨损快;设大了,系统响应又太迟钝。
举个例子,一个温度控制系统,设定值是100°C。你设死区阈值为±1°C。那么实际温度在99°C到101°C之间时,控制器就当没看见,不输出任何调节动作。
if |e(t)| < Deadband_Threshold:
Output = 0
else:
Output = e(t)
嗯,这里要注意:阈值不能设成0。设成0就等于没有死区,系统会一直抖。我在项目中遇到过有人把死区设成0,结果阀门每秒钟都在微调,最后执行器电机烧了。
3.2 查表法实现死区
阈值法虽然简单,但不够灵活。有时候你需要不同的死区值——比如在零点附近死区大一点,远离零点时死区小一点。这时候查表法就派上用场了。
查表法说白了就是预先算好一张表,把输入和输出对应关系存进去。运行时直接查表,省去实时计算的开销。
我曾经在一个电机控制项目里用过查表法。电机在低速时抖动厉害,需要大死区;高速时抖动小,可以设小死区。我建了一张表,把转速分成10个区间,每个区间对应一个死区值。
// 查表法死区配置示例
// 输入:转速 (rpm)
// 输出:死区值 (mV)
const uint16_t speed_table[] = {0, 100, 200, 500, 1000, 2000, 5000};
const uint16_t deadband_table[] = {50, 40, 30, 20, 15, 10, 5};
uint16_t get_deadband(uint16_t speed) {
for (int i = 0; i < 6; i++) {
if (speed < speed_table[i+1]) {
return deadband_table[i];
}
}
return deadband_table[6]; // 最高速时的死区
}
你想想看,这样做的好处是什么?灵活。你想改哪个区间的死区,改表里的数值就行,不用动逻辑代码。调试的时候特别方便。
3.3 寄存器配置实例
好了,理论说完了,咱们看看实际芯片里怎么配。我以TI的TMS320F28335 DSP为例,它的ePWM模块里有专门的死区寄存器。
这个芯片的死区配置寄存器叫DBCTL(Dead-Band Control Register)。你需要设置三个东西:
- 死区模式:选择是上升沿延时、下降沿延时,还是两者都延时
- 死区极性:选择输出是高有效还是低有效
- 死区时间:以系统时钟周期为单位,设置延时长度
// TMS320F28335 ePWM死区配置实例
// 系统时钟 150MHz,死区时间 1us
EPwm1Regs.DBCTL.bit.OUT_MODE = 0x3; // 上升沿和下降沿都延时
EPwm1Regs.DBCTL.bit.POLSEL = 0x0; // 极性不反转
EPwm1Regs.DBRED = 150; // 上升沿延时 150个时钟周期 = 1us
EPwm1Regs.DBFED = 150; // 下降沿延时 150个时钟周期 = 1us
这里有个坑,我踩过。DBRED和DBFED这两个寄存器是10位的,最大值是1023。如果你系统时钟是150MHz,最大死区时间就是1023/150MHz ≈ 6.8us。别设超了,否则寄存器会溢出,死区时间反而变成0。
再补充一个实际项目中常用的配置表,方便你快速参考:
| 系统时钟频率 | 目标死区时间 | 寄存器值 | 适用场景 |
|---|---|---|---|
| 100 MHz | 0.5 μs | 50 | 小功率MOSFET |
| 150 MHz | 1.0 μs | 150 | 通用IGBT |
| 200 MHz | 2.0 μs | 400 | 大功率IGBT |
| 100 MHz | 3.0 μs | 300 | SiC MOSFET |
嗯,这张表是我自己总结的,不同厂家的芯片寄存器结构可能不一样,但思路是通用的。你拿到一个新芯片,第一件事就是看它的死区寄存器位宽和时钟频率,算出最大可设死区时间。
最后说一句,静态死区虽然简单,但它是所有高级死区控制的基础。你把静态死区玩明白了,后面学动态调整就轻松多了。
公众号:蓝海资料掘金营,微信deep3321