视频链接:https://www.bilibili.com/video/BV1oPn2zZExh
所有文件链接:https://gitee.com/ret2nuh/Oscilloscope_Multimeter_7.4V-Battery-Charge_Based_on_STM32F103RCT6
在这里插入图片描述
在这里插入图片描述

功能概述:

  • 示波器:衰减、增益、触发沿、触发方式、峰值、峰峰值、周期、占空比、采样频率,栅格电压、栅格时间、参考/触发线、波形移动缩放
  • DAC:频率、波形种类
  • 万用表:多档位电压、电流、电阻、电容/电感测量
  • 可调电压输出3.1-13.2V,最大1A
  • 7.4V锂电池平衡充,1A以内

在这里插入图片描述
在这里插入图片描述


参数:

  • PCB板尺寸:99x58

示波器:

  • 采样频率:
    档位1:(484Hz-58.8kHz)电位器设置64档(最小分辨率911Hz)
    档位2:(88.9kHz-800kHz)电位器设置64档(最小分辨率11.1kHz)
  • 带宽:未测(无信号发生器)(前级运放增益后带宽为300kHz)
  • 测量范围:±25V 最小分辨率:16mV (原设计参考电压2.5V,后使用3.3V)
  • 波形实时显示(自动适应屏幕(Y=0轴位置不固定)),触发或暂停后,可X、Y轴移动(128档),Y轴缩放(0.2-1,1-5各16档),无X轴缩放(X轴缩放通过改变采样频率实现)

信号发生器:

  • DAC波形输出(正弦波、方波、三角波、锯齿波),频率设置在77Hz-4.44kHz,电位器设置64档(最小分辨率68Hz)

万用表:

  • 万用表误差来源(1%电阻误差+ADC基准电压误差+温漂…)
  • 电压测量:2档(0-3Vref)(0-21.5Vref)
  • 电流测量:2档(0-0.4A)(0-3.5A)(误差来源:+运放误差)
  • 电阻测量:4档(基准电阻0.1k、1k、10k、100k)
  • 电容测量:最终只设了一档,测量范围22nF-2.2uF,22nF-220nF误差在10%以内,220nF-2.2uF随容值增大误差增大至50%以内
  • 电感测量:(1mH-68mH)(代码未写)

可调电压输出:

  • SX1308 DC-DC可调电压输出3.3-12V(理论值),3.1-13.2(实际值),最大1A,功率5W以内
  • SX1308 输出电流测量范围0-0.94A

7.4V锂电池平衡充:

  • 充电电流在1A以内

经测量基准电压3.3V波动基本在0.5%以内,示波器增益(模拟开关+运放)、衰减(电阻分压)测量后整体输入输出误差在5%以内

在这里插入图片描述


接口/开关:

  • 跳线帽(交直流耦合、衰减倍数、电容电感测量开启、电感3档位)
  • 拨码开关(电容3档位、(电压2、电流2、电阻4)档位)
  • 测试点(用于测试)
  • DC口((电压、电流、电阻、电容)测量、可调电压输出、锂电池充电、锂电池直接输出)
  • 排针(串口、SW口、屏幕)
  • Type-C(5V供电)
  • 拨动开关(锂电池供电、供电切换)
  • 香蕉头(信号输入)

程序框图:

在这里插入图片描述

