第
Download
1 / 144

第 9 章 F2812 事件管理器( EVA/B ) - PowerPoint PPT Presentation


  • 313 Views
  • Uploaded on

第 9 章 F2812 事件管理器( EVA/B ). 张云洲 2010.11.26. 章节结构. 9.1 事件管理器概述 9.2 通用定时器 9.3 比较单元及 PWM 输出 9.4 捕获单元 9.5 正交编码脉冲单元 9.6 事件管理器中断. 9.1 事件管理器概述. F281x 包含两个事件管理器 EVA 和 EVB ,每个事件管理器包括通用定时器( GP )、比较器、 PWM 单元,捕获单元以及正交编码脉冲电路( QEP )。

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 第 9 章 F2812 事件管理器( EVA/B )' - fayre


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

9章 F2812事件管理器(EVA/B)

张云洲

2010.11.26


章节结构

9.1 事件管理器概述

9.2 通用定时器

9.3 比较单元及PWM输出

9.4 捕获单元

9.5 正交编码脉冲单元

9.6 事件管理器中断


9.1 事件管理器概述

  • F281x 包含两个事件管理器EVA 和EVB,每个事件管理器包括通用定时器(GP)、比较器、PWM 单元,捕获单元以及正交编码脉冲电路(QEP)。

  • PWM 单元主要应用: (1) 产生脉宽调制信号控制数字电机;(2) 直接用PWM输出作为数模转换使用。事件管理器的捕获单元用来对外部硬件信号的时间测量,利用6个边沿检测单元测量外部信号的时间差,从而可以确定电机转子的转速。

  • 正交编码脉冲电路(QEP)根据增量编码器信号获得电机转子的速度和方向信息。

  • 事件管理器EVA 和EVB 有相同的外设寄存器,EVA 的起始地址是7400H,EVB 的起始地址为7500H。功能基本相同,只是模块的外部接口和信号有所不同。


事件管理器概述(续)

  • 每个事件管理器都有自己的控制逻辑模块,逻辑模块能够响应来自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 的输入功能,可以直接检测脉冲的边沿。


/

TCLKINA / TDIRA

PWM Circuits

Output Logic

PWM Circuits

Output Logic

PWM Circuits

Output Logic

GP Timer 2 Compare

Compare Unit 1

GP Timer 1 Compare

GP Timer 2

Compare Unit 2

GP Timer 1

QEP

Circuit

CLK

Compare Unit 3

DIR

MUX

CAP1/QEP1

CAP2/QEP2

CAP3/QEPI1

事件管理器功能框图 (EVA)

Reset

PIE

2

EV Control Registers / Logic

ADC Start

Output Logic

T1PWM_T1CMP

PWM1

PWM2

PWM3

Data Bus

PWM4

PWM5

PWM6

Output Logic

T2PWM_T2CMP

Capture Units


9.2 通用定时器

  • 每个事件管理器有两个通用定时器,EVA使用GP1,GP2定时器,EVB使用GP3,GP4定时器。通用定时器可以独立使用,其比较寄存可以产生PWM波形。当定时器工作在增或增减模式时,有3种连续工作方式。通用定时器还为事件管理器的子模块提供基准时钟。

  • 全局控制寄存器GPTCONA/B确定通用定时器实现具体的定时器任务需要采取的操作方式,并设置定时器的计数方向。

  • 定时器的时钟源可以取自外部输入信号,QEP单元或者内部时钟。当选择内部时钟时,定时器采用HSPCLK作为输入,计算定时器的周期时必须考虑高速外设时钟预定标寄存器的设置。


TCLKS 1-0

M

U

X

TxCON . 5 - 4

Shadowed

Compare

Register

Clock

Prescaler

Compare

Logic

TPS 2-0

TxCON . 10 - 8

Period

Register

Shadowed

通用定时器GP的功能框图

Internal

(HSPCLK)

TxCMPR . 15 - 0

TxCNT . 15 - 0

GPTCONA

TxPWM_

TxCMP

Output

Logic

16 - Bit Timer

Counter

External (1/4)

QEP

Note: x = 1 or 2

TxPR . 15 - 0


GP 连续增计数模式

