智能小车系统概述
智能小车作为嵌入式技术与人工智能结合的典型应用,集成了传感器数据采集、路径规划、运动控制等功能,广泛应用于教育、工业自动化及消费电子领域,本文将完整分享智能小车的全部原理图设计思路及核心程序实现,涵盖硬件选型、电路连接、软件算法等关键环节,帮助读者从零构建一套功能完备的智能小车系统。

硬件原理图设计与解析
核心控制器模块
智能小车的主控单元选用STM32F103C8T6微控制器,该芯片基于ARM Cortex-M3内核,主频72MHz,拥有64KB Flash、20KB RAM,以及丰富的外设接口(如UART、I2C、SPI、ADC等),足以满足小车的实时控制需求,原理图中,控制器最小系统包括:外部8MHz晶振电路(提供精准时钟)、复位电路(按键复位+上电复位)、SWD调试接口(程序下载与调试),以及电源滤波网络(10μF电解电容+0.1μF陶瓷电容)确保供电稳定性。
电机驱动模块
小车采用双轮差速驱动结构,电机驱动选用L298N模块,该模块可驱动两路直流电机,支持单极性或双极性驱动模式,最大驱动电流2A/路,原理图中,L298N的输入接口IN1-IN4连接STM32的GPIO口(如PA0-PA3),通过PWM信号控制电机转速;使能端ENA、ENB分别连接TIM1和TIM2的PWM输出通道,实现无级调速;电源端接12V/2A锂电池,通过7805线性稳压芯片为STM5V供电,同时续流二极管(1N4007)保护模块免受电机反向电动势冲击。
传感器模块
(1)循迹传感器:采用TCRT5000红外对管模块,包含发射管与光敏接收管,通过反射红外线检测黑线,原理图中,模块输出端接STM32的ADC引脚(如PA4-PA7),通过电压比较(阈值设定为2.5V)实现数字信号输出,便于STM32识别循迹路径。
(2)避障传感器:选用HC-SR04超声波模块,测距范围2cm-4m,原理图中,Trig触发端接STM32的GPIO口(如PB0),Echo回响端接外部中断引脚(如PB1),通过定时器捕获回响时间计算距离(距离=声速×时间/2,声速取340m/s)。
(3)姿态传感器:可选MPU6050六轴传感器(3轴加速度计+3轴陀螺仪),通过I2C接口(SDA接PB6,SCL接PB7)与STM32通信,实现小车姿态解算(如角度、角速度),用于平衡控制或方向修正。
电源管理模块
智能小车采用12V锂电池供电,通过LM2596开关降压模块转换为5V为传感器和逻辑电路供电,再通过AMS1117-3.3V LDO芯片为MPU6050等3.3V设备供电,原理图中,电源输入端加装反接保护二极管(1N5819),输出端并联1000μF电容滤波,确保电压纹波小于50mV,避免电压波动影响系统稳定性。
软件程序设计与实现
开发环境与程序架构
软件开发基于Keil MDK 5.29,使用STM32CubeMX生成初始化代码,程序采用模块化设计,包含主程序、传感器驱动、电机控制、路径规划等模块,主程序流程:系统初始化→传感器数据采集→决策算法→电机控制→循环执行。

核心程序代码解析
(1)电机PWM控制:
void Motor_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
TIM_HandleTypeDef htim1;
TIM_OC_InitTypeDef sConfigOC = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_TIM1_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
htim1.Instance = TIM1;
htim1.Init.Prescaler = 71;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999;
HAL_TIM_PWM_Init(&htim1);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 499; // 50%占空比
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}
(2)循迹传感器数据处理:
uint8_t Track_Sensor_Read(void) {
uint8_t sensor_value = 0;
for(int i=0; i<4; i++) {
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4<<i) == GPIO_PIN_RESET) {
sensor_value |= (1<<i); // 检测到黑线置1
}
}
return sensor_value;
}
(3)超声波避障算法:
float Ultrasonic_Read(void) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_RESET);
__HAL_TIM_SET_COUNTER(&htim3, 0);
while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1) == GPIO_PIN_SET);
float distance = __HAL_TIM_GET_COUNTER(&htim3) * 0.017; // 时间(us)*0.017=距离(cm)
return distance;
}
(4)PID循迹算法:
float PID_Calculate(float error) {
static float integral = 0, last_error = 0;
integral += error;
float derivative = error - last_error;
float output = KP*error + KI*integral + KD*derivative;
last_error = error;
return output;
}
KP、KI、KD为比例、积分、微分系数,需通过实验调试优化。

通信与调试功能
程序预留USART1通信接口(PA9-TX, PA10-RX),波特率设为115200,用于打印传感器数据及调试信息;同时支持蓝牙模块(HC-05)无线通信,可通过手机APP远程控制小车或实时查看状态。
系统调试与优化
硬件调试阶段,需重点检查电源电压(确保5V/3.3V稳定)、传感器信号(如TCRT5000输出电压是否随反射面变化)、电机驱动逻辑(正反转是否正常);软件调试通过串口打印关键变量(如传感器值、PID输出),结合逻辑分析仪观察PWM波形,逐步优化算法参数,循迹小车可通过调整PID系数实现平滑过弯,避障小车可通过设定阈值(如距离<20cm触发转向)优化避障策略。
本文分享了智能小车的完整原理图设计及核心程序实现,涵盖了从硬件选型、电路连接到软件算法、系统调试的全流程,通过STM32作为主控,结合L298N电机驱动、TCRT5000循迹、HC-SR04避障等模块,可实现基础的循迹、避障功能;若扩展MPU6050姿态传感器,还可升级为自平衡小车,该方案硬件成本低、可扩展性强,适合嵌入式开发爱好者学习与实践,为进一步研究机器视觉、SLAM等高级技术奠定基础。

















