你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32控制舵机转动_从0到1

[复制链接]
STMCU小助手 发布时间:2022-11-25 14:06
MG90S舵机
如图所示,舵机有三根线,红色接5V正极,黑色接地;黄色为信号线,接收PWM信号

8b9227d0e9874d9994fcaee9d912ca7c.jpg

实物图

9ec540d0713c4bafafab0fb680229cf9.jpg

输出PWM控制舵机
STM32控制舵机,总的来说是向舵机信号线发送周期为20ms的PWM(Pulse Width Modulation 脉冲宽度调制)信号来控制舵机转角,PWM脉冲的占空比决定了舵机的转角位置,对应关系如下图;

5c0787f2ee1c439691168c4195543b8f.png

STM32靠定时器TIM实现PWM信号的输出,STM32有多个定时器,分为通用定时器和高级定时器,每个通用定时器都可以输出4路PWM,本文采用TM2_CH4,及定时器2的第4路PWM;对应STM32F103C8T6上的PB11引脚;

创建工程输出PWM
本文使用STM32CubeMX创建工程,更加简单高效,即便对单片机不熟悉也可操作成功;

一、打开STM32CubeMX,新建一个工程,搜索并选择STM32F103C8,然后start project;

eeeec04bd7ad4471bd59b8c827f59d84.png

二、进行基本设置,配置RCC、SYS、HCLK

RCC -> 设置高速外部时钟HSE 选择外部时钟源
SYS -> 选择Debug方式 serial wire
HCLK -> 设置为72MHZ

25780c297e424bb1ad28900218ed3255.png
48835eaabb59415f82f22f5a5eed7927.png

be6004363d9f4dedbd5b2c0c1740f630.png

三、设置定时器

1.选择TIM2
2.选择内部时钟源
3.设置Channel4为PWM模式
4.右侧对应管脚自动设置为复用模式

a07a765fb4114ac2a3313f51c8423d80.png

设置定时器参数
控制舵机我们需要设置PWM输出一个周期时间为20ms的信号,定时器时钟为72Mhz
1.预分频Prescaler设置为720-1,则单周期为72M/(Prescaler + 1) = 100Khz(0.01ms)
2.以20ms为周期,则Counter Period为20ms/0.01ms - 1 = 1999
3.此处可设定默认脉冲宽度为0.5ms,及0.5/20*2000 = 50

baf8eb22dd2840ecbf7105fa69d164ca.png

四、接下来设置输出格式
1.添加工程名PWM
2.修改IDE为MDK-ARM V5
3.在Code Genetator中设置包含库与工程格式

49b330d2d3554e41ae3cb8e37baa5e2a.png

d540349764bd4aa8b11270431fd5dcae.png

至此STM32CubeMX已设置完成,接下来GENERATE CODE,并打开文件;
在main函数中启动定时器,并输出一定的脉冲的PWM信号即可驱动舵机;

五、修改代码


在main.c文件相应位置处添加如下代码
1.启动PWM输出
2.输出PWM信号

  1. /* USER CODE BEGIN Includes */
  2. #include "stdio.h"
  3. /* USER CODE END Includes */

  4.   /* USER CODE BEGIN 2 */
  5.   HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); //启动定时器
  6.   int compareValue = 150; //将compareValue设置为50、150、250分别对应0°、90°、180°
  7.   /* USER CODE END 2 */

  8.   /* Infinite loop */
  9.   /* USER CODE BEGIN WHILE */
  10.   while (1)
  11.   {
  12.     /* USER CODE END WHILE */

  13.     /* USER CODE BEGIN 3 */
  14.             __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, compareValue); //输出PWM信号
  15.                 HAL_Delay(10);
  16.   }
  17.   /* USER CODE END 3 */
  18. }
复制代码

添加完以上代码之后,编译,然后通过JLink将程序LOAD到STM32F103C8T6,将舵机信号线连接PB11(TIM2_CHANNEL4)口,并接上电源,舵机即可转动到指定角度;由以上定时器设定可知,compareValue值50、150、250 对应 0.5ms、1.5ms、2.5ms 对应 0°、90°、180°;若想让舵机连续转动,在50~250内循环改变compareValue值即可;

六、接线
开始时用单片机的5V输出给舵机供电,舵机哒哒哒响,但是不转,怀疑是供电不给力,单独供电后驱动成功;
1.JIink连接电脑和单片机,下载程序到单片机并给单片机供电
2.舵机黄色信号线接STM32F103C8T6引脚PB11,接收PWM信号
3.舵机红色电源线接稳压板5V输出正极,舵机黑色地线需与单片机地相连

a92ea509c14347ac9134c4ab7338fdce.png

调试
实操中可能会出现各种各样的问题,以下有几种调试方法

一、舵机测试

调试模块一端接电,一段接舵机,手动模式下,舵机会跟着旋钮同步旋转,可以用来测试舵机是否健康;

79cc39aeab6141a7a39e150c8b2d409f.png

二、串口调试助手

8662dba698744fe88a00b99b0e14a289.png

可下载串口调试助手,用ttl转USB模块连接电脑,在特定位置进行打印输出,检查程序是否按预设运行

————————————————
版权声明:DDHEJKS


收藏 评论0 发布时间:2022-11-25 14:06

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版