电压电流表设计文档

news/2024/9/21 20:35:38/文章来源:https://www.cnblogs.com/tqht7h/p/18369428
  • 摘要
  • 设想
    • 设计概述
    • 系统组成及功能说明
  • 理论成立,开始实现
    • 原理图绘制以及器件选型
    • 软件设计
  • 实现中遇到的问题
    • 设计问题
    • 硬件问题
    • 软件问题
  • 最终已实现功能
  • 后续

摘要

本工程基于立创开发板的电压电流表训练营,在原项目基础上增加了1.8寸TFT屏幕,ESP32蓝牙芯片,USB接口,3.7V锂电池接口及其充电电流、SD卡接口,W25Q64芯片。

设想

alt text

设计概述

本工程基于立创CW32地文星开发板实现,需要能够实现0-3V,0-5V,0-10V,0-30V,0-3A的量程进行电压电流测量。同时使用1.8寸TFT屏幕进行数据显示,如果可以的话进行数据实时波形显示。能够使用3.7V锂电池供电,同时锂电池供电、USB供电、被测电源供电三种供电方式能够自由切换。能够使用蜂鸣器进行超量程报警,使用按键进行量程切换等功能,同时能够使用ESP32S3芯片进行数据无线上传。

系统组成及功能说明

系统组成大致如图1所示:

alt text
图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:用于状态指示

理论成立,开始实现

alt text

原理图绘制以及器件选型

原理图由于所需的器件比较多,所以分了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锂电池测量电路。

alt text
图2 开发板及外部模块原理图

alt text
图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)。

实现中遇到的问题

然而,幻想是美好的,现实是残酷的。在进行软件编程和硬件调试的时候遇到了太多难以解决的问题,不过好在最基础的电压电流测量还是实现了。

alt text

设计问题

如图4所示,由于ESP32S3开机需要至少500mA的电流,而SE8550仅能输出250mA的电流,因此需要换个LDO才能支撑ESP32S3。好了,第一个问题出现了,能供应大电流的LDO不能承受过高的被测电压,能承受过高被测电压的LDO不能供应大电流。没办法,鱼和熊掌不能兼得,最终我放弃了被测电源供电,仅采用USB供电与3.7V锂电池供电,共用一块AMS1117-3.3V芯片为整个系统提供3.3V电压,供电方式通过开关选择。

alt text
图4 ESP32S3建议电源条件

硬件问题

芯片封装选择问题:如果上天能够给我一个再来一次的机会,我会对TL431那个芯片说,“我 ** 你 **,这他么SOT-23真是给人焊的的吗?”。

LayOut问题:给大家看下我的PCB走线,如图5所示:
alt text
图5 PCB走线

有眼尖的应该已经看到了,ESP32S3在PCB的右侧,而CW32在PCB的最左侧而他俩之间需要通过RX,TX两条线进行连接,这两条线上的数据可以说是跨越了千山万水,从CW32传输到ESP32S3,然后ESP32S3直接不认这个信号了。没错,就是直接不认这个信号了,但是如果飞从CW32飞一条线过去,ESP32S3就能接收到数据,我没有虚焊!没有虚焊!没有虚焊!用电流表检测两端是导通的 !就挺离谱,目前我的猜测是中间跨越的信号线有点多,导致RX,TX信号干扰严重。好了,蓝牙功能也寄了。

软件问题

软件问题有亿点点多。

首先是FreeRtos,CW32只有8K的RAM,8K啊,我从来没有打过这么穷的帐
text
在我移植完FreeRtos后,CW32甚至死机了,没错,我给FreeRtos分配的内存太大,导致死机了。后续更改了FreeRtos的configTOTAL_HEAP_SIZE为5*1024才能够正常开机,但是请看VCR图6:
alt text
图6 程序内存占用

