第9章 F2812事件管理器(EVA/B) 张云洲 2010.11.26.

Slides:



Advertisements
Similar presentations
人機介面 Arduino 簡介 授課教師 開課單位. Arduino 簡介 Arduino 是一塊 Open source 的 Simple i/o 介面板,並 且具有使用類似 java, C 語言的開發環境。 可以快速使用 Arduino 語言 ( 基於 wiring) 與 Flash 或 Processing…
Advertisements

单片机 C 语言应用程序设计 主讲教师:廉哲 QQ: 电话: 办公室:综合楼 C318.
教员信息 姓 名:仲崇权 单 位:电子与信息工程学院 电 话: 办公室:创新院大厦720房间 :
松翰科技 — 全新高性能 8-bit 微控制器
TMS320F2812串行外设接口 Serial Peripheral Interface (SPI)
Texas Instruments 超低功耗微控制器
电梯运行安全智能检测仪器 DT系列电梯加速度测试仪 XC系列电梯限速器测试仪 伍 先 达 中国科学院合肥智能机械研究所.
客户端入门十二小时 FOOLFLY DEMO DESIGN 讲师:林伟.
加速度計 指導老師 : 洪正瑞 製作人 : 蔡昌佑.
C8051F MCU V1.0.
电工电子实验中心.
Hardware Chen Ching-Jung
DSP原理与应用 第10章 C55x典型应用系统设计
CH.2 Introduction to Microprocessor-Based Control
SEED TI C2000 培训教材.
4-10 STM Timer/Counter 與比較吻合輸出
第三章 VVVF控制与PWM方法 3.1 VVVF变频调速原理 3.2 PWM逆变器的模型 3.3 规则采样的SPWM方法
Active Clamp and Reset Technique 有源钳位电路 完整开关周期工作过程分析 摘自TI资料 庄主 —2.20
第7章 中斷系統.
一、實習目的 1、瞭解各種閂鎖器之特性。 2、瞭解各種正反器之特性。 3、瞭解各種正反器之邏輯功能。 4、瞭解正反器之應用。
VHDL數位電路實習與專題設計 文魁資訊-UE301
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
项目成果展示 ——深圳凯吉尔科技—— 凯吉尔全线代理无锡研奥产品 说明:
微處理機原理與應用 Chapter 1 簡介 Chung-Min Wu, Ph.D
數位邏輯的基礎.
触发器和时序电路分析 刘鹏 浙江大学信息与电子工程学院 March 30, 2017 ZDMC.
PIC16F1827介紹 以微控器為基礎之電路設計實務-微處理器實驗室.
Timer & KEYPAD 11/24.
Chapter 5 Verilog硬體描述語言
第 7 章 正反器 7-1 RS 閂鎖器 7-2 RS 型正反器 7-3 D 型正反器 7-4 JK 正反器 7-5 T 型正反器
邏輯設計.
CH5 數位訊號 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
C H A P T E R 8 体系结构对系统开发的支持.
SWITCH&7-SEG元件控制 嵌入式作業系統實作 11/17.
第八章 数据通信.
Block diagram BB —逻辑 —音频 —电源管理 HW interface. Block diagram BB —逻辑 —音频 —电源管理 HW interface.
HOLTEK 产品 在小家电的应用.
数字系统设计复习 Digital System Design Summary
Freescale HCS12 微控制器.
NO.3.1 SOPC技术 第5章 Nios II 系统的外围设备.
第15章 串行通信及接口电路.
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
第七章 定时/计数器.
智慧電子應用設計導論(1/3) Display
介面設計專題實務 Object Teaching of Interface Design 實驗五 CPU計時器實驗
第二章 實體層 2-1 傳輸媒介的種類 2-2 數據傳輸的相關技術 2-3 數位資料與數位訊號 2-4 數位資料與類比訊號
Freescale HCS12 微控制器.
第6章: 数字输入/输出模块(I/O) 6.1 数字I/O端口概述 6.2 数字I/O端口寄存器 6.3 I/O端口应用.
第五讲 内容回顾 1、SCI的特点 1)F2812包含两个SCI接口,记做SCIA和SCIB
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
触发器和时序电路分析 刘鹏 浙江大学信息与电子工程学院 March 29, 2016 ZDMC.
示波器应用基本知识 以TDS3000B产品的基本功能为基础
    使用Arduino量測直流(DC)電壓    林品成 月.
