前情提要
对于市面上的舵机,所要求的周期基本都为20ms。
对应的转动角度,0°->0.5ms,180°->2.5ms
CubeMX配置单片机
1.通用配置
首先就是设置高速时钟,选择第三个。
然后就是设置Debug模式了,这里是serial wire 模式,一般我们就用STLINK进行调试烧录就行了。当然了STM32也有无线烧录器,但是太贵了,我买不起(bushi)。
2.时钟设置
首先是设置时钟频率,直接设置最大72MHZ就好了,这里时钟频率越大,单片机的运算速率也就越大,所以我们在使用F1或者其他种类的单片机时,当然是单片机的运算速率越快越好。
时钟源选择内部时钟 Internal clock 。我们这里pwm输出引脚就选择Channel1吧,如图进行设置,然后可以在右图单片机的示意图中看到PA8点亮了。所以PA8引脚就是TIM1的CH1的输出引脚,当然一个引脚常常是有多种功能的,此处就不过多展开了。
再看后续的PSC(预分频系数)与ARR(自动重载值)
我们要求舵机转动的周期为20ms也就是50HZ
那么f=72000000/(PSC+1)*(ARR+1) 这里72000000就是前面设置的72MHZ了。
那么如何理解PSC和ARR呢?
PSC就相当于将原本的72M分为PSC+1份,ARR就是吧PSC又分了为ARR+1份;
3.其他设置
单片机的开发一般主流为KEIL 或者说配套的cubeIDE 或者说小众的Clion.
对于toolchain第一种软件要选择MDK-ARM,后两者就选择CubeIDE
注意:项目名只能是英文,不能有空格
在设置时最好将头文件与代码主题分离,便于后续大项目的操作,或者“借鉴他人代码”。
代码解释与占空比的理解
这里作者使用HAL库进行开发。
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1)开启时钟;
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,15)设置引脚输出电压;
占空比就位这个函数最后一个整数值15/200,此时占空比就位7.5%。
即占空比=x/ARR,那么前面说的0°对应的0.5ms又是什么呢?
就是计数器的周期(1/f)乘以占空比。