文章目录
- 前言
- 一、舵机是什么?
- 二、STM32CubeMX配置
- 2.1时钟树配置
- 2.2定时器配置
- 2.3生成代码
- 三、代码编写
- 四、测试结果
- 注意:
- 总结
前言
今天我们来学习使用一下舵机,并用STM32CubeMX配置,STM32F407ZGT6来驱动舵机
,那么对于我们使用者来说我们只关心让他如何动起来,我们并不是很关心他的内部结构。
当然感兴趣的大家也可以看看这一篇:舵机详解
一、舵机是什么?
百度百科这样讲:
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。
简单的来说:就是我通过控制PWM波的脉宽从而来控制舵机的转动角度
一般来说:
舵机的控制信号为周期是 20ms (50Hz)的脉宽调制(PWM)信号,其中脉冲宽度从 0.5ms-2.5ms
很明显:脉宽越大,转动角度越大。当然不能超过他最大脉宽,也不能否小于最小脉宽.
以某宝上的SG90S舵机为例
有图有真相,已经说的非常清楚了。
舵机的控制一般需要一个20ms左右的时基脉冲,就是说需要一个50Hz的PWM波,
该脉冲的高电平部分一般是0.5ms–2.5ms。以180°的舵机为例,有如下对应关系
他是按那个顺时针来算的,最左边是-90°,最右边是90°,一共180°,当然也有360°的舵机
0.5ms-------------负90°
1.0ms-------------负45°
1.5ms-------------0°
2.0ms-------------正45°
0.5ms-------------正90°
二、STM32CubeMX配置
那么知道了舵机的驱动方式,我们直接在STM32CubeMX配置就行了,首先RCC和SYS还有时钟树的配置不用多说。最重要的还是定时器。那我们找一个有PWM输出功能的定时器1
2.1时钟树配置
2.2定时器配置
那么我们在定时器这一篇也详细介绍过F407的定时器
STM32CubeMX(02)HAL库之定时器
定时器1是挂在APB2总线上的,说明定时器1的时钟频率是168MHz,并且计数器是16位的,分频器也是16位的。
那么我们把我们定时器1的通道2打开,分频系数为3360,计数值为1000
那么最后定时的时间就是168000000/(3360*1000)=50Hz就是20ms
我们的脉宽设为100,100是相对于计数值1000来说的,也就是100/1000=1/10,就是1/10的占空比,那么就是2ms,就是45°,我们使用默认的引脚PB0就可以了。
2.3生成代码
配置完了我们就生成代码
三、代码编写
通过生成的文件我们看到我们配置的是没有问题的
加的东西很少,我们这里测试就是改变一下占空比,用到了
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,50);这个库函数可以改变CCR的值,就是改变占空比,占空比等于CCR/Counter,这里Couter我们设置为1000.
那么这个程序实现了什么功能,就是每隔500ms,逆时针旋转45°,然后又顺时针旋转45°回来。
四、测试结果
注意:
千万不要用电脑供电,不然电脑USB串口容易烧,因为我们知道电生磁,磁也能生电,舵机里面有电机,电机里面有线圈。电机在正转或者反转过程中会反过来给电路充电,这样的话电流不稳定。所以说舵机最好单独供电,不要用单片机的5V给舵机供电,实际测试过程中用单片机的5V给舵机供电,发现单片机的电源灯时亮时暗,说明电流很不稳定。
改为单独供电后,工作稳定,非常有力。
总结
学会了如何使用舵机之后我们可以利用舵机进行一下小制作,比如说简易小车,智能门锁,远程关灯等(懒人福音)。这就需要大家发挥自己的聪明才智,不断探索了。
参考博文:
1.舵机详解
2.MG90S舵机驱动原理和程序代码