返回项目列表
基于单目视觉的目标物测量装置

基于单目视觉的目标物测量装置

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. 断开输入,短接仪放输入端,测量输出偏移
  2. 确认非电阻失配问题(已用 1% 电阻)
  3. 发现运放输入偏置电流在增益电阻上产生附加压降
  4. 整改:在仪放调零引脚外加电位器,手动调零至 < 1 mV

I2C 通信丢包

K230 数据偶尔出现帧头错位,导致解析失败。

排查步骤

  1. 逻辑分析仪抓取波形:SCL 上升沿存在振铃
  2. 分析:走线过长(约 15 cm),分布电容导致信号完整性下降
  3. 整改
    • I2C 走线缩短至 8 cm 以内
    • SDA/SCL 串联 33 Ω 电阻抑制振铃
    • 上拉电阻从 4.7 kΩ 改为 2.2 kΩ,增强驱动能力

整改后通信稳定,连续 24 小时无丢包。

项目复盘

  • 电赛时间紧:7 天内完成方案确定、PCB 绘制、焊接与调试,采用模块化验证策略,每完成一个子系统立即测试
  • 采样精度:12 位 ADC + 仪放方案满足题目精度要求,电流分辨力达 5 mA
  • 团队协作:电参数监测子系统提前 1 天完成并交付软件联调,为算法优化留出充足时间

项目实拍

PCB 与硬件调试

串口屏 UI 与测量现场