这个工具名叫keil5_disp_size_bar,作者已在Gitee开源(https://gitee.com/nikolan/keil5_disp_size_bar)

然后问题又来了,使用的1.8寸屏幕分辨率为128*160,反映到程序里就是显示线程会占用极大的内存才能正常显示GUI。如图7所示:
alt text
图7 FreeRtos线程占用

然后FreeRtos内部就仅剩76*4byte的内存了,好了,还没能实验的FatFs15已经似了。

text

最终已实现功能

目前已经实现了0-3V,0-5V,0-10V,0-30V,0-3A的电压电流测量以及量程切换,同时测量数据能够在1.8寸TFT屏幕进行数据显示。

正面丑照:
alt text

开机运行:
alt text

电压测量
alt text

电流测量 看起来是电压,实际是电流,只是V忘了改成A
alt text

彩色丝印 由于这一版有BUG,所以只能重新打板了,55555555
alt text

后续

后续有机会的话会把其余的功能补全,希望能给个结营证书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/784296.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TA实践分享:材质与渲染——植物与风(Unity+UE)

【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、美术分析下面是风格化和写实两种风格的草地效果,看上去是两种不搭边的美术表现形式,但拆解其背后的美术特征和实现原理二者在我们…

1线性回归

一、概念 线性回归是机器学习中有监督机器学习下的一种算法。 回归问题主要关注的是因变量y(需要预测的值,可以是一个也可以是多个)和一个或多个数值型的自变量x(预测变量)之间的关系。需要预测的值:目标变量(target,y,连续值预测变量)。 影响目标变量的因素:X1..Xn…

设计模式之cglib动态代理

什么是动态代理呢?动态代理就是在java进程运行时,通过字节码技术,动态的生成某个类的代理类。在这个代理类中,我们可以做一些额外的操作,一方面仍然保持原有的方法的能力,另外一方面还增强了这些能力。听着是不是AOP有点像,没错,动态代理就是AOP的技术基石。在这之前我…

yarn 失败

1、输入yarn后,下载失败报错 connect ETIMEDOUT 10.136.33.5:8081at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)[1/4] Resolving packages... [2/4] Fetching packages... info There appears to be trouble with your network connection. Retrying... i…

AtCoder ABC 367

题解前言 本题解部分思路来自于网络,仅供参考。 A - Shout Everyday 题目大意 给定 Takahashi 每天的睡觉时间和起床时间,求 Takahashi 在 $A$ 时是睡着的还是清醒的。 解题思路 根据题意模拟即可。 code #include <bits/stdc++.h> using namespace std; int main() {i…

Ros2 MoveIt2 MoveGroup C++接口

在 MoveIt 中,最简单的用户界面是通过 MoveGroupInterface 类。 它为用户可能想要执行的大多数操作提供了易于使用的功能,特别是设置关节或姿势目标、创建运动计划、移动机器人、将对象添加到环境中以及从机器人上连接/分离对象。 此接口通过 ROS 主题、服务和操作与 MoveGro…

春秋云镜 Brute4Road

春秋云镜 Brute4Road先用fscan扫一下内网尝试打redis主从 python3 redis-rogue-server.py --rhost 39.98.122.75 --lhost 123.57.23.40 需要在vps下使用,选择r,然后输入要反弹的ip,port 使用pty获得交互式shell python -c import pty;pty.spawn("/bin/bash")尝试UID提…

【OpenCV教程】轮廓检测过程

@目录1.查找轮廓1.1 API1.2 轮廓层级检测模式:索引号(层级)RETR_EXTERNAL(索引顺序:从右下到左上)RETR_LIST(recommended)(索引顺序:从右下到左上,由外到内)RETR_CCOMP(not recommended)(索引顺序:由内到外,从右下到左上)RETR_TREE(recommended)1.3 轮廓坐标点储…

题解:P10279 [USACO24OPEN] The Winning Gene S

思路 建议升蓝。 算法一 考虑暴力。 我们先枚举 \(K,L\),考虑如何求解。 直接枚举每一个 \(K\)-mer,再枚举里面的每一个长度为 \(L\) 的子串,找到最大的子串并在起始部分打一个标记。最后直接看有几个地方被打标记就行。 时间复杂度:\(O(n^4)\)。预计能过测试点 \(1-4\)。 …

C10-02-HTML示例

HTML:02-1.html 基本功能实现:<a>和<img>标签联合使用及<img src="#"> 图片资源绝对路径引用JS使用:行内式、内嵌式、引入外部JS<input>标签:输入标签文本框<!DOCTYPE html> <html lang="en"> <head><me…

异常与中断的概念以及处理流程

1.CPU理解的中断CPU 在运行的过程中,也会被各种“异常”打断。这些“异常”有:指令未定义 指令、数据访问异常 SWI(软中断) 快中断 中断中断也是 “异常” 的一种,导致中断发生的情况有按键 定时器 ADC转换完成 uart 发送完数据,收到收据 等等 这些众多的“中断源”,汇集到…

wifi基础(一):无线电波与WIFI信号干扰、衰减

liwen01 2024.08.18 前言 无论是在产品开发还是在日常生活中,在使用无线网络的时候,都会经常遇到一些信号不好的问题,也会产生不少疑问:为什么我们在高速移动的高铁上网络会变慢? 为什么 5G WiFi 的穿墙能力没有 2.4G 的好? 为什么在对 WiFi 进行 iperf 拉距测试的时候,…