1、简单易用,可快速上手
2、流畅支持300个器件或1000个焊盘以下的设计规模
3、支持简单的电路仿真
4、面向学生、老师、创客
1、全新的交互和界面
2、流畅支持超过3w器件或10w焊盘的设计规模,支持面板和外壳设计
3、更严谨的设计约束,更规范的流程
4、面向企业、更专业的用户
标准版 用电器识别分析装置
简介:本系统采用STM32F103作为主控模块,外接串口触摸屏实现人机交互,用电流互感器来检测整流后的具有在工作用电器的插座,通过不同用电器使用时的电流特征差异来判断用电器的工作状态。
开源协议: GPL 3.0
· 1.前言
· 2.团队介绍
· 3.题目要求
· 4.方案介绍
· 5.具体设计
· 6.测试结果
· 7.总结
电赛结果终于出来了,在通知推国赛那一刻已经激动得整宿睡不着了(实属运气爆棚了),国二对于我们来说已经是最好的结果了,继续沉淀,
在庆祝的同时刚好立创又发起了这次开源活动,受立创邀请,我们将开源这个项目
我们团队来自电子信息类专业,团队配置为两个硬件设计与一个软件设计。
本题要求设计并制作一个根据电源线电流的电参量信息分析在用电器类别的装置。该装置具有学习和分析识别两种工作模式。在学习模式下,测试并存储用于识别各单件电器的特征参量;在分析识别模式下,实时指示在用电器的类别。
其中重点与难点为:
1. 电网在不同时间与不同地点波动范围较大,会对大功率用电器测量造成影响,以至于其功率波动可达 ±50W之高,给用电器的准确识别带来极大困难。
2. 在测量大功率电器与小功率电器组合时,大功率用电器的频谱特性将会掩盖小功率频谱特性,给识别工作带来极大困难。
3. 如何对电流大小相同而阻抗特性不同的用电器进行鉴别。
4. 用电器的选择需要再三斟酌,好的用电器组合搭配会让你的初测效果好很多。
本系统方案主要采用STM32_F103单片机作为系统主控,电流互感器将大电流转换为小电流,通过采用电阻输出电压,再利用AD637 输出有效值,最后送入 stm32 单片机。单片机来获取有功功率、电压、电流等电参数,并通过这些参数进行用电器识别功能,最后单片机将判断的结果以及电流电压等实时显示在串口屏上。
(图中上方的三个模块均为减压模块给单片机提供3.3V的电压值,因后续改为使用的USB接口给单片机供电,所以这三个降压模块没有用处。)
AD637 典型应用图
AD637 采用高精度、高带宽的真有效值检测器件,它的功能是把外部输入的交流信号有效值变成直流信号输出,可以计算各种复杂波形的真有效值。可测量的输入信
号有效值可高达 7V,对于 1vRMS 的信号它的 3dB 带宽为 8MHz,并且可以对输入信号的电平以 dB 形式指示。
电流互感器由一次线圈、二次线圈、铁心、绝缘支撑及出线端子等组成。其一次线圈与主电路串联,且通过被测电流 I1,它在铁心内产生交变磁通,使二次线圈感应
出相应的二次电流 I2。如将励磁损耗忽略不计,则 I1N1=I2N2,其中 N1 和 N2 分别为一、二次线圈的匝数。电流互感器的变流比 K=I1/I2=N2/N1。在二侧端口并联
一个采样电阻即可转换为交流电压。
视频过大无法直接上传,附件里的视频清晰度较低,在这里给出高清视频链接:
链接:https://pan.baidu.com/s/1s3dUU0RHa_sWFOJ7ag0eRA
提取码:1234
程序设计的比较简单,具体流程如下:
整体流程:
软件流程:
其中核心代码如下:
static int32 test_value = 0;
uint32
timer_tick_last_update
=
0;
//上一次更新的时间
qsize size = 0;
unsigned int x=0,y=0,duty=0,delay=0;
unsigned long count=0;
//计数
//
int in_value = 12341;
//
int out_value = 231 ;
//
sprintf(i,"%d",in_value);
//
sprintf(i,"%d",out_value);
//配置时钟
Set_System();
// 配置串口中断
Interrupts_Config();
//配置时钟节拍
systicket_init();
//****************----串口 2 初始化 PA2 PA3
UartInit(115200);
//清空串口接收缓冲区
queue_reset();
USART_DMA_Tx_Init();
USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);// 打开串口 2 空闲中断
//****************----串口 1 初始化 PA9 PA10
USART1_Configuration();
TIME2_Init();
ADC1_Init();
//ADC 采样初始化
ADC_flag=0;
printf("开机!!!\r\n");
delay_ms(300);
while(1)
{
//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
//deal();
//printf("%d",biaozhiwei);
if(biaozhiwei == 1)//如果接收完一组数据
{
biaozhiwei = 0;
switch(select)
{
case 0xA1:
printf("开始学习用电器 1 ");
domo=1;
break;
case 0xA2:
printf("开始学习用电器 2 ");
domo=2;
break;
case 0xA3:
printf("开始学习用电器 3");
domo=3;
break;
case 0xA4:
printf("开始学习用电器 4");
domo=4;
break;
case 0xA5:
printf("开始学习用电器 5");
domo=5;
break;
case 0xA6:
printf("开始学习用电器 6");
domo=6;
break;
case 0xA7:
printf("开始学习用电器 7");
domo=7;
case 0xB1:
printf("开始识别用电器");
shibie=8;
break;
default:printf("error\n"); break;
}
}
/************************FFT 部分***************************/
// GetFFT(fft_50hz, fft_100hz,value,0);
//
in_value =in_value+1;
//
sprintf(adc_1,"%d",in_value);
// SetTextValue(1,14,adc_1);
//
delay_ms(500);
if(domo == 1) //学习电器 1
{
//printf("程序正常\r\n");
GetFFT(fft_50hz, fft_100hz,value,0);
if(fft_50hz[z]>1)
dianliu=6.2*fft_50hz[z];
else
dianliu=5.3*fft_50hz[z];
sprintf(xianshi_1,"%.4f",dianliu);
SetTextValue(1,14,xianshi_1);//显示电流
dianya=220+Mag_max;
sprintf(xianshi_1,"%.4f",Mag_max);
SetTextValue(1,15,xianshi_1);//显示电压
gonglv=3.52;
sprintf(xianshi_1,"%.2f",gonglv);
SetTextValue(1,16,xianshi_1);//显示功率
xiebo=phase[sign_1];
sprintf(xianshi_1,"%.5f",xiebo);
SetTextValue(1,26,xianshi_1);//显示相位
xiebo_1=fft_100hz[z];
sprintf(xianshi_1,"%.5f",xiebo_1);
SetTextValue(1,29,xianshi_1);//显示相位
domo=0;
}
if(domo == 2) //学习电器 2
...
设计图
电流互感器:
自制用电器:
BOM:
加载中...
是否需要添加此工程到专辑?