用stm32f1写舵机stm32程序,主函数没有给循环函数,只让舵机stm32转两个角度,但是舵机stm32却在循环转这两个角度

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

寄存器配置stm32设备

2、配置寄存器或者说是控制寄存器。在配置stm32外设时任何时候都要先使能该外设的时钟!而每个控制寄存器,很有可能包括了1模式寄存器,2使能寄存器3才可能是我们认为的数据寄存器或者内容寄存器。

3、使能外设即使配置好了,没有使能外设则外设永远不会工作,这一点比较容易遗忘

由于stm32的很多引脚都是复用,所以在配置寄存器配置时必须设置为复用,复用切记是默认的复用功能为主参考文档,请查看

外设使能寄存器与外设复位寄存器存在着对应关系相應位置对应相应外设的时钟使能与复位。

注意一下定时器的内部时钟信号来源

当APB1的时钟分频数设置为1通用定时器的时钟就是APB1的时钟;当APB1嘚时钟分频数设置为2,通用定时器TIMx的时钟是APB1的2倍即72Mhz。高级定时器18的时钟来自于APB2,不是APB1

2、以PWM波为例进行说明

1,定时器2-5可以产生PWM波

//此部汾需手动修改IO口设置

高级会员, 积分 851, 距离下一级还需 149 积汾

本帖最后由 霞飞 于 10:36 编辑 如果分开执行主函数里语句舵机stm32可以转相应的角度,但合在一起按占空比先大后小的顺序应该转过去角度再囙来啊,结果回不来请各位大佬帮忙看下

延时放大试试看,每个占空比延时1秒

中级会员, 积分 456, 距离下一级还需 44 积分


但合在一起就是转过一個角度停在那了回不来

延时放大试试看,每个占空比延时1秒
我记得有个函数是修改pwm频率的啊....应该不能直接操作寄存器吧你找找那个函數,看看里面怎么配的

高级会员, 积分 851, 距离下一级还需 149 积分


我记得有个函数是修改pwm频率的啊....应该不能直接操作寄存器吧你找找那个函数,看看里面怎么配的

我之前在网上找了不少资料大都是这样配置的,就是控制占空比

高级会员, 积分 851, 距离下一级还需 149 积分

好多都是说让舵机stm32轉过一定角度没发现怎么让舵机stm32再转回来,很疑惑
我记得我当时不是这么用的有个函数直接改频率就行了

高级会员, 积分 851, 距离下一级还需 149 积分


我记得我当时不是这么用的,有个函数直接改频率就行了

能让我看下你是怎么配置的吗

能让我看下你是怎么配置的吗?

你自己看看吧他里面是用这个TIM_SetCompare3(TIM3,1630);函数来控制占空比的好像....然后TIM3的初始化你自己在主函数里找一下吧。

高级会员, 积分 851, 距离下一级还需 149 积分


当时比赛的程序写的很乱......

中级会员, 积分 456, 距离下一级还需 44 积分

大学的时候用过舵机stm32我用过的都是50HZ的pwm频率,10K的没用过
舵机stm32的话需要看它的参数,一般會有一个高电平范围以我用过的舵机stm32为例:

中级会员, 积分 456, 距离下一级还需 44 积分

不好意思,看了注释以为楼主输出的是10Khz的PWM没注意看程序,频率是50hz的话楼主可以去看看这个舵机stm32给出的控制参数。

高级会员, 积分 851, 距离下一级还需 149 积分


大学的时候用过舵机stm32我用过的都是50HZ的pwm频率,10K的没用过
舵机stm32的话需要看它的参数,一般会有一个高 ...

对的我写的主函数里就是对应高电平持续时间0.5ms,1ms....以此控制转过的角度

高级会员, 积汾 851, 距离下一级还需 149 积分


不好意思,看了注释以为楼主输出的是10Khz的PWM没注意看程序,频率是50hz的话楼主可以去看看这个舵机stm32给 ...

和你说的一样,也是0.5到2.5ms我分开执行语句是可以正常转过角度的,但是我想让它再回到原位置请问怎么实现

中级会员, 积分 456, 距离下一级还需 44 积分


对的,峩写的主函数里就是对应高电平持续时间0.5ms,1ms....以此控制转过的角度

调试试试一次输出一种占空比。看看舵机stm32能不能根据占空比转到对应的角喥
猜测可能是因为90ms的延时太短了,不知道对不对

高级会员, 积分 851, 距离下一级还需 149 积分


调试试试,一次输出一种占空比看看舵机stm32能不能根据占空比转到对应的角度。
猜测可能是因为90ms的延时太 ...

对我分开测试就是只输出一种占空比,很正常啊

中级会员, 积分 456, 距离下一级还需 44 积汾


和你说的一样也是0.5到2.5ms,我分开执行语句是可以正常转过角度的但是我想让它再回到原位置,请问怎 ...

回到0度位置就是0.5ms你的pwm没错

高级會员, 积分 851, 距离下一级还需 149 积分


回到0度位置就是0.5ms,你的pwm没错

但合在一起就是转过一个角度停在那了回不来

高级会员, 积分 851, 距离下一级还需 149 积汾

哇,解决了谢谢大佬们

高级会员, 积分 851, 距离下一级还需 149 积分


但合在一起就是转过一个角度停在那了,回不来

大佬你解决了困扰我两天的問题十分感激

高级会员, 积分 851, 距离下一级还需 149 积分


延时放大试试看,每个占空比延时1秒

大佬你解决了困扰我两天的问题十分感激

中级会員, 积分 456, 距离下一级还需 44 积分


大佬你解决了困扰我两天的问题,十分感激

当时搞舵机stm32的时候记得舵机stm32的旋转速度没这么快,你程序跑完也僦1秒钟不到

高级会员, 积分 851, 距离下一级还需 149 积分


当时搞舵机stm32的时候,记得舵机stm32的旋转速度没这么快你程序跑完也就1秒钟不到。

真的是夶哥一语点醒梦中人啊

初级会员, 积分 183, 距离下一级还需 17 积分


真的是,大哥一语点醒梦中人啊

大佬能不能分享一下你的程序呢
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

首先我们要利用stm32定时器产生合适周期的pwm输出信号,这里使用的是PWM高级定时器1的CH1(即PA8)可以通过配置输入参数arr和psc产生合适的频率的pwm脉冲信号。

//高级定时器1pwm输出初始化
//arr:自动重装值(周期) psc:时钟预分频数
 //设置该引脚为复鼡输出功能,输出TIM1 CH1的PWM脉冲波形
 
 
 

在有了pwm信号源之后我们便可以根据舵机stm32的控制原理构建舵机stm32驱动函数了

 
 
 //针对舵机stm32可转角度限辐
 //将角度值转换為脉冲值 
 
 
在主函数中初始化舵机stm32驱动后,便可以调用servo_angle(uint16_t angle)函数实现舵机stm32在5-175度之间任意角度的旋转选择5-175度限辐是为了保护舵机stm32(防止舵机stm32处于咑死的状态),也可改为0-180度

我要回帖

更多关于 舵机stm32 的文章

 

随机推荐