(Used for Asymmetric PWM Waveforms)

This example:

TxCON.3-2 = 00 (下溢时 TxCMPR重载)

TxPR = 3

TxCMPR = 1 (initially)

Prescale = 1

CPU writes a 2 to

compare reg. buffer

anytime here

TxCMPR=2

3

3

3

2

1

1

0

0

0

TxCNT Reg.

TxPWM/TxCMP

(active high)

CPUCLK


TxCMPR =2

TxCMPR =1

TxCMPR =1

GP 连续增/减计数模式

(Used for Symmetric PWM Waveforms)

This example:

TxCON.3-2 = 01 (==00/PR.reg)

TxPR = 3

TxCMPR = 1 (initially)

Prescale = 1

PR.reg

PR.reg

3

3

2

2

2

2

1

1

1

1

00

0

0

0

TxCNT Reg.

00

TxPWM/TxCMP

(active high)

CPUCLK


后台功能

  • C28x的定时器提供后台功能,定时器1和定时器2都有各自的比较寄存器和周期寄存器。

  • 后台寄存器(类似于双缓冲)的优点就是能够在当前周期为下一个周期设置相应的寄存器值,下一个定时周期会将后台寄存器的值自动的装载到相应的寄存器中。

  • 如果没有后台寄存器,需要更新寄存器的值时就必须等待当前周期结束,然后触发高优先级的中断调整寄存器的值,这样就会影响定时器的运行。


9 2 1
9.2.1 通用定时器计数模式

  • 每一个通用定时器支持停止/保持、连续递增计数、双向增/减计数和连续增/减计数4种操作模式,可以通过控制寄存器TxCON中的MODE1-TMODE0位设置通用定时器的计数模式。

  • 可以通过定时器使能位TENABLE使能或禁止定时器的计数操作。当定时器被禁止时,定时器的计数器操作也被禁止,并且定时器的预定标器被复位为x/1。当使能定时器时,定时器按照寄存器TxCON中的TMODE1-TMODE0位确定的计数模式工作并开始计数。


9 2 2
9.2.2 定时器的比较操作

每一个通用定时器有1个比较寄存器TxCMPR和1个PWM

输出引脚TxPWM,当定时器计数器的值与比较寄存器的

值相等时,就产生比较匹配。可通过TxCON[1]位使能比

较操作,如果被使能,产生比较匹配后将会:

  • 匹配一个时钟周期后,定时器比较中断标志位置位。

  • 匹配一个CPU时钟周期后,根据寄存器GPTCONA/B相应位的配置情况,PWM的输出将产生跳变。

  • 如果比较中断标志位已通过设置寄存器GPTCONA/B中的相应位启动AD转换器,则比较中断位置位的同时产生模数转换启动信号。

  • 如果比较中断未被屏蔽,将产生一个外设中断申请。



PR。reg=

Comp1

PR。reg=

Comp2

PWM比较输出和中断

PWM周期 #2

新周期自动加载

TxCON.3-2= 00

PR=Comp1

2T

PWM周期 #1

定时器计数值

T

T

T

Comp2

Comp1

TxCMP/TxPWM

(active high)

TxCMP/TxPWM

(active low)

比较中断

周期中断

下溢中断


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 0x007408 定时器2控制寄存器

GPTCONB 0x007500 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控制寄存器

EVA

EVB

GP 定时器寄存器

EXTCONA 0x007409 / EXTCONB 0x007509 ;外部控制寄存器


GP Timer 2 Compare

Compare Unit 1

GP Timer 2

Compare Unit 2

QEP

Circuit

Compare Unit 3

MUX

EVA全比较单元

Reset

PIE

2

/

TCLKINA / TDIRA

EV Control Registers / Logic

ADC Start

Output Logic

GP Timer 1 Compare

T1PWM_T1CMP

GP Timer 1

PWM1

PWM Circuits

Output Logic

PWM2

PWM3

PWM Circuits

Output Logic

Data Bus

PWM4

PWM5

PWM Circuits

Output Logic

PWM6

Output Logic

T2PWM_T2CMP

CLK

DIR

CAP1/QEP1

Capture Units

CAP2/QEP2

CAP3/QEPI1


