直流马达驱动_PWM加减速(STM32F4 CubeMX)

一、前期准备
单片机:STM32F407VET6
开发环境:MDK5.14
库函数:STM32Cube_FW_F4_V1.16.0
直流电机模块:淘宝有售
在这里插入图片描述在这里插入图片描述
二、实验效果
1)按键KEY1按下,正转->反转->停止,循环下去;
2)按键KEY2按下,PWM增加5%,一直加到100%;
3)按键KEY3按下,PWM减小5%,一直减到0%。
4)PWM波为20K,正转启动要到30%,反转启动要到50%,

三、驱动原理
直流有刷电机的驱动十分简单,通电即可转动。运用H桥可以直接驱动电机正反转。
在这里插入图片描述
当Q1、Q4导通,电机正转;Q2、Q3导通电机反转。驱动电路使用淘宝上的H桥模块
在这里插入图片描述
逻辑输入的IN1、IN2为OUT1与OUT2的控制脚。IN1、IN2电平相反时候,电机实现正反转;IN1、IN2电平相同时,电机停转。

CubeMX TIM2配置如下:
在这里插入图片描述
需要完整工程的请加QQ:1002521871,验证:呵呵!

四、驱动代码
motor.h

#ifndef __MOTOR_H__
#define	__MOTOR_H__
#include "stm32f4xx_hal.h"
#include "user_gpio.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

#define		KEY1	PEin(10)
#define		KEY2	PEin(11)
#define		KEY3	PEin(12)

extern uint8_t PWMCapture1,PWMCapture2;
extern uint8_t MoterMode;

extern void Moter_StartPWM(void);
extern void Motor_Test(void);
#endif

motor.c

#include "motor.h"

extern TIM_HandleTypeDef htim2;
uint8_t PWMCapture1  = 30, PWMCapture2 = 30;
uint8_t MoterMode = 0;

void Moter_StartPWM(void)
{
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
	
	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 100);
	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, 100);
}

void Motor_Test(void)
{
	if (KEY1 == 0)			//正转
	{
		HAL_Delay(5);
		if (KEY1 == 0)
		{
			while(KEY1 == 0);
			MoterMode ++;
		}
	}
	
	switch(MoterMode)
	{
		case 1:		//正转
			PWMCapture2 = 0;
			__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, PWMCapture2);
			
			if (KEY2 == 0)			
			{
				HAL_Delay(5);
				if (KEY2 == 0)
				{
					while(KEY2 == 0);
					PWMCapture1 += 5;
					if (PWMCapture1 >= 100)		//Duty Cycle Max = 100%
					{
						PWMCapture1 = 100;
					}
					printf("CH1 Duty Cycle = %02d%%\r\n", PWMCapture1);
				}
			} 
			
			if (KEY3 == 0)			
			{
				HAL_Delay(5);
				if (KEY3 == 0)
				{
					while(KEY3 == 0);
					PWMCapture1 -= 5;
					if (PWMCapture1 <= 5)		//Duty Cycle Min = 5%
					{
						PWMCapture1 = 5;
					}
					printf("CH1 Duty Cycle = %02d%%\r\n", PWMCapture1);
				}
			} 
			
			__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, PWMCapture1);
			break;
		case 2:		//反转
			PWMCapture1 = 0;
			__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, PWMCapture2);
			
			if (KEY2 == 0)			
			{
				HAL_Delay(5);
				if (KEY2 == 0)
				{
					while(KEY2 == 0);
					PWMCapture2 += 5;
					if (PWMCapture2 >= 100)		//Duty Cycle Max = 100%
					{
						PWMCapture2 = 100;
					}
					printf("CH2 Duty Cycle = %02d%%\r\n", PWMCapture2);
				}
			} 
			
			if (KEY3 == 0)			
			{
				HAL_Delay(5);
				if (KEY3 == 0)
				{
					while(KEY3 == 0);
					PWMCapture2 -= 5;
					if (PWMCapture2 <= 5)		//Duty Cycle Min = 5%
					{
						PWMCapture2 = 5;
					}
					printf("CH2 Duty Cycle = %02d%%\r\n", PWMCapture2);
				}
			} 
			
			__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, PWMCapture2);
			break;
		default:
			MoterMode = 0;
			break;
	}
}

由于作者能力有限,有不妥之处欢迎指正,邮箱alex_hua@foxmail.com

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到了使用H桥来驱动直流有刷电机。H桥是一种电路结构,可以实现电机的正反转。通过控制H桥的输入信号,可以控制电机的运动方向。在STM32驱动代码中,可以使用GPIO来控制H桥的输入信号,从而实现对电机驱动。引用\[2\]中提到了L298N电机驱动板,它是一种常用的电机驱动模块,可以用来驱动小型直流有刷电机。L298N电机驱动板使用PWM信号来控制电机调速。在使用STM32CubeMX进行驱动电机的配置时,需要先了解PWM的知识。引用\[3\]中提到了使用STM32F407VET6单片机和MDK开发环境进行驱动电机的实验。在实验中,按下不同的按键可以控制电机的正转、反转和停转。所以,如果你想使用STM32CubeMX驱动电机,你需要先了解PWM的知识,并根据你的具体硬件和开发环境进行相应的配置和编程。 #### 引用[.reference_title] - *1* *3* [直流马达驱动STM32F4 CubeMX)](https://blog.csdn.net/huazhen1234/article/details/100791234)[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^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【STM32cubeMX配置HAL库驱动L298N控制直流有刷电机](https://blog.csdn.net/weixin_45015121/article/details/130663353)[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^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值