stm32HAL库输出pwm控制舵机(数字舵机),舵机脉冲宽度和资料的角度对应不上的问题

stm32型号:stm32f103c8t6  最小系统板,需要自己加上按键

舵机型号:DS3230(30KG)-270°

首先回答问题:舵机脉冲宽度和资料的角度对应不上的问题,可能是定时器的时钟源频率不对,看看这里时钟树有没有配对

接下来是具体配置

目标是通过PB11上的按键,按下一次改变一次舵机角度(舵机角度自己定义),以下分为两部分:一是GPIO配置二是TIM配置

GPIO配置

 

 1+2.直接到图形界面:单击PB11,设置为引脚输入模式(因为要检测电平)

3.双击配置

4.设置为引脚输入

5.让引脚初始状态为高电平(等下按键一端接PB11,一端接GND,一旦按下,PB11的高电平变成低电平,即检测到按键按下)

6.PB11的名字标签为 key

    TIM配置

 1.首先配置RCC

2.配置为外部时钟输入,外部晶振

 SYS配置如上

1.TIM这里配置TIM3           

2.定时器开启内部时钟                     

3.设置为PWM模式,通道一

  接下来是计算pwm频率

 选择时钟频率为     CK_PSC = 72MHz(这个很重要),由于舵机一般是50Hz控制频率,一个周期是20ms,所以Freq = 50Hz , PSC = 71 ,  推得ARR = 19999

再由下图(270°舵机对应脉冲宽度表)

 可知,CCR应该是在500 - 2500 区间范围内,回到cubemx配置

 1.这里PSC为71

2.向上计数

3.ARR为19999

PWM模式1:在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平,否则为有效电平。
PWM模式2:在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。

 我们这里所说的有效和无效取决于我们需要的电平极性,看下舵机的控制图


 

在一个周期内只需要一点点高电平,所以选择pwm模式2 , 并把有效电平设置为低电平

解释如下

接下来是配置

 1.pwm模式2

2.有效电平为低电平,CH polarity 意为频道有效电平

3.这个是占空比,这里可以给个初始值,也可以不给,程序里面再定义设置

这里配置ok了,接下来看看时钟源的配置

 设置好各个分频,确保最后定时器的时钟源配置是72MHz

 

 整好剩下的配置,就可以生成代码了,接下来是

代码部分

 初始定义

		HAL_TIM_PWM_Start (&htim3 ,TIM_CHANNEL_1 );

 一些必要的函数(hal库给定的)

 按键检测部分

			__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_1,pwmval);

1. 按下后各部分操作

2.该函数用于改变占空比,以使舵机改变角度值

接线:PB11接按键,PA6接舵机信号线(由cubemx获得,他会自动配置对应定时器的复用引脚)

最终现象是,按下按键(PB11位置的)一次,舵机改变一次角度

  • 8
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值