1. 项目概述与硬件准备
智能小车项目是学习 STM32 外设和编程逻辑的不错实践。以下是实现避障、循迹等核心功能所需的硬件清单:
- 主控芯片:STM32F103C8T6 最小系统板
- 电机驱动:TB6612 模块(根据电机数量配置)
- 舵机:SG90(用于超声波模块旋转扫描)
- 传感器:HC-SR04 超声波模块(避障)、TCRT5000 红外模块(循迹)
- 通信模块:HC-04 蓝牙模块(手机控制)
- 车体框架:支持四个直流电机的智能小车框架
- 烧录器:ST-LINK V2
- 其他:导线若干、洞洞板(建议用洞洞板,更稳定)
2. 电机驱动与 PWM 控制
2.1 TB6612 电机驱动详解
TB6612 是东芝公司生产的直流电机驱动芯片,相比 L298N 效率更高,发热量更小。该芯片具有双通道输出,可同时驱动两个直流电机,每个通道能提供 1A 的连续电流,峰值可达 2A。
关键引脚功能:
- VM:电机驱动电压(3V-13.5V)
- VCC:逻辑电平输入(2.7V-5.5V)
- STBY:待机控制(高电平正常工作)
- AO1/AO2、BO1/BO2:两路电机输出
- PWMA/PWMB、AIN1/AIN2、BIN1/BIN2:控制信号输入
接线时要注意,电机驱动电压最好单独供电,不要和 STM32 共用电源,否则电机启动时可能会造成电压波动导致单片机复位。
2.2 PWM 驱动程序实现
PWM 控制是让电机转起来的关键,以下示例使用 TIM2 的通道 1 和通道 2:
#include "stm32f10x.h"
void PWM_Init(void) {
// 开启 GPIOA 和 TIM2 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 配置 GPIOA_Pin0 和 Pin1 为复用推挽输出
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV2;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; // ARR
TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = ;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = ;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC2Init(TIM2, &TIM_OCInitStructure);
TIM_Cmd(TIM2, ENABLE);
}
{
TIM_SetCompare1(TIM2, Compare);
}
{
TIM_SetCompare2(TIM2, Compare);
}

