一、代码结构概览
// Motor.h
// Motor.h
#ifndef __MOTOR_H_
#define __MOTOR_H_#include "A_include.h"void Motor_Init(void); // 初始化函数
void PWM_SET(int duty0, int duty1); // PWM设置函数#endif
// Motor.c
// Motor.c
#include "Motor.h"void Motor_Init(void) {DL_Timer_startCounter(Motor_INST); // 启动定时器PWM输出
}void PWM_SET(int duty0, int duty1) {// 占空比限制(-2700 ~ +2700)duty0 = (duty0 > 2700) ? 2700 : ((duty0 < -2700) ? -2700 : duty0);duty1 = (duty1 > 2700) ? 2700 : ((duty1 < -2700) ? -2700 : duty1);// 方向控制与PWM配置if (duty0 >= 0) {DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_26); // 正转逻辑(AIN1)DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_27); // 反转逻辑(AIN2)DL_Timer_setCaptureCompareValue(Motor_INST, duty0, DL_TIMER_CC_0_INDEX);} else {DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_27);DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_26);DL_Timer_setCaptureCompareValue(Motor_INST, -duty0, DL_TIMER_CC_0_INDEX);}if (duty1 >= 0) {DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_4); // 正转逻辑(BIN1)DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_5); // 反转逻辑(BIN2)DL_Timer_setCaptureCompareValue(Motor_INST, duty1, DL_TIMER_CC_1_INDEX);} else {DL_GPIO_setPins(GPIOA, DL_GPIO_PIN_5);DL_GPIO_clearPins(GPIOA, DL_GPIO_PIN_4);DL_Timer_setCaptureCompareValue(Motor_INST, -duty1, DL_TIMER_CC_1_INDEX);}
}
二、核心设计亮点
1. 双电机独立控制
- 通道配置:通过定时器CC0和CC1分别控制两个电机(AIN/BIN通道)
- 方向逻辑:利用GPIO电平组合实现正反转控制:
if (duty >= 0) {setPin_high(AIN1); clearPin(AIN2); } else {setPin_high(AIN2); clearPin(AIN1); }
2. 动态占空比限制
duty = (duty > 2700) ? 2700 : ((duty < -2700) ? -2700 : duty);
- 防止PWM值超出硬件最大范围(假设PWM周期为3000)
- 支持负数输入(反向旋转)
3. 硬件抽象层封装
- GPIO操作:使用
DL_GPIO_setPins
/DL_GPIO_clearPins
实现引脚控制 - PWM配置:通过
DL_Timer_setCaptureCompareValue
直接设置占空比
三、MSP430适配要点
1. 定时器配置
2. GPIO
四、典型应用场景
1. 差速转向控制
// 左转示例
PWM_SET(500, 1500); // 左电机低速,右电机高速
2. 闭环PID控制
int target_speed = 1000;
int error = target_speed - actual_speed;
int duty = PID调节(error);
PWM_SET(duty, duty);
五、性能优化建议
- 多电机扩展
void PWM_SET(int duty0, int duty1, int duty2, int duty3) {// 支持4个电机控制 }
六、调试技巧
-
LED状态指示
// 电机状态指示灯 void debug_led(int duty) {if (duty > 0) P2OUT |= BIT0; // 正转else P2OUT &= ~BIT0; // 反转 }
-
参数校准方法
- 逐步调整占空比,记录电机转速
- 绘制占空比-转速曲线用于PID参数整定