图4 输入电路框图
部分程序设计过程如下:
EvaRegs.CAPFIFO.all=0x0400;
// 设置捕获FIFO状态寄存器的初值;
EvaRegs.CAPCON.bit.CAPQEPN=0x1;
// 使能捕获单元2;
EvaRegs.CAPCON.bit.CAP12TSEL=1;
// 选择定时器1为基准;
EvaRegs.CAPCON.bit.CAP2EDGE=0x1;
// 检测上升沿有效;
EvaRegs.T1CMPR=0x0080;
// 为捕获单元2设置定时器1;
EvaRegs.T1PR = 0xFFFF;
EvaRegs.T1CON.all = 0x1042;
interrupt void cap2_int(void)
// 捕获中断服务子程序;
{ if(GpioDataRegs.GPFDAT.bit.GPIOF12==1)PositivePulsecount++;
else NegativePulsecount++;
deltar=(PositivePulsecount-NegativePulsecount)*pi/1024.0;
}
// 根据I/O引脚来计算后轮转角,取弧度;
4.3 算法设计与D/A输出
算法的基本思路是:4WS启动时,输入一前轮转角,通过横摆率反馈,将其与速度相关的理想横摆率稳态响应增益G0进行比较,然后经控制器G1控制后轮转角,实现四轮转向,输出质心侧偏角、横摆率、侧向加速度用于监测,控制框图如图5所示。电机的驱动电压由DSP的比较寄存器产生PWM信号,在通过D/A 转换电路输出。本文采用定时器4产生PWM,由DA4引脚输出,一级放大的D/A转换电路如图6所示。
图5 控制框图
图6 D/A转换电路
部分程序设计过程如下:
EvbRegs.T4PR=0x3FF;
// 设置定时器2的周期寄存器;
EvbRegs.T4CMPR=0x0080;
// 设置定时器4的比较寄存器初值;
EvbRegs.T4CON.all=0x1042;
// 使能比较单元;
EvbRegs.GPTCONB.bit.TCOMPOE=1;
// 驱动定时器4的PWM输出;
EvbRegs.GPTCONB.bit.T4PIN=1;
// 定时器4的比较输出低电平有效;
y0[0]=c[0][0]*x0[0]+c[0][1]*x0[1]+d[0][0]*u[0]+d[0][1]*u[1]; // 输出量质心侧偏角;
y0[1]=c[1][0]*x0[0]+c[1][1]*x0[1]+d[1][0]*u[0]+d[1][1]*u[1]; // 输出量横摆角速度;
y0[2]=c[2][0]*x0[0]+c[2][1]*x0[1]+d[2][0]*u[0]+d[2][1]*u[1]; // 输出量侧向加速度;
Dutycycle=volt_out/10.0*1024;
// 计算占空比;
EvbRegs.T4CMPR=Dutycycle;
// 重载定时器4的周期寄存器;