接上篇文章 DSPF2812的理论学习(CPU、时钟与中断) | 靳路晗~中国

事件管理器EV

使用DSP进行开发,事件管理器通常是要用到的,DSPF2812共有2个事件管理器EVA和EVB,它为用户提供了众多的功能,使其在电机控制、变频器、逆变器等应用场合中显得特别有用。EV模块包含通用定时器、比较单元、捕获单元、正交编码电路,下面将一 一介绍。

通用定时器

事件管理器EVA有通用定时器T1和T2,EVB有通用定时器T3和T4。通用定时器的作用主要有三:

  1. 计时。
  2. 使用定时器的比较功能产生PWM波。
  3. 也可以给事件管理器的其它模块提供基准时钟。

下面以T1为例,详细介绍通用定时器的工作原理。
首先来看通用定时器的结构:

从这张图中我们能得出以下信息:

  • 和定时器T1相关的常用寄存器有:16位的T1周期寄存器T1PR;16位的T1比较寄存器T1CMPR;16位的T1计数寄存器T1CNT;16位的T1控制寄存器T1CON;16位的通用定时器控制寄存器GPTCONA。
  • 定时器T1的输入信号:来自于CPU的内部时钟HSPCLK;外部时钟输入TCLKINA,最大频率不能超过37.5MHz;定时器计数方向输入TDIRA,用于定时器工作于定向增/减计数模式;复位信号。
  • 定时器T1的输出信号:定时器的比较输出T1PWM_T1CMP,可输出PWM波;送给ADC模块的AD转换启动信号;下溢、上溢、比较和周期匹配信号,用于提供自身比较逻辑。

了解了这些,我们可以开始学习定时器的计数模式了。
T1共支持4种模式,由T1控制寄存器的第12位TMODE1和第11位TMODE0来选择。

  • 当TMODE的值为0时,定时器T1工作于停止/保持模式。在这种模式下,T1停止计数并保持当前的状态。
  • 当TMODE的值为1时,定时器T1工作于连续增/减计数模式。在这种模式下,T1计数器寄存器T1CNT先从初始值开始递增至周期寄存器的值,再递减至0,再递增,再递减,这样不断循环下去。
  • 当TMODE的值为2时,定时器T1工作于连续递增计数模式。在这种模式下,T1计数器寄存器先从初始值开始递增至周期寄存器的值,然后突变为0,再从0开始递增至周期寄存器的值,不断重复循环下去。
  • 当TMODE的值为3时,T1工作于定向增/减计数模式,这时候T1计数器寄存器进行递增或者递减计数取决于引脚TDIRA的电平(高电平递增,低电平递减)。如果在T1定时器计数寄存器计数过程中,引脚TDIRA的电平发生了变化,那么必须在完成当前计数周期后的下一个定时器时钟周期时,T1CNT的计数方向发生变化。

在以上四种模式中,我们用得最多的是连续增/减计数模式和连续递增计数模式,大家可以重点关注这两种。接下来我们将讨论PWM波的产生。
当T1计数器寄存器T1CNT和比较寄存器T1CMPR的值相等时,如果定时器的比较功能和比较输出使能,则T1PWM_T1CMP引脚就会输出PWM波形。定时器T1能够产生两种类型的PWM,不对称的和对称的。

  • 当T1CNT工作于连续递增计数模式时,输出不对称的PWM波形。此时PWM波中各参数计算如下:
  • 当T1CNT工作于连续增/减计数模式时,输出对称的PWM波形。 此时PWM中各参数计算如下:

大家可以根据上述公式快速计算PWM的参数。

比较单元与PWM电路

事件管理器EVA模块具有3个全比较单元,比较单元1、比较单元2、比较单元3。EVA的比较单元时钟信号由通用定时器T1来提供,每个比较单元都能够输出2路互补的PWM波形(在这里PWM波形的原理和定时器产生PWM的原理基本相同),也可以通过相应的寄存器来设置死区时间,因此它有能力去驱动一个三相全桥电路。
注意这里引入了一个死区概念,我通过下面的图来解释。

由图可以看出,输入开关管的PWM信号必须都是互补的。在理想情况下,PHa1是高电平时,PHa2是低电平。但是二者从高电平转换到低电平或从低电平转换为高电平时都需要一段时间,在这段时间内,二者会同时导通,否则将会被击穿。因此,我们要保证上下两管的上升沿和下降沿互相要隔开一段时间,这段时间就称为死区。

捕获单元与正交脉冲编码电路

