发作品签到
专业版

电压电流表7700758a

工程标签

34
0
0
0

简介

基于CW32F030C8T6地文星的电压电流表, 通过这次训练营. 学习了CW32的开发, ADC的使用, 以及电流采样的知识.

简介:基于CW32F030C8T6地文星的电压电流表, 通过这次训练营. 学习了CW32的开发, ADC的使用, 以及电流采样的知识.
电压电流表训练营【立创开发板&CW32】

开源协议

GPL 3.0

创建时间:2024-08-01 04:51:11更新时间:2024-08-26 06:09:11

描述

数字电压电流表结合了ADC的技术与电路测量原理,能够精确地将模拟的电压电流信号转换为数字显示,便于电子工程师直观读取和分析。
学习设计和制作一个数字电压电流表对于个人专业技能的提升是非常有益的。数字电压电流表项目涵盖了微控制器电路的设计与实现、信号采集与处理电路的设计、用户界面的开发与优化以及产品外观的设计等多个方面,融合了电子技术、微控制器编程、电路设计以及工业设计等多领域知识。考虑到初学者的学习进度与知识吸收能力,我们特别推出了这一入门级的数字电压电流表项目,非常适合电子技术的初学者以及想要深入学习微控制器应用的人群。该项目具备以下几个亮点:
采用核心板加扩展板设计理念,采用插件器件设计,让学习更能简单,让探索能更深入; 核心板选用国产武汉芯源半导体CW32为主控,同时兼容同类型其他款式开发板;但CW32更有优势。项目综合程度高,实用性强,设计完成后可作为桌面日常仪表使用,项目学习资料丰富,包括电路设计教学、PCB设计、代码编程的学习以及工程师调试能力的培养。
二、硬件设计
1.项目原理图

本项目电路图采用模块化绘制,在电路图中对不同模块使用线条进行了分区以便于读图,下面将分模块对电路图进行分析。

图片.png

供电电路

图片.png
在电源电路绘制时,无论是原理图还是PCB,应当注意几点问题:
原理图规范性:GND朝下,电源在上,不要出现地朝天的情况。
电容器设计:无论原理图还是PCB,电解电容在前,陶瓷电容在后
地线设计:单点接地,当前电源的地,汇总到当前电源的主电解电容的GND上,各级电源的主电解电容,汇总到前级电源的主电解电容的GND上。

MCU的选型分析
CW32在本项目中的重要优势

宽工作温度:-40105℃的温度范围
宽工作电压:1.65V
5.5V (STM32仅支持3.3V系统)
超强抗干扰:HBM ESD 8KV 全部ESD可靠性达到国际标准最高等级(STM32 ESD2KV)
本项目重点-更好的ADC:12位高速ADC 可达到±1.0LSB INL 11.3ENOB 多种Vref参考电压... ...(STM32仅支持VDD=Vref)
稳定可靠的eFLASH工艺。(Flash0等待)
电压采样电路,

图片.png
电流采样电路
图片.png
用于电压测量校准的TL431电路设计
TL431算是一个比较“老”的器件了,很经典,应用很广泛,现在在很多电子产品中仍然有其身影。

可能很多新手初次接触此器件,我们简单的讲讲此产品的原理,方便大家更好的应用TL431。

TI从名称上,将其定义为:精密可编程基准,我们在参考文献的第一页上,可以重点关注几个特性。
精密:精密,说明其输出电压非常准。我使用的为±0.5%精度的TL431,在室温下,板上实测2.495V。相较于常见的稳压二极管,精度天差地别。在应用电路图中,TL431内部以一个稳压管的符号做示意。 可调输出电压:可调输出电压在Vref到36V之间,我们在项目中使用输出Vref电压。Vref电压约为2.5V。所以我们在描述中用2.5V,实际是约等于的。 灌电流能力:也就是输出电压的引脚可以提供多少电流,这与在应用电路中的电阻(R13)的阻值有很大关系。不能低于1mA。如果没有灌电流的需求,则不要将电流设计过大,造成不必要的功耗影响。

图片.png
三、软件设计
嵌入式软件开发作为计算机科学和电子工程的交叉领域,要求开发人员具备一系列的专业知识和技能。 而基于CW32的嵌入式软件开发必备知识包括以下部分:

编程语言:

熟练掌握C(C++)语言,这是嵌入式系统中最常用的编程语言,因为它们提供了直接访问硬件的能力,并且代码执行效率高。
了解汇编语言,用于编写底层驱动、中断处理程序以及性能要求极高的代码段。
对其他编程语言如Python、Java等有一定了解,以便在特定情况下使用。
了解CW32标准库的用法。

了解处理器架构,如ARM、x86等,以及指令集和内存管理。
熟悉嵌入式系统的硬件组成,如微控制器、FPGA、DSP等。可以很熟练的根据CW32嵌入式芯片的数据手册及用户手册,查找所需外设工作原理。嵌入式操作系统(深入知识点):掌握常用的嵌入式操作系统,如μC/OS、FREERTOS等,了解其内核、进程管理、内存管理、设备管理和文件系统等基本原理。 能够进行操作系统的任务设计、任务管理等,以满足特定应用的需求。 硬件接口与外设: 熟悉常用的硬件接口,如GPIO、串口、SPI、I2C等,并能编写相应的驱动程序。了解嵌入式系统常用的硬件设备,如传感器、执行器、通信模块等,并能够与之进行交互。
开发工具与环境:
熟练使用集成开发环境(IDE),如KEIL、IAR、VISUAL STUDIO等,进行软件开发和调试。掌握交叉编译器的使用,以便在开发计算机上编译出能在目标硬件上运行的程序。熟悉调试器的使用,能够进行软件的断点调试、单步执行、变量查看等。