什么是PWM ?

  • PWM (脉宽幅度调制)

    • 固定的载波频率

    • 固定的放大系数

    • 脉冲宽度正比于瞬时放大系数

    • 能量损失趋于0

  • PAM(脉冲幅度调制)

    • 固定的宽度,变化的幅值


t

Original Signal

t

t

T

T

PWM

PAM

PWM 信号调制

same areas (energy)


Pwm motor
PWM Motor控制的优势

  • 功率转换器件是晶体管

    • 在线性区难以控制

    • 在饱和区容易控制

  • PWM是数字信号,容易在DSP实现

DC Supply

DC Supply

?

PWM

Desired

signal to

motor phase

PWM approx.

of desired signal

Unknown Gate Signal

Gate Signal Known with PWM


9 2 2 3 txpwm
9.2.2.3 TxPWM输出非对称波形

  • 根据通用定时器使用的计数模式,非对称/对称波形发生器产生一个非对称或对称的PWM波形。当通用定时器处于连续递增计数模式时,产生非对称波形。在这种模式下,波形发生器产生的波形输出根据下面情况有所变化:

    • 计数操作开始前为0;

    • 直到匹配发生时保持不变;

    • 在比较匹配时PWM输出信号反转;

    • 保持不变直到周期结束;

    • 若下一周期新的比较寄存器值不是0,则在匹配周期结束的周期复位清零。

  • 在周期开始时如果比较器周期寄存器的值是0,则整个计数周期内输出为1保持不变;如果下一周期新的比较值为0,则输出不会被复位为0。如果比较值大于周期寄存器中的值,则整个周期内输出为0。如果比较等于周期寄存器的值,对一个定标时钟输入来说输出是1。

  • 对于非对称PWM波形,改变比较寄存器的值仅仅影响PWM脉冲的一侧。


TPWM

非对称 PWM 波形

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
9.2.2.4 TxPWM输出对称波形

  • 当通用定时器处于连续递增/递减计数模式时,产生对称波形。在这种计数模式下,波形发生器的输出状态与下列状态有关:

    • 计数操作开始前为0;

    • 第一次比较匹配前保持不变;

    • 第一次比较匹配时PWM输出信号反转;

    • 第二次比较匹配前保持不变;

    • 第二次比较匹配时PWM输出信号反转;

    • 周期结束前保持不变;

    • 如果没有第二次匹配且下一周期新的比较值不为0,则在周期结束后复位为0。

  • 如果比较值在周期开始时为0,则周期开始时输出为1,直到第二次比较匹配发生后一直保持不变。如果比较值在后半周期是0,在第一次跳变后,直到周期结束将输出保持1。在这种情况下,如果下一周期新的比较值仍然为0,则输出不会复位为0。这会重复出现以保证能够产生占空比从0%到100%的无毛刺的PWM脉冲。如果前半周期的比较值大于等于周期寄存器的值,则不会产生第一次跳变。然而在后半周期发生比较匹配时,输出仍将跳变。这种错误的输出跳变经常是由应用程序计算不正确引起的,它将会在周期结束时被纠正,因为除非下一周期的比较值为0,输出才会被复位为0,否则输出将保持1,这将把波形发生器的输出重新置为正确的状态。


General Purpose Timer

Full Compare Units

PWM1

Compare

Compare

Compare

Period

Compare

Counter

PWM2

PWM3

TPWM/TCMP Pin

PWM4

PWM5

PWM6

对称PWM 波形

TPWM

Period

Compare

Counter

TPWM /TCMP Pin

(active high)

Interrupts


9 2 2 1 pwm txpwm
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] 清零。



9 2 2 5
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
9.2.3 //************************************************************通用定时器寄存器

  • 为了正确使用事件管理器的定时器必须配置相关定时器的5个寄存器,如果使用中断方式需要配置更多的寄存器。


9 2 3 1
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.2 //************************************************************通用定时器计数寄存器(TxCNT,其中x=1,2,3,4)


9 2 3 3 txcmpr 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.4 //************************************************************通用定时器周期寄存器(TxPR,其中x=1,2,3,4)


