generated from Template/H563ZI-HAL-CMake-Template
131 lines
3.0 KiB
C
131 lines
3.0 KiB
C
#include "Motor.h"
|
|
|
|
extern TIM_HandleTypeDef htim3;
|
|
extern TIM_HandleTypeDef htim4;
|
|
|
|
/*******
|
|
PWMA --- TIM4_CHANNEL4
|
|
|
|
PMWB --- TIM3_CHANNEL4
|
|
|
|
STBY --- 5V 默认5V 所以无需初始化
|
|
*******/
|
|
void PWM_GPIO_TIM_Init(void)
|
|
{
|
|
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
|
|
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
|
|
}
|
|
|
|
|
|
void MotorA_Dir(uint8_t dir)
|
|
{
|
|
if(0 == dir) // 前进
|
|
{
|
|
HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);
|
|
}
|
|
else // 反转
|
|
{
|
|
HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_SET);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void MotorB_Dir(uint8_t dir)
|
|
{
|
|
if(0 == dir) // 前进
|
|
{
|
|
HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(BIN2_GPIO_Port,BIN2_Pin,GPIO_PIN_RESET);
|
|
}
|
|
else // 反转
|
|
{
|
|
HAL_GPIO_WritePin(BIN1_GPIO_Port,BIN1_Pin,GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(BIN2_GPIO_Port,BIN2_Pin,GPIO_PIN_SET);
|
|
}
|
|
|
|
}
|
|
|
|
// 控制 电机A的速度
|
|
void MotorA_Speed(uint8_t speed)
|
|
{
|
|
__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_4,speed);
|
|
}
|
|
|
|
// 控制 电机B的速度
|
|
void MotorB_Speed(uint8_t speed)
|
|
{
|
|
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_4,speed);
|
|
}
|
|
|
|
|
|
// 示例 同时控制电机A/B
|
|
// 提示 对于 Dir 0 ---- 前进 go forward
|
|
// 对于 Dir 1 ---- 后退 go forward
|
|
//void DriveBOTH(int16_t speedA,int16_t speedB)
|
|
//{
|
|
// // 电机 A
|
|
// if (speedA >= 0) MotorA_Dir(0);
|
|
// else
|
|
// {
|
|
// MotorA_Dir(1);
|
|
// speedA = -speedA;
|
|
// }
|
|
// MotorA_Speed(speedA);
|
|
//
|
|
// // 电机 B
|
|
// if (speedB >= 0) MotorB_Dir(0);
|
|
// else
|
|
// {
|
|
// MotorB_Dir(1);
|
|
// speedB = -speedB;
|
|
// }
|
|
// MotorB_Speed(speedB);
|
|
//}
|
|
|
|
|
|
// Motor.c 早上进行处理
|
|
void DriveBOTH(int16_t speedA, int16_t speedB)
|
|
{
|
|
// 处理电机A
|
|
if(speedA == 0) {
|
|
// 制动:两个方向都设为低电平
|
|
HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_RESET);
|
|
}
|
|
else if(speedA > 0) {
|
|
HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_RESET);
|
|
speedA = abs(speedA); // 取绝对值
|
|
}
|
|
else {
|
|
HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_SET);
|
|
speedA = abs(speedA); // 取绝对值
|
|
}
|
|
|
|
|
|
if(speedB == 0) {
|
|
// 制动:两个方向都设为低电平
|
|
HAL_GPIO_WritePin(BIN1_GPIO_Port, BIN1_Pin, GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(BIN2_GPIO_Port, BIN2_Pin, GPIO_PIN_RESET);
|
|
}
|
|
else if(speedB > 0) {
|
|
HAL_GPIO_WritePin(BIN1_GPIO_Port, BIN1_Pin, GPIO_PIN_SET);
|
|
HAL_GPIO_WritePin(BIN2_GPIO_Port, BIN2_Pin, GPIO_PIN_RESET);
|
|
speedB = abs(speedB); // 取绝对值
|
|
}
|
|
else {
|
|
HAL_GPIO_WritePin(BIN1_GPIO_Port, BIN1_Pin, GPIO_PIN_RESET);
|
|
HAL_GPIO_WritePin(BIN2_GPIO_Port, BIN2_Pin, GPIO_PIN_SET);
|
|
speedB = abs(speedB); // 取绝对值
|
|
}
|
|
// 同样处理电机B...
|
|
|
|
|
|
// 设置PWM
|
|
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, speedA);
|
|
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_4, speedB);
|
|
} |