DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2512|回复: 2
打印 上一主题 下一主题

[待整理] 基于MPC5634的汽车控制器多路AD采样的设计

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-28 17:11:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
随着汽车对控制系统的要求和依赖性提高,AD采样的设计模块成为汽车控制器中重要的组成部分。AD采样的结果是汽车控制器控制执行器的依据,它的速率和精度在汽车控制中起着重要的作用。
       
        本文主要介绍一种基于MPC5634的多路模拟信号采集方法,通过增强型直接内存访问(DMA)方式,自动在RAM和增强型队列式模数转换器eQADC模块之间转移数据,能高效和准确地完成对模拟信号的采集。
       
        1增强型队列式模数转换器eQADC模块
       
        1.1 eQADC模块的结构
       
        MPC5634的eQADC模块有两个可独立工作的ADC转换单元(ADC0和ADC1),40路模拟通道(可扩展),0~5V的转换范围,转换精度有8位、10位、12位三种精度可选,具有软件和硬件两种触发方式,采样方式有单次方式和连续方式等,ADC的工作时钟可达15MHz.速率和精度可以满足汽车控制器的要求。图1为eQADC模块的结构框图,显示了eQADC模块的主要组成部分。
       
       
        图1 eQADC模块的结构框图

         
        1.2命令缓存CFIFO的工作机制
       
        eQADC模块有6个命令缓存CFIFO,每个CFIFO有4个深度,CFIFO有单次扫描和连续扫描的操作模式,配置为不同的扫描模式时,CFIFO就有不同的触发机制。当配置为单次扫描模式时,每次会使存储于队列中的eQADC转换命令序列执行一次。当设置为连续扫描模式时,只要队列启动后,就可以持续的运行。数据的流程如图2所示。
       
       
        图2数据流程

         
        1.3 eQADC的命令格式
       
        eQADC有配置命令和转换命令两种命令格式。配置命令用于对eQADC模块进行初始化设置,像使能ADC模块单元,设置时钟分频因子,转换速率因子,使能DMA请求等;转换命令主要用于设置采集哪个通道,用哪个ADC模块单元转换,转换的结果放在6个结果缓存的哪一个里面,是否对采集的结果进行校正等。
       
        2增强型存储器直接访问(DMA)模块
       
        DMA控制器是总线上的一个主机,能够在片内资源(Flash、RAM和I/O外设等)以及片外资源之间传输数据。DMA有32个通道,在某个时刻只能有一个通道成为总线上的主机并进行数据传输。为了解决他们之间的冲突,DMA有两种可编程的优先级机制:固定优先级机制和轮询优先级机制。一旦一个通道成为主机,该通道将通过先读再写的操作方式,把数据从一个存储器地址传输到另一个存储器地址。每个DMA通道都有一个独立的传输控制描述符(TDCn)。
        3多路eQADC采样程序设计
       
        在这次的设计中,数据的传输是通过DMA进行的。多路eQADC采样程序设计主要包括命令队列、结果队列的定义,eQADC的初始化,DMA初始化,触发CFIFO等。程序的设计流程如图3.
       
       
        图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:源地址为主迭代数为40;设置TCD1:源地址为主迭代数为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结束语
       
        本设计完成了汽车控制器的采样模块的设计,它保证在时间上和精度上满足汽车控制器的要求。通过不断地测试,该设计达到了系统所要求的性能和功能。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
沙发
发表于 2020-10-5 14:40:47 | 只看该作者
谢谢分享!{:12:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-23 15:06 , 耗时 0.092227 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表