话接上贴,上贴说完了如何改变 STM32f0的运行主频,以及各外设的主频。这回我们来说说我们项目的第一个应用子例:输出PWM控制舵机。 PWM这东西不但可以用来输出脉宽信号控制舵机转向,像stm32f0这中没有DA功能的片子来说,有PWM就可以靠外部 电路实现DA功能,很简单,加一个电阻电容即可,有时候,这种方式比有内置DA的片子更可靠,输出更精确。 要控制舵机,我们就首先要了解舵机是啥,舵机有的人又叫伺服电机,这种电机分为多种,但工作原理差不多,舵机主要用在控制角度的场合,你像航模飞机中控制机翼或者尾舵,一般都是用那种蓝色的轻量小舵机实现的,舵机这东西在很多场合用得好的话,实现的效果可以说会惊喜无限。。。扯远了,有关舵机的更详细介绍和应用场合,这个度娘说的会比我清楚多了,我就简简单单的说说我们控制方式吧,舵机有三根线, 电源、地线、控制线,如下图:
这三根线中电源两根线我不用说了吧,这你得看你手头舵机需要多高的电压,就接多高的电压就行。信号线接输出PWM信号的 单片机引脚,玩的话这么接可以,但要注意到stm32f0是3.3V的io,舵机如果5V的话,最好还是中间加一级三极管电平转换电路,很简单的,类似控制蜂鸣器那种。
舵机转动的角度受PWM的脉宽控制,大部分舵机都下图的关系来的:
很明确,很简单,对吧,我们只要控制PWM的脉宽就行了,但是PWM的频率可不能改变啊,要不然和舵机内部的基准对不上号,舵机就不识别控制信号了! 查阅了stm32f030R8的各类手册,发现我们之前用的 tiM6定时器并没有PWM输出功能,这可怎么办呢?我们只能改用有PWM输出功能的定时器来玩这个了,当然虽然用TIM6+IO翻转方式也可模拟PWM输出控制舵机,但这种方式需要考虑的事情比较多,在实际工程中,除非是为了省钱,否则几乎不会这么用。我们用带PWM输出功能的TIM3控制PB4输出PWM好吧。。。这样就需要我们从零开始建立一个新的工程了。。。
这里我们把led当成一种测试手段,当pwm输出之后,led亮来表示程序正常好吧,这样我们就从之前的led那个工程开始建立pwm这个工程,拷贝led文件夹,重命名为PWM+LED。打开工程,在User目录下新建两个文件:
将.c文件添加进User组中:
在timer3_pwm.c中输入:
下面详细讲解各行的作用:
第4、5行开启PB、TIM3的时钟,这个很简单,对着***rcc.c文件来就行,7-13行对PB4进行了配置,将PB4配置成了复用功能输出,推挽输出,带上拉输出,这其中的速度可以随便设,因为我们这里用的输出为20ms的信号,50Hz而已,对吧。但要注意,这里面的推挽、带上拉是一定要配置的,因为根据io的端口内部图来看:
复用功能输出是经过这两级的,如果要带负载,而外面有没有上下拉电路,就一定需要这么设置。
下面一行是一个重点,超级重要的一点
我在这里再次截图方便说明,就是这么一句话搞错了,我调了一个上午的pwm都没有出来!!!,这句话的作用是配置PB口的第四个引脚为TIM3的服用功能输出。那里出了问题呢?就是第二个参数!!!我随手将GPIO_Pin_4传了进去,调了一上午,各类参数,每个寄存器的手册都详细算了、看了,还是没出来波形,这让我很无奈,上午调了一上午,没结果,中午睡了一觉,起来后接着调试,后来忽然之间想起来之前搞stm32f103的时候,外部中断线用的是xxx_Sourcexxx之类的,这里有没有呢?就查找了stm32f0xxx_gpio.h文件,果然有!!!,将GPIO_Pin_4改成15行之后,妹的!立马出来结果了!!!后来我查看了这两个参数的最终宏定义如下:
果然不一样,是吧,怪不得搞错了配置失败呢,大家这里一定要注意!!!好了,接着说,17-23行是配置定时器的基本功能,这里配置的分频比是4799,最终分频系数是4800,主频48MHz的话,就得到定时器时钟为10k对吧。。。下面的TIM_Period就是设置ARR寄存器,我们都知道,PWM的频率有ARR控制,占空比由CCRx控制,这里经过计算,我们需要20ms的频率,这里就填200对吧。 26-30行对定时器的PWM输出进行了配置,TIM_Pulse设为100,我们暂时让pwm输出50%的占空比,最后两行打开了定时器3,PWM波形也就自动从PB4口流出来了,我们接上逻辑分析仪查看一下:
发现波形频率、占空比都是我们需要的,这时候接上舵机,就可以看到舵机转动了,由于我手头只有一个舵机,是6V的,但没有6V的电源,插到板子上电压太低舵机没法工作,所以就不能演示了,去年电设时候用的是没有问题的,这里不放心,我们在改一下,可以让pwm输出10%的波形看看,我们可以使用内部函数
就可以了,这时候再看输出,就会发现确实是10%了:
怎么样,是不是很方便啊,用固件库有的时候,就是这么方便,哈哈。。。 这时候,我们就可以用ad检测光照或者湿度啥的,然后控制类似窗帘啦,门窗之类开关了,这样,也就实现了初步的只能家具功能。 现在智能家居虽然喊了这么多年,很多东西也都已经做烂了,但远远没有实现这个设想,这个浪潮还没有卷起来,下一个信息革命物联网又来了,这样,这俩一结合,就带给我们无限的遐想和无限的可能了,各类 电子工程师们,好好把握这次物联网革命,成为一个弄潮儿,爬到浪尖上,就可以衣食无忧,腰缠万贯了。。。
至此,pwm篇结束,下篇请听:最常用的 通信口:uart
|