4-15 WDT HT66F50.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
第九章 微处理器外部结构和总线操作时序.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
5-6 串列埠模式0輸出埠擴充實習.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
4-9 Timer/Counter 控制七段速度
K60入门课程 06 首都师范大学物理系 靳熙芃.
实验2 中断模拟实验.
UART通信实验(二) McBSP软件模拟异步通信
第十二章 位运算.
第六章 S3C2410的串口UART及编程 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)
FPPA 程式設計 這一章開始正式進入FPPA程式設計的世界,我會從一個簡單的程式開始解說,一邊介紹專案開發時最常應用的技巧還有程式控制的手段,一邊把系統規畫的概念導入給大家,讓大家對專案的規畫能有一個初步的概念。
按键处理部分 王安然.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
第七章 基本逻辑电路设计.
第2章 Arduino编程.
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 的输入功能,可以直接检测脉冲的边沿。

EV Control Registers / Logic 事件管理器功能框图 (EVA) Reset PIE 2 TCLKINA / TDIRA / EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare GP Timer 1 GP Timer 2 Compare GP Timer 2 T1PWM_T1CMP PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM3 Data Bus PWM4 PWM5 PWM6 Output Logic 2个GP定时器;3个比较单元;3个捕捉单元;3个QEP通道;外部定时器输入(定时器方向TDIRA、外部时钟TCLINA);ADCSOC触发输出; GP1定时器能可以为所有的比较和PWM电路提供时基,这些比较单元通过可编程死区电路可以差生6个比较输出或者PWM波形输出,6个输出种的任何一个输出状态都可单独设置。比较单元的比较寄存器是双缓冲的,允许可编程的变换比较/PWM脉冲宽度;GP1和GP2可以步骤电路与正交脉冲计数提供时基;双缓冲的周期和比较寄存器允许可编程的变化定时器(PWM)的周期,从而得到PWM的宽度(2路);QEP:当一个时钟用于QEP电路时,QEP电路将产生定时器始终和计数方向(不能被GP的Prescale定标,通常为1,是每个QEP输入通道的4倍 T2PWM_T2CMP QEP Circuit CLK DIR MUX Capture Units • CAP1/QEP1 CAP2/QEP2 CAP3/QEPI1 • •

9.2 通用定时器 每个事件管理器有两个通用定时器,EVA使用GP1,GP2定时器,EVB使用GP3,GP4定时器。通用定时器可以独立使用,其比较寄存可以产生PWM波形。当定时器工作在增或增减模式时,有3种连续工作方式。通用定时器还为事件管理器的子模块提供基准时钟。 全局控制寄存器GPTCONA/B确定通用定时器实现具体的定时器任务需要采取的操作方式,并设置定时器的计数方向。 定时器的时钟源可以取自外部输入信号,QEP单元或者内部时钟。当选择内部时钟时,定时器采用HSPCLK作为输入,计算定时器的周期时必须考虑高速外设时钟预定标寄存器的设置。

通用定时器GP的功能框图 Compare Register Clock Prescaler 16 - Bit Timer Counter Internal (HSPCLK) TxCMPR . 15 - 0 TPS 2-0 TxCON . 10 - 8 Compare Register Shadowed Clock Prescaler TxCNT . 15 - 0 GPTCONA M U X 16 - Bit Timer Counter Compare Logic Output Logic TxPWM_ TxCMP External (1/4) QEP TCLKS 1-0 TxCON . 5 - 4 External:TCLKINA/B,最大频率为器件自身时钟的1/4;带有方向的输入TDIRA/B,用于GP定时器的增/减计数模式 QEP:当一个始终用于QEP电路时,QEP电路将产生定时器始终和计数方向 MUX:驱动ADC SOC输出 TxCON:配置使用外部时钟还是内部时钟(TCLKS);配置8种预定标因子的那一种(TPS);定时器重载之后进入那种状态;定时器禁止以及使能;周期定时器采用GP1、GP2还是自身周期寄存器(EVA) GPTCONA/B:在不同的定时器事件中完成操作的定时器,并且确定GP定时器的计数方向 GP的比较寄存器:不断与TxCNT比较,一旦发生匹配产生以下情况(1、与比较输出相关的引脚产生一个变化,取决于GPTCONA/B-TxCMPOE位是否比较输出)2、相应的中断标志位置位(通过PIE管理) GP周期寄存器:决定定时器的周期,当定时器的值在周期寄存器和定时器计数器匹配时,GP定时器复位为0还是相反方向计数取决与定时器处于那种模式 定时器的双缓冲比较和周期寄存器:TxPR和TxCMPR都是带有阴影的,一个周期的任何时刻都可以向它写入,同时会写入相关的阴影寄存器。对于比较寄存器,只有TxCON指定的事件发生时,阴影寄存器才被写入工作寄存器。对于周期寄存器,只要TxCON为0才被写入。双缓冲功能在一个周期内的任何时刻为周期和比较寄存器提供应用代码,这样可以在一个周期已经开始的情况下改变定时器的周期和PWM脉冲的宽度。如果在产生PWM的运行当中改变定时器的周期值也就是实时改变PWM的CARRIER频率。 GP定时器的输出:由GPTCONA/B的TxPN位决定高/低电平(强制) Period Register Shadowed Note: x = 1 or 2 TxPR . 15 - 0

(Used for Asymmetric PWM Waveforms) GP 连续增计数模式 (Used for Asymmetric PWM Waveforms) This example: TxCON.3-2 = 00 (下溢时 TxCMPR重载) TxPR = 3 TxCMPR = 1 (initially) Prescale = 1 无延迟计数 计数值= TxPR+1 CPU writes a 2 to compare reg. buffer anytime here TxCMPR=2 3 3 3 2 1 1 该模式下面GPTCONA/B中的计数方向位为1,在很多马达和运动控制系统中,GP的连续计算模式适用于产生异步PWM波形和采样周期。 TxPWM/TxCMP:驱动引脚输出 TxPR:驱动计数的最大值 TxCON:设定TxCMPR的输出间隔 匹配延迟一个周期后产生输出 TxCNT Reg. TxPWM/TxCMP (active high) CPUCLK

(Used for Symmetric PWM Waveforms) 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 =1 TxCMPR =2 TxCMPR =1 PR.reg 3 PR.reg 3 2 2 2 2 1 1 1 1 匹配产生一个周期后 00 TxCNT Reg. 00 TxPWM/TxCMP (active high) CPUCLK

后台功能 C28x的定时器提供后台功能,定时器1和定时器2都有各自的比较寄存器和周期寄存器。 后台寄存器(类似于双缓冲)的优点就是能够在当前周期为下一个周期设置相应的寄存器值,下一个定时周期会将后台寄存器的值自动的装载到相应的寄存器中。 如果没有后台寄存器,需要更新寄存器的值时就必须等待当前周期结束,然后触发高优先级的中断调整寄存器的值,这样就会影响定时器的运行。

9.2.1 通用定时器计数模式 每一个通用定时器支持停止/保持、连续递增计数、双向增/减计数和连续增/减计数4种操作模式,可以通过控制寄存器TxCON中的MODE1-TMODE0位设置通用定时器的计数模式。 可以通过定时器使能位TENABLE使能或禁止定时器的计数操作。当定时器被禁止时,定时器的计数器操作也被禁止,并且定时器的预定标器被复位为x/1。当使能定时器时,定时器按照寄存器TxCON中的TMODE1-TMODE0位确定的计数模式工作并开始计数。

9.2.2 定时器的比较操作 每一个通用定时器有1个比较寄存器TxCMPR和1个PWM 输出引脚TxPWM,当定时器计数器的值与比较寄存器的 值相等时,就产生比较匹配。可通过TxCON[1]位使能比 较操作,如果被使能,产生比较匹配后将会: 匹配一个时钟周期后,定时器比较中断标志位置位。 匹配一个CPU时钟周期后,根据寄存器GPTCONA/B相应位的配置情况,PWM的输出将产生跳变。 如果比较中断标志位已通过设置寄存器GPTCONA/B中的相应位启动AD转换器,则比较中断位置位的同时产生模数转换启动信号。 如果比较中断未被屏蔽,将产生一个外设中断申请。

通用定时器比较操作功能框图

PWM比较输出和中断 2T T T T PR。reg= Comp1 PR。reg= Comp2 定时器计数值 PWM周期 #2 新周期自动加载 PR。reg= Comp1 PR。reg= Comp2 TxCON.3-2= 00 PR=Comp1 2T PWM周期 #1 定时器计数值 T T T Comp2 Comp1 TxCMP/TxPWM (active high) TxCMP/TxPWM (active low) 初始值:TxCON.3-2=00、PR.reg=comp1 t-=4T:PR.reg=comp2(过0加载),注意第三周期的波形 第四个周期:PR=2T, PR.reg=comp2,注意波形 下溢中断出现在过0,周期中断出现在过周期寄存器设置的数值;比较中断出现比较寄存器时刻 ACTIVE HIGH:TxPIN设置位高电平运行 ACTIVE LOW: TxPIN设置位低电平运行 比较中断 周期中断 下溢中断

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 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 EXTCONA 0x007409 / EXTCONB 0x007509 ;外部控制寄存器

EV Control Registers / Logic EVA全比较单元 Reset PIE 2 / TCLKINA / TDIRA EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare T1PWM_T1CMP GP Timer 1 • PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM Circuits PWM3 Data Bus Output Logic PWM4 PWM Circuits Output Logic PWM5 PWM6 Output Logic GP Timer 2 Compare GP Timer 2 T2PWM_T2CMP CLK QEP Circuit MUX DIR Capture Units • CAP1/QEP1 • CAP2/QEP2 • CAP3/QEPI1

什么是PWM ? PWM (脉宽幅度调制) PAM(脉冲幅度调制) 固定的载波频率 固定的放大系数 脉冲宽度正比于瞬时放大系数 能量损失趋于0 PAM(脉冲幅度调制) 固定的宽度,变化的幅值

PWM 信号调制 t Original Signal same areas (energy) T t PWM PAM T t

? 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 输出非对称波形 根据通用定时器使用的计数模式,非对称/对称波形发生器产生一个非对称或对称的PWM波形。当通用定时器处于连续递增计数模式时,产生非对称波形。在这种模式下,波形发生器产生的波形输出根据下面情况有所变化: 计数操作开始前为0; 直到匹配发生时保持不变; 在比较匹配时PWM输出信号反转; 保持不变直到周期结束; 若下一周期新的比较寄存器值不是0,则在匹配周期结束的周期复位清零。 在周期开始时如果比较器周期寄存器的值是0,则整个计数周期内输出为1保持不变;如果下一周期新的比较值为0,则输出不会被复位为0。如果比较值大于周期寄存器中的值,则整个周期内输出为0。如果比较等于周期寄存器的值,对一个定标时钟输入来说输出是1。 对于非对称PWM波形,改变比较寄存器的值仅仅影响PWM脉冲的一侧。

非对称 PWM 波形 Tpwm / Tcmp Pin (active high) Period Compare Counter 非对称方式可以由连续增计数实现 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 波形 Period Compare Counter Period Compare Counter TPWM TPWM /TCMP Pin (active high) Interrupts Period Compare Counter General Purpose Timer TPWM/TCMP Pin Full Compare Units 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; 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信 号输出的辅助电路,主要用来控制信号处理器的PWM输出的占空比,其结构如图9.14所示。

电源逆变器 + - 串联的2个器件不能同时 被关闭,不能有重叠区 PWM信号的输入 DC 电容 三相输出作为控制信号 功率器件

死区的产生 supply rail 互补的PWM开关信号 to motor phase 晶体管导通比截止快 同时导通的瞬间-短路

可编程死区模块 (EVA) 非对称PWM Prescaler Clock PHx PHx edge detect 4-bit Counter DT 死区 Clock DTPHx 非对称PWM DTPHx_ HSPCLK DBTCONA . 4 - 2 PHx edge detect ENA 4-bit Counter reset comparator DT 输入:PHX(X=1、2、3)来自比较单元的非对称波形发生器 输出:DPHX/DPHX_,与PHX对应 对应每个输入信号PHX,都会产生2个输出信号DTPHX和DTPHX_。当比单元和他们相关的输出的死区被禁止时,这2个信号是一样的。当比较单元被使能时,2个信号的边沿变化被称作死区的事件间隔分隔开。 4-bit period DBTCONA . 11 - 8 DTPHx DTPHx_

死区定时器控制器 (EVA) DBTCONA @ 0x007415 dead time = DB period * DB prescaler * CPUCLK period DB Timer Period 15 14 13 12 11 10 9 8 reserved reserved reserved reserved DBT3 DBT2 DBT1 DBT0 7 6 5 4 3 2 1 EDBT3 EDBT2 EDBT1 DBTPS2 DBTPS1 DBTPS0 reserved reserved DB Timer Period:定义了3个4位的减法寄存器周期值 DB Timer Enable:死区定时器使能位 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 信号 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信号,通用定时器要设置为连续递增计数模式,周期寄存器装入所需的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计数器 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计数器 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变换,从而使外部捕获事件同AD转换同步。

EV Control Registers / Logic 捕获单元功能模块 (EVA) Reset PIE 2 / TCLKINA / TDIRA EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare GP Timer 1 T1PWM_T1CMP • PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM3 Data Bus PWM4 PWM5 PWM6 Output Logic GP Timer 2 Compare GP Timer 2 介绍捕获单元的作用:AD采样、FFT频率锁定、脉宽测量等等 T2PWM_T2CMP CLK QEP Circuit MUX DIR Capture Units • CAP1/QEP1 • CAP2/QEP2 • CAP3/QEPI1

捕获单元功能框图 (EVA) . Can latch on: rising edge falling edge both GP Timer 1 Counter T1CNT . 15 - 0 GP Timer 2 Counter T2CNT . 15 - 0 Can latch on: rising edge falling edge both CAPCONA . 14 -12 CAPCONA . 10 - 9 MUX CAP3TOADC Enable CAPCONA . 8 . ADC Start (CAP 3) Edge Detect 3 TTL Signal min. valid width: 2 CPUCLK lo 2 CPUCLK hi / CAP1,2,3 EVA:捕获单元3有跟1、2不同的时基,使得在同一时刻,Unit 3使用一个时基,Unit2、1使用另外一个定时器时基 捕捉设置 1、初始化CAPFIFOX并清楚相应的操作位 2、把选用的定时器设定为某种操作模式 3、如果需要,设置相关的定时器比较寄存器或定时器周期寄存器 4、相应的设置CAPCONA或CAPCONB 第一次捕捉假定FIFO空,把计数器的当前计数值写入FIFO上层,相应状态位为01,如果在另一次捕捉前读取FIFO,则01-》00 第二次捕捉:新的计值被送入底层,01-》10,如果在下一次写入前读取fifo值,则10-》01,第二次写入的值被移到上层 第三次捕捉:如果前面2次的捕捉还没有读,则上层溢出,底层被推入到上层,状态为11 2-Level Deep Edge Select RS FIFO CAPCONA . 7 - 2 CAPRESET CAPxFIFO Status CAPCONA . 15 CAPFIFOA . 13 - 8

什么是正交编码器? /4 相位差 间隔空隙  /4 LED  Ch. A Ch. B shaft rotation Incremental Optical Encoder Quadrature Output from Photo Sensors

EV Control Registers / Logic 正交编码单元功能框图 (EVA) Reset PIE 2 / TCLKINA / TDIRA EV Control Registers / Logic ADC Start Output Logic GP Timer 1 Compare GP Timer 1 T1PWM_T1CMP • PWM1 Compare Unit 1 Compare Unit 2 Compare Unit 3 PWM Circuits Output Logic PWM2 PWM3 Data Bus PWM4 PWM5 PWM6 Output Logic GP Timer 2 Compare GP Timer 2 T2PWM_T2CMP CLK QEP Circuit MUX DIR Capture Units • CAP1/QEP1 • CAP2/QEP2 • CAP3/QEPI1

如何通过正交信号来决定位置? Position resolution is /4 degrees. increment counter decrement counter (00) (11) (A,B) = 00 01 11 10 (10) (01) Quadrature Decoder State Machine Ch. A 正交编码脉冲电路是具有90度固定相移和可变频率的2个脉冲序列。当光编码器和电机转轴产生AEP时,通过检测2个脉冲的先后顺序可以确定电机的旋转方向,通过检测脉冲个数和频率恶意确定旋转角度 Ch. B

. . 正向编码连接 (EVA) QEP decoder logic Ch. A . Ch. B CAP1/QEP1 QEP decoder logic . CAP2/QEP2 Index CLK DIR CAP3/QEPI GP Timer 2 selected as pulse counter Timer Prescaler bypassed (i.e. Prescale always 1) QEPIQUAL 定时器2位EVA的AEP电路提供时基。定时器必须处于单增/减计数模式并使用QEP电路作为时钟源。 QEPIE GP Timer 2

一般情况下,捕获单元主要有以下几个方面的应用: 􀁺 测量脉冲或数字信号的宽度; 􀁺 自动的启动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结果寄存器的状态。当捕获单元 如果在前一次捕获计数值被读取之前产生了另一次捕获,新捕获到的计数值送至底层的 寄存器。同时,相应的寄存器状态位置为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的脉冲即作为时钟 T3,如图9.40所示。

电机内旋转一周(机械)嵌入式编码器产生1024 个脉冲。每个缝隙有四个边缘:两个通道各有1 个上升沿和一个下降沿。也就是说,电机每旋转一周QEP 检测到4096 个边沿。 T3CNT。根据所选旋转的方向来确定T3CNT 是增量式还是减量式。一旦选择了QEP 模式,在一个周期FFFFh 时钟T3 将自动覆盖。 机械加速度通过两个采样周期的旋转角度计算,

当计算的角度超过360 度时,软件同样要作适当的处理。

TMS320F2812 QEP 电路初始化及应用 // 文件名称:F28XQEP.C #include "DSP28_Device.h" //****************************************************************************** // 文件名称: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;