微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 使用ADSP-CM408F ADC控制器的电机控制反馈采样时序

使用ADSP-CM408F ADC控制器的电机控制反馈采样时序

时间:07-26 来源:未知 点击:

内核模式下,无需配置特定存储器分配,即可实现除变量外的内核MMR读取数据的写操作。然而在DMA模式下,必须分配特定的存储器区域,然后进行配置,才能实现DMA访问,并且每个定时器都必须配置。所需的存储器大小取决于每个定时器相关的帧尺寸,以及新的帧覆盖之前需要在存储器中存储多少郑

  表19显示SRAM映射概念,以及控制SRAM配置的相关ADCC寄存器。ADCC_BPTR寄存器必须存储指向存储器基址的指针,才能存储ADC样本。若存储器缓冲器中需要存储多个帧,则ADCC_FRINC寄存器中应包含指针的偏移值,使其指向下一帧的基址。在线性缓冲模式下(通过向ADCC_CBSIZ寄存器写入零来激活),会以持续增加的线性化方式在存储器中存储额外的帧,中间隔开一个帧的增量值。若向ADCC_CBSIZ写入非零值M,则会激活循环缓冲,且在帧的基址指针返回ADCC_BPTR值并开始覆盖现有帧数据之前向存储器写入M帧。

  图19. ADC DMA传输的存储器配置

  在图17中的电机控制应用示例中,每个PWM周期都会采集ADC样本,并即刻用于控制和监控应用中。因此,将样本以线性方式存储毫无意义,因为存储器将很快过载。在此类应用中,最好在启用循环缓冲时将M限制为1或更小的值,或者将ADCC_FRINC值设为0并在每个PWM周期中覆盖帧。简化这项任务的驱动程序应用编程接口(API)可在"ADCC软件支持"部分找到。

  ADCC软件支持

  与ADSP-CM40x EZKIT一同提供的ADI Enablement Software软件包内含一系列API函数调用命令,可简化本应用笔记中讨论的ADCC模块设置。这些调用命令监控不同寄存器的正确配置以及需要执行的任何状态确认。

  示例代码

  本应用笔记中的示例代码逐步说明配置并使用图17中电机控制应用的方法。器件驱动程序会增加额外开销,但极大地简化ADCC模块寄存器编程。

  代码的第一部分定义一系列参数和配置常数,用于驱动程序API调用。

  第1行至第10行定义每个定时器的帧和关联的数据缓冲器大小。分配样本缓冲器长度时,将包含系数2作为安全措施,用于调试目的。由于ADC样本传输至存储器的操作完全通过硬件触发(包括DMA),因此在将新的缓冲器提交给驱动程序以及复位ADC缓冲器指针之前,如果在第122行插入软件断点,则可能导致存储器被覆写。以一个额外缓冲作为裕量可防止出现此类调试相关问题。缓冲器中的帧数目定义为1,这表示每次收到新帧,API便会覆写存储器缓冲器,即每个定时器仅需针对1个帧进行存储器分配。

  第11行到第16行以ACLK周期数形式定义每个事件的采样时间,如表3所示。

  注意,SMP_TIME1、SMP_TIME2和SMP_TIME3仅以一个ACLK周期分隔。该设置使这些事件在ADC0内以流水线方式进行处理。

  第17行至第44行定义每个ADC通道的控制字、6个采样事件的通道映射,以及数据缓冲器中每个事件的数组索引。
 

  第45行至第59行声明ADC操作所需的变量和函数原型。ADCC存储器缓冲器和ADCC定时器存储器缓冲器的存储器分配大小由API预定义,且不得进行更改。一个ADCC设置函数、一个TRU设置函数以及两个ISR回调函数(每个ADCC定时器各一个回调函数)对寄存器进行设置。

  第60行至91行包含主ADCC配置函数SetupADC()。第一步是设置事件配置表,即含有事件编号、ADC控制字、ADC定时器、同步采样以及每个事件的存储器偏置的struct。

  正确完成ADCC事件配置后,必须开启ADCC实例,以及与该实例相关的所有ADCC定时器。然后,必须在寄存器中设置每个定时器帧中断的驱动程序回调函数名(第72行至73行)。随后,使能DMA模式(第74行),配置ADCC时钟和芯片选择(第75行至第78行)。

  第81行将第62行定义的EventCFG指令传递至adi_adcc_ConfigEvent驱动程序函数,随后adi_adcc_SetEventMask驱动程序函数按需使能或屏蔽事件。本例中,使能全部事件。为了获得最高的ADC吞吐速率,使能双位数据接口很重要,代码见第83行,这表示能在8个ADC时钟周期内传输ADC的16位数据。(注意,如果没有使能双位接口,则第76行中的NCK以及第77行和第78行中的tCSCS必须分别设为16和17)。然后进行数据缓冲器的存储器分配,数据缓冲器将提交至ADCC,以便通过adi_adcc_SubmitBuffer调用进行填充。adi_adcc_SubmitBuffer API仅在DMA模式下工作;因此使用该API之前必须先设置DMA模式。该驱动程序函数由主应用程序再次调用(第105行),以便应用程序完成数据提取后将缓冲器归还给ADCC控制。最终,完成全部配置后,需要使能定时器实例以及ADCC自身。

第92行至第97行包含TRU的设置步骤。它包括开启TRU实例、将触发从PWM sync主机路由至ADCC从机,以及使能

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top