MC9S12XS128之脉冲宽度调制PWM.doc_第1页
MC9S12XS128之脉冲宽度调制PWM.doc_第2页
MC9S12XS128之脉冲宽度调制PWM.doc_第3页
MC9S12XS128之脉冲宽度调制PWM.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

半年前就开始写PWM的程序了,那时候只是用来控制电机和舵机。最近在烦着摄像头的显示问题,再次探究PWM,看能不能找到出路。 我数了一下,整个PWM模块中,总共有37个寄存器。不过把这些寄存器的功能都理了一下,发现:也不过这么一回事。 PWM就是脉冲宽度调制,是英文“Pulse Width Modulation”的缩写,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。在XS128中,PWM主要就是通过设置相关的寄存器,让PWM0PWM7引脚输出一定周期一定占空比的矩形波。输出的矩形波的周期和占空比在输出的过程中,可以通过改变相关寄存器的值来改变的。电机和舵机就这利用这点来控制期速度和转向的。不过观察了一下,似乎在112引脚封装的芯片中才有PWM0到PWM7八个通道的引脚输出,而在80引脚封装的芯片中只有七个通道的引脚输出,没有PWM6的引脚输出。 接下来写一下各个寄存器的功能和设置方法:一、PWME:各通道使能寄存器明显,当某位置1时,相应通道的PWM就打开了。置0时,就是禁止该通道的PWM。 二、PWMPOL:极性设置寄存器这个寄存器可以设置相应通道的PWM波在每个周期内是先出现高电平后低电平,或是先低电平后高电平。PPOLn=1:n 通道对外输出波形先是高电平然后再变为低电平。PPOLn=0:n通道对外输出波形先是低电平然后再变为高电平。这个设置与占空比的计算有关。 三、PWMCLK:时钟选择寄存器PWM模块中共有四个时钟,分别为A、B、SA、SB。对于第0、1、4、5通道,PCLKn=0时,则其通选择的是时钟A;当PCLKn=1时,其通道选择的是时钟SA。对于2、3、6、7通道,PCLKn=0时,其通道选择的是时钟B,当PCLKn=1时,其通道选择的是时钟SB。对于这四种时钟,后面还有介绍。 四、PWMCAE:对齐方式选择寄存器当某位置1时,则该通道为居中对齐输出方式。置0时,则该通道为左对齐输出方式。对齐方式影响PWMCNTx的计数方式。在左对齐方式中,计数器从0计到PWMCNTx -1,然后这样循环下去。在居中对齐方式中,计数器从0计到PWMCNTx中的值,然后再反正过来计到0,再这样循环下去。 五、PWMPRCLK:时钟A、B分频寄存器其中PCKB2PCKB0是设置时钟B的分频的,PCKA2PCKA0是设置时钟A的分频的。具体分频设置如下表: 六、PWMCTL:设置是否联级输出,不设置联级输出的话,就不用管这个寄存器CON67、CON45、CON23、CON01若置1的话,那相应的两个8位通道就组成联级输出了,也就组成一个16位的通道,然的在通道7、5、3、1上输出。联级后的使能、极性、时钟选择、对齐方式等质性,都是由通道7、5、3、1的PWME、PWMPOL、PWMCLK、PWMCAE等寄存器来设置。 七、PWMTST:系统保留的寄存器,不用管八、PWMPRSC:系统保留的寄存器,不用管 九、PWMSCLA:SA的分频寄存器Clock SA = Clock A / (2 * PWMSCLA) 当把PWMSCLA设为0X00时,则系统会令PWMSCLA=256。 十、PWMSCLB:SB的分频寄存器Clock SB = Clock B / (2 * PWMSCLB) 当把PWMSCLB设为0X00时,则系统会令PWMSCLB=256。 十一、PWMSCNTA:系统保留的寄存器,不用管十二、PWMSCNTB:系统保留的寄存器,不用管 十三、PWMCNT0PWMCNT7(8位寄存器):计数寄存器十四、PWMPER0PWMPER7:周期寄存器十五、PWMDTY0PWMDTY7:占空比寄存器在左对齐方式中,计数器PWMCNT从0开始对时钟信号递增计数,当数值与占空比寄存器PWMDTY的值相等时,使输出电平翻转。计数器继续计数,当计数值与周期寄存器PWMPER的值相等时,使输出电平翻转,同时计数器PWMCNT也复位,又从0开始计起。在居中对齐方式中,计数器从0开始递增计数,当计数值与占空比寄存器PWMDTY的值相等时,使输出电平翻转。计数器继续计数,当计数值与周期寄存器PWMPER的值相等时,计数器的计数方向改为递减计数,当再次与占空比寄存器PWMDTY的值相等时,输出电平翻转,直到计数器计数到0,完成一个周期的输出。对于左对齐方式,输出PWM的周期=计数器加1的时间* PWMPER对于居中对齐方式,输出PWM的周期=计数器加1的时间 * PWMPER * 2占空比的计数,不仅要看对齐方式,还要看PWM输出的极性,在草稿上画一下,就可以很直观地得出结果。 十六、PWMSDN:PWM紧急关闭寄存器PWM模块中有唯一一个中断,就是在这个寄存器中设定。现在再总结一下PWM的设置步骤:一、选择极性PWMPOL二、选择及设置时钟 PWMCLK PWMPRCLK PWMSCLA PWMSCLB三、对齐方式 PWMCAE 四、是否联级输出 PWMCTL。不使用联级输出的话,就不用管这个。五、周期设定 PWMPER六、占空比设定 PWMDTY七、打开PWM通道PWME 下面是相关的简单程序,把PP0口接上一个发光二极管,可以实现一秒钟亮一次(16M的晶振,不作PLL设置。) #include /* common defines and macros */#include derivative.h /* derivative-specific definitions */ void PWM_init() /选用通道0,输出的频率等于总线的频率PWMPOL=0x00; / 每个周期,先低电平再高电平PWMCLK=0X01; /选择时钟SA/PWMCLK=0X00; /选择时钟APWMPRCLK=0X07; /时钟A是总线时钟的128分频/PWMPRCLK=0X00; /时钟A是为总线时间PWMCAE=0X00; /左对齐方式PWMSCLA=0X00; /时钟SA是A的2*256分频PWMPER0=244; /周期寄存器PWMDTY0=122; /占空比寄存器PWME=0X01; /打开通道0void main(void) /* put your own code here */ PWM_init();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论