9 2 3 5 txcon
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 //************************************************************比较单元及PWM 输出

  • 9.3.1 比较单元功能介绍

  • 事件管理器(EVA)模块中有3个比较单元(比较单元1,2和3),事件管理器(EVB)

  • 模块中也有3个比较单元(比较单元4,5和6)。每个比较单元都有两个相关的PWM输出。比

  • 较单元的时钟基准由通用定时器1和通用定时器3提供。事件管理器的比较单元作为PWM信

  • 号输出的辅助电路,主要用来控制信号处理器的PWM输出的占空比,其结构如图9.14所示。


电源逆变器//************************************************************

串联的2个器件不能同时

被关闭,不能有重叠区

+

PWM信号的输入

DC 电容

-

三相输出作为控制信号

功率器件


死区的产生//************************************************************

supply rail

互补的PWM开关信号

to motor phase

  • 晶体管导通比截止快

  • 同时导通的瞬间-短路


DBTCONA . 11 - 8//************************************************************

DBTCONA . 4 - 2

Clock

PHx

DT

DTPHx

DTPHx_

死区

非对称PWM

可编程死区模块 (EVA)

Prescaler

HSPCLK

PHx

edge

detect

ENA

4-bit

Counter

reset

comparator

DT

4-bit period

DTPHx

DTPHx_


Eva dbtcona @ 0x007415
死区定时器控制器 //************************************************************(EVA)DBTCONA @ 0x007415

dead time = DB period * DB prescaler * CPUCLK period

DB Timer Period

15

14

13

12

11

10

9

8

DBT3

DBT2

DBT1

DBT0

reserved

reserved

reserved

reserved

7

6

5

4

3

2

1

0

EDBT3

EDBT2

EDBT1

DBTPS2

DBTPS1

reserved

reserved

DBTPS0

DB Timer Prescaler

000 = 1 100 = 16

001 = 2 101 = 32

010 = 4 110 = 32

011 = 8 111 = 32

DB Timer Enable

0 = disable

1 = enable


  • 比较单元的核心模块是比较逻辑,主要由事件管理器定时器比较单元的核心模块是比较逻辑,主要由事件管理器定时器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
9.3.2 PWM 比较单元的核心模块是比较逻辑,主要由事件管理器定时器信号

  • PWM信号是一系列可变脉宽的脉冲信号,这些脉冲覆盖几个定长周期,从而可以保证

  • 每个周期都有一个脉冲输出。这个定长周期称之为PWM载波周期,它的倒数称为PWM载波

  • 频率。PWM脉冲宽度则根据另一系列期望值和调制信号来确定和调制。

  • PWM数字脉冲输出可以用来表征模拟信号,在PWM输出端进行积分(比如增加简单的

  • 低通滤波器)可以得到期望的模拟信号。在期望输出信号的一个周期内脉冲个数越多,采用

  • PWM信号描述的模拟信号就越准确。习惯上经常采用两个不同的频率描述:载波频率(PWM

  • 输出频率)和期望的信号频率。


  • 在实际应用中,很多部件内部都有自己的积分器,比如电机本身就是一个非常理想的低通滤波器,在实际应用中,很多部件内部都有自己的积分器,比如电机本身就是一个非常理想的低通滤波器,PWM信号的一个很重要的用途就是数字电机控制。

  • 在电机控制系统中,PWM信号控制功率开关器件的导通和关闭,功率器件为电机的绕组提供期望的电流和能量。功率器件提供相电流的频率和能量可以控制电机的转速和转矩,这样提供给电机的控制电流和电压都是调制信号,而且这个调制信号的频率比PWM载波频率要低。采用PWM控制方式可以为电机绕组提供良好的谐波电压和电流,避免因为环境变化产生的电磁扰动,并且能够显著的提高系统的功率因数。未能够给电机提供具有足够驱动能力的正弦波控制信号,可以采用PWM输出信号经过NPN或PNP功率开关管实现,如图9.17所示。



