
#第七届立创电赛#小型功率分析仪
简介
简介:开源协议
:GPL 3.0
描述
1.项目功能介绍
之前做了一个以电池供电的低功耗移动设备。为了评估电池寿命需要知道设备在一个休眠周期消耗的电量。因为设备的工作电流是不断变化的,一般的万用表难以胜任,所以需要一个能测量、记录、分析电流变化的精密功率计。但是这种仪器专业级的非常贵,为了一个练手的项目不划算,用示波器加放大电路又不够方便。于是就催生了此项目。
本项目是一个小型的便携的精密功率计,最高可以实现1uA的电流测量。带有一个2.4寸的QVGA屏幕,可以记录设备的电流消耗情况或电源的电压变化,并且以图形化的方式显示,方便进行供电或者功耗分析。机身自带电池,支持完全离线操作,无需上位机,同时也可以上传采样数据至PC进行更加详细的数据分析。支持触发采样功能,可以方便对偶发事件进行记录。最高100SPS的采样率,满足大多数场景下的需求。
特性:
- 数字电压表和电流表功能
- 2.4寸彩色LCD显示屏
- 电压表量程:0~5.5V,分辨率0.01V,电流表量程:0 ~ 1A,分辨率0.1uA(有效值1uA)
- 采样率:最高100SPS, 最低0.01SPS
- 最高采样深度6kpts
- 数据记录、回放和图表显示功能
- 支持游标,可随时回看采样记录
- 支持触发采样,工作模式:自动、手动、条件
- 条件触发支持电压和电流触发
- 触发边沿:上升、下降
- 支持数据上传(通过USB通用串口协议)
- 内置700mA电池,可离线使用最高4个小时,充电方式:USB TYPE-C
- 更多特性演示可以参考视频
本项目硬件部分100%使用立创EDA进行设计。
本项目软件、硬件完全开源,可以浏览、下载本项目资源,或在此基础上进行二次开发,但是禁止未授权的商用。
2.项目属性
本项目为首次公开,为本人原创项目。项目未曾在别的比赛中获奖。
3.开源协议
本项目完全开源,包括PC端的上位机代码和MCU端的代码。使用GPL3.0协议分发。
4.硬件部分
基本工作原理
设备的基本工作原理如图所示。这个项目本质上就是一个封装的电压表加上电流表,不过额外的增加了对测试结果的采样、存储、处理功能,这样可以用于观察电压或者电流随时间的变化情况,亦或者对指定时间段的数据进行分析。
PCB概览
背面
正面
硬件结构
项目的硬件结构主要由以下部分构成:
- 采样和放大电路
- 模数转换器(ADC)
- 电源管理模块
- 输入(用户按键)与输出模块(LCD和USB-UART)
- MCU
采样和放大电路
电流采样和放大电路概览
原理图
PCB图
电流的采样是本项目的重点。在本项目中,使用了采样电阻低边电流采样的方式来对电流进行采样。因为本项目设计时的最高电流分辨率达到了0.1uA,而电流的最大量程为1A,两者相差达一千万倍的,如果通过单采样电阻实现,那么不仅采样电阻要选择更高阻值的型号,而且需要使用运放对采样结果进行1000倍以上的放大,这样可能会在测量结果中引入大量的误差和噪音。所以,本项目使用了两个不同阻值的采样电阻。其中,低阻值(0.1Ω)的电阻用于大电流时的采样,高阻值(10Ω)的电阻用于微小电流时的采样。然后对于每个采样电阻上的采样结果分别通过运放进行二级放大,并且将每级放大的结果全部引出。这样一来,总共可以拥有四档量程,且每档量程的放大倍率都在正常范围内(10~100倍的数量级),在每个量程的范围内都可以充分发挥ADC的最大分辨率。最后经过对放大比例的调节,可以最终在硬件上实现最低0.1uA分辨率(有效值最低为1uA),最高999mA的高测量范围的设计目标。
量程切换电路
因为使用了两个采样电阻,如果两个采样电阻始终接入电路,那么在电流较大时,大阻值采样电阻上的压降将变得十分可观(0.1A的电流时将会有1V的压降),这一方面会带来发热,另一方面会导致输出端的电压下降,可能影响输出端设备的正常使用。所以为了解决这个问题,本项目设计了一个量程切换电路,在电流较大(本项目中设定的阈值为10mA)时,通过一个MOSFET,将大阻值的采样电阻短路,然后在电流小于该阈值时再关闭此MOSFET,将采样电阻接入电路。这样,就完美解决了大电流下,高阻值采样电阻上的压降问题。
电流放大电路
每个采样电阻对应的放大电路都由二级运放放大电路组成,其中初级放大电路使用差分放大方式,以进一步减小导线上的电阻带来的误差,二级放大电路则使用通用的正反馈放大。对于本项目而言,初级放大电路的放大倍率为33倍(10xADC测量范围),次级放大电路的放大倍率为9.2(约10)倍。两级的放大结果均引入ADC,加上另一个采样电阻的两级输入,总共有四级放大结果通过四个通道输入ADC。因为两个采样电阻间的阻值相差100倍,所以对于同一个电流信号,ADC将同时获得这个信号的x10,x100,x1000,x10000共四级输入(即四个档位),这样ADC就可以在自己的动态范围内,选择合适的档位来作为最终的输出结果。
电压放大电路
电压不是本项目的重点,因为通常情况下,我们使用过的电源都是恒压电源,电压不会产生较大的拨动,而且基本上也不会存在对超低电压(如小于1V)的测量需求。比起电压, 我们更关心的是电流的变化情况(市面上的有些同类仪器甚至不具备电压测量功能,就是单纯的高精度电流计)。所以,本项目设计的电压测量范围为0~5.5V,分辨率0.01V。
具体的电压采样使用一个差分放大(衰减)电路实现,将输入电压衰减2.13倍,这样在ADC的范围为03.3V的情况下,最高容许7V左右的电压输入,相对于05.5V的设计目标,既留足了余量,也可以充分发挥ADC的性能,实现0.01V的分辨率。
运放选型
电流信号放大部分,使用了两个高精度、零偏移的双路R2R运放COS8552,分别负责两个采样电阻上的信号的放大
电压放大部分因为要求不高,所以使用了通用的单通道运放RS321
ADC
由之前的介绍,我们可以看到ADC至少需要5个通道才能满足需求,即4个电流通道和一个电压通道。而且为了实现100SPS的采样率,ADC的采样速率也必须高于这个设计目标。而多通道、高分辨率、高采样率的ADC是非常昂贵的。因为我们对ADC各个采样通道的要求是不同的,我们希望更高的电流分辨率,但是对于电压的分辨率要求不高,所以出于最优化的选择,本项目选择使用独立的ADC对电流通道进行采样,而电压和其他模拟通道(如电池电量和摇杆输入)则使用MCU内置的ADC进行采样。
用于电流采样的独立ADC最终选择了ADS1115这个型号,具有4通道16bit的分辨率,使用IIC方式与MCU通讯,最高采样率为860SPS,满足本项目的需求。
电源管理
电池和充放电管理
为了使用方便并且满足完全离线使用的设计需求,本项目选择了内置锂电池的方案。锂电池的充放电管理使用经典的TP4056来实现,设计锂电池容量为700mAh,尺寸编码为642745(64mmx27mm长宽,厚4.5mm)
PCB版上对应的电池安装位置:
充电管理使用了经典的TP4056充电管理IC:
相关电路如下:
供电方案
因为本项目的工作电流需求不大,加上对电路的干扰比较敏感,所以在供电方案上,选择了LDO方案,使用的LDO是XC6206(即经典的662k)
为了实现供电上了数模隔离,再加上MCU的RTC部分需要的后备电源,所以总共使用了3颗XC6206,分别为数字电路、模拟电路和MCU RTC(后备电路)供电。需要注意的是,数字供电VCC和模拟供电VCC是由开关控制开启的,而后备电源供电则绕过了开关,直接连接在电池上。
电池电量和充电检测
这部分电路是为了检测电池电量和充电状态,均使用电阻分压电路实现。为了减少对电池电量的消耗,电量检测电路位于开关之后。两者的输出信号均直连MCU的ADC通道:
模拟地和数字地
为了减少模拟电路和数字电路间的串扰,本项目使用了模拟地和数字地隔离的方式,两者之间通过0Ω电阻单点连接:
用户输入和输出
LCD
LCD是主要的用户输出通道,本机的绝大部分数据都通过LCD向用户展示。在平衡了显示内容的完整度、MCU的处理能力和项目成本之后,本项目选择了一块2.4英寸分辨率为QVGA(320X240)的彩色点阵TFT-LCD显示屏。LCD通过8bit 8080总线与MCU进行通讯,经过测试,最大刷新率可以达到60Hz。实际使用中,为了降低MCU的压力,这块屏幕最终工作在8位(LUT)色模式,30Hz的刷新率下
LCD的电路如下
LCD的背光电路则使用一颗MOSFET通过PWM控制,调光频率约1KHz,最大工作电流约40mA
按键
本项目的用户输入全部由按键完成,包括一个五向开关(摇杆)和两个轻触按键组成。
为了降低IO的消耗和PCB布线难度,摇杆使用了ADC按键的接法:
其他两个按键则使用独立的IO。为了以后可能的MCU休眠功能,运行按键是高电平触发,连接在MCU的PA0休眠唤醒IO上,另一个选项/设置按键则使用通用的低电平触发,连接在MCU普通的GPIO上。
USB串口
为了实现采样数据的上传功能,本项目额外设计了USB-UART桥接电路,可以将数据通过USB串口上传至上位机。
其中USB串口IC选用的型号为CH340E:
在本项目中,串口的通讯参数为11500波特率,8数据位, 1停止位,无校验位
MCU
本项目使用的MCU是STM32F407VE,拥有192KB的SRAM,最大168MHz的主频,带有ADC和8080总线接口,可以满足本项目对于信号采样和处理以及驱动LCD的需求
5.软件部分
开发环境
本项目使用基于Eclipse的STM32CubeIDE开发,编译器为GCC:
软件架构
本项目的软件架构比较简单,使用了HAL库作为MCU的硬件驱动,使用FreeRTOS作为整个项目的软件基础。OS共分为两个线程,其中一个为ADC采样线程,为高优先级线程,另一个则为主线程。ADC采样线程只负责按照固定的频率进行ADC的采样。其他的信号处理,用户交互,数据展示,逻辑处理等均在主线程内完成。
图形处理部分使用了8位的整屏framebuffer以降低开发难度并提高刷屏效率,使用的图形库的字模处理部分使用了LVGL的部分代码,其他全部为自行编写。
使用的图形库部分代码截图
采样数据的结构使用了一个结构体进行定义,这样在每个采样点上均保存了采样时的电压、电流和时间戳数据。单个数据内存消耗为8byte,总共使用48KB的内存来实现最高6Kpts的存储深度
6.项目材料清单
7.大赛LOGO验证
8.其他图片
成品图
正面(未开机)
PCB背面
设计图

BOM


评论