一、TB6612FNG
TB6612是一個支持雙電機的驅動模塊,支持PWM調速。PWMA、AIN1、AIN2 為一組控制引腳,PWMA 為 PWM 速度控制引腳,AIN1、AIN2 為方向控制引腳;PWMB、BIN1、BIN2 為一組控制引腳,PWMB 為 PWM 速度控制引腳,BIN1、BIN2 為方向控制引腳。
PA4 --> BIN1
PA5 --> BIN2
PA6 --> AIN2
PA7 --> AIN1
TIM2_CH2(PA1) --> PWMA
TIM2_CH3(PA2) --> PWMB
驅動電機的 PWM 頻率一般?10kHz(0.0001ms)左右,72MHZ/72/100=72000000/7200=10000HZ=10KHZ
二、CUbeMX配置
SYS
RCC
?時鐘樹
GPIO配置
?定時器配置
生成工程
?生成代碼
三、Keil代碼
添加PWM電機驅動代碼
/* USER CODE BEGIN 0 */
void motorControlL(uint8_t direction, uint16_t speed) {//左電機驅動HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_3);/* 根據方向設置 IN1 和 IN2 引腳 */HAL_GPIO_WritePin(GPIOA, BIN1_Pin, (direction & 0x01));HAL_GPIO_WritePin(GPIOA, BIN2_Pin, ((direction & 0x01) ^ 0x01));/* 設置 PWM 引腳以控制速度 */__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_3, speed);
}
void motorControlR(uint8_t direction, uint16_t speed) {//右電機驅動HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);/* 根據方向設置 AIN1 和 IN2 引腳 */HAL_GPIO_WritePin(GPIOA, AIN2_Pin, (direction & 0x01));HAL_GPIO_WritePin(GPIOA, AIN1_Pin, ((direction & 0x01) ^ 0x01));/* 設置 PWM 引腳以控制速度 */__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, speed);
}
/* USER CODE END 0 */
?while循環中紅外光電邏輯判斷
/* USER CODE BEGIN WHILE */while (1){ if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)== 1 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)== 1 ){ motorControlL(1, 300); //第一個參數 0反向轉 1正向轉 第二個參數控制小車速度motorControlR(1, 300);}if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)==0 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)==0){motorControlL(0, 0); motorControlR(0, 0);}if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)==0 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)==1){motorControlL(1, 180); motorControlR(1, 300);}if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)==1 && HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)==0){motorControlL(1, 300); motorControlR(1, 180);}/* USER CODE END WHILE */
效果
car
?
鏈接: https://pan.baidu.com/s/1xOMmcG4KKbLN1cJ1ZK-zaQ?pwd=3h3k 提取碼: 3h3k?