TMS320F2812型DSP在車輛四輪轉(zhuǎn)向控制系統(tǒng)中的應(yīng)用
4.2 后輪轉(zhuǎn)角信號(hào)采集
后輪轉(zhuǎn)角信號(hào)由高精度的增量式光電編碼器獲得。它將蝸桿轉(zhuǎn)動(dòng)的角度根據(jù)轉(zhuǎn)動(dòng)的方向變?yōu)橄鄳?yīng)的增、減計(jì)數(shù)脈沖,每轉(zhuǎn)一圈產(chǎn)生2048個(gè)脈沖,輸出量為一時(shí)鐘信號(hào)和一方向信號(hào)。本文采用DICH0(CAP2)引腳捕捉時(shí)鐘信號(hào),輸入引腳DICH19(GPIOF12)取得方向信號(hào)。帶光耦的開關(guān)量輸入電路設(shè)計(jì)如圖4,捕獲單元電路DSP芯片內(nèi)部集成。本文引用地址:http://www.ex-cimer.com/article/197880.htm
圖4 輸入電路框圖
部分程序設(shè)計(jì)過程如下:
EvaRegs.CAPFIFO.all=0x0400;
// 設(shè)置捕獲FIFO狀態(tài)寄存器的初值;
EvaRegs.CAPCON.bit.CAPQEPN=0x1;
// 使能捕獲單元2;
EvaRegs.CAPCON.bit.CAP12TSEL=1;
// 選擇定時(shí)器1為基準(zhǔn);
EvaRegs.CAPCON.bit.CAP2EDGE=0x1;
// 檢測上升沿有效;
EvaRegs.T1CMPR=0x0080;
// 為捕獲單元2設(shè)置定時(shí)器1;
EvaRegs.T1PR = 0xFFFF;
EvaRegs.T1CON.all = 0x1042;
interrupt void cap2_int(void)
// 捕獲中斷服務(wù)子程序;
{ if(GpioDataRegs.GPFDAT.bit.GPIOF12==1)PositivePulsecount++;
else NegativePulsecount++;
deltar=(PositivePulsecount-NegativePulsecount)*pi/1024.0;
}
// 根據(jù)I/O引腳來計(jì)算后輪轉(zhuǎn)角,取弧度;
4.3 算法設(shè)計(jì)與D/A輸出
算法的基本思路是:4WS啟動(dòng)時(shí),輸入一前輪轉(zhuǎn)角,通過橫擺率反饋,將其與速度相關(guān)的理想橫擺率穩(wěn)態(tài)響應(yīng)增益G0進(jìn)行比較,然后經(jīng)控制器G1控制后輪轉(zhuǎn)角,實(shí)現(xiàn)四輪轉(zhuǎn)向,輸出質(zhì)心側(cè)偏角、橫擺率、側(cè)向加速度用于監(jiān)測,控制框圖如圖5所示。電機(jī)的驅(qū)動(dòng)電壓由DSP的比較寄存器產(chǎn)生PWM信號(hào),在通過D/A 轉(zhuǎn)換電路輸出。本文采用定時(shí)器4產(chǎn)生PWM,由DA4引腳輸出,一級(jí)放大的D/A轉(zhuǎn)換電路如圖6所示。
圖5 控制框圖
圖6 D/A轉(zhuǎn)換電路
部分程序設(shè)計(jì)過程如下:
EvbRegs.T4PR=0x3FF;
// 設(shè)置定時(shí)器2的周期寄存器;
EvbRegs.T4CMPR=0x0080;
// 設(shè)置定時(shí)器4的比較寄存器初值;
EvbRegs.T4CON.all=0x1042;
// 使能比較單元;
EvbRegs.GPTCONB.bit.TCOMPOE=1;
// 驅(qū)動(dòng)定時(shí)器4的PWM輸出;
EvbRegs.GPTCONB.bit.T4PIN=1;
// 定時(shí)器4的比較輸出低電平有效;
y0[0]=c[0][0]*x0[0]+c[0][1]*x0[1]+d[0][0]*u[0]+d[0][1]*u[1]; // 輸出量質(zhì)心側(cè)偏角;
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]; // 輸出量側(cè)向加速度;
Dutycycle=volt_out/10.0*1024;
// 計(jì)算占空比;
EvbRegs.T4CMPR=Dutycycle;
// 重載定時(shí)器4的周期寄存器;
評論