Transcript Document

第9章 F2812事件管理器(EVA/B)
张云洲
2010.11.26
章节结构
9.1 事件管理器概述
9.2 通用定时器
9.3 比较单元及PWM输出
9.4 捕获单元
9.5 正交编码脉冲单元
9.6 事件管理器中断
2
9.1 事件管理器概述
• F281x 包含两个事件管理器EVA 和EVB,每个事件管理
器包括通用定时器(GP)、比较器、PWM 单元,捕获单
元以及正交编码脉冲电路(QEP)。
• PWM 单元主要应用: (1) 产生脉宽调制信号控制数字电机;
(2) 直接用PWM输出作为数模转换使用。事件管理器的捕
获单元用来对外部硬件信号的时间测量,利用6个边沿检
测单元测量外部信号的时间差,从而可以确定电机转子的
转速。
• 正交编码脉冲电路(QEP)根据增量编码器信号获得电机
转子的速度和方向信息。
• 事件管理器EVA 和EVB 有相同的外设寄存器,EVA 的起
始地址是7400H,EVB 的起始地址为7500H。功能基本相
3
同,只是模块的外部接口和信号有所不同。
事件管理器概述(续)
• 每个事件管理器都有自己的控制逻辑模块,逻辑模块能够
响应来自C28x 的外设中断扩展单元的中断请求,从而实
现事件管理器的各种操作模式。
• 在特定操作模式下,事件管理器可以利用两个外部信号
“TCLKINA”和“TDIRA”进行控制;还可以根据内部事件
自动的启动ADC 转换,而不像其他通用的微处理器需要专
门的中断服务程序完成。
• 通用定时器1 和2 是2个带有可配置输出信号(T1PWM
/T1CMP 和T2PWM/T2CMP)的16 位定时器,也可以直接在
DSP内部使用。比较单元1 ~3 以通用定时器1 作为时钟基
准,产生6 路PWM 输出控制信号。3 个独立的捕获单元
CAP1,2 和3 可以用来进行时间和速度估计。光电编码脉
冲电路重新定义了捕获单元CAP1,2 和3 的输入功能,可4
事件管理器功能框图 (EVA)
Reset
PIE
EV Control Registers / Logic
GP Timer 1 Compare
/
2
TCLKINA / TDIRA
ADC Start
Output Logic
T1PWM_T1CMP
Data Bus
GP Timer 1
Compare Unit 1
Compare Unit 2
PWM Circuits Output Logic
PWM Circuits Output Logic
Compare Unit 3
PWM Circuits Output Logic
GP Timer 2 Compare
Output Logic
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
T2PWM_T2CMP
GP Timer 2
MUX
CLK
DIR
QEP
Circuit
•
Capture Units
•
•
CAP1/QEP1
CAP2/QEP2
CAP3/QEPI1
9.2 通用定时器
• 每个事件管理器有两个通用定时器,EVA使用GP1,GP2
定时器,EVB使用GP3,GP4定时器。通用定时器可以独
立使用,其比较寄存可以产生PWM波形。当定时器工作
在增或增减模式时,有3种连续工作方式。通用定时器
还为事件管理器的子模块提供基准时钟。
• 全局控制寄存器GPTCONA/B确定通用定时器实现具体的
定时器任务需要采取的操作方式,并设置定时器的计
数方向。
• 定时器的时钟源可以取自外部输入信号,QEP单元或者
内部时钟。当选择内部时钟时,定时器采用HSPCLK作
为输入,计算定时器的周期时必须考虑高速外设时钟
预定标寄存器的设置。
通用定时器GP的功能框图
Internal
(HSPCLK)
TxCMPR . 15 - 0
TPS 2-0
Clock
Prescaler
TxCON . 10 - 8
Shadowed
Compare
Register
TxCNT . 15 - 0
External (1/4)
QEP
M
U
X
TCLKS 1-0
TxCON . 5 - 4
16 - Bit Timer
Counter
GPTCONA
Compare
Logic
Period
Register
Shadowed
Note: x = 1 or 2
TxPR . 15 - 0
Output
Logic
TxPWM_
TxCMP
GP
连续增计数模式
(Used for Asymmetric PWM Waveforms)
This example:
TxCON.3-2 = 00 (下溢时 TxCMPR重载)
TxPR = 3
 无延迟计数
TxCMPR = 1 (initially)
 计数值= TxPR+1
Prescale = 1
CPU writes a 2 to
compare reg. buffer
anytime here
3
TxCMPR=2
3
3
2
1
TxCNT Reg.
TxPWM/TxCMP
(active high)
CPUCLK
0
0
1
0
GP(Used
连续增/减计数模式
for Symmetric PWM Waveforms)
This example:
TxCON.3-2 = 01 (==00/PR.reg)
TxPR = 3
TxCMPR = 1 (initially)
Prescale = 1
无延迟增减
 增减计数周期 is 2*TxPR