捕获单元用于捕获输入引脚上的信号跳变。EV有6个捕获单元,其中EVA对应CAP1、CAP2、CAP3,EVB对应CAP4、CAP5、CAP6。每个捕获单元都有相应的捕获输入引脚,此外,正交脉冲编码电路与捕获输入单元共用芯片外部引脚。
F2812事件管理器的每个捕获单元都有一个专用的2级深度的FIFO堆栈,捕获单元被使能后,当输入引脚CAPx上有1一个跳变(由CAPCONA/B指定是检测上升沿还是下降沿),就将所选通用定时器的当前计数值载入到相应的FIFO栈中。同时相应的中断标志被置位,如果该中断未被屏蔽,就产生了一个外部中断请求,即发生了捕获事件。

每个事件管理器有一个正交脉冲编码电路QEP,EVA的QEP电路有输入引脚CAP1_QEP1、CAP2_QEP2,EVB的QEP电路有输入引脚CAP4_QEP3、CAP5_QEP4,光电码盘输出的两路正交编码信号正好从上述的两个输入引脚输入到DSP的QEP电路,然后再通过QEP的译码器对正交编码信号进行译码,最后就可以得到电机转子的转速、旋转方向、旋转位置等信息了。
QEP电路工作时,引脚CAP1_QEP1和引脚CAP2_QEP2输入两路正交编码脉冲,QEP电路对这两路正交编码脉冲的上升沿和下降沿都进行计数,因此QEP电路为定时器T2所提供的时钟频率是每个输入序列的4倍。

模/数转换器ADC

F2812的ADC模块一共具有16个采样通道,分成两组:一组为ADCINA0-ADCINA7,另一组为ADCINB0-ADCINB7。具体结构见下图:

可以看出,虽然ADC模块具有多个输入通道,但内部只有一个转换器,因此同一时刻只能对一路输入信号进行转换。若某一时刻输入了多个信号,则ADC内部具有自动序列发生器,用户可以通过编程为序列发生器指定需要转换的通道顺序。
ADC的转换特性一般通过下面公式求得:

ADC模块的时钟通过下式计算:

ADC模块的通道采样时间如下:

(其中ACQ_PS是ADC控制寄存器中的位)

下面开始说ADC的工作模式。

  • 双序列发生器模式下顺序采样,假设对ADCINA0-ADCINA7、ADCINB0-ADCINB7这16路通道进行采样,此时将会用到序列发生器SEQ1和SEQ2。由于是顺序采样,必须对16个通道每一个通道进行排序。因此SEQ1将用到通道选择控制寄存器ADCCHSELSEQ1、ADCCHSELSEQ2,SEQ2将用到通道选择控制寄存器ADCCHSELSEQ3、ADCCHSELSEQ4。
  • 双序列发生器模式下并发采样,仍然遵循上述假设,以下同。(并发采样是一对通道一对通道地采样)因此同样用到两个序列发生器,但此时只需要对一对通道中的任何一个通道进行排序即可,因此通道选择控制器使用的数量是顺序采样的一半。
  • 级联模式下的顺序采样,由于ADC工作于级联模式,此时序列发生器SEQ1和SEQ2级联成了一个16状态的序列发生器SEQ。其它与双序列发生器模式下顺序采样类似。
  • 级联模式下的并发采样,即级联模式与并发采样的组合。

以上就是DSPF2812中ADC的基础知识,实际想编程的话光看上边是做不了的,你还需要结合相应的寄存器去搞清楚每一位是干什么的,根据你的要求进行配置。

CMD命令文件

这里首先要介绍通用目标文件格式COFF,详细的COFF文件格式包括断头、可执行代码、初始化数据、可重定位信息、行号入口、符号表等等,但从应用的角度来看,我们只需要掌握两点:一是通过伪指令定义段,二是给段分配空间。

编译器处理段的过程:1. 把每个源文件都编译成独立的目标文件。
2. 链接器把目标文件中相同段名的部分链接在一起,生成最终的可执行文件。

首先来看下面一个CMD文件:

MEMORY伪指令可以让用户选择目标存储器的起始地址和长度,其中PAGE0为程序空间,PAGE1为数据空间。
再来看下面的CMD文件:

其中,SECTIONS伪指令具体规定了在存储器内何处放置输出段,如果用户没有指定SECTIONS伪指令,链接器则用默认的算法组合并定位段。

对于CMD文件,我们主要是理解其对代码的分配,起到更好的管理存储空间的作用。如果代码量小且没有特殊要求的话,你也可以用默认的段分配方法。

本文结束,感谢阅读😘

Time waits for no one!