9 3 3 pwm
9.3.3 采用功率开关管在输出大电流的情况下很难控制开关管工作在线性区,从而使系统产生与比较器相关的PWM 电路

  • 如图9.18所示EVA模块的PWM电路功能框图,它包含以下功能单元:

  • 􀁺 非对称/对称波形发生器;

  • 􀁺 可编程死区单元(DBU);

  • 􀁺 输出逻辑;

  • 􀁺 空间矢量(SV) PWM状态机。

  • EVB模块的PWM电路功能模块框图与EVA模块的一样,只是改变相应的寄存器配置。

  • 另外,非对称/对称波形发生器与在通用定时器中的一样。


Eva pwm
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 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
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 pwm1
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
9.3.4.1 为避免产生短通状态可以采用两种方法:调整功率管或者调整非对称PWM 信号的产生

  • 通用定时器1(或通用定时器3)开始后,比较寄存器在执行每个PWM周期过程中可重

  • 新写入新的比较值,从而可以调整控制功率器件的导通和关闭的PWM输出的占空比。由于

  • 比较寄存器带有映射寄存器,所以在一个周期内的任何时候都可以将新的比较值写入到比较

  • 寄存器。同样,可以随时向周期寄存器写入新的值,从而可以改变PWM的周期或强制改变

  • PWM的输出方式。


  • 为产生非对称的为避免产生短通状态可以采用两种方法:调整功率管或者调整PWM信号,通用定时器要设置为连续递增计数模式,周期寄存器装入所需的PWM载波周期的值,COMCONx寄存器使能比较操作,并将相应的输出引脚设置成PWM输出。如果需要设置死区,通过软件将所需的死区时间值写入到寄存器DBTCONx(11:8)的DBT(3:0)位,做为4位死区定时器的周期,所有的PWM输出通道使用一个死区值。


9 3 4 2 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
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
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
2为避免产生短通状态可以采用两种方法:调整功率管或者调整、空间矢量PWM 波形

  • 空间矢量PWM波形关于每个PWM周期中心对称,因此也称之为对称空间矢量PWM。

  • 图9.25给出了对称空间矢量波形的例子。


9 3 4 4 svpwm
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 为避免产生短通状态可以采用两种方法:调整功率管或者调整比较单元寄存器


9 3 5 1
9.3.5.1 为避免产生短通状态可以采用两种方法:调整功率管或者调整比较控制寄存器


比较控制寄存器为避免产生短通状态可以采用两种方法:调整功率管或者调整


9 3 5 2
9.3.5.2 为避免产生短通状态可以采用两种方法:调整功率管或者调整比较操作寄存器


9 3 5 3
9.3.5.3 为避免产生短通状态可以采用两种方法:调整功率管或者调整死区定时器控制寄存器

  • 每一个比较单元都有一个死区定时器,但各比较单元共用一个时钟预定标分频器和死区周期寄存器。每个单元的死区可以独立的使能或禁止。


9 3 5 3 ev
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变换,从而使外部捕获事件同AD转换同步。


GP Timer 1 Compare为避免产生短通状态可以采用两种方法:调整功率管或者调整

GP Timer 1

PWM Circuits

Output Logic

PWM Circuits

Output Logic

PWM Circuits

Output Logic

GP Timer 2 Compare

Compare Unit 1

GP Timer 2

Compare Unit 2

QEP

Circuit

Compare Unit 3

捕获单元功能模块 (EVA)

Reset

PIE

2

/

TCLKINA / TDIRA

EV Control Registers / Logic

ADC Start

Output Logic

T1PWM_T1CMP

PWM1

PWM2

PWM3

Data Bus

PWM4

PWM5

PWM6

Output Logic

T2PWM_T2CMP

CLK

MUX

DIR

CAP1/QEP1

Capture Units

CAP2/QEP2

CAP3/QEPI1


  • Can latch on:为避免产生短通状态可以采用两种方法:调整功率管或者调整

    • rising edge

    • falling edge

    • both

T1CNT . 15 - 0

T2CNT . 15 - 0

GP Timer 1

Counter

GP Timer 2

Counter

MUX

CAPCONA . 10 - 9

CAPCONA . 8

CAPCONA . 7 - 2

CAPFIFOA . 13 - 8

CAPCONA . 14 -12

CAPCONA . 15

TTL Signal

min. valid width:

2 CPUCLK lo

2 CPUCLK hi

捕获单元功能框图 (EVA)

