一、代碼結構概覽
// 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參數整定