TxCMPR =2
TxCMPR =1
3
2
TxCNT Reg.
TxPWM/TxCMP
(active high)
CPUCLK
00
1
0
PR.reg
TxCMPR =1
3
2
2
1
1
0
00
PR.reg
2
1
0
后台功能
• C28x的定时器提供后台功能,定时器1和定
时器2都有各自的比较寄存器和周期寄存器。
• 后台寄存器(类似于双缓冲)的优点就是
能够在当前周期为下一个周期设置相应的
寄存器值,下一个定时周期会将后台寄存
器的值自动的装载到相应的寄存器中。
• 如果没有后台寄存器,需要更新寄存器的
值时就必须等待当前周期结束,然后触发
高优先级的中断调整寄存器的值,这样就
会影响定时器的运行。
9.2.1 通用定时器计数模式
• 每一个通用定时器支持停止/保持、连续递增计数、双
向增/减计数和连续增/减计数4种操作模式,可以通过
控制寄存器TxCON中的MODE1-TMODE0位设置通用定时器
的计数模式。
• 可以通过定时器使能位TENABLE使能或禁止定时器的计
数操作。当定时器被禁止时,定时器的计数器操作也
被禁止,并且定时器的预定标器被复位为x/1。当使能
定时器时,定时器按照寄存器TxCON中的TMODE1TMODE0位确定的计数模式工作并开始计数。
9.2.2 定时器的比较操作
每一个通用定时器有1个比较寄存器TxCMPR和1个PWM
输出引脚TxPWM,当定时器计数器的值与比较寄存器的
值相等时,就产生比较匹配。可通过TxCON[1]位使能比
较操作,如果被使能,产生比较匹配后将会:
• 匹配一个时钟周期后,定时器比较中断标志位置位。
• 匹配一个CPU时钟周期后,根据寄存器GPTCONA/B相应位的
配置情况,PWM的输出将产生跳变。
• 如果比较中断标志位已通过设置寄存器GPTCONA/B中的相
应位启动AD转换器,则比较中断位置位的同时产生模数转
换启动信号。
• 如果比较中断未被屏蔽,将产生一个外设中断申请。
通用定时器比较操作功能框图
PWM比较输出和中断
PWM周期 #2
TxCON.3-2= 00
PR。reg=
Comp1
PR=Comp1
定
时
器
计
数
值
PWM周期 #1
T
Comp2
Comp1
TxCMP/TxPWM
(active high)
TxCMP/TxPWM
(active low)
比较中断
周期中断
下溢中断
PR。reg=
Comp2
T
T
新周期自动
加载
2T
GP 定时器寄存器
EVA
EVB
Register
Address
Description
GPTCONA
0x007400
GP 控制寄存器A
T1CNT
0x007401
定时器1计数寄存器
T1CMPR
0x007402
定时器1比较寄存器
T1PR
0x007403
定时器1周期寄存器
T1CON
0x007404
定时器1控制寄存器
T2CNT
0x007405
定时器2计数寄存器
T2CMPR
0x007406
定时器2比较寄存器
T2PR
0x007407
定时器2比较寄存器
T2CON
GPTCONB
0x007408
0x007500
定时器2控制寄存器
GP 控制寄存器B
T3CNT
0x007501
定时器3计数寄存器
T3CMPR
0x007502
定时器3比较寄存器
T3PR
0x007503
定时器3周期寄存器
T3CON
0x007504
寄存器3控制寄存器
T4CNT
0x007505
定时器4计数寄存器
T4CMPR
0x007506
定时器4比较寄存器
T4PR
0x007507
定时器4周期寄存器
T4CON
0x007508
定时器4控制寄存器
EXTCONA 0x007409 / EXTCONB 0x007509 ;外部控制寄存器
EVA全比较单元
Reset
PIE
EV Control Registers / Logic
GP Timer 1 Compare
/
2
TCLKINA / TDIRA
ADC Start
Output Logic
T1PWM_T1CMP
GP Timer 1
Data Bus
•
Compare Unit 1
Compare Unit 2
PWM Circuits Output Logic
PWM Circuits Output Logic
Compare Unit 3
PWM Circuits Output Logic
GP Timer 2 Compare
Output Logic
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
T2PWM_T2CMP
GP Timer 2
MUX
CLK
DIR
QEP
Circuit
•
Capture Units
•
•
CAP1/QEP1
CAP2/QEP2
CAP3/QEPI1
什么是PWM ?
• PWM (脉宽幅度调制)
– 固定的载波频率
– 固定的放大系数
– 脉冲宽度正比于瞬时放大系数
– 能量损失趋于0
• PAM(脉冲幅度调制)
– 固定的宽度,变化的幅值
PWM 信号调制
t
Original Signal
same areas (energy)
T
PWM
t
t
T
PAM
PWM Motor控制的优势
• 功率转换器件是晶体管
– 在线性区难以控制
– 在饱和区容易控制
• PWM是数字信号,容易在DSP实现
DC Supply
?
Desired
signal to
motor phase
Unknown Gate Signal
DC Supply
PWM
PWM approx.
of desired
signal
Gate Signal Known with PWM
9.2.2.3 TxPWM 输出非对称波形
• 根据通用定时器使用的计数模式,非对称/对称波形发生器产生一
个非对称或对称的PWM波形。当通用定时器处于连续递增计数模式
时,产生非对称波形。在这种模式下,波形发生器产生的波形输
出根据下面情况有所变化:
– 计数操作开始前为0;
– 直到匹配发生时保持不变;
– 在比较匹配时PWM输出信号反转;
– 保持不变直到周期结束;
– 若下一周期新的比较寄存器值不是0,则在匹配周期结束的周期复位
清零。
• 在周期开始时如果比较器周期寄存器的值是0,则整个计数周期内
输出为1保持不变;如果下一周期新的比较值为0,则输出不会被
复位为0。如果比较值大于周期寄存器中的值,则整个周期内输出
为0。如果比较等于周期寄存器的值,对一个定标时钟输入来说输
出是1。
• 对于非对称PWM波形,改变比较寄存器的值仅仅影响PWM脉冲的一
侧。
非对称 PWM 波形
TPWM
Period
Compare
Counter
Tpwm / Tcmp Pin
(active high)
Caused by Period match
(toggle output in Asym mode only)
Caused by Compare match
9.2.2.4 TxPWM 输出对称波形
• 当通用定时器处于连续递增/递减计数模式时,产生对称波形。在这
种计数模式下,波形发生器的输出状态与下列状态有关:
– 计数操作开始前为0;
– 第一次比较匹配前保持不变;
– 第一次比较匹配时PWM输出信号反转;
– 第二次比较匹配前保持不变;
– 第二次比较匹配时PWM输出信号反转;
– 周期结束前保持不变;
– 如果没有第二次匹配且下一周期新的比较值不为0,则在周期结束后复位
为0。
• 如果比较值在周期开始时为0,则周期开始时输出为1,直到第二次比
较匹配发生后一直保持不变。如果比较值在后半周期是0,在第一次
跳变后,直到周期结束将输出保持1。在这种情况下,如果下一周期
新的比较值仍然为0,则输出不会复位为0。这会重复出现以保证能够
产生占空比从0%到100%的无毛刺的PWM脉冲。如果前半周期的比较值
大于等于周期寄存器的值,则不会产生第一次跳变。然而在后半周期
发生比较匹配时,输出仍将跳变。这种错误的输出跳变经常是由应用
程序计算不正确引起的,它将会在周期结束时被纠正,因为除非下一
周期的比较值为0,输出才会被复位为0,否则输出将保持1,这将把
波形发生器的输出重新置为正确的状态。
对称PWM 波形
TPWM
Period
Compare
Counter
TPWM /TCMP Pin
(active high)
Interrupts
General Purpose Timer
Period
Compare
Counter
Full Compare Units
TPWM/TCMP Pin
Compare
Compare
Compare
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
9.2.2.1 定时器PWM 输出(TxPWM)逻辑控制
• 输出逻辑进一步对PWM波形进行设置,适当配置GPTCONA/B寄存器,可
以设定PWM的输出为高电平有效、低电平有效、强制低或强制高。
• 当PWM输出为高电平有效时,它的极性与相关的非对称/对称波形发生
器的极性相同。当PWM输出为低电平有效时,它的极性与相关的非对
称/对称波形发生器的极性相反。如果GPTCONA/B相应的控制位规定
PWM输出为强制高(或低)后,PWM输出就会立即置1(或清0)。
• 总之,在正常的计数模式下,如果比较已经被使能,则通用定时器的
PWM输出就会发生变化。
通用定时器比较输出
高阻状态
• 基于定时器计数模式和输出逻辑的非对称/
对称波形发生器同样适用于比较单元。当
出现下列情况之一时,所有通用定时器的
PWM输出都被置成高阻状态:
–软件将GPTCONA/B[6]清零;
–PDPINTx引脚被拉低而且没有屏蔽;
–任何一个复位信号发生;
–软件将TxCON[1] 清零。
连续增计数模式下的通用定时器比较PWM输出
9.2.2.5 通用定时器应用举例
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
一般的通用定时器可以提供周期测量、脉冲宽度测量、产生脉冲等多种工作模式,C28x
的事件管理器模块提供的定时器基本上也可以实现这几种工作模式。定时器在定时计数过程
中可以利用处理器内部的可编程时钟,也可以通过外部TCLKINA(B)作为计数时钟。定
时器在产生PWM信号输出时,可以结合比较单元产生电机控制系统需要的脉宽调制信号,
也可以独立使用控制定时器本身的PWM信号输出(T1PWM_T1CMP和T2PWM_T2CMP)。
用通用定时器产生PWM输出,可以采用连续递增或连续增/减计数模式,当选用连续递
增计数模式时,可产生边沿触发或非对称PWM波形;当选用连续增/减计数模式时,可产生
对称PWM波形,可以通过下列操作产生PWM信号:
根据所需的PWM(载波)周期设置TxPR;
设置TxCON寄存器,确定计数器模式和时钟源,并启动PWM输出操作;
将软件计算出来的PWM脉冲宽度(占空比)装载到TxCMPR寄存器中。
如果选用连续递增计数模式来产生非对称PWM波形,把所需的PWM周期除以通用定时
器输入时钟的周期然后减1便得出定时器的周期。如果选用连续增/减计数模式产生非对称
PWM波形,把所需的PWM周期除以2倍的通用定时器输入时钟周期就得出定时器的周期。
在程序运行的过程中,软件可以计算PWM的占空比,适时的刷新比较寄存器的设置。
在F2812信号处理板上将T1PWM经过简单的运放电路后输出,可以直接将其输出连接
到扬声器,然后通过改变定时器的周期输出8种频率的信号方波信号模拟8种电子音效。实际
上,在实际生活中音频信号是多种频率的正弦波信号合成的结果,当然也可以利用PWM输
出产生正弦波信号。在本实验中利用定时器0产生50ms的定时中断,在每次CPU响应定时器
中断过程中,装载下一个周期的定时器1的比较和周期寄存器值。通过这种方式轮回的产生
几种不同频率的PWM波。
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
//************************************************************
//
// 文件名称:Playatune.c
//
// 主要功能:DSP28 T1PWM—输出PWM,
// CPU 定时器0中断时间50 ms
// 使能看门狗,并在主程序中复位看门狗计数寄存器
//
//*************************************************************//
#include "DSP281x_Device.h"
// 函数原型声明
void Gpio_select(void);
void SpeedUpRevA(void);
void InitSystem(void);
interrupt void cpu_timer0_isr(void); // 定时器0中断服务程序
void main(void)
{
unsigned int i;
unsigned long time_stamp;
int frequency[8]={2219,1973,1776,1665,1480,1332,1184,1110};
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
InitSystem(); // 初始化DSP内核寄存器
Gpio_select(); // 设置GPIO引脚功能
InitPieCtrl(); // 初始化外设中断扩展单元 ( 代码在: DSP281x_PieCtrl.c)
InitPieVectTable(); // 初始化外设中断扩展向量表( 代码在:
DSP281x_PieVect.c )
重新映射定时器0(Timer 0)的中断入口
EALLOW; // 允许更改保护的寄存器
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS; // 禁止更改保护的寄存器
InitCpuTimers();
配置CPU定时器0,计数周期为50 ms:
CPU工作频率150MHz CPU , 50000微秒的中断周期
ConfigCpuTimer(&CpuTimer0, 150, 50000);
使能外设中断扩展的中断TINT0
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
使能CPU的INT1,CPU定时器0的中断连接到该CPU中断上
IER = 1;
•
•
•
•
•
•
•
•
•
•
// 全局中断使能,并使能具有更高优先级的适时调试方式
EINT; // 使能全局中断 INTM
ERTM; // 使能全局适时中断DBGM
配置事件管理器EVA
假定事件管理器EVA的时钟在系统初始化函数InitSysCtrl
()内已经被使能;
T1/T2的控制逻辑驱动T1PWM / T2PWM
EvaRegs.GPTCONA.bit.TCMPOE = 1;
通用定时器1 比较 = 低电平有效
EvaRegs.GPTCONA.bit.T1PIN = 1;
EvaRegs.T1CON.all = 0x1702; // 配置T1递增计数模式
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
CpuTimer0Regs.TCR.bit.TSS = 0;
i = 0;
time_stamp = 0;
while(1)
{
if ((CpuTimer0.InterruptCount%4)==0)
{
EALLOW;
SysCtrlRegs.WDKEY = 0xAA; // 看门狗
EDIS;
}
if ((CpuTimer0.InterruptCount - time_stamp)>10)
{
time_stamp = CpuTimer0.InterruptCount;
if(i<7) EvaRegs.T1PR = frequency[i++];
else EvaRegs.T1PR = frequency[14-i++];
EvaRegs.T1CMPR = EvaRegs.T1PR/2;
EvaRegs.T1CON.bit.TENABLE = 1;
if (i>=14) i=0;
}
}
}
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// 通用IO选择
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x0; // 所有GPIO端口配置成I/O方式
GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 1; // T1PWM 有效
GpioMuxRegs.GPBMUX.all = 0x0;
GpioMuxRegs.GPDMUX.all = 0x0;
GpioMuxRegs.GPFMUX.all = 0x0;
GpioMuxRegs.GPEMUX.all = 0x0;
GpioMuxRegs.GPGMUX.all = 0x0;
GpioMuxRegs.GPADIR.all = 0x0; // GPIO PORT 作为输入
GpioMuxRegs.GPBDIR.all = 0x00FF; // GPIO Port B15-B8 输入 , B7-B0 输出
GpioMuxRegs.GPDDIR.all = 0x0; // GPIO PORT 作为输入
GpioMuxRegs.GPEDIR.all = 0x0; // GPIO PORT 作为输入
GpioMuxRegs.GPFDIR.all = 0x0; // GPIO PORT 作为输入
GpioMuxRegs.GPGDIR.all = 0x0; // GPIO PORT 作为输入
GpioMuxRegs.GPAQUAL.all = 0x0; // 设置GPIO量化值为0
GpioMuxRegs.GPBQUAL.all = 0x0;
GpioMuxRegs.GPDQUAL.all = 0x0;
GpioMuxRegs.GPEQUAL.all = 0x0;
EDIS;
}
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// 系统初始化
void InitSystem(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x00AF; // 配置看门狗
// 0x00E8 禁止看门狗,预定标系数Prescaler = 1
// 0x00AF 使能看门狗,预定标系数Prescaler = 64
SysCtrlRegs.SCSR = 0; // 看门狗产生RESET
SysCtrlRegs.PLLCR.bit.DIV = 10; // 设置系统锁相环倍频系数5
SysCtrlRegs.HISPCP.all = 0x1; // 配置高速外设时钟预定标系数:除以2
SysCtrlRegs.LOSPCP.all = 0x2; // 配置低速外设时钟预定标系数:除以4
// 使能本应用程序使用的外设时钟
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
EDIS;
}
•
•
•
•
•
•
•
•
•
•
•
// CPU定时器0中断服务子程序
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
// 每次定时器中断,清除看门狗定时器计数器
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // Serve watchdog #1
EDIS;
// 响应该中断并允许接收更多的中断
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
9.2.3 通用定时器寄存器
• 为了正确使用事件管理器的定时器必须配
置相关定时器的5个寄存器,如果使用中断
方式需要配置更多的寄存器。
9.2.3.1 通用定时器全局控制寄存
器
• 全局控制寄存器GPTCONA/B确定通用定时
器实现具体的定时器任务需要采取的操作
方式,并指明通用定时器的计数方向。全
局通用定时器控制寄存器B(GTPCONB)
同GTPCONA功能相同,只是控制的定时器
不同。GTPCONA控制定时器1和2,
GTPCONB控制定时器3和4。
• 如果定时器设置为递增或递减计数模式,
位14和13指示定时器的计数方式;位10到7
确
• 定具体的定时事件触发ADC自动转换的操
作方式;位6用来使能定时器1和定时器2同
时输
• 出。每一位的详细定义参见表9.4。
9.2.3.2 通用定时器计数寄存器(TxCNT,其中x=1,2,3,4)
9.2.3.3 通用定时器比较寄存器(TxCMPR,其中
x=1,2,3,4)
9.2.3.4 通用定时器周期寄存器(TxPR,其中x=1,2,3,4)
9.2.3.5 通用定时器控制寄存器
(TxCON)
• 定时器控制寄存器是每个定时器的独立设
置寄存器。位15和14负责设置定时器和
JTAG仿真器之间的工作关系,在某些情况
下这两个位对于程序的执行非常重要,比
如程序运行到断点处定时器的计数模式。
有其实在适时系统中,停止定时器计数使
定时器处于随机工作状态是非常危险的。
因此,这两位的设置必须根据硬件的实际
操作需求合理的配置。
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
位12~11选择操作模式,在前面的章节中已经做了详细的介绍。位10到8定义输入时钟
的分频的预定标参数,定时器的计数频率主要由以下参数确定:
外部晶振(30MHz)
内部PLL状态寄存器(PLLCR:乘以10/2 = 150 MHz)
高速时钟预定标(HISPCP = 除以2= 75 MHz)
定时器时钟预定标系数(1到128)
同时可以根据上述设置和参数确定期望的定时器周期,例如希望设置100ms的定时器周
期可以采用如下设置:
定时器输入脉冲=(1/外部时钟频率)*1/PLL*HISPCP*定时器预定标系数
1,7067 μs =(1/ 30 MHz )*1/5 * 2 * 128
100 ms / 1,7067 μs = 58593.
因此可以设置周期寄存器TxPR的值58593,此时定时器的输出脉冲即为100ms。
位6使能定时器操作,在定时器一系列初始化操作完成后必须将该位置1启动定时器。
位5和4选择定时器的时钟信号源;位3和2定义将缓冲值装载到比较寄存器的时间;位1用来
使能比较操作;位7和0是定时器2的专用控制位,在T1CON中两位不起作用,在位7的控制
下用户可以同时启动定时器1和定时器2。关于控制寄存器的详细说明参见表9.8所示。
9.3 比较单元及PWM 输出
• 9.3.1 比较单元功能介绍
• 事件管理器(EVA)模块中有3个比较单元
(比较单元1,2和3),事件管理器(EVB)
• 模块中也有3个比较单元(比较单元4,5和
6)。每个比较单元都有两个相关的PWM
输出。比
• 较单元的时钟基准由通用定时器1和通用定
时器3提供。事件管理器的比较单元作为
PWM信
• 号输出的辅助电路,主要用来控制信号处
电源逆变器
串联的2个器件不能同时
被关闭,不能有重叠区
PWM信号的输入
DC 电容
+
-
功率器件
三相输出作为控制
信号
死区的产生
supply rail
互补的PWM开关信号
 晶体管导通比截止快
 同时导通的瞬间-短路
