富士通MB95F636H输出PWM
终于毕业了,想想要不是毕设导师不让我实习,我可能也不会进入这一行。还好之前做过一些竞赛,所以逃脱导师魔爪后很快就找到了一份单片机的工作。
PWM
进入公司的第一个任务是做软启动,就是让电机慢慢转起来。学过单片机的可能马上就能想到,这不就是单片机吗!然后我就屁颠屁颠的去看这款富士通636H的数据手册了。
PPG
手册上说636H芯片使用PPG输出PWM波。然后万事找百度,好像只有富士通的单片机有PPG。。。好在官方给出了说明。
The 8/16-bit PPG is an 8-bit reload timer module that uses pulse output control based on timer operation to perform PPG output. The 8/16-bit PPG also operates in cascade (8 bits + 8 bits) as 16-bit PPG.
用我蹩脚的英语翻译一下大概意思是,8位/ 16位PPG是一个8位重载定时器模块,它使用基于定时器操作的脉冲输出控制来执行PPG输出。 8位/ 16位PPG也以16位PPG级联(8位+ 8位)。
然后看他如何产生PWM,和一般产生PWM的方法是一样的!
寄存器配置
这款单片机一共有3个通道,6个输出,分别是PPG00、PPG01、PPG10、PPG11、PPG20、PPG21,下图显示了各个寄存器的功能。
PPS寄存器用来配置PWM周期,PDS寄存器用来配置PWM的占空比,即占空比=PDS/PPS。PPGS和REVC的每一位都代表一个输出,即bit0表示PPG00,bit1表示PPG01,以此类推。当PPGS对应的位为1时启动该输出的计数,即开启PWM模式。REVC表示输出是否反相,对应位为1则该输出反相,否则不反相。
PC寄存器是最重要的寄存器。PCn1和PCn0的配置略有不同,毕竟PCn1是能成为16位PPG高位的存在。
下图是PCn1配置寄存器的各位功能,其中bit6和bit7无意义。
下图展示了PCn0的各个位的功能。
配置好这些寄存器就能输出PWM波了。
PC11 = 0x0b;
PPS11 = 100;
PDS11 = 20;
REVC_REV11 = 0;
PPGS_PEN11 = 1;
上述代码就演示了如何利用PPG11输出一个8分频,占空比为20%的PWM波。
需要注意的是,636H提供了两套引脚输出PPG。对SYSC_PPGSEL进行配置。下图显示了不同的配置对应的引脚 。
利用定时器产生PWM
虽然产生了PWM,用示波器看也没问题,但是!驱动不了电机!看了原理图,不知道是不是一段高电平,一段PWM所以无法驱动原因。可是板子都打好了,我又不能改引脚,怎么办。只能自己造PWM了啊。
其实自己造PWM很简单,就是使用定时器,在定时器中翻转点评就可以了,我写了两种方法。
第一种,定义一个短时间t的定时器,然后定义进入多少次定时器为一个周期。比如定义100次为一个周期,前20次输出高电平,后80次输出低电平,那么该PWM的周期就为100×t,占空比为20%。这种方法的优点是无需重复配置定时器,缺点是无法实现无级调节占空比。
第二种,进入定时器中断后输出高电平,然后配置定时器时间,改变下一次进入定时器中断的时间,下一次进入定时器中断后输出低电平,然后重新配置定时器时间。比如这一次进入定时器,先置高电平,然后配置定时器时间为20ms,下一次进入定时器中断后置低电平,然后配置80ms,这样就能产生一个周期为100ms,占空比为20%的PWM波了。这种方法的优点是能够实现无级调节占空比,缺点是每次都需要重新配置定时器,有些单片机在定时器运行过程中是无法更改定时器配置的。
经过测试,第一种方法能够完美实现软启动的要求,第二种方法会使灯先亮,然后变暗再缓缓变亮,分析原因可能是发光二极管导通电压比较大,而第一种方法一开始就输出比较大的占空比(5次中断为一周期,最低也有20%的占空比),所以没有这种现象。