站内搜索
发作品签到
基于CW32的数字电压电流表
专业版

基于CW32的数字电压电流表

简介

基于立创·地文星CW32的数字电压电流表

简介:基于立创·地文星CW32的数字电压电流表
电压电流表训练营【立创开发板&CW32】

开源协议

Public Domain

(未经作者授权,禁止转载)
创建时间:2024-07-15 17:39:51更新时间:2025-11-06 14:54:34

描述

一、项目简介

一直是点灯狂魔,熟练于LED、数码管点亮,测量类程序一直没有入门过,本次训练营通过立创·天空星CW32开发板制作一款简易数字电压电流表,尝试学习一下电路之间测量于读取的方法;感谢嘉立创让我再一次体验到强大的一条龙服务,通过这次项目深入了解了彩色丝印、3D打印、面板制作等功能。

IMG_6773.JPG

IMG_6736.JPG

二、硬件部分

1.电源降压电路

image.png
通过SE8550K2一款最大输入可支持40V的低压差线性稳压器进行供电,项目中无需使用大电流所以采用LDO降压。
【1】原理图不仅体现了各元器件的引脚连接,而且还可以指出电路设计时电流的流向,先通过电解电容滤低频滤波,然后通过小容量电容滤掉高频噪声。
【2】设计DC插头时应注意DC插座的内径。常见有DC2.1、DC2.5,确定好电源接头与DC座是否合适。
【3】防反接设计中采用肖特基二极管(金属+半导体),导通电压低0.2V-0.3V,适合于快速切换和低压降,常见型号SS14、1N5819。而容易混淆的开关二极管属于典型PN结,压降0.6V-1.0V适合于数字和脉冲电路,常见型号1N4148。
【4】通过在电路中串联一个10R电阻可有效进行过流保护短路保护,0603封装电阻常见功率主要为100mW,P=UI=I²R,过流之后电阻烧断防止后续电路损坏。

2.电压采样电路

image.png
【1】常见的电池电压采样电路类似于右侧低侧电压电路,通过两个10K电阻平均分压采集外部电压。U=AD/4096×Vref×2
【2】高侧电压采样电路使用220K+10K电阻分压,U=(R/R总)xU源-->U_ADC=10K/(220K+10K)×V测,由参考电压为1.5V可知最大可测量34.5V电压。U=AD/4096×Vref×(220K+10K)/10K
【3】通过二极管正向钳位,当测量电压过大时引脚电压被强制钳位到5V+压降,防止芯片引脚损坏。二极管钳位电路和限幅电路详解

3.电流采样电路

image.png
【1】通过100mR的采样电阻进行电流的采集,项目设计量程为0-3A,P=I²R-->9×100mR=900mW,所以功率应选用常见的1W封装电阻。
【2】电路中采用引脚直连,并未使用电流感应放大器,所以电压放大倍数为1。I=U/R,通过ADC引脚的采集值计算出测量电流:I=AD值/采集量程×参考电压/采样电阻-->I=AD/4096×Vref×10
【3】通过串联1K电阻进行限流防止损坏ADC引脚,并且与后端电容构成RC低通滤波器,降低高频噪声。
【4】Layout时采样电阻应使用开尔文接法。

4.TL431基准电压

image.png
通过使用TL431电路提供2.5V基准电压(实测大约2.48V),由芯片手册可知当芯片1、2脚相连时VKA=VREF。
IKA建议电流最大1mA,限流电阻R=(5V-2.5V)/0.001A=2.5K。但是芯片灌电流可达100mA损害不大。
100mA为例P=UI=2.5V*100mA=0.25W所以限流电阻应当选用大于0.25W功率电阻。
image.png

5.显示、操作电路

image.png
【1】由于芯片I/O往往灌电流的能力大于拉电流的能力,所以LED设计为I/O低电平有效(亮)。出于减少LED对电流的消耗的考量,放弃部分LED亮度,减少器件参数类型,将LED的限流电阻选择为10K。红光LED最大正向电流20mA,最小电阻R=(5V-1.5V)/I=175Ω;I=U/R->3.5V/10K=0.35mA LED限流电阻分析
【2】通过使用两个0.28寸三位共阴极数码管作为数据显示。由数据手册可知数码管驱动电流最大35mA,驱动电压2.7V-2.9V,单片机IO口可以输出3.3V电平,灌电流输入最大25mA,R=U/I-->3.3V/0.025A=132Ω。所以采用300R电阻->3.3V/300R=11mA可点亮数码管。
image.png
image.png
image.png
!!!找了一圈,好像只找到了这款芯片电流比较小。(粗略搜索)!!!
image.png

三、实物制作

【1】电路中大部分采用0603封装,先焊接贴片部分,然后焊接直插部分。
【2】3.96mm×2P线对板针座若想方便使用可以换用2.54mm×2P座子便于连接常用的杜邦线,但过流能力会影响测量量程。(本次为便于测量 直接使用杜邦线缠绕在接线端子中)
IMG_6752.JPG