to motor phase
可编程死区模块 (EVA)
Clock
HSPCLK
PHx
PHx
edge
detect
DT
Prescaler
DBTCONA . 4 - 2
ENA
reset
DTPHx
4-bit
Counter
comparator
DT
DTPHx_
4-bit period
DBTCONA . 11 - 8
死区
非对称PWM
DTPHx
DTPHx_
死区定时器控制器 (EVA)
DBTCONA @ 0x007415
dead time = DB period * DB prescaler * CPUCLK period
DB Timer Period
15
14
13
12
reserved reserved reserved reserved
11
10
9
8
DBT3
DBT2
DBT1
DBT0
7
6
5
EDBT3
EDBT2
EDBT1
DB Timer Enable
0 = disable
1 = enable
4
3
2
1
0
DBTPS2 DBTPS1 DBTPS0 reserved reserved
DB Timer Prescaler
000 = 1
001 = 2
010 = 4
011 = 8
100 = 16
101 = 32
110 = 32
111 = 32
• 比较单元的核心模块是比较逻辑,主要由
事件管理器定时器1的计数寄存器“T1CNT”
• 和比较寄存器“CMPRx”构成。两者比较第
一次匹配,则信号的上升沿将输入到“死
区单
• 元”。在同步PWM模式下第二次T1CNT和
CMPRx匹配产生PWM信号的下降沿。
•
•
•
•
•
•
•
•
•
•
•
•
•
比较单元的输出逻辑由操作控制寄存器(Action Control Register – ACTRA)
和通用控制
寄存器(COMCONA)控制。可以通过调整这两个寄存器的设置调整PWM输
出信号的波形。
所有6个PWM输出线可以选择四种状态中的一种,这四种状态分别是:
高有效
T1CNT和CMPRx第一次比较匹配使PWM输出信号由0变为1,第二次匹配发
生
后PWM输出信号又由1变为0;
低有效
T1CNT和CMPRx第一次比较匹配使PWM输出信号由1变为0,第二次匹配发
生
后PWM输出信号又由0变为1;
强制高
PWM输出总是1;
强制低
PWM输出总是0;
9.3.2 PWM 信号
• PWM信号是一系列可变脉宽的脉冲信号,这些脉冲覆盖
几个定长周期,从而可以保证
• 每个周期都有一个脉冲输出。这个定长周期称之为PWM
载波周期,它的倒数称为PWM载波
• 频率。PWM脉冲宽度则根据另一系列期望值和调制信号
来确定和调制。
• PWM数字脉冲输出可以用来表征模拟信号,在PWM输出
端进行积分(比如增加简单的
• 低通滤波器)可以得到期望的模拟信号。在期望输出信号
的一个周期内脉冲个数越多,采用
• PWM信号描述的模拟信号就越准确。习惯上经常采用两
个不同的频率描述:载波频率(PWM
• 输出频率)和期望的信号频率。
• 在实际应用中,很多部件内部都有自己的积分器,比如电
机本身就是一个非常理想的低通滤波器,PWM信号的一
个很重要的用途就是数字电机控制。
• 在电机控制系统中,PWM信号控制功率开关器件的导通
和关闭,功率器件为电机的绕组提供期望的电流和能量。
功率器件提供相电流的频率和能量可以控制电机的转速和
转矩,这样提供给电机的控制电流和电压都是调制信号,
而且这个调制信号的频率比PWM载波频率要低。采用
PWM控制方式可以为电机绕组提供良好的谐波电压和电
流,避免因为环境变化产生的电磁扰动,并且能够显著的
提高系统的功率因数。未能够给电机提供具有足够驱动能
力的正弦波控制信号,可以采用PWM输出信号经过NPN
或PNP功率开关管实现,如图9.17所示。
• 采用功率开关管在输出大电流的情况下很
难控制开关管工作在线性区,从而使系统
产生
• 很大的热损耗降低电源的使用效率。不过
可以通过使开关管工作在静态切换状态
(On: Ice =
• Icesat, Off: Ice = 0),在该状态开关管就
有较小功率损耗。
9.3.3 与比较器相关的PWM 电路
• 如图9.18所示EVA模块的PWM电路功能框
图,它包含以下功能单元:
•
非对称/对称波形发生器;
•
可编程死区单元(DBU);
•
输出逻辑;
•
空间矢量(SV) PWM状态机。
• EVB模块的PWM电路功能模块框图与EVA
模块的一样,只是改变相应的寄存器配置。
• 另外,非对称/对称波形发生器与在通用定
EVA模块的PWM电路功能框图
•
•
•
•
•
•
•
•
•
•
•
•
•
C28x处理器上集成的PWM电路,能够在电机控制和运动控制等应用领域中,减少CPU
的开销和用户的工作量。与比较单元相关的PWM电路的PWM波形的产生由以下寄存器
控制:对于EVA模块由T1CON、COMCONA、ACTRA和 DBTCONA控制;对于EVB
模块由T3CON、COMCONB、ACTRB和 DBTCONB控制。每个事件管理器模块
(EVA和EVB)可以产生PWM波形,比较器及相关PWM信号输出可实现功能如下:
5个独立的PWM输出,其中3个由比较单元产生,2个由通用定时器产生。另外
还有3个由比较单元产生的PWM互补输出;
比较单元产生的PWM输出的死区可编程配置;
输出脉冲信号的死区的最小宽度为一个CPU时钟周期;
最小的脉冲宽度是一个CPU时钟周期,脉冲宽度调整的最小量也是一个CPU时
钟周期;
PWM最大分辨率为16位;
双缓冲结构可快速改变PWM的载波频率;
双缓冲结构可快速改变PWM的脉宽;
带有功率驱动保护中断;
能够产生可编程的非对称、对称和空间矢量PWM波形;
比较寄存器和周期寄存器可自动装载,减小CPU的开销。
9.3.4 PWM 输出逻辑及死区控制
9.3.4.1 PWM 输出逻辑
• 输出逻辑电路决定了比较发生匹配时,输出引脚PWMx
(x = 1–12)的输出极性和需要执行的操作。与每个比较
单元相关的输出可被规定为低电平有效、高电平有效、强
制低或强制高,可以通过适当的配置ACTR寄存器来确定
PWM输出的极性和操作。当下列任意事件发生时,所有
的PWM输出引脚被置于高阻状态。
•
软件清除COMCONx[9]位;
•
当PDPINTx 未被屏蔽时,硬件将PDPINTx 引脚拉低;
•
发生任何复位事件时。
• 有效的PDPINTx (当被使能时)引脚和系统复位使寄存
器COMCONx和ACTRx设置无效。
• 如图9.19给出了输出逻辑电路(OLC)的方框图,比较单
元的输出逻辑的输入包括:
•
来自死区单元的DTPH1、DTPH1、 DTPH2、DTPH2、
DTPH3和DTPH3和比
• 较匹配信号;
•
寄存器ACTRx中的控制位;
•
PDPINTx 和复位信号;
• 比较单元输出逻辑的输出包括:
•
PWMx,x = 1–6 (对于 EVA);
•
PWMy,y = 7–12 对于 EVB)。
• ACTRx[0−1, 2−3, . . . or 10−11]
9.3.4.2 死区控制
• 在许多运动/电机和功率电子应用中,常将功率器件上下臂串联起
来控制。上下被控的臂绝对不能同时导通,否则会由于短路而击
穿。因而需要一对不重叠的PWM输出(DTPHx和DTPHx )正确
的开启和关闭上下臂。这种应用允许在一个器件开启前另一个器
件已完全关闭这样的延时存在,所需的延迟时间由功率转换器的
开关特性以及在具体应用中的负载特征所决定,这种延时就是我
们这里提到的死区。
• 死区控制为避免功率逆变电路中的“短通”提供了有效的控制方
式,所谓“短通”是指在同一相位上的上下臂同时导通。一旦产
生“短通”将会有很大的电流流过开关管。短通主要是由于同一
相位的上下臂由同一个PWM信号的正反相控制,开关管在状态切
换过程中开启快于闭合,尤其是对于FET管尤为突出,从而导致
开关管的上下臂同时导通。即便是在一个PWM周期内同时导通的
时间非常短,流过的电流也非常有限,但在频繁开关过程中功率
管会产生很大的热量,并且会影响功率逆变和供电线路。因此在
系统设计过程中要绝对避免这种情况。
• 为避免产生短通状态可以采用两种方法:调整功率管或者调整PWM
控制信号。第一种方法主要是调整功率管的闭合时间,使得功率管的
断开比闭合快。可以在开关管的门电路一侧增加电阻和二级管(具有
低通滤波特性),加大开关闭合的延时。
• 第二种方法是在互补的PWM控制信号中增加死区,使一侧开关管闭
合与另一侧开关管断开有一定的延时,这样可以避免同时导通,而且
C28x信号处理器提供死区控制的硬件支持,不需要CPU的干预。而
且还可以根据系统的具体需求通过软件调整死区时间的大小。
• 事件管理器模块(EVA模块和EVB模块)都有各自独立的可编程死区
控制单元(分别是DBTCONA和DBTCONB),可编程死区控制单元
有如下特点:
•
一个16位死区控制寄存器DBTCONx (可读写);
•
一个16位输入时钟预定标器:x/1、x/2、x/4、x/8、x/16、x/32;
•
CPU时钟输入;
•
3个4位递减计数寄存器;
•
控制逻辑。
• 分别由比较单元1、2和3的非对称/对称波形产生器提供的
PH1、PH2和PH3作为死区单元的输入,死区单元的输出
是DTPH1、DTPH1_、DTPH2、DTPH2_、DTPH3和
DTPH3_,它们分别相对应于PH1、PH2和 PH3。对于每
一个输入信号PHx,产生两个输出信号DTPHx和DTPHx_。
当比较单元和其相关输出的死区未被使能时,这两个输出
信号跳变边沿完全相同(信号本身相反)。当比较单元的
死区单元使能时,这两个信号的跳变沿被一段称作死区的
时间间隔分开,这个时间段由DBTCONx寄存器的位来决
定。假设DBTCONx[11–8]中的值为m,且DBTCONx[4–2]
中的值相应的预定标参数为x/p,这时死区值为 (p*m)
个HSPCLK时钟周期。
9.3.4 PWM 信号的产生
•
为产生一个PWM信号,定时器需要重复按照PWM周期进行计数。比较寄存器用于保持
调制值,比较寄存器中的值一直与定时器计数器的值相比较,当两个值匹配时,PWM
输出就会产生跳变。当两个值产生第二次匹配或一个定时器周期的结束时,就会产生
第二次输出跳变。通过这种方式就会产生一个周期与比较寄存器值成比例的脉冲信号。
在比较单元中重复完成计数、匹配输出的过程,就产生了PWM信号。
•
在EV模块中,比较单元可以产生非对称和对称PWM波形。另外,3个比较单元结合使
用还可以产生三相对称空间矢量PWM输出。边沿触发或非对称PWM信号的特点是不关
于PWM周期中心对称,脉冲的宽度只能从脉冲一侧开始变化。为产生非对称的PWM信
号,通用定时器要设置为连续递增计数模式,周期寄存器装入所需的PWM载波周期的
值,COMCONx寄存器使能比较操作,并将相应的输出引脚设置成PWM输出。如果需
要设置死区,通过软件将所需的死区时间值写入到寄存器DBTCONx(11:8)的DBT
(3:0)位,做为4位死区定时器的周期,所有的PWM输出通道使用一个死区值。
•
软件配置ACTRx寄存器后,与比较单元相关的一个PWM输出引脚将产生PWM信号。
与此同时,另一个PWM输出引脚在PWM周期的开始、中间或结束处保持低电平(关闭)
或高电平(开启),这种用软件可灵活控制的PWM输出适用于开关磁阻电机的控制。
9.3.4.1 非对称PWM 信号的产生
• 通用定时器1(或通用定时器3)开始后,
比较寄存器在执行每个PWM周期过程中可
重
• 新写入新的比较值,从而可以调整控制功
率器件的导通和关闭的PWM输出的占空比。
由于
• 比较寄存器带有映射寄存器,所以在一个
周期内的任何时候都可以将新的比较值写
入到比较
• 寄存器。同样,可以随时向周期寄存器写
• 为产生非对称的PWM信号,通用定时器要
设置为连续递增计数模式,周期寄存器装
入所需的PWM载波周期的值,COMCONx
寄存器使能比较操作,并将相应的输出引
脚设置成PWM输出。如果需要设置死区,
通过软件将所需的死区时间值写入到寄存
器DBTCONx(11:8)的DBT(3:0)位,
做为4位死区定时器的周期,所有的PWM
输出通道使用一个死区值。
9.3.4.2 对称PWM 信号的产生
• 对称PWM信号关于PWM周期中心对称,对
称PWM信号相对非对称PWM信号的优势在
于一个周期内在每个PWM周期的开始和结
束处有两个无效的区段。
• 当使用正弦调整时,PWM产生的交流电机
(如感应电机、直流电机)的电流对称
PWM信号比非对称的PWM信号产生的谐波
更小。
对称PWM信号产生波形
• 比较单元和PWM电路产生对称和非对称PWM波形基本是
相似,唯一不同的是产生对称波形需要将通用定时器1
(或通用定时器3)设置为连续增/减计数模式。每个对称
PWM波形产生周期产生两次比较匹配,一次匹配在前半
周期的递增计数期间,另一次匹配在后半周期的递减计数
期间。一个新装载的比较值在后半周期匹配生效,这样可
能提前或延迟PWM脉冲的第二个边沿的产生。这种PWM
波形产生的特性可以弥补在交流电机控制中由于死区而引
起的电流误差。由于比较寄存器带映射寄存器,在一个周
期内的任何时候都可以装载新的值。同样,在周期寄存器
内的任何时候,新值可写到周期寄存器和比较方式控制寄
存器中,以改变PWM周期或强制改变PWM的输出方式。
9.3.4.3 事件管理器SVPWM 波形
产生
•
•
•
•
•
•
•
•
•
•
EV模块的硬件结构极大地简化了空间矢量PWM波形的产生,此外软件还可
以控制产生空间矢量PWM输出,为产生空间矢量PWM输出,用户软件必须
完成下列任务:
配置ACTRx寄存器,确定比较输出引脚的极性;
配置COMCONx寄存器,使能比较操作和空间矢量PWM模式,将CMPRx
重新装载的条件设置为下溢;
将通用定时器1 (或通用定时器3)设为连续增/减计数模式以便启动定时
器;
然后,用户软件需要确定在二维d-q坐标系内的电机电压Uout,并分解Uout,
每个PWM周期完成下列操作:
确定两个相邻矢量Ux和Ux+60;
确定参数T1、T2和T0;
将Ux对应的开关状态写到ACTRx[14–12]位,并将1写入ACTRx[15]中,或
将
Ux+60对应的开关状态写到ACTRx[14–12]中,将0写入ACTRx[15]中;
将值(1/2 T1)和(1/2 T1 + 1/2 T2)分别写到CMPR1和CMPR2中。
1、空间矢量PWM 的硬件
•
•
•
•
•
•
•
•
•
•
•
每个空间矢量PWM周期,EV模块的空间矢量PWM产生硬件完成下列工作:
在每个周期的开始,根据新Uy的状态确定ACTRx[14–12]设置PWM输出;
在递增计数过程中,当CMPR1和通用定时器1在1/2T1处产生第一次比较
匹配
时,如果ACTRx[15]位中的值为1,将PWM输出设置为Uy+60;如果
ACTRx[15]
位中的值为0,将PWM输出设置为Uy(U0-60=U300,U360+60=U60);
在递增计数过程中,当CMPR2和通用定时器1在1/2 T1 + 1/2 T2处产生第
二次比
较匹配时,将PWM输出设置为000或111状态,它们第二种状态只有1位的差
别。
在递减计数过程中,当CMPR2和通用定时器1在1/2 T1 + 1/2 T2处产生第
一次匹
配时,将PWM输出设置为第二种输出模式。
在递减计数过程中,当CMPR1和通用定时器1在1/2T1处产生第二次匹配
时,将
PWM输出置为第一种输出模式。
2、空间矢量PWM 波形
• 空间矢量PWM波形关于每个PWM周期中心
对称,因此也称之为对称空间矢量PWM。
• 图9.25给出了对称空间矢量波形的例子。
9.3.4.4 事件管理器SVPWM 波形
产生
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// 使用EV定时器产生T1PWM, T2PWM, T3PWM, T4PWM 和PWM1-12 波形
// 文件名称:DSP28_EvPwm.c
//********************************************************
#include "DSP28_Device.h"
void main(void)
{
// Step 1、初始化系统控制寄存器,PLL,看门狗,时钟等
InitSysCtrl();
// Step 2、设置GPIO功能
EALLOW;
// 使能PWM输出引脚
GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6引脚
GpioMuxRegs.GPBMUX.all = 0x00FF; // EVB PWM 7-12引脚
EDIS;
// Step 3、初始化PIE中断向量表 vector table:
// 禁止和清除所有CPU中断:
DINT;
IER = 0x0000;
IFR = 0x0000;
// 初始化Pie控制寄存器位默认状态
InitPieCtrl();
//将PIE向量表设置为特定状态
InitPieVectTable();
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// Step 3、EVA配置T1PWM, T2PWM, PWM1-PWM6
// 初始化定时器
// 初始化EVA定时器1:
EvaRegs.T1PR = 0xFFFF; //定时器1周期
EvaRegs.T1CMPR = 0x3C00; //定时器1比较器
EvaRegs.T1CNT = 0x0000; //定时器1计数器
// TMODE =连续递增/递减计数,定时器使能,比较使能
EvaRegs.T1CON.all = 0x1042;
//初始化EVA定时器2:
EvaRegs.T2PR = 0x0FFF; //定时器2周期
EvaRegs.T2CMPR = 0x03C0; //定时器2比较器
EvaRegs.T2CNT = 0x0000; //定时器2计数器
// TMODE =连续递增/递减计数,定时器使能,比较使能
EvaRegs.T2CON.all = 0x1042;
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// 设置T1PWM和T2PWM
// 比较逻辑驱动T1/T2 PWM
EvaRegs.GPTCONA.bit.TCOMPOE = 1;
//定时器1比较器极性设置为低电平有效
EvaRegs.GPTCONA.bit.T1PIN = 1;
//定时器2比较器极性设置为高电平有效
EvaRegs.GPTCONA.bit.T2PIN = 2;
// 使能产生PWM1-PWM6的比较功能
EvaRegs.CMPR1 = 0x0C00;
EvaRegs.CMPR2 = 0x3C00;
EvaRegs.CMPR3 = 0xFC00;
// 比较方式控制
// 输出引脚1 CMPR1 – 高有效
// 输出引脚2 CMPR1 – 低有效
// 输出引脚3 CMPR2 – 高有效
// 输出引脚4 CMPR2 – 低有效
// 输出引脚5 CMPR3 – 高有效
// 输出引脚6 CMPR3 – 低有效
EvaRegs.ACTRA.all = 0x0666;
EvaRegs.DBTCONA.all = 0x0000; // 禁止死区
EvaRegs.COMCONA.all = 0xA600;
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// Step 4、EVB配置T3PWM, T4PWM和PWM7-PWM12
//初始化定时器
// 初始化EVB定时器3
// 定时器3控制T3PWM和PWM7-12
EvbRegs.T3PR = 0xFFFF; // 定时器3周期
EvbRegs.T3CMPR = 0x3C00; // 定时器3比较器
EvbRegs.T3CNT = 0x0000; // 定时器3计数器
// TMODE =连续递增/递减计数,定时器使能,比较使能
EvbRegs.T3CON.all = 0x1042;
// 初始化EVB定时器4
// 定时器4控制T4PWM
EvbRegs.T4PR = 0x00FF; // 定时器4周期
EvbRegs.T4CMPR = 0x0030; // 定时器4比较器
EvbRegs.T4CNT = 0x0000; // 定时器3计数器
// TMODE =连续递增/递减计数,定时器使能,比较使能
EvbRegs.T4CON.all = 0x1042;
// 设置T3PWM和T4PWM
// 比较逻辑驱动T3/T4 PWM
EvbRegs.GPTCONB.bit.TCOMPOE = 1;
//定时器3比较器极性设置为低电平有效
EvbRegs.GPTCONB.bit.T3PIN = 1;
//定时器4比较器极性设置为高电平有效
EvbRegs.GPTCONB.bit.T4PIN = 2;
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
// 使能产生PWM7-PWM12的比较功能
EvbRegs.CMPR4 = 0x0C00;
EvbRegs.CMPR5 = 0x3C00;
EvbRegs.CMPR6 = 0xFC00;
// 比较方式控制
// 输出引脚1 CMPR4 – 高有效
// 输出引脚2 CMPR4 – 低有效
// 输出引脚3 CMPR5 – 高有效
// 输出引脚4 CMPR5 – 低有效
// 输出引脚5 CMPR6 – 高有效
// 输出引脚6 CMPR6 – 低有效
EvbRegs.ACTRB.all = 0x0666;
EvbRegs.DBTCONB.all = 0x0000; // 禁止死区
EvbRegs.COMCONB.all = 0xA600;
// Step 5、 IDLE循环
// 采用示波器观察PWM信号波形
for(;;);
}
9.3.5 比较单元寄存器
9.3.5.1 比较控制寄存器
比较控制寄存器
9.3.5.2 比较操作寄存器
9.3.5.3 死区定时器控制寄存器
• 每一个比较单元都有一个死区定时器,但
各比较单元共用一个时钟预定标分频器和
死区周期寄存器。每个单元的死区可以独
立的使能或禁止。
9.3.5.3 EV 扩展控制寄存器
• EXTCONA和EXTCONB使附加控制寄存器,
使能和禁止附加/调整的功能。可以设置
EXTCONx寄存器使事件管理器和240x的事
件管理器兼容。两个控制寄存器的功能基
本相同,只是分别控制事件管理器A和事件
管理器B。图9.28和表9.13给出了EV扩展寄
存器A的功能定义。
9.4 捕获单元
• 9.4.1 捕获单元的应用
• 捕获单元能够捕获外部输入引脚逻辑状态,
并利用内部定时器对外部事件或引脚状态
变化进行处理。事件管理器A有3个捕获单
元,并且每个都有自己的独立输入信号。
捕获单元以定时器1或2为时间基准进行计
数处理。当在外部引脚检测到特定的状态
变化时,所选用的定时器的值将被捕获并
锁存到相应的2级FIFO堆栈中。此外,捕获
单元3还可以用来出发AD变换,从而使外部
捕获单元功能模块 (EVA)
Reset
PIE
EV Control Registers / Logic
GP Timer 1 Compare
/
2
TCLKINA / TDIRA
ADC Start
Output Logic
T1PWM_T1CMP
GP Timer 1
Data Bus
•
Compare Unit 1
Compare Unit 2
PWM Circuits Output Logic
PWM Circuits Output Logic
Compare Unit 3
PWM Circuits Output Logic
GP Timer 2 Compare
Output Logic
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
T2PWM_T2CMP
GP Timer 2
MUX
CLK
DIR
QEP
Circuit
•
Capture Units
•
•
CAP1/QEP1
CAP2/QEP2
CAP3/QEPI1
捕获单元功能框图 (EVA)
T1CNT . 15 - 0
T2CNT . 15 - 0
GP Timer 1
Counter
GP Timer 2
Counter
Can latch on:
• rising edge
• falling edge
• both
CAPCONA . 14 -12
CAPCONA . 10 - 9
MUX
Enable
CAP3TOADC
CAPCONA . 8
.
Edge
Detect
/
2-Level Deep
FIFO
CAPxFIFO Status
CAPFIFOA . 13 - 8
RS
3
ADC Start
(CAP 3)
CAP1,2,3
Edge Select
CAPCONA . 7 - 2
CAPRESET
CAPCONA . 15
TTL Signal
min. valid width:
2 CPUCLK lo
2 CPUCLK hi
什么是正交编码器?
/4 相位差
间隔空隙 
/4
LED

