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:控制信号输入
注意:电机驱动电源建议独立供电,防止启动瞬间压降导致 MCU 复位。
2.2 PWM 驱动程序实现
使用 TIM2 的通道 1 和 2 生成 PWM 波控制电机转速。以下是初始化及设置函数:
#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);
}

