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

一、前期准备
单片机:STM32F407VET6
开发环境:MDK5.14
库函数:STM32Cube_FW_F4_V1.16.0
直流电机模块:淘宝有售
在这里插入图片描述在这里插入图片描述
二、实验效果
1)PWM波形20KHz,试验得到PWM在25%的时候,电机转动;
2)调整电位器,改变PWM波,串口输出。
在这里插入图片描述

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

CubeMX TIM2配置如下:
在这里插入图片描述
CubeMX ADC1配置如下
在这里插入图片描述
需要完整工程的请加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 uint16_t AD;

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

motor.c

#include "motor.h"

extern TIM_HandleTypeDef htim2;
extern ADC_HandleTypeDef hadc1;
uint8_t PWMCapture1  = 30, PWMCapture2 = 30;
uint16_t AD = 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)
{
	PWMCapture2 = 0;
	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, PWMCapture2);
	
	HAL_ADC_Start(&hadc1);					//ADC Start Conversion
	HAL_ADC_PollForConversion(&hadc1, 10); 	//Wait Conversion OK
	AD = HAL_ADC_GetValue(&hadc1);		//Achive Conversion Value
	PWMCapture1 = ((float)AD / 4096.0f) * 100;
	__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, PWMCapture1);
	
	printf("ADC Value = %04d, PWMCapture1 = %02d%%!\r\n", AD, PWMCapture1);
	HAL_Delay(100);
}

由于作者能力有限,有不妥之处欢迎指正,邮箱[email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章