Ch. A
Ch. B
shaft rotation
Incremental Optical Encoder
Quadrature Output from Photo Sensors
正交编码单元功能框图 (EVA)
Reset
PIE
EV Control Registers / Logic
GP Timer 1 Compare
/
2
TCLKINA / TDIRA
ADC Start
Output Logic
T1PWM_T1CMP
GP Timer 1
Data Bus
•
Compare Unit 1
Compare Unit 2
PWM Circuits Output Logic
PWM Circuits Output Logic
Compare Unit 3
PWM Circuits Output Logic
GP Timer 2 Compare
Output Logic
PWM1
PWM2
PWM3
PWM4
PWM5
PWM6
T2PWM_T2CMP
GP Timer 2
MUX
CLK
DIR
QEP
Circuit
•
Capture Units
•
•
CAP1/QEP1
CAP2/QEP2
CAP3/QEPI1
如何通过正交信号来决定位置?
Position resolution is /4 degrees.
(A,B) =
Ch. A
(00) (11)
(10) (01)
increment
counter
10
decrement
counter
Quadrature
Decoder
00
11
State Machine
Ch. B
01
正向编码连接 (EVA)
Ch. A
.
.
QEP
decoder
logic
Ch. B
CAP2/QEP2
Index
DIR
QEPIQUAL
QEPIE
GP Timer 2
CAP3/QEPI
CLK
CAP1/QEP1
• GP Timer 2 selected as
pulse counter
• Timer Prescaler bypassed
(i.e. Prescale always 1)
• 一般情况下,捕获单元主要有以下几个方面的应用:
•
测量脉冲或数字信号的宽度;
•
自动的启动AD转换——捕获单元3捕获的事件;
•
转轴的速度估计;
• 当捕获单元利用定时器为时间基准操作时可以进行低速估
计,而在低速状态下位置计数精度相对比较低,因此如果
在低速状态下根据固定时间内的位置改变来计算速度误差
比较大,因此在估计低速速度时主要采用一定位置变化所
需要的时间进行速度估计。
9.4.2 捕获单元的结构
•
•
•
•
•
•
•
•
•
•
•
•
捕获单元的操作由4个16位的控制寄存器(CAPCONA/B和CAPFIFOA/B)控制。由于
捕获单元的时钟由定时器提供,在使用时相关的定时器控制寄存器TxCON (x = 1, 2,
3或4)也控制捕获单元的操作。概括起来捕获单元有以下特点:
一个16位的捕获控制寄存器 (EVA—CAPCONA,EVB—CAPCONB),可读
写;
一个16位捕获FIFO状态寄存器(EVA—CAPFIFOA,EVB—CAPFIFOB);
可选择通用定时器1或2(EVA)和通用定时器3或4(EVB)作为时钟基准。
6个16位2级深的FIFO堆栈;
6个施密特触发捕获输入引脚,CAP1到CAP6,一个输入引脚对应一个捕获单
元。所有捕获单元的输入和内部CPU时钟同步。为了捕获输入的跳变,输入必
须在当前的电平保持两个CPU时钟的上升沿,如果使用了限制电路,限制电路
要求的脉冲宽度也必须满足。输入引脚CAP1和CAP2,在EVB中是CAP4和CAP5,也
能被用于正交编码脉冲电路的QEP输入。
用户可设定的跳变探测(上升沿、下降沿或上升下降沿)。
6个可屏蔽的中断标志位,每个捕获单元1个。
9.4.3 捕获单元的操作
• 捕获单元被使能后,输入引脚上的跳变将使所选择的通用
定时器的计数值装入到相应的
• FIFO堆栈,同时如果有一个或多个的有效的捕获值存到
FIFO堆栈(CAPxFIFO位不等于0),
• 将会使相应的中断标志位置位。如果中断标志未被屏蔽,
将产生一个外设中断申请。每次捕
• 获到新的计数值存入到FIFO堆栈时,捕获FIFO状态寄存
器CAPFIFOx相应的位就进行调整,
• 实时地反映FIFO堆栈的状态。从捕获单元输入引脚发生跳
变到所选通用定时器的计数值被
• 锁存需2个CPU时钟周期的延时。复位时,所有捕获单元
的寄存器都被清为0。
• 9.4.3.1 捕获单元时钟基准的选择
• 对于EVA模块捕获单元3有自己的独立时钟基准,而捕获单元1和2共
同使用一个时间基
• 准,这允许同时使用两个通用定时器,捕获单元1和2共用1个,捕获
单元3用1个。对于EVB
• 模块,捕获单元6有一个独立的时钟基准。捕获单元的操作不会影响
任何通用定时器的任何
• 操作,也不会影响与通用定时器的操作相关的比较/PWM操作。为使
捕获单元能够正常工作,
• 必须配置下列寄存器:
•
初始化CAPFIFOx寄存器,清除相应的状态位;
•
设置使用的通用定时器的工作模式;
•
设置相关的通用定时器的比较寄存器或周期寄存器;
•
适当的配置CAPCONA或CAPCONB寄存器。
9.4.3.2 捕获单元FIFO 堆栈的使
用
• 每个捕获单元有一个专用的两级深的FIFO堆栈,顶部堆栈
包括CAP1FIFO、CAP2FIFO和 CAP3FIFO (EVA)或
CAP4FIFO、CAP5FIFO和CAP6FIFO (EVB)。底部堆
栈包括CAP1FBOT、CAP2FBOT和CAP3FBOT (EVA)
或CAP4FBOT、CAP5FBOT和CAP6FBOT(EVB)。所
有FIFO堆栈的顶层堆栈寄存器是只读寄存器,它存放相应
捕获单元捕获到的最早的计数值,因此读取捕获单元FIFO
堆栈时总是返回堆栈中最早的计数值。当读取FIFO堆栈的
顶层寄存器的计数值时,堆栈底层寄存器的新计数值(如
果有)将被压入顶层寄存器。
• 如果需要,也可以读取FIFO堆栈的底层寄存器。读访问
FIFO堆栈的底层寄存器可使FIFO的状态位变为01(如果
先前是10或11)。如果原来FIFO状态位是01,读取底层
FIFO寄存器时,FIFO状态的位变为00(即为空)。
•
•
•
•
•
•
1) 第一次捕获
当捕获单元的输入引脚出现跳变时,捕获单元将使用的通用定时器的计数值写入到空
的FIFO堆栈的顶层寄存器,同时相应的状态位置为01。如果在下一次捕获操作之前,
读取了FIFO堆栈,则FIFO状态位被复位为00。
2) 第二次捕获
如果在前一次捕获计数值被读取之前产生了另一次捕获,新捕获到的计数值送至底层
的寄存器。同时,相应的寄存器状态位置为10。如果在下一次捕获操作之前对FIFO堆
栈进行了读操作,底层寄存器中新的计数值就会被压入到顶层寄存器,同时相应的状
态位被设置为01。第二次捕获使相应的捕获中断标志位置位,如果中断未被屏蔽,则
产生一个外设中断请求。
3) 第三次捕获
如果捕获发生时,FIFO堆栈已有捕获到的两个计数值,则在顶层寄存器中最早的计数
值将被弹出并被丢弃,而堆栈底层寄存器的值将被压入到顶层寄存器中,新捕获到的
计数值将被压入到底层寄存器中,并且FIFO的状态位被设置为11以表明1个或更多旧
的捕获计数值已被丢弃。第三次捕获使相应的捕获中断标志位置位。如果中断未被屏
蔽,则产生一个外设中断请求。
9.4.3.2 捕获中断
• 当捕获单元完成一个捕获时,在FIFO中至
少有一个有效的值(CAPxFIFO位显示不等
于
• 0时),如果中断未被屏蔽,中断标志位置
位,产生一个外设中断请求。因此,如果
使用了中
• 断,则可用中断服务子程序读取到一对捕
获的计数值。如果不希望使用中断,则可
通过查询
• 中断标志位或堆栈状态位来确定是否发生
9.4.4 捕获单元相关寄存器
9.4.4.1 捕获单元控制寄存器
9.4.4.12 捕获单元结果及其状态
寄存器
• 每个捕获单元有一个专用的两级深的FIFO堆栈,顶部堆栈
包括CAP1FIFO、CAP2FIFO和 CAP3FIFO (EVA)或
CAP4FIFO、CAP5FIFO和CAP6FIFO (EVB)。底部堆
栈包括CAP1FBOT、CAP2FBOT和CAP3FBOT (EVA)
或CAP4FBOT、CAP5FBOT和CAP6FBOT(EVB)。
• 所有FIFO堆栈的顶层堆栈寄存器是只读寄存器,它存放相
应捕获单元捕获到的最早的计数值,因此读取捕获单元
FIFO堆栈时总是返回堆栈中最早的计数值。当读取FIFO
堆栈的顶层寄存器的计数值时,堆栈底层寄存器的新计数
值(如果有)将被压入顶层寄存器。
• 如果需要,也可以读取FIFO堆栈的底层寄存器。读访问
FIFO堆栈的底层寄存器可使FIFO的状态位变为01(如果
先前是10或11)。如果原来FIFO状态位是01,读取底层
FIFO寄存器时,FIFO状态的位变为00(即为空)。
•
•
•
•
•
•
•
•
•
•
•
•
•
•
捕获单元FIFO状态寄存器CAPFIFOA反映了三个FIFO结果寄存器的状态。当捕获单元
的输入引脚出现跳变时,捕获单元将使用的通用定时器的计数值写入到空的FIFO堆栈的顶
层寄存器,同时相应的状态位置为01。如果在下一次捕获操作之前,读取了FIFO堆栈,则
FIFO状态位被复位为00。
如果在前一次捕获计数值被读取之前产生了另一次捕获,新捕获到的计数值送至底层的
寄存器。同时,相应的寄存器状态位置为10。如果在下一次捕获操作之前对FIFO堆栈进行
了读操作,底层寄存器中新的计数值就会被压入到顶层寄存器,同时相应的状态位被设置为
01。第二次捕获使相应的捕获中断标志位置位,如果中断未被屏蔽,则产生一个外设中断请
求。
如果捕获发生时,FIFO堆栈已有捕获到的两个计数值,则在顶层寄存器中最早的计数
值将被弹出并被丢弃,而堆栈底层寄存器的值将被压入到顶层寄存器中,新捕获到的计数值
将被压入到底层寄存器中,并且FIFO的状态位被设置为11以表明1个或更多旧的捕获计数值
已被丢弃。第三次捕获使相应的捕获中断标志位置位。如果中断未被屏蔽,则产生一个外设
中断请求。
9.5 正交编码脉冲 (QEP) 单元
• 9.5.1 光电编码器原理
• 光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换
成脉冲或数字量
• 的传感器,是目前应用最多的传感器。一般的光电编码器主要由光栅
盘和光电检测装置组成。
• 在伺服系统中由于光电码盘与电动机同轴,电动机旋转时,光栅盘与
电动机同速旋转,经发
• 光二极管等电子元件组成的检测装置检测输出若干脉冲信号,其原理
示意图如图9.34 所示,
• 通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。
此外,为判断旋转方
• 向,码盘还可提供相位相差90 两个通道的光码输出,根据双通道光
码的状态变化确定电机
• 的转向。根据检测原理,编码器可分为光学式、磁式、感应式和电容
式。根据其刻度方法及
• 信号输出形式,可分为增量式、绝对式以及混合式三种。
9.5.2 正交编码脉冲 (QEP) 单元结构及其接口
• 每个事件管理器模块都有一个正交编码脉冲(QEP)电路,
如果QEP电路被使能,可以对CAP1/QEP1和CAP2/QEP2
(对于EVA)或CAP4/QEP3和CAP5/QEP4 (对于EVB)
引脚上的正交编码脉冲进行解码和计数。QEP电路可用于
连接一个光电编码器获得旋转机器的位
• 置和速率等信息。如果使能QEP电路,CAP1/CAP2和
CAP4/CAP5 引脚上的捕获功能将被禁止。
• 正交编码脉冲 (QEP) 单元通常情况下用来从安装在旋
转轴上的增量编码电路获得方向和速度信息。如图9.35 所
示,两个传感器产生“通道A”和“通道B”两个数字脉冲信
号。通道A 和通道B 两个数字脉冲可以产生4 种状态,正
交编码脉冲 (QEP) 单元的定时器根据状态变化次序和
状态转换速度递增或者递减计数。在固定的时间间隔内读
取并比较定时器计数器的值就可以获得速度或者位置信息。
• 3个QEP输入引脚
同捕获单元1、2、
3(或4、5、6)共
用,外部接口引脚
的具体功能由
CAPCONx寄存器
设置。
9.5.3 QEP 电路时钟
• 通用定时器2(EVB由通用定时器4)为
QEP电路提供基准时钟。通用定时器作为
QEP电路的基准时钟时,必须工作在定向
增/减计数模式。图9.37给出了EVA的QEP
电路的方框图,图9.38给出了EVB的QEP
电路的方框图。
9.5.4 QEP 的解码
• 正交编码脉冲是两个频率可变、有固定1/4
周期相位差(即900)的脉冲序列。当电机
轴上的光电编码器产生正交编码脉冲时,
可以通过两路脉冲的先后次序确定电机的
转动方向,根据脉冲的个数和频率分别确
定电机的角位置和角速度。
9.5.4.1 QEP 电路
• EV模块中的QEP电路的方向检测逻辑确定哪个脉冲序列
相位超前,然后产生一个方向信号作为通用定时器2(或4)
的方向输入。如果CAP1/QEP1 (对于EVB是
CAP4/QEP3)引脚的脉冲输入是相位超前脉冲序列,那
么定时器就进行递增计数;相反,如果CAP2/QEP2
• (对于EVB是CAP5/QEP4) 引脚的脉冲输入是相位超前
脉冲序列,则定时器进行递减计数。
• 正交编码脉冲电路对编码输入脉冲的上升沿和下降沿都进
行计数,因此,由QEP电路产生的通用定时器(通用定时
器2或4)的时钟输入是每个输入脉冲序列频率的4倍,这
个正交时钟作为通用定时器2或4的输入时钟。
9.5.4.2 QEP 计数
• 通用定时器2(或4)总是从它的当前值开
始计数,在使能QEP模式前,将所需的值
装载
• 到通用定时器的计数器中。当选择QEP电
路作为时钟源时,定时器的方向信号
TDIRA/B和
• TCLKINA/B将不起作用。用QEP电路作为
时钟,通用定时器的周期、下溢、上溢和
比较中
• 断标志在相应的匹配时产生。如果中断未
9.5.5 QEP 电路的寄存器设置
• 启动EVA的QEP电路的设置如下:
•
根据需要将期望的值载入到通用定时器2的计数器、周
期和比较寄存器;
•
配置T2CON寄存器,使通用定时器2工作在定向增/减
模式,QEP电路作为时钟
• 源,并使能使用的通用定时器;
•
设置CAPCONA寄存器以使能正交编码脉冲电路;
• 启动EVB的QEP电路的设置如下:
•
根据需要将期望的值载入到通用定时器4计数器、周期
和比较寄存器;
•
配置T4ON寄存器,使通用定时器2工作在定向增/减模
式,QEP电路作为时钟
• 源,并使能使用的通用定时器;
•
设置CAPCONB寄存器以使能正交编码脉冲电路;
9.5.6 QEP 电路应用
• 光电编码器的图像传感器由内部的LED触发,
当LED光被遮挡时传感器送出逻辑“0”。
• 当光线穿过编码器的1024个缝隙的每格时,
送出逻辑“1”。两个图像传感器通过通道A
和B发
• 送逻辑信息。TMS320F2812片内QEP
(计数编码脉冲)检测两个通道的上升言
和下降沿,
• 由QEP检测到的边沿数存放在计数器
T3CNT。当QEP模式设定后, QEP的脉冲
• 电机内旋转一周(机械)嵌入式编码器产
生1024 个脉冲。每个缝隙有四个边缘:两
个通道各有1 个上升沿和一个下降沿。也就
是说,电机每旋转一周QEP 检测到4096 个
边沿。
• QEP 通过检测两个通道的先后次序,判断
转子的转向。边沿(上升或下降沿)数存
储处在
• T3CNT。根据所选旋转的方向来确定
T3CNT 是增量式还是减量式。一旦选择了
QEP 模式,在一个周期FFFFh 时钟T3 将
当计算的角度超过360 度时,软件同样要作适当的处理。
TMS320F2812 QEP 电路初始化
及应用
•
//******************************************************************************
•
// 文件名称:F28XQEP.C
•
//******************************************************************************
•
•
•
•
•
•
•
•
•
•
•
•
#include "DSP28_Device.h"
#include "f28xqep.h"
#include "f28xbmsk.h"
void F28X_EV1_QEP_Init(QEP *p)
{
EvaRegs.CAPCON.all = QEP_CAP_INIT_STATE; /*设置捕捉单元 */
EvaRegs.T2CON.all = QEP_TIMER_INIT_STATE; /*设置捕捉定时器*/
EvaRegs.T2PR = 0xFFFF;
EvaRegs.EVAIFRC.bit.CAP3INT = 1; /*清除CAP3 标志*/
EvaRegs.EVAIMRC.bit.CAP3INT = 1; /*使能CAP3 中断*/
GpioMuxRegs.GPAMUX.all |= 0x0700; /*配置捕捉单元的引脚*/
}
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
void F28X_EV1_QEP_Calc(QEP *p)
{
long tmp;
p->dir_QEP = 0x4000&EvaRegs.GPTCONA.all;
p->dir_QEP = p->dir_QEP>>14;
p->theta_raw = EvaRegs.T2CNT + p->cal_angle;
tmp = (long)(p->theta_raw*p->mech_scaler); /* Q0*Q26 = Q26 */
tmp &= 0x03FFF000;
p->theta_mech = (int)(tmp>>11); /* Q26 -> Q15 */
p->theta_mech &= 0x7FFF;
p->theta_elec = p->pole_pairs*p->theta_mech; /* Q0*Q15 = Q15 */
p->theta_elec &= 0x7FFF;
}
void F28X_EV1_QEP_Isr(QEP *p)
{
p->QEP_cnt_idx = EvaRegs.T2CNT;
EvaRegs.T2CNT = 0;
p->index_sync_flag = 0x00F0;
}