学习朱有鹏老师PWM定时器课程后的总结
S5PV210共有5个PWM定时器,分别是PWM定时器0~4
PWM定时器0~3都有外部引脚可以输出PWM波,PWM定时器4没有外部引脚引出。
PWM定时器的时钟来源是PCLK-PSYS,66MHz.
整个PWM定时器外设可以分为以下几个部分:预分频器;分频器;控制寄存器;计数寄存器(TCNTB);比较寄存器(TCMPB);电平翻转器;死区发生器。
PWM定时器0-1拥有以上所有部分。PWM定时器2-3没有死区发生器。PWM定时器4没有TCMPB,电平翻转器,死区发生器(没用过定时器4,但我估计定时器4没有PWM功能,只拥有普通定时功能)。
预分频器:预分频器总共有两个,定时器0-1共用一个,定时器2-4公用一个。预分频器对PCLK-PSYS时钟进行第一次时钟分频。
分频器:分频器则是每个定时器都有一个。分频器对PCLK-PSYS时钟进行第二次分频,且分频后时钟就是定时器真正使用的时钟。
控制寄存器:主要控制定时器的开关,重装载,手动更新,电平翻转,死区开关。
TCNTB:TCNTB中存放的是定时器重装载值。
TCMPB:TCMPB中存放的是定时器产生PWM波时控制占空比大小的比较值。
电平翻转器:比如说一开始设定的PWM波是先高电平后低电平,通过电平翻转器,可以使PWM波翻转。
死区发生器:普通嵌入式工程师估计用不到。用于生成死区的。往往应用在大功率开关电源,逆变器等领域。
210的TCNTB和TCMPB的设计思路:这两个寄存器并不是在定时器工作周期内用到的,在定时器工作时,真正发生计数工作的是TCNT寄存器,真正用于比较的是TCMP寄存器。设计TCNTB和TCMPB寄存器的目的,是为什么方便修改重装载值和比较值。如果没有这两个寄存器。那么当定时器在运行时,只要程序中发出了修改重装载值的指令,对重装载值进行了修改,由于没有TCNTB作为缓冲,则该重装载的值会立即写进TCNT中,如果此时TCNT正在向下递减计数,修改重装载值后,定时器马上就会跳到该重装载值递减计数。这就会导致当前定时器运行周期被破坏。同理TCMPB也是。有了TCNTB之后,定时器每次递减计数到0,就会从TCNTB中把重装载值写进TCNT中。
电平翻转器的作用,主要是计算PWM波的占空比。比如重装载值是300,需要占空比为30%,则在写程序的时候就给比较值写300*0.3=90(一般不知道到底引脚输出是先高后低还是先低后高的PWM的情况下,写90输出的占空比不是30%就是70%)。然后观察实际引脚的输出效果。如果发现不对,可以通过计算正确的比较值后修改程序得到正确的占空比。也可以直接打开或者关闭电平翻转器,就可以改变占空比。
蜂鸣器:内部有两个金属片,距离很近,但是没有挨着。不通电时,两块金属片在弹簧的作用力下分开,彼此平行。通电的时候,两边分别充电,在异性电荷的吸力作用下会闭合。因此只要通入一定频率的PWM波,让金属片不断的闭合打开闭合打开,类似与鼓掌的动作,就可以让蜂鸣器发声。并且通过改变频率,还可以改变蜂鸣器的音调。