四、软件部分

1.编译器部分

【1】本次训练营在交流群里最多的问题主要是软件安装,新版本KEIL已经到达2024年5月的5.40版本下载链接新版本中已经不再提供AC5编译器而且CMSIS也更新到6.1.0,这对于大部分官方例程无法正常编译。需要将这两部分进行修改后再进行编译。(安装5.39版本时才仅有编译器不匹配的问题)(编译器需要下载到Keil/Arm路径下才能编译
【2】同时推荐一个芯片支持包下载速度比较快的官方链接,从此不用再KEIL PACK Installer中加载半天才能下载。
image.png
image.png
image.png
【3】关于使用Keil5想打开旧版本Keil4工程问题有两个方法:①迁移到新版本②使用旧版本支持包
想用原汁原味的工程推荐再安装旧版本支持包:旧版本支持包安装链接,安装后即可轻松打开旧版本工程。
image.png
image.png

2.程序部分

既然第一次接触测量类程序那肯定要亲手写程序理解一下。学了这么久感觉CV才是永远的神,使用官方例程可以快速实现外设寄存器的配置。刚好之前学习了一下CW32的BLDC,对芯片有一些了解。
【1】为了方便布线修改了数码管的布局,这样数码管的段选位就不是刚好与单片机低八位IO口一一对应,所以数码管段选的显示码无法直接显示数据,所以需要对共阴极数码管段选数组重新排列。

/*原共阴极数码管段选数组*/
const unsigned char duanma[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71,\
                  /*0-15*//*  0    1    2    3    4    5    6    7    8    9   10:A 11:B 12:C 13:D 14:E 15:F*/
                            0X00,0x40,0x09,0x6f,0x76,0x1e,0x38,0x54,0X3F,0x73,0X6D,0x78,0x3e,0x58};
                 /*16-29*//*16空 17:- 18二 19:G 20:H 21:J 22:L 23:N 24:O 25:P 26:S 27:T 28:U 29:c*/

/*新共阴极数码管段选数组*/
const uint8_t duanma[]={0XF5,0X05,0XB3,0X97,0X47,0XD6,0XF6,0X85,0XF7,0XC7,0XE7,0X76,0XF0,0X37,0XF2,0XE2,0X00,0x75};
      //共阴极数码管段码  0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F    空   V

数码管段码计算.png
【2】硬件误差:因采用了5%误差的220K电阻在测量电压时总会有明显的误差,所以只能通过软件计算减少误差。
①最开始的误差解决方法是类似于一元一次方程的方法,通过计算出每一段的实际值与测量值,算出误差斜率与零点。
下面是通过串口一点一点测量打印的实际值与测量值,发现在0-3V低侧电压检测端能够测量的量程内随着电压值的增加高侧电压检测端测量的数据误差越来越大。(可能是程序计算问题,如果有错误希望大佬们指出)
通过每个测量点计算出的斜率,再对每个数据点Y=KX+B反推回实际值。但是工程量有点大,所以使用了斜率的平均值先测试了一下。但是像下图一样,低侧电压测量与高侧电压测量还是会有十毫伏级别的误差。

/*直接算数据(无标定)*/
V = (float)Mean_Value_Filter(Volt_Buffer,ADC_MAXSIZE)/4096*ADC_REF_VALUE*23*100;//Uo=R2/(R1+R2)*U
V_low = (float)Mean_Value_Filter(Volt_low_Buffer,ADC_MAXSIZE)/4096*ADC_REF_VALUE*2*100;
Curr = (float)Mean_Value_Filter(Curr_Buffer,ADC_MAXSIZE)/4096*ADC_REF_VALUE*Sample_R*100;
TL431 = (float)Mean_Value_Filter(Volt_TL431_Buffer,ADC_MAXSIZE)/4096*ADC_REF_VALUE*100;

image.png
IMG_6743.JPG
②最后选择移植了一下官方例程,发现还是需要依靠算法加持,多学习方法才能更好的解决问题,并不是无法解决的硬件误差。断断续续盯了两天的代码终于理解程序原理的实现,所以将原来的5V、15V、0.5A、1.5A两点标定升级为0V-30V、0A-3A的逐级标定。
通过按键1进行电压电流显示、电压标定、电流标定三个界面的切换,在标定界面上面数码管显示当前标定值,下面显示AD测量值,通过按键2对当前数据的标定,标定完成后返回数据显示界面,按键3则可立即返回数据显示界面,电压标定需要30档、电流标定需要6档,标定过程有点复杂但是效果还是有的。从例程的0.01V误差可以缩小到各几伏会有0.01V的误差。(应该还可以继续增大精度,还需要继续学习)
image.png
image.png
image.png
③将标定数据通过串口打印导出,可以将数据存入数组通过按键直接对数据标定,避免误触修改参考值。
image.png

五.效果演示

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
电压测量.mp4
13
2
电流测量.mp4
15
3
电压电流校订-压缩版.mp4
24
4
简易电压电流表.rar
38
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航