摘要
本工程基于立创开发板的电压电流表训练营,在原项目基础上增加了1.8寸TFT屏幕,ESP32蓝牙芯片,USB接口,3.7V锂电池接口及其充电电流、SD卡接口,W25Q64芯片。
设想
设计概述
本工程基于立创CW32地文星开发板实现,需要能够实现0-3V,0-5V,0-10V,0-30V,0-3A的量程进行电压电流测量。同时使用1.8寸TFT屏幕进行数据显示,如果可以的话进行数据实时波形显示。能够使用3.7V锂电池供电,同时锂电池供电、USB供电、被测电源供电三种供电方式能够自由切换。能够使用蜂鸣器进行超量程报警,使用按键进行量程切换等功能,同时能够使用ESP32S3芯片进行数据无线上传。
系统组成及功能说明
系统组成大致如图1所示:
图1 系统组成
核心开发板:使用立创CW32地文星进行开发,主要实现ADC读取、数据处理、数据保存、屏幕显示处理功能。
测量电路:电压测量使用不同的电阻进行分压以测量,电流使用低侧电流采样进行电流采集。
测量方案:使用多路ADC引脚同时测量同一测量端口,通过程序切换使用最优量程。
测量端口:使用ADC引脚进行测量,通过USB转鳄鱼夹和2mm的香蕉插头实现外界测量端口。
通信模块:使用第二个串口与ESP32S3芯片进行通信。
调试端口:使用USB母头与CW32的串口1进行通信。
电源:3.7V锂电池使用AMS1117-3.3降压芯片获得3.3V电压给整个系统供电,USB接口使用SE8550芯片供电,被测电源与UBS接口共同使用SE8550芯片供电
显示:分两种方案,一种为使用7针OLED屏幕,使用SPI协议进行通信。另一种为使用1.8寸TFT屏幕,使用SPI协议进行通信。
额外存储:分两部分,一部分为SD卡,使用SPI协议进行通信,与显示部分挂载在同一SPI总线。另一部分为W25Q64SPIFlash,使用SPI协议进行通信,与显示部分挂载在同一SPI总线。
控制方案:使用4个6*6的轻触按键作为程序输入。
蜂鸣器:用于超量程报警,或者整花活。
LED:用于状态指示
理论成立,开始实现
原理图绘制以及器件选型
原理图由于所需的器件比较多,所以分了2P。1P为开发板及外部模块,如图2所示,包含MCU、电源输入、按键开关、LED指示灯、3.7V锂电池充电电路、3.7V转3.3V电路、电源选择电路、CH340N转USB电路、外设电路、ESP32及其外围电路、总电源开关电路。2P为测量及校准电路,如图3所示,包括0-3V测量接口、0-5V测量接口、0-10V测量接口、0-30V测量接口、0-3A测量接口、2mm香蕉座端口、USB测量端口、电流校准电路、TL431稳定2.5V电路、3.7V锂电池测量电路。
图2 开发板及外部模块原理图
图3 测量及校准原理图
软件设计
软件部分,我的设想是系统整体基于CW32官方提供的固件库去写,系统资源调控通过FreeRtos操作系统实现(https://github.com/FreeRTOS/FreeRTOS-LTS),界面通过uGUI实现(https://github.com/achimdoebler/UGUI),上位机部分使用python进行设计。设备与上位机直接通过蓝牙进行连接。文件系统使用FatFs15实现(http://elm-chan.org/fsw/ff/00index_e.html)。
实现中遇到的问题
然而,幻想是美好的,现实是残酷的。在进行软件编程和硬件调试的时候遇到了太多难以解决的问题,不过好在最基础的电压电流测量还是实现了。
设计问题
如图4所示,由于ESP32S3开机需要至少500mA的电流,而SE8550仅能输出250mA的电流,因此需要换个LDO才能支撑ESP32S3。好了,第一个问题出现了,能供应大电流的LDO不能承受过高的被测电压,能承受过高被测电压的LDO不能供应大电流。没办法,鱼和熊掌不能兼得,最终我放弃了被测电源供电,仅采用USB供电与3.7V锂电池供电,共用一块AMS1117-3.3V芯片为整个系统提供3.3V电压,供电方式通过开关选择。
图4 ESP32S3建议电源条件
硬件问题
芯片封装选择问题:如果上天能够给我一个再来一次的机会,我会对TL431那个芯片说,“我 ** 你 **,这他么SOT-23真是给人焊的的吗?”。
LayOut问题:给大家看下我的PCB走线,如图5所示:
图5 PCB走线
有眼尖的应该已经看到了,ESP32S3在PCB的右侧,而CW32在PCB的最左侧而他俩之间需要通过RX,TX两条线进行连接,这两条线上的数据可以说是跨越了千山万水,从CW32传输到ESP32S3,然后ESP32S3直接不认这个信号了。没错,就是直接不认这个信号了,但是如果飞从CW32飞一条线过去,ESP32S3就能接收到数据,我没有虚焊!没有虚焊!没有虚焊!用电流表检测两端是导通的 !就挺离谱,目前我的猜测是中间跨越的信号线有点多,导致RX,TX信号干扰严重。好了,蓝牙功能也寄了。
软件问题
软件问题有亿点点多。
首先是FreeRtos,CW32只有8K的RAM,8K啊,我从来没有打过这么穷的帐
在我移植完FreeRtos后,CW32甚至死机了,没错,我给FreeRtos分配的内存太大,导致死机了。后续更改了FreeRtos的configTOTAL_HEAP_SIZE为5*1024才能够正常开机,但是请看VCR图6:
图6 程序内存占用
这个工具名叫keil5_disp_size_bar,作者已在Gitee开源(https://gitee.com/nikolan/keil5_disp_size_bar)
然后问题又来了,使用的1.8寸屏幕分辨率为128*160,反映到程序里就是显示线程会占用极大的内存才能正常显示GUI。如图7所示:
图7 FreeRtos线程占用
然后FreeRtos内部就仅剩76*4byte的内存了,好了,还没能实验的FatFs15已经似了。
最终已实现功能
目前已经实现了0-3V,0-5V,0-10V,0-30V,0-3A的电压电流测量以及量程切换,同时测量数据能够在1.8寸TFT屏幕进行数据显示。
正面丑照:
开机运行:
电压测量
电流测量 看起来是电压,实际是电流,只是V忘了改成A
彩色丝印 由于这一版有BUG,所以只能重新打板了,55555555
后续
后续有机会的话会把其余的功能补全,希望能给个结营证书。
标签:供电,测量,CW32,ESP32S3,电流表,文档,电压,使用 From: https://www.cnblogs.com/tqht7h/p/18369428