基于stm32处理器的PWM 异步驱动蜂鸣器

来源:互联网 发布:mac视频下载插件 编辑:程序博客网 时间:2024/05/17 01:56

基于stm32处理器的PWM 异步驱动蜂鸣器研究


这两天应工作需求研究了一下M3处理器的PWM(脉宽调制)实现对蜂鸣器的异步控制。鉴于阻塞式对蜂鸣器的控制比较耗时,影响用户体验,因此对原有阻塞式控制方案进行了改善,提出了异步控制蜂鸣器的实现方法。以下主要对实现中需要注意的重点知识以及所遇到的问题进行了讨论。

PWM波利用M3的定时器产生,出于对平台资源的有效利用,选择定时器1用来输出脉宽调制信号。这就引出了本文的重点,M3定时器的应用。

M3的定时器资源一共有11个,其中两个高级定时器(Timer1和Timer8)、4个通用定时器(Timer2-Timer5)、2个普通定时器(Timer6-Timer7)、2个看门狗定时器以及一个SysTick定时器。相对于普通定时器来说,高级定时器的功能更为强大,相对应的应用自然更为复杂,这个主要体现在电机控制中,比如直接输出具有调节死区时间的PWM。不过本项目的应用不涉及此点,也就不做讨论了。

M3的高级定时器理解为一个可供用户编程的预分频器驱动16bit的计数器。主要功能包括利用它的输入捕获模式可以实现对输入信号脉冲宽度的测量,利用PWM和输出比较模式可以实现波形输出。

M3具有复杂的时钟系统,它的外设都有自己独立的时钟控制,这就造成在应用上相对比较复杂一些,但是这为系统在降低功耗方面带了不小的优势。在实际应用中我们可以关掉那些不用的外设,这样就可以大大的降低功耗。因此,要想熟练的掌握M3,就必须对它的时钟树要很清楚,定时器的应用当然也不例外。我们就从时钟开始一步步的揭秘M3定时器的奥妙之处。

高级定时器1的时钟信号流向通过图1可以清楚的看到。M3处理器使用外部8M高速时钟,然后通过内部的倍频因数为9的锁相环将频率加倍到72M,将此时钟作为系统时钟。系统时钟通过分频因数为1的AHB预分频器将72M时钟提供给AHB总线,AHB总线通过分频因数为1的APB2预分频器将72M的时钟提供给APB2总线。APB2总线将时钟通过一个倍频器,与其他倍频器不同的是这个倍频器根据APB2分频因数有系统自动设置,如果APB2分频因数为1,则保持时钟不变,否则进行2倍频。通过倍频之后,接将72M的时钟信号提供给高级定时器1,而时钟信号在定时器内部又通过PSC的分频来驱动定时器1的计数器。我们对定时器的操作实际上主要是通过设置PSC的分频值和计数器的装载值来达到准确的定时和输出需要的波形等功能。。

  

图1 Timer1的时钟信号流向

理解了定时器的工作原理及时钟信号工作情况后,我们就来具体分析一下如何应用。从上文可以看出要想让M3的定时器工作首先必须得打开时钟,因此在系统进行初始化后得到72M的时钟后,打开Timer1的时钟。这个可以通过设置PB2ENR寄存器的第二位实现,后者也可以利用库函数RCC_APB2PeriphClockCmd直接使能。接下来就需要设置计数器初始装载值TIME1_ARR、分频器PSC,具体设置根据公式1进行设置。例如定时器1输入时钟为72M时,设置PSC(预分频器)为7199,当ARR(计数器装载数)为9时,一次中断我们就可以得1ms的定时。至于怎么配置中断函数以及中断函数然后编写此处不做赘述,详情可以参考STM32中文参考手册。

Time = (1+ARR)*(1+PSC)/Fsys

公式1 定时器时间计算公式

接下来讨论一下PWM的产生,在STM32定时器1-8中除了Timer6和Timer7不能产生PWM外,其它都可以产生。高级定时器1和8可以产生7路的PWM波,其它的可以产生4路。对于波的输出频率也利用公式1进行计算,至于波的占空比取CCR/ARR。我们以图2中3路不同占空比的波来看,它们的频率都一样约为1.2khz,计算值与测量值存在13hz的误差,这个是处理器本身的精度造成的。对于第一个波形来说ARR = 59999、CCR = 30000,就得到了约等于1.2Khz且50%占空比的波。而第二个波的ARR = 59999、CCR = 15000,就得到了频率约为1.2khz且25%占空比的波。

图2 Time1 PWM波仿真图

 

既然需要输出波对Beep进行控制,那么就需要进行IO口的设置,基本IO口的设置大家应该比较清楚,这里只介绍比较容易出错的地方,这就是关于管脚重映射,具体设置见图表1。由于在本项目中Beep是连接到PA11的,由表1可见PA11没有完全映像,因此对它只进行复用设置或者设置成部分映像。这里对时钟的设置除了打开PA口时钟,还需打开复用时钟。

表1 定时器1管脚复用功能映像


除了以上设置之外当然还有一些基本设置比如设置计数器向上加模式、极性为正、输出使能、使用PWM模式1或者模式2、使能预装载寄存器等基本设置。

因为要实现异步控制,因此还利用了M3的定时器2,利用定时器2对PWM波的输出进行控制。定时器2的应用与1类似,只需配置成定时模式即可。根据需要定时一定的时间,在中断处理函数中关掉定时器1即可。

转载请注明出处。

0 1