1. 项目背景与核心功能第一次接触STM32的朋友可能会觉得单片机编程很抽象但当你亲手做出一个能自动避障的小车时那种成就感绝对能点燃你对嵌入式开发的热情。这个项目最吸引人的地方在于它把PWM电机控制、外部中断、传感器检测这些知识点都融合在一个看得见摸得着的实物里。红外避障小车的核心逻辑其实特别像我们骑自行车正常行驶时保持直线前进PWM控制电机转速当发现前方有障碍物时红外传感器触发中断立即转动车把改变方向调整左右轮差速。只不过在这里STM32就是小车的大脑L298N电机驱动相当于肌肉红外传感器则是小车的眼睛。2. 硬件选型与成本控制2.1 主控芯片选择刚开始我用的STM32F103VET6开发板后来发现用C8T6最小系统板完全够用价格能省下一半。两种芯片的主要参数对比如下参数STM32F103VET6STM32F103C8T6Flash容量512KB64KBRAM容量64KB20KBGPIO数量8037定时器8个4个市场价格约60-80元约15-25元实测下来避障小车的程序编译后不到20KBC8T6的性能完全够用。建议新手先用开发板调试成品阶段换最小系统板。2.2 电机驱动模块L298N模块有个坑要注意当输入电压超过12V时板载的5V稳压芯片会严重发热。我最初用3节18650电池12.6V供电十分钟后芯片烫到不能摸。后来改用两节电池8.4V配合升压模块既保证动力又解决发热问题。电机选择上建议用带编码器的直流电机虽然本项目不用编码功能。这种电机转速更稳定后期想升级PID调速也方便。价格比普通电机贵5-10元但值得投资。3. 电路设计与焊接技巧3.1 电源系统设计整个系统的供电方案经历了三次迭代初期方案两节18650串联→L298N→5V输出给STM32问题电池电压下降时可能导致STM32供电不足改进方案两节18650→降压模块→单独给STM32供电优点电压稳定缺点需要两个开关控制最终方案两节18650→L298N的12V输入同时并联AMS1117降压模块实测电流空载时总电流约80mA堵转时峰值可达1.2A焊接时有个实用技巧先用热熔胶固定所有模块再焊接避免杜邦线接触不良。我在调试阶段至少有一半问题都是接触不良导致的。4. 关键代码解析4.1 PWM电机控制定时器配置中最容易出错的是预分频器和自动重装载值的设置。以TIM3为例我的配置经验是TIM_TimeBaseStructure.TIM_Period 899; // 自动重装载值 TIM_TimeBaseStructure.TIM_Prescaler 0; // 不分频这样产生的PWM频率计算如下 72MHz / (8991) 80kHz实际调试发现电机在10-20kHz时运行最平稳。后来改为TIM_TimeBaseStructure.TIM_Period 719; // ARR TIM_TimeBaseStructure.TIM_Prescaler 5; // PSC得到的新频率72MHz/(51)/(7191)16.67kHz4.2 外部中断优化原始代码中使用下降沿触发中断但在复杂环境中可能出现误触发。我增加了软件去抖void EXTI3_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line3) ! RESET) { delay_ms(10); // 10ms防抖 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3) 0) { // 真正的中断处理 } EXTI_ClearITPendingBit(EXTI_Line3); } }实测表明这个方法能有效滤除90%以上的误触发。5. 调试与性能优化5.1 红外传感器校准传感器的检测距离可以通过板载电位器调节。我的校准方法是将传感器对准白色墙面顺时针旋转电位器直到指示灯刚亮起向后移动20cm再微调使指示灯刚好熄灭此时检测距离约在15-25cm之间注意深色物体反射率低实际检测距离会缩短30%-50%5.2 运动控制优化原始方案中转弯是固定时长导致不同地面上的转弯半径不一致。我改进的方案void Turn_Right() { TIM_SetCompare1(TIM3, 350); // 左轮低速 TIM_SetCompare3(TIM3, 900); // 右轮全速 while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)0); // 持续检测直到避开障碍 Go_Forward(); }这样小车会持续转弯直到传感器检测不到障碍物适应性更好。6. 常见问题解决方案在实验室带学生做这个项目时最常遇到的三个问题是电机不转检查L298N的使能跳线帽测量电机两端电压是否5V确保STM32和L298N共地传感器无反应用万用表测量OUT引脚电压变化检查中断线配置是否正确确认NVIC中断优先级设置小车走直线偏移调整PWM占空比补偿电机差异在光滑地面测试减少摩擦力影响给轮胎做标记方便观察转速7. 进阶改进方向当基础功能实现后可以尝试这些升级增加蓝牙模块用手机APP控制HC-05模块约15元需要修改串口通信代码改用超声波舵机方案HC-SR04超声波模块SG90舵机控制传感器转向实现更精准的障碍物测绘添加OLED显示屏显示实时速度和障碍物距离需要I2C驱动代码这些改进都不需要更换主控芯片原有代码框架稍作扩展即可。我最推荐先加蓝牙控制成本低但可玩性提升明显。