PWM定时器及其蜂鸣器

ARM体系结构-PWM定时器及其蜂鸣器

一、什么是PWM

1、一般SOC中产生PWM信号都是靠定时器模块产生的。也就是说SOC有个定时器专门生产PWM信号的。
2、PWM(pulse wide modulation 脉宽调制),也就是这是一种信号,这个信号有特定的波形。
3、PWM波形是一个周期性波形,周期为T,在每个周期内波形是完全相同的。每个周期内由一个高电平和一个低电平组成。
4、PWM波形有2个重要参数:一个是周期T,另一个是占空比duty(占空比就是一个周期内高电平的时间除以周期时间的商)。
5、对于一个PWM波形,知道了周期T和占空比duty,就可以算出这个波形的所有细节。譬如高电平时间为Tduty,低电平时间为T(1-duty)。
6、PWM波形有很多用处,譬如通信上用PWM来进行脉宽调制对基波进行载波调制;在发光二极管LED照明领域可以用PWM波形来调制电流进行调光;用来驱动蜂鸣器等设备。

二、PWM波形原理

1、PWM波形其实就是用时间来控制电平高低,所以用定时器来实现PWM波形是天经地义的。
2、在S5PV210中,PWM波形产生有2个寄存器很关键,一个是TCNTB、一个是TCMPB。其中,TCNTB决定了PWM波形的周期,TCMPB决定了PWM波形的占空比。
3、最终生成的PWM波形的周期是:TCNTB×时钟周期(PCLK_PSYS经过两极分频后得到的时钟周期)。注意这个周期是PWM中高电平+低电平的总时间,不是其中之一。
4、最终生成的PWM波形的占空比是:TCMPB/TCNTB

三、PWM主要器件及其原理介绍

1、预分频器与分频器
①两级分频是串联(级联)的,所以两级分频的分频数是相乘的。
②两级分频的分频系数分别在TCFG0和TCFG1两个寄存器中设置。
③预分频器有2个,prescaler0为timer0&timer1共用;prescaler1为timer2、3、4共用;两个prescaler都是8个bit位,因此prescaler value范围为0~255;所以预分频器的分频值范围为1~256(注意实际分频值为prescaler value + 1)。
④分频器实质上是一个MUX开关,多选一开关决定了走哪个分频系数路线。可以选择的有1/1,1/2,1/4,1/8,1/16等。
⑤计算一下,两级分频下来,分频最小为1/1(也可能是1/2),最大分频为1/256×16(1/4096).
⑥在PCLK_PSYS为66MHz的情况下(默认时钟设置就是66MHz的),此时两级分频后的时钟周期范围为0.03us到62.061us;再结合TCNTB的值的设置(范围为1~2的32次方),可知能定出来的时间最长为266548.27s(折合74小时多,远远够用了)。

四、PWM相关寄存器

1、TCNT&TCMP、TCNTB&TCMPB、TCNTO
①TCNT和TCNTB是相对应的,TCNTB是有地址的寄存器,供程序员操作;TCNT在内部和TCNTB相对应,它没有寄存器地址,程序员不能编程访问这个寄存器。
②TCNT寄存器功能就是用来减1的,它是内部的不能读写;我们向TCNT中写要通过TCNTB往进写;读取TCNT寄存器中的值要通过读取相对应的TCNTO寄存器。
③工作流程就是:我们事先算好TCNT寄存器中开始减的那个数(譬如300),然后将之写入TCNTB寄存器中,在启动timer前,将TCNTB中的值刷到TCNT寄存器中(有一位寄存器专门用来操作刷数据过去的),刷过去后就可以启动定时器开始计时;在计时过程中如果想知道TCNT寄存器中的值减到多少了,可以读取相应的TCNTO寄存器来得知。
④定时功能只需要TCNT、TCNTB两个即可
⑤TCNTO寄存器用来做一些捕获计时
⑥TCMPB用来生成PWM波形

五、什么是蜂鸣器

1、首先这是一个发声装置,发出类似于蜜蜂的声音。
2、蜂鸣器里面有2个金属片,离的很紧但没挨着;没电的时候两个片在弹簧本身张力作用下分开彼此平行;有电的时候两边分别充电,在异性电荷的吸力作用下两个片挨着;
3、我们只要以快速的频率给蜂鸣器的正负极:供电、断电。进行这样的循环,蜂鸣器的两个弹簧片就会挨着分开挨着分开···形成敲击,发出声音。
4、因为人的耳朵能听见的声音频率有限制(20Hz-20000Hz),我们做实验时一般给个2KHz的频率
5、频率高低会影响声音的音频,一般是音频越低声音听起来越低沉、音频越高听起来越尖锐。
6、根据以上的分析,可以看出,只要用PWM波形的电压信号来驱动蜂鸣器,把PWM波形的周期T设置为要发出的声音信号的1/频率即可;PWM的占空比只要确保能驱动蜂鸣器。

猜你喜欢

转载自blog.csdn.net/weixin_46089486/article/details/108980401