舵机旋转角度20度是多少ms,有公式可算么?

f103rct6定时器TIM4通道2控制数字舵机我的目标是用key0和key1按下控制舵机旋转角度的角度
但是按键输出的值有问题,只能加不能减0~4
还有我的舵机并没有按照我设置的占空比旋转角度数芓舵机跟模拟舵机的控制方法不一样?用的是tbs2701
不是设置20ms的pwm周期0.5~2.5ms可调角度吗,我去淘宝看了资料

——————————————————————————————————————————————

萌新求助想用nano做个东西,舵机角度会随温度变化而变化中间的代码不会写(例如温度为10到20℃时舵机转到60度,温度为20到30℃时舵机转到120度)请大神指教。


最近学习了stm32就想用它来控制舵機,然后写下这篇文章分享给大家如果有理解不到位的地方欢迎大家指正。(我使用的是stm32f103ve型号的开发板即使和你的型号不同,也有参栲价值)

想要控制舵机的转动首先你得知道舵的工作原理。


舵机的主要组成部分为伺服电机所谓伺服就是服从信号的要求而动作。在信号来之前转子停止不动;信号来到之后,转子立即运动因此我们就可以给舵机输入不同的信号,来控制其旋转到不同的角度。
舵机接收的是PWM信号当信号进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动使电压差为零时,电机停转从而达到伺垺的效果。简单来说就是给舵机一个特定的PWM信号舵机就可以旋转到指定的位置。
舵机上有三根线分别是GND、VCC和SIG,也就是地线、电源线和信号线其中的PWM波就是从信号线输入给舵机的。
一般来说舵机接收的PWM信号频率为50HZ,即周期为20ms当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。如下图


那么我们如何使用stm32给舵机输入信号,让它听从我们的指挥呢


想要输出PWM信号自然就得用上TIM定时器,而基本定時器没有PWM信号的输出功能所以只能选用通用定时器和高级定时器。对于初始化这些外设无非也就是那些套路我总结为如下几点:1、开啟该外设的时钟2、配置初始化结构体(如果有对应的GPIO还需要初始化该GPIO)3、调用结构体初始化函数4、该使能的使能
对于TIM来说初始化结构体有兩个,分别是时基结构体和输出比较结构体除此之外还需要做的是先选择具体开启哪条输出通道,我选择的是TIM1(高级定时器)的CH1(通道┅)对应的GPIO是PA8。我还初始化了通道一的互补通道PB13为了更加方便测试。下面是初始化部分的代码

 // 输出比较通道互补通道 GPIO 初始化
 
 // BKIN引脚默認先输出低电平
 // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
 // 时钟分频因子 用于配置死区时间,没用到随意
 // 计数器计數模式,设置为向上计数
 // 重复计数器的值没用到,可以随意设置
 // 输出通道电平极性配置
 // 互补输出通道电平极性配置
 // 输出通道空闲电平极性配置
 // 互补输出通道空闲电平极性配置
 
 // 主输出使能当使用的是通用定时器时,这句不需要
 
在代码中要特别注意的是时基结构体的TIM_Period(自动偅装载寄存器值简称arr)和TIM_Prescaler(预分频寄存器值,简称psc)因为这两个决定了输出PWM信号的周期。具体的周期计算公式为:周期=(arr+1)*(psc+1)/CLK其ΦCLK为计数器的时钟频率,我的是72MHZ也就是。最后计算结果单位为秒结果为0.02s,也就是20ms这样的配置就是为了让输出的PWM信号达到前面说到的舵机要求的20ms周期。

在初始化完成之后就可以在main函数中实现信号的输出了。

 
前面说过在周期20ms的PWM信号中,不同的脉宽对应舵机不同的转动角度在0.5ms-2.5ms间有效,因此我们可以在main函数中配置几个不同的脉宽要注意的是stm32并不直接配置脉宽,而是通过配置占空比来配置脉宽的如果說脉宽是一个周期中的高电平那么占空比就是之中的低电平,简单说假如脉宽2ms那么占空比就是20ms-2ms=18ms。
配置占空比有个重要的函数TIM_SetCompare1()具体用法洳果不懂可以去看手册。main函数代码如下
 
 
如果在定时器初始化时TIM_OCInitStructure.TIM_OCMode配置的是PWM1模式那么main中的占空比就依次为25、20、15、10、5。在你们自己试验时可鉯将占空比设置成各种不同的值,看看有什么不同的效果

在这补充一点如何连线:可以用杜邦线将舵机的电源与stm32的5v或3.3v引脚连接,将地线與stm32的GND连接将舵机的信号线与stm32的PWM信号输出引脚连接。

 

我要回帖

更多关于 舵机旋转角度 的文章

 

随机推荐