4.TI程序:
4.1换向点电气行为
**因为在在相位换向的瞬间,由于直流电平或电源板的寄生电感和电容,可能会出现高dV /dt和dI/dt毛刺。可能会对计算的中性点电压有错误。**通过丢弃前几次扫描来克服这问题。(比如从负到正,先一直为负,检测到4次为正时,标志到了过零点检测,算是滤波)
在代码中,这是通过名为“NOISE_WIN”的功能实现的。持续时间取决于电源开关,电源板设计,相电感和驱动的直流电。此参数取决于系统,并且在电动机的低速范围内设置为较大的值。随着速度的增加,由于Bemf零交叉点也以更高的速度变得越来越近,所以逐渐降低了该持续时间。
4.2换向30度延迟
在有效的传感控制中,Bemf的零交叉点从相位换向时刻偏移了30º。因此,在借助六个过零事件来运行无传感器BLDC电动机之前,有必要计算与该30º延迟角相对应的时间延迟获得精确的换向点。这是通过实现位置插值功能来实现的。
相应的时间延迟以采样时间段的数量表示,并存储在变量CmtnDelay中。
Time delay = CmtnDelay .Ts = T(a/360) = VirtualTimer.Ts(a/360) = VirtualTimer . Ts/12
其中,Ts是采样时间段,VirtualTimer是计时器,用于对转子上一圈旋转期间的采样周期数进行计数。
4.3TI代码实现
typedef struct { Uint32 CmtnTrig; // Output: Commutation trigger output (0 or 0x00007FFF)
_iq Va; // Input: Motor phase a voltage referenced to GND (pu)
_iq Vb; // Input: Motor phase b voltage referenced to GND (pu)
_iq Vc; // Input: Motor phase c voltage referenced to GND (pu)
_iq Neutral; // Variable: 3*Motor netural voltage (pu)
Uint32 RevPeriod; // Variable: revolution time counter (Q0)
Uint32 ZcTrig; // Variable: Zero-Crossing trig flag (0 or 0x00007FFF)
Uint32 CmtnPointer; // Input: Commutation state pointer input (0,1,2,3,4,5)
_iq DebugBemf; // Variable: 3*Back EMF = 3*(vx=vn), x=a,b,c (pu)
Uint32 NoiseWindowCounter;// Variable: Noise windows counter (Q0)
Uint32 Delay30DoneFlag; // Variable: 30 Deg delay flag (0 or 0x0000000F)
Uint32 NewTimeStamp; // Variable: Time stamp (Q0)
Uint32 OldTimeStamp; // History: Previous time stamp (Q0)
Uint32 VirtualTimer; // Input: Virtual timer (Q0)
Uint32 CmtnDelay; // Variable: Time delay in terms of number of sampling time periods (Q0)
Uint32 DelayTaskPointer; // Variable: Delay task pointer, see note below (0 or 1)
Uint32 NoiseWindowMax; // Variable: Maximum noise windows counter (Q0)
Uint32 CmtnDelayCounter; // Variable: Time delay counter (Q0)
Uint32 NWDelta; // Variable: Noise windows delta (Q0)
Uint32 NWDelayThres; // Variable: Noise windows dynamic threshold (Q0)
int32 GPR1_COM_TRIG; // Variable: Division reminder
int32 Tmp; // Variable: Temp. variable
} CMTN;
/*
Note:
DelayTaskPointer = 0, branch for #COUNT_DWN
DelayTaskPointer = 1, branch for #CHK_TRIGGER
*/
/*-----------------------------------------------------------------------------
Default initalizer for the CMTN object.
-----------------------------------------------------------------------------*/