1.TLE82453
1.1 TLE82453简介
1.2 TLE82453时序
注意读数据要读两次,第一次丢弃,第二次是需要的数值。
1.3 TLE82453 初始化
extern void TLE82453_Init(void)
{
DWORD_U result = {0};
// Disable chip
TLE82453_EN_CLR;
// Set RESN pin from low to high.
TLE82453_RESN_CLR;
DelayMS(10);
TLE82453_RESN_SET;
DelayMS(20);
// Set Clock Divider Registe,M=38,N=7,so Fdith = 5MHZ/39/128=1KHZ
// Set Clock Divider Registe,M=38,N=7,so Fdith =1KHZ
result.dword = TLE82453_RWReg(0,TLE_W|RCLKDVD|FCLK_WDEN|FDITH_DIV_M|FDITH_DIV_N|FSYS_DIV_8);
// Set Configuration Register
result.dword = TLE82453_RWReg(0,TLE_W|RCFG|RCFG_FME|RCFG_FM0|RCFG_FM1|RCFG_FM2|RCFG_CH2_SR1|RCFG_CH1_SR1|RCFG_CH0_SR1);
// Integrator Threshold & Open On Register,Open load current = 58mA
result.dword = TLE82453_RWReg(0,TLE_W|RINTT_OL|CH0|RINTT_OL_VALUE);
result.dword = TLE82453_RWReg(0,TLE_W|RINTT_OL|CH1|RINTT_OL_VALUE);
result.dword = TLE82453_RWReg(0,TLE_W|RINTT_OL|CH2|RINTT_OL_VALUE);
// Set Autozero Register,RSETPOINT_EN must = 0,AZ is defualt function
//result.dword = TLE82453_RWReg(0,TLE_W|RAUTOZERO|RAUTOZERO_START|CH0);
//result.dword = TLE82453_RWReg(0,TLE_W|RAUTOZERO|RAUTOZERO_START|CH1);
//result.dword = TLE82453_RWReg(0,TLE_W|RAUTOZERO|RAUTOZERO_START|CH2);
// Set PWM period register,5MHZ/312/16 = 1KHZ
result.dword = TLE82453_RWReg(0,TLE_W|RPWM_PERIOD|RPWM_PERIOD_KI|RPWM_PERIOD_VALUE|CH0);
result.dword = TLE82453_RWReg(0,TLE_W|RPWM_PERIOD|RPWM_PERIOD_KI|RPWM_PERIOD_VALUE|CH1);
result.dword = TLE82453_RWReg(0,TLE_W|RPWM_PERIOD|RPWM_PERIOD_KI|RPWM_PERIOD_VALUE|CH2);
// Set Setpoint register,682*1500/2047=499.7mA
result.dword = TLE82453_RWReg(0,TLE_W|RSETPOINT|RSETPOINT_EN|RSETPOINT_AL|RSETPOINT_VALUE|CH0);
result.dword = TLE82453_RWReg(0,TLE_W|RSETPOINT|RSETPOINT_EN|RSETPOINT_AL|RSETPOINT_VALUE|CH1);
result.dword = TLE82453_RWReg(0,TLE_W|RSETPOINT|RSETPOINT_EN|RSETPOINT_AL|RSETPOINT_VALUE|CH2);
// Set Integrator Register
result.dword = TLE82453_RWReg(0,TLE_W|RINT_LIMIT|CH0|RINT_LIMIT_HL|RINT_LIMIT_LL);
result.dword = TLE82453_RWReg(0,TLE_W|RINT_LIMIT|CH1|RINT_LIMIT_HL|RINT_LIMIT_LL);
result.dword = TLE82453_RWReg(0,TLE_W|RINT_LIMIT|CH2|RINT_LIMIT_HL|RINT_LIMIT_LL);
// Set Dither Register,steps=3,step size=18,3*18*1500/2047=39.6mA
// SYNC = 1,so a new dither period will not start until the start of the next PWM cycle
result.dword = TLE82453_RWReg(0,TLE_W|RDITHER|CH0|RDITHER_EN|RDITHER_SYNC|RDITHER_SETP_SIZE|RDITHER_SETP_NUM(3));
result.dword = TLE82453_RWReg(0,TLE_W|RDITHER|CH1|RDITHER_EN|RDITHER_SYNC|RDITHER_SETP_SIZE|RDITHER_SETP_NUM(3));
result.dword = TLE82453_RWReg(0,TLE_W|RDITHER|CH2|RDITHER_EN|RDITHER_SYNC|RDITHER_SETP_SIZE|RDITHER_SETP_NUM(3));
// If no fault, enable chip
DelayUS(20);
TLE82453_RWReg(0,TLE_R|RDIAG);
DelayUS(20);
result.dword = TLE82453_RWReg(0,TLE_R|RDIAG);
DelayUS(20);
TLE82453_RWReg(0,TLE_R|RICVID);
DelayUS(20);
result.dword = TLE82453_RWReg(0,TLE_R|RICVID);
if( result.dword == RICVID_ID )
TLE82453_EN_SET;
}
2.STM32F4XX实现简单颤振
2.1输出电流反馈采样率
采用ADC软件触发+DMA搬移,以使用两个通道为例,计算每个通道采样率。
The total conversion time is calculated as follows:
Tconv = Sampling time + 12 cycles
设置如下:
With ADCCLK = 15 MHz and sampling time = 28 cycles:
Tconv = 28 + 12 = 40 cycles,则单通道最大采样率为375kbps。
配置为28cycles以下采集不稳;
配置为28cycles,两个通道各取4次平均,能实现46.8k采样率;
配置为28cycles,两个通道各取8次平均,能实现23.4k采样率;
配置为28cycles,两个通道各取16次平均,能实现11.7k采样率;
配置为28cycles,两个通道各取32次平均,能实现5.85k采样率;
考虑恒流控制频率最大一般不会超过2KHZ,先选取11.7k采样率。
2.2 STM32F4XX实现颤振
STM32F4XX采用类似TLE82453的控制方法,并做一定的简化,例如step_size的刷新选择在输出PWM的溢出中断中进行,这样不需要再为颤振单独设置一个定时器了,默认颤振周期和PWM周期是同步的,颤振频率最大只能是输出PWM频率的1/4。PID的参数需要合理设置,响应时间要足够小,否则颤振效果较差。大多数场景可能只需要几路颤振,考虑到TLE82453的价格,损失部分性能可以接受,可以根据项目成本和性能要求折衷选择。
2.3 PID参数1
steps=3,step_size=30波形,kp=0.625,ki=0.0625,kd=0.0625:
左边一列为普通高边开关的恒流和颤振;右边一列为TLE82453的恒流和颤振。
这个PID参数由于设置不合理,和TLE82453对比效果比较差。
2.4 PID参数2
Steps=3,step_size=30波形,kp=1,ki=0.01,kd=0:
左边一列为普通高边开关的恒流和颤振;右边一列为TLE82453的恒流和颤振。
这个PID参数调大了P值,减小了I值,输出效果接近TLE82453。