4. 传感器基础
在STM32机器人控制系统中,传感器是感知物理世界与自身状态的核心硬件层。无论是避障、循迹、测距、视觉识别还是姿态解算,最终都要转化为STM32可处理的电信号或数字帧。本章围绕机器人项目中五类最常用的传感器——红外、超声波、摄像头、编码器、IMU——展开,重点讲解其物理原理、电气接口、信号特性以及接入STM32时的工程要点。理解这些底层机制,是后续实现“感知—决策—执行”闭环控制的基础。
4.1 红外传感器:模拟电压测距与反射式检测
核心原理:红外传感器分为两类:一类是反射式光电开关(如TCRT5000),利用红外LED发射光,经物体反射后被光电晶体管接收,输出数字电平或模拟电压,常用于循迹和近距离障碍检测;另一类是三角测距传感器(如GP2Y0A21),利用红外光斑在PSD(位置敏感探测器)上的偏移量计算距离,输出与距离成反比的模拟电压,有效测距范围约10~80cm。
接口与信号特性:GP2Y0A21输出模拟电压,典型值为2.8V(10cm)至0.4V(80cm),电压与距离呈非线性反比关系。STM32通过ADC采样该电压,再通过查表或拟合曲线转换为实际距离。TCRT5000则输出数字信号(带比较器)或模拟信号(不带比较器),数字输出可直接接GPIO。
| 参数 | GP2Y0A21 | TCRT5000 |
|---|---|---|
| 输出类型 | 模拟电压 | 数字/模拟 |
| 测量范围 | 10~80cm | 0~2cm |
| 接口 | 3pin(VCC/GND/OUT) | 4pin(VCC/GND/OUT/EN) |
| STM32外设 | ADC1_INx | GPIO输入/ADC |
| 响应时间 | 约5ms | 约1ms |
4.2 超声波传感器:飞行时间法测距
核心原理:HC-SR04通过发射40kHz超声波脉冲,并接收物体反射的回波,计算发射与接收之间的时间差Δt,距离 = Δt × 声速 / 2。声速在20°C空气中约为343m/s,温度每升高1°C,声速增加约0.6m/s,高精度应用需做温度补偿。
接口与信号特性:HC-SR04有4个引脚:VCC(5V)、GND、Trig(输入触发)、Echo(输出回波)。STM32向Trig引脚发送至少10μs的高电平脉冲,随后Echo引脚输出与距离成正比的高电平脉宽。脉宽范围约150μs(2.5cm)至25ms(4m)。STM32使用定时器输入捕获功能测量Echo高电平持续时间。
// 输入捕获测量Echo脉宽(伪代码)
TIM2->CCER |= TIM_CCER_CC1E; // 使能捕获通道1
TIM2->CCMR1 |= TIM_CCMR1_IC1F_0; // 配置滤波
while(!(TIM2->SR & TIM_SR_CC1IF)); // 等待上升沿捕获
uint32_t t1 = TIM2->CCR1;
while(!(TIM2->SR & TIM_SR_CC1IF)); // 等待下降沿捕获
uint32_t t2 = TIM2->CCR1;
uint32_t pulse_width = t2 - t1; // 定时器计数差值
float distance_cm = pulse_width * 0.017; // 假设72MHz时钟,1计数=1/72MHz
4.3 摄像头:视觉感知与图像数据流
核心原理:摄像头模块(如OV2640、OV7670)内部集成了CMOS图像传感器,将光信号转换为数字像素数据。输出格式可为RGB565、YUV422或JPEG压缩流。STM32通过DCMI(数字摄像头接口)外设接收并行数据,配合DMA将图像帧直接搬运到内存,避免CPU逐像素读取。
接口与信号特性:DCMI接口包含8位并行数据线(D0~D7)、像素时钟(PCLK)、行同步(HSYNC)、帧同步(VSYNC)以及主时钟(XCLK)。OV2640还支持SCCB(兼容I2C)接口用于寄存器配置,如设置分辨率、帧率、白平衡等。典型配置为640×480分辨率、30fps、RGB565格式,每帧数据量约614KB,需使用DMA双缓冲机制。
| 参数 | OV2640 | OV7670 |
|---|---|---|
| 最大分辨率 | 200万像素 | 30万像素 |
| 输出格式 | RGB565/YUV/JPEG | RGB565/YUV |
| 接口 | DCMI + SCCB | DCMI + SCCB |
| 工作电压 | 3.3V(内核1.8V) | 3.3V |
| STM32资源占用 | DMA + 双缓冲 | DMA + 双缓冲 |
4.4 编码器:电机转速与位置反馈
核心原理:增量式编码器通过光电或磁感应原理,输出两路相位差90°的正交方波信号(A相和B相)。通过检测A/B相的相位关系可判断旋转方向,通过计数脉冲数可计算角位移。STM32定时器内置编码器接口模式,可自动处理正交解码,无需外部逻辑电路。
接口与信号特性:编码器输出为开漏或推挽信号,通常需要上拉电阻(若为开漏)。STM32定时器(如TIM3、TIM4)配置为编码器模式后,CH1和CH2分别接A相和B相,定时器计数器自动递增或递减。计数范围可配置为16位(0~65535)或32位(需级联)。
// 编码器模式配置(STM32 HAL库)
TIM_Encoder_InitTypeDef sEncoderConfig = {0};
sEncoderConfig.EncoderMode = TIM_ENCODERMODE_TI12; // 双沿采样
sEncoderConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sEncoderConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
sEncoderConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
sEncoderConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
sEncoderConfig.IC1Prescaler = 0;
sEncoderConfig.IC2Prescaler = 0;
sEncoderConfig.IC1Filter = 0;
sEncoderConfig.IC2Filter = 0;
HAL_TIM_Encoder_Init(&htim3, &sEncoderConfig);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
4.5 IMU:惯性测量单元与姿态解算
核心原理:IMU(如MPU6050)集成了三轴加速度计和三轴陀螺仪。加速度计测量物体在三个轴上的加速度(包含重力分量),陀螺仪测量绕三个轴的角速度。通过融合算法(如互补滤波或Mahony滤波)可估算机器人的俯仰角、横滚角和偏航角。
接口与信号特性:MPU6050支持I2C接口(默认地址0x68)和SPI接口(部分型号)。I2C速率可达400kHz,数据输出为16位有符号整数。加速度计量程可配置为±2g/±4g/±8g/±16g,陀螺仪量程可配置为±250/±500/±1000/±2000°/s。STM32通过I2C读取寄存器数据,通常以100Hz~1kHz的频率轮询。
| 参数 | 加速度计 | 陀螺仪 |
|---|---|---|
| 测量物理量 | 线加速度(m/s²) | 角速度(°/s) |
| 典型量程 | ±2g ~ ±16g | ±250 ~ ±2000°/s |
| 输出分辨率 | 16位ADC | 16位ADC |
| 零偏稳定性 | ±20mg | ±10°/s |
| 主要误差源 | 振动噪声 | 温漂、积分漂移 |
4.6 传感器信号调理与STM32接入实战
信号调理原则:不同传感器输出信号类型各异,接入STM32前需统一处理:模拟信号需满足ADC输入范围(0~3.3V),若传感器输出5V需分压或使用运放;数字信号需检查电平兼容性(3.3V/5V);PWM信号需确认脉冲宽度在定时器可测量范围内;I2C/SPI信号需注意上拉电阻和总线电容。
案例:多传感器融合避障小车
某轮式机器人需实现前方避障功能,选用GP2Y0A21红外传感器(测距10~80cm)和HC-SR04超声波传感器(测距2~400cm)。初始现象:单独使用超声波时,近距离(<5cm)物体检测不到;单独使用红外时,远距离(>50cm)精度差。目标:实现5~80cm范围内可靠避障。
- 硬件连接:红外OUT接PA0(ADC1_IN0),超声波Trig接PB0,Echo接PB1(TIM3_CH4)。
- 软件策略:每20ms触发一次超声波测量,同时每10ms采样一次红外ADC。若超声波脉宽对应距离小于5cm,则信任红外数据;若红外电压对应距离大于50cm,则信任超声波数据;中间区域取两者加权平均。
- 实测数据:在30cm处,红外输出1.1V(查表得28.5cm),超声波脉宽1.75ms(得29.8cm),加权后距离29.2cm,误差±1.5cm。
- 结果:融合后有效测距范围扩展至5~80cm,且近距离盲区消除。代价是CPU占用增加约5%(用于滤波和查表),但换来了更稳定的避障性能。
4.7 常见误区与总结
- 误区一:所有传感器都直接接GPIO。实际上,模拟传感器必须接ADC引脚,PWM输出必须接定时器输入捕获通道,否则无法正确读取。
- 误区二:忽略电平转换。5V传感器输出直接接3.3V STM32引脚,可能损坏GPIO或导致逻辑混乱。应使用电平转换芯片或分压电阻。
- 误区三:不处理编码器溢出。16位计数器在高速旋转下很快溢出,若不处理会导致转速计算错误。
- 误区四:IMU数据不滤波直接使用。原始加速度计噪声大,陀螺仪有温漂,必须经过滤波和零偏补偿。
- 误区五:摄像头帧率越高越好。高帧率意味着更大的DMA带宽和CPU中断负载,需根据实际任务选择合适分辨率与帧率。