CAP3TOADC

Enable

.

ADC Start

(CAP 3)

Edge

Detect

3

/

CAP1,2,3

Edge Select

2-Level Deep

RS

FIFO

CAPRESET

CAPxFIFO Status


什么是正交编码器为避免产生短通状态可以采用两种方法:调整功率管或者调整?

/4 相位差

间隔空隙 

/4

LED

Ch. A

Ch. B

shaft rotation

Quadrature Output from Photo Sensors

Incremental Optical Encoder


PWM Circuits为避免产生短通状态可以采用两种方法:调整功率管或者调整

Output Logic

PWM Circuits

Output Logic

PWM Circuits

Output Logic

GP Timer 2 Compare

Compare Unit 1

GP Timer 1 Compare

GP Timer 2

Compare Unit 2

GP Timer 1

Compare Unit 3

MUX

正交编码单元功能框图 (EVA)

Reset

PIE

2

/

TCLKINA / TDIRA

EV Control Registers / Logic

ADC Start

Output Logic

T1PWM_T1CMP

PWM1

PWM2

PWM3

Data Bus

PWM4

PWM5

PWM6

Output Logic

T2PWM_T2CMP

CLK

QEP

Circuit

DIR

CAP1/QEP1

Capture Units

CAP2/QEP2

CAP3/QEPI1


10为避免产生短通状态可以采用两种方法:调整功率管或者调整

00

11

01

如何通过正交信号来决定位置?

Position resolution is /4 degrees.

increment

counter

decrement

counter

(00)

(11)

(A,B) =

(10)

(01)

Quadrature

Decoder

State Machine

Ch. A

Ch. B


正向编码连接 为避免产生短通状态可以采用两种方法:调整功率管或者调整(EVA)

Ch. A

  • GP Timer 2 selected as pulse counter

  • Timer Prescaler bypassed (i.e. Prescale always 1)

.

Ch. B

CAP1/QEP1

QEP

decoder

logic

.

CAP2/QEP2

Index

CLK

DIR

CAP3/QEPI

QEPIQUAL

QEPIE

GP Timer 2


  • 一般情况下,捕获单元主要有以下几个方面的应用:一般情况下,捕获单元主要有以下几个方面的应用:

  • 􀁺 测量脉冲或数字信号的宽度;

  • 􀁺 自动的启动AD转换——捕获单元3捕获的事件;

  • 􀁺 转轴的速度估计;

  • 当捕获单元利用定时器为时间基准操作时可以进行低速估计,而在低速状态下位置计数精度相对比较低,因此如果在低速状态下根据固定时间内的位置改变来计算速度误差比较大,因此在估计低速速度时主要采用一定位置变化所需要的时间进行速度估计。


9 4 2
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
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
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
9.4.3.2 一般情况下,捕获单元主要有以下几个方面的应用:捕获中断

  • 当捕获单元完成一个捕获时,在FIFO中至少有一个有效的值(CAPxFIFO位显示不等于

  • 0时),如果中断未被屏蔽,中断标志位置位,产生一个外设中断请求。因此,如果使用了中

  • 断,则可用中断服务子程序读取到一对捕获的计数值。如果不希望使用中断,则可通过查询

  • 中断标志位或堆栈状态位来确定是否发生了两次捕获事件,若已发生两次捕获事件,则捕获

  • 到的计数值可以被读出。


9 4 4
9.4.4 一般情况下,捕获单元主要有以下几个方面的应用:捕获单元相关寄存器


9 4 4 1
9.4.4.1 一般情况下,捕获单元主要有以下几个方面的应用:捕获单元控制寄存器


9 4 4 12
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 一般情况下,捕获单元主要有以下几个方面的应用:正交编码脉冲 (QEP) 单元

  • 9.5.1 光电编码器原理

  • 光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量

  • 的传感器,是目前应用最多的传感器。一般的光电编码器主要由光栅盘和光电检测装置组成。

  • 在伺服系统中由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发

  • 光二极管等电子元件组成的检测装置检测输出若干脉冲信号,其原理示意图如图9.34 所示,

  • 通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。此外,为判断旋转方

  • 向,码盘还可提供相位相差90 两个通道的光码输出,根据双通道光码的状态变化确定电机

  • 的转向。根据检测原理,编码器可分为光学式、磁式、感应式和电容式。根据其刻度方法及

  • 信号输出形式,可分为增量式、绝对式以及混合式三种。


