基于stm32CubeMX配置PWM舵机并且实现PWM驱动(HAL库)

文章介绍了如何使用STM32F103RBT6和LD-1501MG舵机,通过STM32CubeMX配置时钟和定时器,利用PWM控制舵机转动角度。详细讲解了预分频、PWM参数设置和HAL库函数的应用。
摘要由CSDN通过智能技术生成

PWM驱动简介

STM32CubeMX工程配置

程序编写

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

这里我们使用的是STM32F103RBT6系列,采用幻尔科技的LD-1501MG数字舵机。

还是挺好用的。这里的芯片RBT6 也可以在Cube进行修改,大差不差。

                                                     

 

PWM驱动简介

舵机驱动角度和PWM 脉宽范围有关系,根据LD-1501MG数字舵机的具体对应为500--0度  1500--90度  2500--180度,通过STM32的定时器功能输出PWM波来控制舵机进行转动。

工程配置

首先我们的时钟要选择外部高速时钟,下面是RCC(Reset and Clock Control)全局中断是指在嵌入式系统中,与系统的复位和时钟控制相关的中断功能。也可以使能。

 

 然后系统是映射配置。

 时钟树设置72HZ的频率,2分配。(可以参考下面的时钟树)

 选择定时器3通道1、2、3、4 和定时器4的1、2、3、4为PWM输入模式并且设置先对应的引脚。

  由于我们时钟频率为72HZ,所以预分频为72-1=71,设置装载初值为2000-1=199999详情可以看一下下面的参数。

 

参数作用
Prescaler (PSC - 16 bits value)预分频,定时器计数的频率。当主频为72Mhz,PSC为71时,计数频率为72/(71+1)=1Mhz,即每个周期1us
Counter Mode递增计数或者递减计数
Counter Period (AutoReload Register - 16 bits value )自动重载值,当计数到这个值时,计数器清零,重新计数。计数周期为1us,ARR为19999时,PWM周期为1us*(19999+1)为20ms,就是频率为50HZ

再来看一下PWM的设置参数

 

Pulse (16 bits value)翻转计数值,当计数到达这个值时,电平翻转
CH Polarity输出极性,即计数到达Pulse前的电平状态

 

 然后就可以生成代码啦,注意路径还有格式。

 编写代码

 TIM_HandleTypeDef htim3; 和 TIM_HandleTypeDef htim4;
 这些变量声明了两个TIM_HandleTypeDef类型的变量,即定时器句柄。
 这些句柄用于初始化和配置TIM3和TIM4定时器。

Systemclock_Config配置系统时钟,

初始化TIM3和TIM4定时器,

初始化GPIO引脚。

 

使用了HAL库函数来启动PWM输出。通过调用HAL_TIM_PWM_Start函数,启动了不同定时器。

 HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);:启动了TIM3定时器的通道1的PWM输出。
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);:启动了TIM3定时器的通道2的PWM输出。
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);:启动了TIM3定时器的通道3的PWM输出。
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4);:启动了TIM3定时器的通道4的PWM输出。
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);:启动了TIM4定时器的通道1的PWM输出。
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_2);:启动了TIM4定时器的通道2的PWM输出。
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);:启动了TIM4定时器的通道3的PWM输出。
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);:启动了TIM4定时器的通道4的PWM输出。

循环跑:

 __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, 500);设置TIM3定时器的通道4的PWM输出占空比为500,对应0°位置。
HAL_Delay(1000);:延时1秒,即1000毫秒。
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, 2500);设置TIM3定时器的通道4的PWM输出占空比为2500,对应180°位置。
HAL_Delay(1000);:再次延时1秒。
以上四个步骤分别设置了TIM3定时器的通道4的PWM输出占空比为500和2500,实现了从0°到180°位置的控制。
接下来的代码段重复了上述相同的步骤,但是分别设置了TIM3定时器的通道3、通道2、通道1,以及TIM4定时器的通道4、通道3、通道2、通道1的PWM输出占空比。每次设置占空比后都有一个1秒的延时。
通过这样的循环,不断地设置不同通道的PWM输出占空比,可以实现电机输出轴在不同位置之间的控制。

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用STM32CubeMX配置舵机PWM时,你需要进行以下步骤: 1. 首先,创建两个文件,一个是.c文件,一个是.h文件,可以根据自己的需要进行命名,比如pwm.c和pwm.h。在pwm.c文件中,你可以编写控制舵机旋转的代码。例如,你可以使用SG90_Rotate函数来控制舵机的旋转角度。在函数中,你可以使用switch语句来选择不同的通道,并使用__HAL_TIM_SET_COMPARE函数来设置对应通道的占空比。同时,你可以使用HAL_Delay函数来延时一定的时间。\[1\] 2. 在main.c文件中引用pwm.h头文件,并在int main函数中进行初始化和配置。你需要调用HAL_Init函数来初始化MCU,调用SystemClock_Config函数来配置系统时钟,调用MX_GPIO_Init函数来初始化GPIO引脚,调用MX_TIM2_Init函数来初始化定时器2。在while循环中,你可以调用PWM函数来控制舵机的旋转角度,并使用HAL_Delay函数来延时一定的时间。\[2\] 3. 在pwm.h文件中,你可以声明MX_TIM2_Init函数的原型,该函数用于初始化定时器2,并接受两个参数,分别是arr和pul。\[3\] 这样,你就可以使用STM32CubeMX配置舵机PWM了。请根据你的具体需求进行相应的修改和调整。 #### 引用[.reference_title] - *1* [STM32CubeMX配置PWM驱动舵机](https://blog.csdn.net/qq_53000374/article/details/127765718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32初学入门笔记(2):STM32CubeMX配置STM32输出可调PWM方波](https://blog.csdn.net/m0_73677866/article/details/131025443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值