掌握单元测试、集成测试和系统测试的方法和技术,能够对软件进行全面的测试,确保软件功能的正确性和稳定性。
了解嵌入式系统的可靠性要求,能够进行软件的可靠性测试和验证。 只有全面掌握这些知识并具备持续学习的能力,才能成为一名优秀的嵌入式软件开发人员。
开发环境安装(建议MDK5.33版本)、DAPLINK下载器、固件库。 固件库可以在官方网上进行下载:www.whxy.com 调试器可以选用常见的STLINK、DAPLINK、PWLINK、WCHLINK、JLINK等等,能支持CORTEX-M的即可。
主程序代码如下:
c

int main()
{
RCC_Configuration(); //系统时钟64M
KEYGPIO_Init();
GPIO_WritePin(CW_GPIOC,GPIO_PIN_13,GPIO_Pin_RESET);
Seg_Init();
Btim1_Init();
ADC_init();
read_vol_cur_calibration();
ComputeK();
while(1)
{
if(BrushFlag==1)
{
DisplayBuff();
BrushFlag=0;
}
if(timecount>= 300) //300ms改变一次数码管显示值//
{
timecount=0;
Volt_Cal();
BrushFlag=1;
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

标定代码计算斜率函数如下:
c

void ComputeK(void)
{
K=(Y15-Y05);
K=K/(X15-X05);

    KI=(IY15-IY05);
    KI=KI/(IX15-IX05);

}

1
2
3
4
5
6
7
8

校准存储函数如下:
c

void save_calibration(void)
{
uint16_t da[5];
da[0]=0xaa;
da[1]=X05;
da[2]=X15;
da[3]=IX05;
da[4]=IX15;
flash_erase();
flash_write(0,da,5);
}

1
2
3
4
5
6
7
8
9
10
11

定时器BTIM1中处理按键检测及响应,代码如下:
c

void BTIM1_IRQHandler(void)
{
static uint32_t keytime=0,keytime2=0,keytime3=0,ledcount=0;
/* USER CODE BEGIN */
if (BTIM_GetITStatus(CW_BTIM1, BTIM_IT_OV))
{
BTIM_ClearITPendingBit(CW_BTIM1, BTIM_IT_OV);
Get_ADC_Value();
ledcount++; //LED闪
if(ledcount>=1000)
{PC13_TOG();ledcount=0;}

timecount++;
Dis_Refresh();//数码管扫描显示
if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_12)==GPIO_Pin_RESET)
{
  keytime++;
  if(keytime>=100 )
  {
    keytime=0;  //切换模式
    Mode++;
    if(Mode>=5)Mode=0;
    BrushFlag=1; //更新数码管
  }
}
else keytime=0;
if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_13)==GPIO_Pin_RESET&&Mode!=0)
{
  keytime2++;
  if(keytime2>=100 )
  {
    keytime2=0;  //切换模式
    if(Mode==1)
    {
      X05=Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE);
      save_calibration();ComputeK();Volt_Cal();BrushFlag=1;Mode=0;
    }
    if(Mode==2)
    {
      X15=Mean_Value_Filter(Volt_Buffer,ADC_SAMPLE_SIZE);
      save_calibration();ComputeK();Volt_Cal();BrushFlag=1;Mode=0;
    }
    if(Mode==3)
    {
      IX05=Mean_Value_Filter(Curr_Buffer,ADC_SAMPLE_SIZE);
      save_calibration();ComputeK();Volt_Cal();BrushFlag=1;Mode=0;
    }
    if(Mode==4)
    {
      IX15=Mean_Value_Filter(Curr_Buffer,ADC_SAMPLE_SIZE);
      save_calibration();ComputeK();Volt_Cal();BrushFlag=1;Mode=0;
    }
  }
}
else keytime2=0;
if(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_13)==GPIO_Pin_RESET)
{
  keytime3++;
  if(keytime3>=100 )
  {
    keytime3=0;  //切换模式
    Mode=0;
    BrushFlag=1; //更新数码管
  }
}
else keytime3=0;

}
/* USER CODE END */
}
该例程使用按键操作来标定。具体操作方法如下:

定义5个工作模式,K1键用于切换显示模式。K2键设置对应模式下的参数值,并保存到FLASH。K3键返回到模式0。

模式0: 显示正常的电压电流值(上一排数码管显示电压值*.V或.*V自动切换,下一排显示电流值,_.**A)

模式1: 电压5V标定值设置。上一排数码管显示5.05. 。下一排显示当前电压值_.V或._V。在该模式下,应将万用表测量被测位,调到5.00V。 按下K2键后,将当前值标定为5V电压值。

模式2: 电压15V标定值设置。上一排数码管显示5.15. 。下一排显示当前电压值_.V或._V。在该模式下,应将万用表测量被测位,调到15.0V。 按下K2键后,将当前值标定为15V电压值。

模式3: 电流0.5A标定值设置。上一排数码管显示A.0.5 。下一排显示当前电流值_.**A。按下K2键后,将当前值标定为0.5A电流值。

模式4: 电流1.5A标定值设置。上一排数码管显示A.1.5 。下一排显示当前电流值*.**A。按下K2键后,将当前值标定为1.5A电流值。

设计图

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

BOM

暂无BOM

附件

序号文件名称下载次数
1
CW32电压电流表-2.zip
0
2
98420f46b474f0a4a24b77932f760c6b.mp4
0
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航