返回项目列表

基于单目视觉的目标物测量装置
2025.07 – 2025.082025年8月10日硬件
STM32电赛ADC采样仪放I2CUART串口屏
2025 年全国大学生电子设计竞赛 C 题作品,负责电参数采样硬件设计:三运放仪放 + Sallen-Key 滤波 + 分压网络,STM32 ADC 采集,I2C 接收 K230 视觉数据,UART 串口屏外显。
硬件平台
- STM32F103C8T6 最小系统板
- 0.1Ω/3W 采样电阻
- 三运放仪放电路
- Sallen-Key 低通滤波
- 电阻分压网络
- K230 视觉模组(I2C)
- 串口屏(UART)
软件工具
- Keil MDK
- 标准库开发
- ADC 多通道采样
- I2C 通信协议
- UART 数据外显
项目概述
本项目为 2025 年全国大学生电子设计竞赛 C 题 参赛作品,设计一套基于单目视觉的目标物测量装置,实现对目标物的距离测量与尺寸估算。
我担任 硬件与采样负责人,独立负责电参数监测子系统的硬件设计与调试:电流采样(三运放仪放 + Sallen-Key 滤波)、电压分压采样、STM32 ADC 多通道采集、I2C 接收 K230 视觉测量数据、UART 串口屏外显。
项目成果:
- 整机数据稳定,重复性误差 < 3%
- 电参数监测子系统零故障运行
- 获全国大学生电子设计竞赛河南省三等奖

电参数采样硬件设计
电流采样通道
在总供电电路前串接 0.1 Ω / 3W 精密采样电阻,将回路电流转换为微弱电压信号。电阻两端接入 三运放仪放电路,提供高输入阻抗与可调增益,放大后的信号经过 Sallen-Key 二阶低通滤波 滤除高频噪声,最终输出至 STM32 ADC_IN1。
总供电输入 ──[0.1Ω/3W]──▶ 负载
│
▼
三运放仪放(差分放大)
│
▼
Sallen-Key 低通滤波
│
▼
ADC_IN1
设计要点:
- 采样电阻选用 3W 功率等级,承受最大 5 A 电流(压降 0.5 V)
- 三运放结构:前级双运放同相输入提供高阻抗,后级差分输出消除共模噪声
- Sallen-Key 拓扑:单位增益配置,截止频率约 50 Hz,保留直流与缓变电参数
- 仪放增益根据最大电流与 ADC 量程匹配计算
电压采样通道
在 5 V 电压输出端引一支路,经 电阻分压网络 将电压降至 ADC 量程范围内,接入 ADC_IN2。
5V 输出 ──[R1]──┬──[R2]── GND
│
▼
ADC_IN2
- 分压比根据 ADC 参考电压(3.3 V)设计,留 10% 余量
- 分压电阻选用 1% 精度,降低分压误差
- 分压输出端并联 100 nF 电容滤波
ADC 多通道采样
STM32F103C8T6 内置 12 位 ADC,配置为扫描模式 + DMA 传输:
- 通道 1(ADC_IN1):电流采样值
- 通道 2(ADC_IN2):电压采样值
- 采样周期 20 ms(50 Hz),与 PID 控制周期同步
- DMA 循环搬运,双缓冲避免数据覆盖
// ADC 采样数据结构
typedef struct {
uint16_t raw_current; // ADC_IN1 原始值
uint16_t raw_voltage; // ADC_IN2 原始值
float current_A; // 换算后电流(A)
float voltage_V; // 换算后电压(V)
float power_W; // 计算功率(W)
} PowerSample_t;
数据通信设计
I2C — 接收 K230 视觉数据
K230 视觉模组负责图像采集与算法推理,输出目标物的 距离 与 尺寸 数据。STM32 作为 I2C 主设备,周期性读取 K230 的测量结果:
- I2C 时钟:100 kHz(标准模式)
- K230 从机地址:硬件配置为 0x5A
- 数据帧格式:帧头(2B) + 距离(4B float) + 尺寸(4B float) + 校验(1B)
- 读取周期:100 ms,与视觉算法帧率匹配
// 读取 K230 视觉数据
void K230_ReadResult(float *distance, float *size) {
uint8_t buf[10];
HAL_I2C_Mem_Read(&hi2c1, K230_ADDR << 1, 0x00,
I2C_MEMADD_SIZE_8BIT, buf, 10, 100);
if (buf[0] == 0xAA && buf[1] == 0x55) {
memcpy(distance, &buf[2], 4);
memcpy(size, &buf[6], 4);
}
}
UART — 串口屏外显
STM32 将电参数(电压/电流/功率)与 K230 视觉结果(距离/尺寸)打包后,通过 UART 发送至串口屏显示:
- 接口:USART1,波特率 115200,8N1
- 数据帧:帧头(0xAA 0x55) + 命令字(1B) + 数据长度(1B) + 数据(nB) + 校验和(1B)
- 显示内容:
- 实时电压、电流、功率
- 目标物距离、长宽尺寸
- 系统运行状态指示
// 串口屏数据上传
void HMI_UpdateDisplay(float volt, float curr, float dist, float size) {
uint8_t tx[20];
tx[0] = 0xAA; tx[1] = 0x55;
tx[2] = 0x01; // 命令字:更新测量页
tx[3] = 16; // 数据长度
memcpy(&tx[4], &volt, 4);
memcpy(&tx[8], &curr, 4);
memcpy(&tx[12], &dist, 4);
memcpy(&tx[16], &size, 4);
tx[18] = checksum(&tx[2], 16);
HAL_UART_Transmit(&huart1, tx, 19, 50);
}
硬件调试过程
仪放输出漂移
上电后发现仪放输出存在约 50 mV 零点偏移,导致零电流时 ADC 读数非零。
排查步骤:
- 断开输入,短接仪放输入端,测量输出偏移
- 确认非电阻失配问题(已用 1% 电阻)
- 发现运放输入偏置电流在增益电阻上产生附加压降
- 整改:在仪放调零引脚外加电位器,手动调零至 < 1 mV
I2C 通信丢包
K230 数据偶尔出现帧头错位,导致解析失败。
排查步骤:
- 逻辑分析仪抓取波形:SCL 上升沿存在振铃
- 分析:走线过长(约 15 cm),分布电容导致信号完整性下降
- 整改:
- I2C 走线缩短至 8 cm 以内
- SDA/SCL 串联 33 Ω 电阻抑制振铃
- 上拉电阻从 4.7 kΩ 改为 2.2 kΩ,增强驱动能力
整改后通信稳定,连续 24 小时无丢包。
项目复盘
- 电赛时间紧:7 天内完成方案确定、PCB 绘制、焊接与调试,采用模块化验证策略,每完成一个子系统立即测试
- 采样精度:12 位 ADC + 仪放方案满足题目精度要求,电流分辨力达 5 mA
- 团队协作:电参数监测子系统提前 1 天完成并交付软件联调,为算法优化留出充足时间
项目实拍