杂谈:

  • 项目目的:学习电路、Pcb、Stm32及相关软硬件,现学现卖;

  • 主控为stm32f103rct6,基于hal库;

  • 屏幕为2.8寸(320x240)旧屏幕(电阻触摸),40pin,实际使用的口差不多一半吧,8位数据口+锁存器,非spi;

  • 电路主要就是一些芯片的典型应用,运放的放大、跟随、比较功能,电压电流电阻的计算,还有一个三点式振荡电路,通过测频来测电容、电感

  • 代码相关:

    • 没有使用图形库,所以如果想移植不同大小屏幕的话就比较繁琐了,界面参考了B站up主 AxinDIY 的示波器界面(他好像参考的正点的界面),所以代码写界面虽然枯燥但也没花太多时间(感谢AxinDIY的分享,参考了界面,成品外观,部分电路)(另外感谢 嘉立创 的免费打板(一个6层、一个4层)和示波器案例(提供了示波器的大致概念、框架、思路));
    • . 因为功能比较多,所以要触控的话,位置判断比较多,比较繁琐,界面参数相关的绘制也比较多;然后由于只有一个拨盘电位器,需要切换很多功能,也是比较繁琐的,但总体难度是不大的;
    • stm32主要使用功能:GPIO、Usart调试、TIM+ADC+DMA、TIM+DAC+DMA、TIM(输入捕获、定时)、按键外部中断、屏幕相关;
    • 波形显示相关:
      • 3个buf(只存储Y轴值),一个存储ADC输出值buf1,一个存储将ADC输出值转化为屏幕显示Y轴位置的值buf2,一个存储移动缩放后的值buf3;
      • 默认使用buf2绘制波形,单次触发或屏幕暂停后使用buf3绘制波形;
      • 流程为显示波形,显示参考线,仅清除有波形的位置,仅清除参考线,绘制格栅,新波形显示…(整屏刷新试过太慢了);
      • 实际绘制波形区域大小为250x150;
    • 波形连线因为是相邻点只需要画竖线就好了,不需要计算斜率;
    • 单次/自动触发,这里自动触发未做触发处理,就是将采集到的信号进行显示
  • 使用软件: AD24、立创EDA、LTspice、STM32CubeMX、VsCode+EIDE、Keil5

  • 芯片使用情况:
    RAM: 9.5% 4.5KB/48.0KB
    ROM: 13.9% 35.5KB/256.0KB
    IO口基本上算是用完了

在这里插入图片描述


原理图:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

硬件问题及解决:

  1. 参考电压原设计是2.5V,但未连到stm32相应引脚,最后使用的3.3V(解决方案:代码解决)
  2. 电荷泵电路连线出错,有交叉(解决方案:物理切割加飞线解决)
  3. 屏幕(硬件未使用spi接口,8位数据口+锁存器输出)8个数据端口连接stm32的引脚未连续且在两个GPIO组(解决方案:驱动写数据写命令的时候8个IO口单独判断操作,但降低了速率(本来几个指令的事一下子翻了好几倍),对屏幕刷新率有一定影响)
  4. 屏幕40pin(20+20)布局左右反了(解决方案:有17+17个口左右只有一个口使用,直接飞线左右相连,剩下3+3个写代码的时候位置互换)
  5. 振荡电路存在问题(解决方案:修改电路加飞线解决)
  6. 拨盘电位器电压错误,连到了5V,应该为3.3V(解决方案:代码解决,同时物理标记3.3V的位置,拨动的时候不要拨过头)
  7. 拨盘电位器封装错误(解决方案:飞线解决)
  8. 连接上下两块板子的灰排线座放不下(解决方案:物理切割灰排线座)
  9. 蜂鸣器驱动电压不够(解决方案:蜂鸣器也不是一定要用)
  10. 锂电池平衡充位置设计有点问题,充电不太方便(解决方案:下次注意)
  11. 外观上还有改进空间,可以更紧凑(解决方案:下次一定)
    在这里插入图片描述

存在问题:

  • 屏幕刷新率不高,帧速率只有3~4

疑惑:

  • 该振荡电路不太适合用来测量电容、电感,理论值和实际值偏差较大,代码上是用了一个系数才接近实际值(也有可能是使用的电感误差太大),疑惑的点是,在仿真里加大三极管偏置电压是会增大输出正弦波的幅值,而实际板子上是在正弦波的基础上叠加一个直流电压(波形整体向上移,峰峰值不变),不知道什么原因

如果有下一版:

  1. 可以考虑使用外部参考电压;
  2. 修正电荷泵电路;
  3. 屏幕换成常见的SPI接口(方便他人复刻),软排线(缩小体积),程序上使用DMA搬运数据;
  4. 测量电容、电感的电路替换成电桥测量电路;
  5. 拨盘电位器封装修正,电压连接参考电压;
  6. 2x5p封装直接使用灰排线座封装,留足空间;
  7. 蜂鸣器驱动电压改为5V;
  8. 改善布局,修改部分元器件封装;
  9. 提高屏幕刷新率;
    在这里插入图片描述
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