基于MPC5634的控制器多路AD采样的设计
图3 程序流程
3.1 定义数组
本文中cQUEUE0[40]被定义为转换命令的存储数组,rQUEUE0[40]被定义为转换结果的存储数组。把所有通道的转换命令分别放在数组cQUEUE0[40]中,最后采集的结果分别放在数组rQUEUE0[40]中,这个可以随时读取rQUEUE0[40]中的数据被汽车控制器所用。
3.2 初始化DMA
TCD0对应于CFIFO0,TCD1对应于RFIFO0.由于本设计只要一个命令缓存CFIFO0和一个结果缓存RFIFO0就可以满足设计要求,故只用到一个CFIFO0,一个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个通道的模拟量。配置eQADC的寄存器,时钟分频因子为2,使能DMA0,DMA1请求等。
3.4 校正寄存器的设置
本项目的芯片功能很强大,以前的校正都需要外面加硬件来校正采样结果,MPC5634自带的有校正功能,本项目采用的校正是这样的:ADC的初步转换结果将通过MAC单元来完成校正。MAC单元执行下列算法来进行校正:
Idealresult=GCCXADCresult+OCC+2 (1)
GCC为增益校正的常数,它是在寄存器ADCn_GCCR中定义的;OCC为偏移量校正常数,它在寄存器ADCn_OCCR中定义的。
GCCR与OCCR的值是需要计算来确定的。通过以下公式进行求解:
Idealresult1=GCCXADCresult1+OCC+2 (2)
Idealresult1=GCCXADCresult1+OCC+2 (3)
为了求出GCCR与OCCR的值,我们只需要两个通道的理想结果和实际的结果就行了,通道44和通道43的电压值分别对应0.25Vdd和0.5Vdd.而他们的实际结果可以采集到。因此,可以求出GCCR和OCCR的值。
3.5 使能DMA请求
设置使能DMA0和DMA1请求。
3.6 触发CFIFO0
设置CFIFO0为连续转换模式,这样就可以连续、持续地采集信号,并及时把采集的结果放到结果存储数组中,如此就可以保证汽车控制器在结果存储数组中所读取的数据为最新的采集结果,可以使控制器根据最新的数据来控制各个执行器。
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 结束语
本设计完成了汽车控制器的采样模块的设计,它保证在时间上和精度上满足汽车控制器的要求。通过不断地测试,该设计达到了系统所要求的性能和功能。
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码