1 / 36

MC9S12 单片机 PWM 模块

MC9S12 单片机 PWM 模块. 山东大学控制科学与工程学院 2010.8. 脉冲宽度调制 PWM 模块. PWM ( Pulse Width Modulate )即脉宽调制,脉宽调制波是一种可用程序来控制波形 占空比 、 周期 、 相位 的波形。它在电动机驱动、 D/A 变换等场合有着广泛的应用。 周期,占空比,相位。 周期指上图中的 τ ,占空比为 t/ τ ,相位指高低电平。. 9S12 PWM 模块特性.

zilya
Download Presentation

MC9S12 单片机 PWM 模块

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MC9S12单片机PWM模块 山东大学控制科学与工程学院 2010.8

  2. 脉冲宽度调制PWM模块 • PWM(Pulse Width Modulate)即脉宽调制,脉宽调制波是一种可用程序来控制波形占空比、周期、相位的波形。它在电动机驱动、D/A 变换等场合有着广泛的应用。 • 周期,占空比,相位。 • 周期指上图中的τ,占空比为t/ τ,相位指高低电平。

  3. 9S12 PWM模块特性 • 对于DG128(80pin):7个周期、占空比可编程的PWM通道(PP0-PP5,PP7);对于112引脚的,有8个PWM通道。 • 专用的PWM计数器 • PWM功能的软件使能和禁止(允许寄存器) • 软件选择脉冲极性 • PWM波形输出对齐方式分为左对齐和居中对齐 • 可以两个通道级联以获得更高的精度 • 可选择4个时钟源,4个时钟源均为独立的分频设置 • 紧急关断功能

  4. 1. 时钟 • 四个时钟源 • CLOCKA、CLOCKB、CLOCKSA、CLOCKSB。 分频 总线时钟 CLOCKA 分频 CLOCKSA 分频 分频 CLOCKSB CLOCKB • CLOCKA(B) • 可以把总线时钟进行1、2、4、8、16、32、64、128分频。 • Clock A 的预分频因子通过PWMPRCLK寄存器中的PCKA2、PCKA1和PCKA0来选择 • Clock B 的预分频因子通过PWMPRCLK 寄存器中的PCKB2、PCKB1和PCKB0 来选择。

  5. CLOCKSA(B) • 从CLOCKA(B)进行分频的比例因子可以为1、2、4、8、16、32、64、128、256,最大可以进行512分频。计算公式为: CLOCKSA(B)=CLOCKA(B)/(2*PRESCALER) • 通道0、1、4、5可选CLOCKA或CLOCKSA • 通道2、3、6、7可选CLOCKB或CLOCKSB • 时钟的选择PWMCLK寄存器中的PCLKx位来控制

  6. 2. 允许控制 • PWM的允许位相当于“开关”,可以允许和禁止相应通道的PWM输出。 • 每个PWM 通道都对应一个允许位(PWMEx),只有PWMEx=1 时,对应的通道才输出波形。 • 计数器计数结束的那一刻,只要PWMEx 为高电平,则会自动开始下一个波形的输出。

  7. 3. 极性控制 • 每个PWM 通道都对应一个极性设置位,决定了PWM 波的输出首先是高电平还是低电平。 • PPOLx=1时,对应的通道首先输出高电平,直到计数器计数到占空比寄存器的值后变为低电平 • PPOLx=0时,对应的通道首先输出低电平,直到计数器计数到占空比寄存器的值后变为高电平。

  8. 4. 周期和占空比 • 每个通道都有 • 一个独立周期寄存器 • 一个独立的占空比寄存器 • 输出波形的周期受周期寄存器的控制,当计数器的计数值等于周期寄器的值时,PWM波周期结束。 • 当计数器的计数值等于占空比寄存器的值时,PWM输出波形的极性改变。

  9. 5. 计数器 • 每个通道都有一个8位的加法/减法计数器 • 计数器的计数频率=选择的时钟频率

  10. 6. 左对齐的输出波型 • PWMCAE 寄存器中的CAEx 位是输出格式的控制位。 • CAEx=0,则对应通道的输出格式是左对齐的。 • CAEx=1,则对应通道的输出格式是居中对齐的。 • 当使用左对齐格式输出时,8 位的计数器只使用加法计数。 • 当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平就发生变化; • 当计数器加法计数到周期寄存器中的值时,计数器复位,输出波形电平发生变化。然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。 • 注意,计数器是从0开始计数的,直到周期寄存器中的值。

  11. PWM波形频率的计算: • 用时钟源的频率除以周期寄存器中的值 • PWMx 频率= Clock(A, B, SA, or SB) / PWMPERx

  12. PWM波形占空比的计算:(高电平占得百分比) • 若Polarity = 0 (PPOLx=0):首先输出低电平 • Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] × 100% • 若Polarity = 1 (PPOLx=1):首先输出高电平 • Duty Cycle = [PWMDTYx / PWMPERx] × 100%

  13. 下面举一个左对齐输出的例子: • 假设时钟源频率=10MHz(周期=100ns),PPOLx=0(首先输出低电平),PWMPERx=4(周期寄存器),PWMDTYx=1(占空比寄存器)。 • 所以,PWMx 的频率 = 10MHz/4 = 2.5MHz,PWMx 的周期=400ns,PWMx 的占空比=3/4×100% = 75%。

  14. 居中对齐的输出波型 • CAEx=1,则对应通道的输出格式是居中对齐的。 • 计数器既进行加法计数也进行减法计数。 • 当计数器加法计数到占空比寄存器中的值时,PWM 通道输出波形的电平发生变化; • 当加法计数到周期寄存器中的值时,计数器会从加法计数改变为减法计数; • 当计数器再次减法计数到占空比寄存器中的值时,PWM 通道输出波形的电平再次发生变化; • 当计数器继续减法计数到$00 时,计数器重新变为加法计数器,然后再次读取占空比和周期寄存器中的值作为下次计数参考使用。

  15. PWM输出波形的频率:时钟源的频率除以周期寄存器中值的2 倍 • PWMx Frequency = Clock(A, B, SA, or SB) / (2×PWMPERx) • 若Polarity = 0 (PPOLx=0) • Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] × 100% • 若Polarity = 1 (PPOLx=1) • Duty Cycle = [PWMDTYx / PWMPERx] × 100%

  16. 下面举一个居中对齐输出的例子: 假设时钟源频率=10MHz(周期=100ns),PPOLx=0,PWMPERx=4,PWMDTYx=1。 所以,PWMx 的频率 = 10MHz/8 = 1.25MHz,PWMx 的周期=800ns,PWMx 的占空比=3/4×100% = 75%。

  17. 9S12 PWM模块的通道级联 • 如果需要PWM 输出波形的精度更高,则可以把2 个8 位PWM 通道级联起来组成1 个16 位通道。 • PWMCTL寄存器中有4 个控制位,可以完成这个级联的功能。CON67、CON45、CON23 和CON01 可以把相应的两个通道级联起来。

  18. 级联后的寄存器 • 6和7级联时,6的寄存器为级联后寄存器的高8位 • 4和5级联时,4的寄存器为级联后寄存器的高8位 • 2和3级联时,2的寄存器为级联后寄存器的高8位 • 0和1级联时,0的寄存器为级联后寄存器的高8位 • 级联后的控制寄存器 • 时钟是受低8位对应通道的寄存器的控制 • 6和7级联时,7的寄存器为级联后控制寄存器 • 4和5级联时,5的寄存器为级联后控制寄存器 • 2和3级联时, 3的寄存器为级联后控制寄存器 • 0和1级联时, 0的寄存器为级联后控制寄存器

  19. PWM波形是从低8位对应通道的外部引脚上输出的。PWM波形是从低8位对应通道的外部引脚上输出的。 • 1、3、5、7 • PWM波形的允许、极性、对齐方式、也是由低8位对应通道的寄存器控制的。

  20. 寄存器介绍 • 允许控制寄存器—PWME • 极性寄存器—PWMPOL • 时钟选择寄存器—PWMCLK • 预分频时钟选择寄存器-PWMPRCLK • 居中对齐允许寄存器—PWMCAE • 控制寄存器—PWMCTL • 比例因子寄存器A—PWMSCLA • 比例因子寄存器B—PWMSCLB • 计数寄存器—PWMCNTx • 周期寄存器—PWMPERx • 占空比寄存器—PWMDTYx • 关断寄存器--PWMSDN

  21. 允许控制寄存器--PWME • PWMEx:通道有效选择位。1=允许PWM输出,0=禁止。 • 当PWMEx 被置位后,PWM 输出就会立即开始。但是直到PWM 模块时钟的下一个周期到来之时,才可以输出正确的波形,而在这之前的波形可能会是无效的。 • 当处于级联模式时,8 个8 位PWM 通道组成4 个16 位的PWM 通道,PWME1、PWME3、PWME5 和PWME7 对这4 个通道进行控制,而其它控制位处于无效状态。

  22. 极性寄存器--PWMPOL • PPOLx:通道x的输出极性。 • 1=先高后低, • 0=先低后高。 • PWMPOL 寄存器随时都可以进行设置。如果某PWM 通道在输出波形的过程中,波形的极性发生了改变,那么在两组波形的连接处可能会出现缩短或者拉伸了的不正常波形。

  23. 时钟选择寄存器--PWMCLK • 通道0、1、4、5可选CLOCKA或CLOCKSA; • 通道2、3、6、7可选CLOCKB或CLOCKSB。 • PCLK7:PWM 通道7 时钟源选择。1=Clock SB ;0=Clock B • PCLK6:PWM 通道6 时钟源选择。1=Clock SB ;0=Clock B • PCLK5:PWM 通道5 时钟源选择。1=Clock SA ;0=Clock A • PCLK4:PWM 通道4 时钟源选择。1=Clock SA ;0=Clock A • PCLK3:PWM 通道3 时钟源选择。1=Clock SB ;0=Clock B • PCLK2:PWM 通道2 时钟源选择。1=Clock SB ;0=Clock B • PCLK1:PWM 通道1 时钟源选择。1=Clock SA ;0=Clock A • PCLK0:PWM 通道0 时钟源选择。1=Clock SA ;0=Clock A

  24. 预分频时钟选择寄存器-PWMPRCLK • 此寄存器用来选择Clock A (B) 的预分频因子 • Clock B 预分频因子的选择 • PCKB2、PCKB1、PCKB0: • Clock A 预分频因子的选择 • PCKA2、PCKA1、PCKA0 详细列表见课本P266

  25. 居中对齐允许寄存器--PWMCAE • 此寄存器控制每个PWM 通道输出波形的对齐方式, • 可以是左对齐或者居中对齐。 • CAEx: 1=对应x通道为居中对齐模式 • 0=对应x通道为左对齐模式 • 注意只有当对应通道被禁止输出时,才可以设置此寄存器。

  26. 控制寄存器--PWMCTL • 此寄存器可以实现把8 个8 位PWM 通道级联为4 个16 位通道。 • CONxy:x通道和y通道级联,以获得更高的输出精度。 • 1=级联模式 • 0=非级联模式 • x通道作为高8位,y通道作为低8位。 • 只有通道y的时钟选择位、极性控制位、输出允许位和对齐方式选择位才有效;通道x 的相应寄存器均无效。 • PFRZ:冻结模式PWM 计数器停止,(程序调试时有用) • 1=停止,0=继续运行。

  27. 比例因子寄存器A--PWMSCLA • 此寄存器用来提供产生时钟Clock SA 的比例因子 • Clock SA 是由Clock A 经过一系列运算得来的,公式: • Clock SA = Clock A / (2×PWMSCLA) • 当PWMSCLA=0 时,默认比例因子为256,此时Clock SA 的频率等于Clock A 的频率除以512。

  28. 比例因子寄存器B--PWMSCLB • 此寄存器用来提供产生时钟Clock SB 的比例因子 • Clock SB 是由Clock B 经过一系列运算得来的,公式如下: • Clock SB = Clock B / (2×PWMSCLB) • 当PWMSCLB=0 时,默认比例因子为256,此时Clock SB 的频率等于Clock B 的频率除以512。

  29. x通道计数寄存器--PWMCNTx • 每个PWM 通道都有一个独立的加法/减法计数器,计数器的频率=时钟源的频率。可以在任意时刻来读取计数器里的值,而计数器的工作不会受到影响。 ★注意左/居中对齐方式时,计数器的计数方式。 • 对计数寄存器进行写操作将使它复位,计数器会立即开始加法计数,从周期寄存器和占空比寄存器的缓冲区里得到周期和占空比值,然后根据设置的极性来输出。 • 当相应的PWM通道被禁止输出(PWMEx=0)时,计数器不工作;当PWM 通道允许时,计数器会以计数寄存器中的值为起点开始计数。

  30. 周期寄存器--PWMPERx • 每个PWM 通道都有一个独立的周期寄存器,周期寄 存器中的值对应PWM 通道输出波形的周期。 • 此寄存器具有双重缓存功能,新输入的值被送到缓冲区,而不是立即生效,到下一个有效周期开始时才会有效,所以PWM 输出波形的周期在改变时不会产生无效波形。

  31. 占空比寄存器--PWMDTYx • 每个PWM 通道都有一个独立的占空比寄存器。 • 此寄存器同样是双重缓存的。

  32. 关断寄存器--PWMSDN • 在有紧急情况发生时,立即关断PWM的输出。 • PWM7ENA:PWM 紧急关断允许 • 当此位为1 时,通道7 会被强制配置为输入端口,并且允许紧急关断。只有当此位为1时,寄存器中的其它位才有意义。 • PWM7INL: 紧急关断通道7的有效电平。1=高电平,0=低电平。 • PWM7IN: PWM 通道7 的输入电平状态。 • PWMLVL: PWM 紧急关断后的输出电平。1=高,0=低。 • PWMRSTRT: PWM 重新启动。只有在当PWM 通道7 处于无效状态(非紧急关闭)时,才可以重新启动PWM 模块。把PWMRSTRT 置一,当计数器返回0 时,PWM 通道才开始运行。 • PWMIE: PWM 中断允许。1=允许,0=禁止。 • PWMIF: PWM 中断标志。当PWM7ENA 被置位时,PWM 通道7 上电平的任意变化将产生中断并使PWMIF 置位。 • 1=PWM7IN输入有变化。0=PWM7IN 输入无变化。

  33. PWM的复位和中断 • 复位 • 复位时,计数器配置为加法计数器 • 所有通道被禁止,计数器不工作 • 中断 • PWM模块仅有一个中断源,在紧急关断时使用

  34. PWM 的综合举例 • 利用PWM5通道来做DA 转换输出变化的电压控制小灯的亮度。灯会从暗逐渐变亮。 void PWM_Init(void) { PWMPOL=0x20; //脉冲先高后低 PWMCLK=0x20; //使用SA时钟源 PWMPRCLK=0x07; //时钟A为总线128 分频 PWMCAE=0x00; //通道5 为左对齐输出模式 PWMCTL=0x00; //单独使用通道5,非级联 PWMSCLA=0x05; //Clock SA=Clock A/(2*PWMSCLA) PWMPER5=0x64; //设定周期 }

  35. void main(void) { unsigned char i; unsigned long j=10000; SET_PLL(); //设置锁相环 EnableInterrupts; PWMInit(); //初始化PWM for(i=0;i<0x64;i++) { while(j--); j=10000; while(j--); j=10000; PWMDTY5=i; //设定占空比 PWME=0x20; //使能PWM } }

  36. 谢 谢!

More Related