电流环速度环算法
- 格式:doc
- 大小:13.50 KB
- 文档页数:2
// 电流控制
I_now=C_i; //将通过AD转换得来的电流数字量赋给I_now
I_er=I_c+I_now;//求本次电流误差
i_duty = ikp*I_er-iki*old_I_er;//求电流环PI控制的增量
now_pwm = old_pwm+i_duty/64;//因为ikp和iki系数放大了64倍,所以求电流环PI控制的输出时增量要除64
old_I_er=I_er;
if(now_pwm>=1873)
{ now_pwm=1873; } //上限饱和处理
if(now_pwm<=2)
{ now_pwm=2; }//下限饱和处理
old_pwm=now_pwm;//保存本次输出值
EvaRegs.T1CMPR=now_pwm;//输出本次控制值,用于改变PWM的占空比
//速度控制
if(speed_index>=2)
{
speed_index=0;
e=(AdcRegs.ADCRESULT0 >>4)-0x800;//转速给定值由电位器的调节
set_v = e;//s e t_v为速度给定,电机的最大转速约为1500 r/m,所以乘以1.5比较合适
temp=(AdcRegs.ADCRESULT1 >>4)-0x800;//速度反馈值
now_error=set_v+temp;//temp为本次求出的转速,set_v为转速给定
n o w_error为当前的转速误差
n_duty=nkp*now_error-nki*old_error;// 求出控制增量
d_duty=n_duty/34;
speed_i=old_speed_i + d_duty; //上次输出加上本次增量作为本次输出
old_error=now_error;//保存本次误差作为下次运算的上次误差
if(speed_i>max_c)//输出值作上限饱和处理
{ speed_i=max_c; }
if(speed_i<-1775)//输出值作下限饱和处理
{ speed_i=-1775; }
old_speed_i=speed_i;//保存本次输出作为下次运算的上次输出
I_c=speed_i;
李伟奇(827842703) 2011-6-24 22:24:19
以上分别为电流调节器PI算法和转速调节器PI算法。