一、前期準備
單片機: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]