# 基于STM32F103RCT6多功能(示波器+万用表+平衡充...) **Repository Path**: nbqyj666/Oscilloscope_Multimeter_7.4V-Battery-Charge_Based_on_STM32F103RCT6 ## Basic Information - **Project Name**: 基于STM32F103RCT6多功能(示波器+万用表+平衡充...) - **Description**: 基于STM32F103RCT6的多功能仪器(示波器+信号发生+万用表+7.4V锂电池平衡充+可调电压输出)(开源) - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 7 - **Created**: 2025-10-08 - **Last Updated**: 2025-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 视频链接:https://www.bilibili.com/video/BV1oPn2zZExh ![输入图片说明](Oscilloscope_Proj/DSC_7221.jpg) ![输入图片说明](Oscilloscope_Proj/DSC_7169_1.jpg) # 功能概述: - 示波器:衰减、增益、触发沿、触发方式、峰值、峰峰值、周期、占空比、采样频率,栅格电压、栅格时间、参考/触发线、波形移动缩放 - DAC:频率、波形种类 - 万用表:多档位电压、电流、电阻、电容/电感测量 - 可调电压输出3.1-13.2V,最大1A - 7.4V锂电池平衡充,1A以内 ![输入图片说明](Oscilloscope_Proj/DSC_7177_1.jpg) ![输入图片说明](Oscilloscope_Proj/DSC_7181_1.jpg) --- # 参数: - 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%以内 ![输入图片说明](Oscilloscope_Proj/DSC_7049.jpg) --- # 接口/开关: - 跳线帽(交直流耦合、衰减倍数、电容电感测量开启、电感3档位) - 拨码开关(电容3档位、(电压2、电流2、电阻4)档位) - 测试点(用于测试) - DC口((电压、电流、电阻、电容)测量、可调电压输出、锂电池充电、锂电池直接输出) - 排针(串口、SW口、屏幕) - Type-C(5V供电) - 拨动开关(锂电池供电、供电切换) - 香蕉头(信号输入) --- # 程序框图: ![输入图片说明](Oscilloscope_Proj/%E7%A8%8B%E5%BA%8F%E6%A1%86%E5%9B%BE.jpg) # 杂谈: - 项目目的:学习电路、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口基本上算是用完了 ![输入图片说明](Oscilloscope_Proj/DSC_7197.jpg) --- # 原理图: ![输入图片说明](Oscilloscope_Proj/osc_proj_sch_3.jpg) ![输入图片说明](Oscilloscope_Proj/osc_proj_sch_2.jpg) ![输入图片说明](Oscilloscope_Proj/osc_proj_sch_1.jpg) # 硬件问题及解决: 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. 外观上还有改进空间,可以更紧凑(解决方案:下次一定) ![输入图片说明](Oscilloscope_Proj/osc_proj_pcb_1.jpg) --- # 存在问题: - 屏幕刷新率不高,帧速率只有3~4 ### 疑惑: - 该振荡电路不太适合用来测量电容、电感,理论值和实际值偏差较大,代码上是用了一个系数才接近实际值(也有可能是使用的电感误差太大),疑惑的点是,在仿真里加大三极管偏置电压是会增大输出正弦波的幅值,而实际板子上是在正弦波的基础上叠加一个直流电压(波形整体向上移,峰峰值不变),不知道什么原因 --- # 如果有下一版: 1. 可以考虑使用外部参考电压; 2. 修正电荷泵电路; 3. 屏幕换成常见的SPI接口(方便他人复刻),软排线(缩小体积),程序上使用DMA搬运数据; 4. 测量电容、电感的电路替换成电桥测量电路; 5. 拨盘电位器封装修正,电压连接参考电压; 6. 2x5p封装直接使用灰排线座封装,留足空间; 7. 蜂鸣器驱动电压改为5V; 8. 改善布局,修改部分元器件封装; 9. 提高屏幕刷新率; ![输入图片说明](Oscilloscope_Proj/DSC_7202_1.jpg)