基于MPC5634的控制器多路AD采樣的設計
本文引用地址:http://dyxdggzs.com/article/264517.htm

?
圖3 程序流程
3.1 定義數組
本文中cQUEUE0[40]被定義為轉換命令的存儲數組,rQUEUE0[40]被定義為轉換結果的存儲數組。把所有通道的轉換命令分別放在數組cQUEUE0[40]中,最后采集的結果分別放在數組rQUEUE0[40]中,這個(gè)可以隨時(shí)讀取rQUEUE0[40]中的數據被汽車(chē)控制器所用。
3.2 初始化DMA
TCD0對應于CFIFO0,TCD1對應于RFIFO0.由于本設計只要一個(gè)命令緩存CFIFO0和一個(gè)結果緩存RFIFO0就可以滿(mǎn)足設計要求,故只用到一個(gè)CFIFO0,一個(gè)RFIFO0,以及與他們對應的TCD0和TCD1.設置TCD0:源地址為&cQUEUE0,目的地址為0xFFF80010,源地址偏移為4,傳輸的大小為32位,次要字節傳輸數NBYTES為2;主迭代數為40;設置TCD1:源地址為&rQUEUE0,目的地址為0xFFF80032,源地址偏移為4,傳輸的大小為16位,次要字節傳輸數NBYTES為2;主迭代數為40.
3.3 初始化eQADC
初始化轉換命令的存儲數組cQUEUE0[40],本設計是采用ADC0模塊單元,12位精度,采用校正,一次采集40個(gè)通道的模擬量。配置eQADC的寄存器,時(shí)鐘分頻因子為2,使能DMA0,DMA1請求等。
3.4 校正寄存器的設置
本項目的芯片功能很強大,以前的校正都需要外面加硬件來(lái)校正采樣結果,MPC5634自帶的有校正功能,本項目采用的校正是這樣的:ADC的初步轉換結果將通過(guò)MAC單元來(lái)完成校正。MAC單元執行下列算法來(lái)進(jìn)行校正:
Idealresult=GCCXADCresult+OCC+2 (1)
GCC為增益校正的常數,它是在寄存器ADCn_GCCR中定義的;OCC為偏移量校正常數,它在寄存器ADCn_OCCR中定義的。
GCCR與OCCR的值是需要計算來(lái)確定的。通過(guò)以下公式進(jìn)行求解:
Idealresult1=GCCXADCresult1+OCC+2 (2)
Idealresult1=GCCXADCresult1+OCC+2 (3)
為了求出GCCR與OCCR的值,我們只需要兩個(gè)通道的理想結果和實(shí)際的結果就行了,通道44和通道43的電壓值分別對應0.25Vdd和0.5Vdd.而他們的實(shí)際結果可以采集到。因此,可以求出GCCR和OCCR的值。
3.5 使能DMA請求
設置使能DMA0和DMA1請求。
3.6 觸發(fā)CFIFO0
設置CFIFO0為連續轉換模式,這樣就可以連續、持續地采集信號,并及時(shí)把采集的結果放到結果存儲數組中,如此就可以保證汽車(chē)控制器在結果存儲數組中所讀取的數據為最新的采集結果,可以使控制器根據最新的數據來(lái)控制各個(gè)執行器。
4 主程序和執行結果
void main(void)
{
uint32_t cQUEUE0[40]; //定義命令存儲數組
uint16_t rQUEUE0[40]; //結果存儲數組
dma_init_fnc(); //DMA初始化
eqadc_init_fnc (); //eQADC初始化
set_calconstants ();//校正寄存器的設置
dma_able();//使能DMA0,DMA1
cfifo0_trig();//使能DMA0,DMA1
while(1)
{
}
}
5 結束語(yǔ)
本設計完成了汽車(chē)控制器的采樣模塊的設計,它保證在時(shí)間上和精度上滿(mǎn)足汽車(chē)控制器的要求。通過(guò)不斷地測試,該設計達到了系統所要求的性能和功能。
評論