9 5 2 qep
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
9.5.3 QEP 一般情况下,捕获单元主要有以下几个方面的应用:电路时钟

  • 通用定时器2(EVB由通用定时器4)为QEP电路提供基准时钟。通用定时器作为QEP电路的基准时钟时,必须工作在定向增/减计数模式。图9.37给出了EVA的QEP电路的方框图,图9.38给出了EVB的QEP电路的方框图。


9 5 4 qep
9.5.4 QEP 一般情况下,捕获单元主要有以下几个方面的应用:的解码

  • 正交编码脉冲是两个频率可变、有固定1/4周期相位差(即900)的脉冲序列。当电机轴上的光电编码器产生正交编码脉冲时,可以通过两路脉冲的先后次序确定电机的转动方向,根据脉冲的个数和频率分别确定电机的角位置和角速度。


9 5 4 1 qep
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
9.5.4.2 QEP 一般情况下,捕获单元主要有以下几个方面的应用:计数

  • 通用定时器2(或4)总是从它的当前值开始计数,在使能QEP模式前,将所需的值装载

  • 到通用定时器的计数器中。当选择QEP电路作为时钟源时,定时器的方向信号TDIRA/B和

  • TCLKINA/B将不起作用。用QEP电路作为时钟,通用定时器的周期、下溢、上溢和比较中

  • 断标志在相应的匹配时产生。如果中断未被屏蔽,将产生外设中断请求。


9 5 5 qep
9.5.5 QEP 一般情况下,捕获单元主要有以下几个方面的应用:电路的寄存器设置

  • 启动EVA的QEP电路的设置如下:

  • 􀁺 根据需要将期望的值载入到通用定时器2的计数器、周期和比较寄存器;

  • 􀁺 配置T2CON寄存器,使通用定时器2工作在定向增/减模式,QEP电路作为时钟

  • 源,并使能使用的通用定时器;

  • 􀁺 设置CAPCONA寄存器以使能正交编码脉冲电路;

  • 启动EVB的QEP电路的设置如下:

  • 􀁺 根据需要将期望的值载入到通用定时器4计数器、周期和比较寄存器;

  • 􀁺 配置T4ON寄存器,使通用定时器2工作在定向增/减模式,QEP电路作为时钟

  • 源,并使能使用的通用定时器;

  • 􀁺 设置CAPCONB寄存器以使能正交编码脉冲电路;


9 5 6 qep
9.5.6 QEP 一般情况下,捕获单元主要有以下几个方面的应用:电路应用

  • 光电编码器的图像传感器由内部的LED触发,当LED光被遮挡时传感器送出逻辑“0”。

  • 当光线穿过编码器的1024个缝隙的每格时,送出逻辑“1”。两个图像传感器通过通道A和B发

  • 送逻辑信息。TMS320F2812片内QEP (计数编码脉冲)检测两个通道的上升言和下降沿,

  • 由QEP检测到的边沿数存放在计数器T3CNT。当QEP模式设定后, QEP的脉冲即作为时钟

  • T3,如图9.40所示。


  • 电机内旋转一周(机械)嵌入式编码器产生一般情况下,捕获单元主要有以下几个方面的应用:1024 个脉冲。每个缝隙有四个边缘:两个通道各有1 个上升沿和一个下降沿。也就是说,电机每旋转一周QEP 检测到4096 个边沿。

  • QEP 通过检测两个通道的先后次序,判断转子的转向。边沿(上升或下降沿)数存储处在

  • T3CNT。根据所选旋转的方向来确定T3CNT 是增量式还是减量式。一旦选择了QEP 模式,在一个周期FFFFh 时钟T3 将自动覆盖。

  • 机械加速度通过两个采样周期的旋转角度计算,


当计算的角度超过一般情况下,捕获单元主要有以下几个方面的应用:360 度时,软件同样要作适当的处理。


Tms320f2812 qep
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;

  • }


ad