2017年全国大学生电子设计竞赛 单相用电器分析监测装置(K题)
摘 要
单相用电器分析监测装置是一种通过采集并判断用电器的工作状态和特性参数(如电压、电流、功率因数等)来确定用电器的种类和工作状态的设备。本装置具有监测功能,即可以实时监测电流范围为0到5安培的用电器的工作状态并显示各个用电器的特性参数。我们采用飞思卡尔的K60芯片作为整个系统的控制核心,对电路的多项数据进行实时监测和显示。利用电流、电压互感器测试,其输出电压经过精密全波整流电路,再用单片机进行控制和显示。
关键词:单相用电器;分析监测;K60;电流互感器;电压互感器;AD采样
目录
一、系统方案. 1
1、主控制器件的论证与选择... 1
2、数据检测采集模块的论证与选择... 1
3、显示模块的论证与选择... 1
二、系统理论分析与计算. 2
1、K60控制模块的分析... 2
(1)AD采集转换模块... 2
(2)显示模块... 2
(3)串口通信... 2
2、整流滤波电路的分析计算... 2
(1)整体电路的设计思路... 2
(2)电阻阻值的选取... 3
(3)电容容值的确定... 3
三、电路与程序设计. 3
1、电路的设计... 3
(1)系统总体框图... 3
(2)数据监测采集模块子系统框图与电路原理图... 3
(3)辅助电源... 4
2、程序的设计... 5
(1)程序功能描述与设计思路... 5
(2)程序流程图... 5
四、测试方案与测试结果. 6
1、测试方案... 6
2、测试条件与仪器... 6
(1)测试结果(数据) 6
(2)测试分析与结论... 7
(3)心得体会... 7
五、参考文献. 7
附录1:电路原理图. 8
附录2:源程序. 8
单相用电器分析监测装置(K题)
【本科组】
一、系统方案
本系统主要由单片机分析控制模块、辅助电源模块、数据检测采集模块、显示模块、无线传输模块组成,下面分别论证这几个模块的选择。
1、主控制器件的论证与选择
51单片机运算能力强,编程灵活,但其内存较小,无内置AD,使用较为不便。
基于ARM Cortex-M4内核的32位微控制器K60,具有强大的运算处理能力和丰富的内存空间。内置16位ADC模块,并可实现在线编程,检测精度高。
由于完成本题需要大量编程工作,对单片机内存和处理速度要求较高,且小组成员更熟悉K60的使用,故选择方案二。
2、数据检测采集模块的论证与选择
电流互感器可将数值较大的一次电流转换为数值较小的二次电流,电压互感器可将数值较大的一次电压转换为数值较小的二次电压,将输出量通过采集电路,利用K60内部的ADC模块进行采集并转换分析。
但考虑到使用直接测量芯片可能不符合题设初衷,因此考虑采用方案一。
3、显示模块的论证与选择
OLED具有对比度高、耗电低、反应速度快等优点。但是,其价格较高,且尺寸达不到本小组的要求,不能同时显示多个内容。
TFT式显示器具有高响应度、高亮度、高对比度等优点,能足够显示题目要求的内容。
二、系统理论分析与计算
1、K60控制模块的分析
(1)AD采集转换模块
(2)显示模块
主机的彩屏显示相应用电器的特性参数(如电压、电流、功率和功率因数),从机的彩屏显示从主机发送过来的相应用电器的开关状态。
(3)串口通信
2、整流滤波电路的分析计算
(1)整体电路的设计思路
(2)电阻阻值的选取
要使反相放大电路满足放大倍数为-1,则电阻应满足R1=R2;同时反向加法电路中电阻应满足R4=R5=2*R3。故R1、R2和R3选用10KΩ,R4=R5=20KΩ。
(3)电容容值的确定
在电路仿真过程中发现,电容容值过小时(10uF以下),电路能够快速稳定,但滤波效果不佳,当电容容值过大时,滤波效果很好,但电路响应速度慢,因此考虑将电容容值设为10uF为宜。
三、电路与程序设计
1、电路的设计
(1)系统总体框图
系统总体框图如图2所示,其中辅助电源给监测电路、K60芯片以及液晶显示屏供电。A、B测试点用来接入单相用电器特性参数测量仪。
(2)数据监测采集模块子系统框图与电路原理图
(3)辅助电源
2、程序的设计
(1)程序功能描述与设计思路
根据题目要求软件部分主要实现AD采集转换、控制彩屏显示和实现无线传输功能。
1)ADC部分:采集电路中用电器的特征参数(如电压、电流、功率、功率因数等),将其转换成数字量。
不断采集数据并定义多个变量,将前后采集的数据不断对比,通过判断前后差值是否大于正常电路中该参数的波动幅度,来确定该用电器的工作状态,并输出其状态和参数。
(2)程序流程图
四、测试方案与测试结果
1、测试方案
搭建各个模块的实际电路,将各个模块通过杜邦线连接起来,用数字万用表对各电路的参数进行测量分析,记录结果。
使用Altium Designer绘制电路原理图,另外,使用Multisim软件进行仿真测试,再将测试结果与实际电路进行对比,并记录结果。
利用K60开发环境编辑或修改程序,使芯片AD口采集并转换电路中的特征参数,再利用显示屏进行显示,不断测试并检查数据,当发现数据出现异常时,调试程序并修改电路,直到得出正确结果。
2、测试条件与仪器
测试条件:检查多次,仿真电路和硬件电路与系统原理图相同,经检查,电路无虚焊,无短路。
序号 |
型号、名称 |
数量 |
备注 |
1 |
VC8045型数字万用表 |
1 |
深圳市胜利龙仪器仪表有限公司 |
2 |
UT70A数字万用表 |
1 |
优利德有限公司 |
3 |
LDS21010示波器 |
1 |
上海双旭电子有限公司 |
(1)测试结果(数据)
用电器编号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
显示采集值 |
90-93 |
185-192 |
425-450 |
735-750 |
1160-1200 |
1740-1770 |
>4000 |
显示电流值 |
10 |
23 |
42 |
53 |
93 |
187 |
8.2A |
测试蓝牙无线传输模块,当用电器插上时,与发送信号的芯片连接的显示屏显示该用电器的各项数据即采集量和电流,此时,接收端的显示屏上对应的用电器显示ON;当拔掉用电器时,发送端和接收端均显示OFF。
(2)测试分析与结论
(3)心得体会
五、参考文献
[1] 谭浩强.C语言程序设计[M].北京:清华大学出版社,2012
[2] 徐德宏,马皓,汪槱生.电力电子技术[M].北京:科学出版社,2006
[3] 黄志伟.全国大学生电子设计竞赛制作实训(第二版)[M].北京:北京航空航天大学出版社2011
附录1:电路原理图
附录2:源程序
void main(void){PLL_Init(PLL180); //初始化PLL为180M、ADC_Init(ADC0); //初始化ADC0模块UART_Init(UART0,9600);LCD_init(); //初始化TFTDisableInterrupts; //禁止总中断LCD_display_full(BLACK); //屏幕背景为黑色LCD_P8X16Str(0,0,"AHNU ZXF WJ ZSC",YELLOW,BLACK); //字符串输出LCD_P8X16Str(0,1,"No. mV mA W",ORANGE,BLACK); //字符串输出LCD_P8X16Str(0,2,"1",WHITE,BLACK); //用电器1LCD_P8X16Str(0,3,"2",WHITE,BLACK); //字符串输出LCD_P8X16Str(0,4,"3",WHITE,BLACK); //字符串输出LCD_P8X16Str(0,5,"4",WHITE,BLACK); //字符串输出LCD_P8X16Str(0,6,"5",WHITE,BLACK); //字符串输出LCD_P8X16Str(0,7,"6",WHITE,BLACK); //字符串输出LCD_P8X16Str(0,8,"7",WHITE,BLACK); //字符串输出//指示灯的初始化GPIO_Init(PORTA, 17, 1,1);//插电器判定GPIO_Init(PORTE, 26, 1,1);//拔电器判定GPIO_Init(PORTC, 0, 1,1);//while循环判定GPIO_Init(PORTD, 15, 1,1);//无插拔判定CurrentValue0 = ADC_Ave(ADC0,ADC0_SE9,ADC_12bit,20)*(float)0.7434; //B1口 V0:基准电流。获取未插拔时的参数值 //主循环while(1){ //测试蓝牙 UART_Put_Char(UART0,3); GPIO_Reverse(PORTC,0); time_delay_ms(500); //延时 GPIO_Reverse(PORTC,0);CurrentValue_a = CurrentValue0; time_delay_ms(500); //延时 //每隔0.2s获取当前电流值 与前一时刻进行比较 若差值大于正常波动,则等待。直到差值稳定在某一范围CurrentValue_b = ADC_Ave(ADC0,ADC1_SE9,ADC_12bit,20);Count2 = abs(CurrentValue_b - CurrentValue_a); while(Count2 > Range){ //V2在增加mark = 1;CurrentValue_a = CurrentValue_b;time_delay_ms(5000); //延时 CurrentValue_b = ADC_Ave(ADC0,ADC1_SE9,ADC_12bit,20);Count2 = abs(CurrentValue_b - CurrentValue_a); }//如果没进入上述while循环,说明电流没有增加,不用进行下面的操作if(mark == 1) {CurrentValue1 = ADC_Ave(ADC0,ADC1_SE9,ADC_12bit,20); //B1口,V1不停获取电流值; //若电路进行插拔(通过判断前后电流差是否大于Range) 则进行插、拔判断。无插拔则不响应if((CurrentValue1 > CurrentValue0) ){ //判断是否插用电器Count = CurrentValue1 - CurrentValue0; //获取变化值CurrentValue0 = CurrentValue1;GPIO_Reverse(PORTA,17);time_delay_ms(1000); //延时if(Count >= (E1-20) && Count <= (E1+20)){ //判断用电器1是否----插kind = 1;UART_Put_Char(UART0,kind);sprintf(data1,"%4d",Count);LCD_P8X16Str(2,2,data1,BLUE,BLACK); } if(Count >= (E2-20) && Count <= (E2+20)){ //判断用电器2是否----插kind = 2;UART_Put_Char(UART0,kind); sprintf(data2,"%4d",Count);LCD_P8X16Str(2,3,data2,BLUE,BLACK); }if(Count >= (E3-20) && Count <= (E3+20)){ //判断用电器3是否----插kind = 3;UART_Put_Char(UART0,kind);sprintf(data3,"%4d",Count);LCD_P8X16Str(2,4,data3,BLUE,BLACK); } if(Count >= (E4-20) && Count <= (E4+20)){ //判断用电器4是否----插kind = 4;UART_Put_Char(UART0,kind); sprintf(data4,"%4d",Count);LCD_P8X16Str(2,5,data4,BLUE,BLACK); } if(Count >= (E5-20) && Count <= (E5+20)){ //判断用电器5是否----插kind = 5;UART_Put_Char(UART0,kind); sprintf(data5,"%4d",Count);LCD_P8X16Str(2,6,data5,BLUE,BLACK); } if(Count >= (E6-20) && Count <= (E6+20)){ //判断用电器6是否----插kind = 6;UART_Put_Char(UART0,kind);sprintf(data6,"%4d",Count);LCD_P8X16Str(2,3,data6,BLUE,BLACK); }if(Count >= (E7-20) && Count <= (E7+20)){ //判断用电器7是否----插kind = 7;UART_Put_Char(UART0,kind); sprintf(data7,"%4d",Count);LCD_P8X16Str(2,3,data7,BLUE,BLACK); }}if((CurrentValue0 > CurrentValue1) ){ //判断是否拔用电器//判断是否拔用电器 Count = CurrentValue0 - CurrentValue1; //获取变化值CurrentValue0 = CurrentValue1; GPIO_Reverse(PORTE,26);time_delay_ms(1000); //延时if(Count >= (E1-20) && Count <= (E1+20)){ //判断用电器1是否----拔kind = 10;UART_Put_Char(UART0,kind);LCD_P8X16Str(2,2,"OFF ",RED,BLACK);}if(Count >= (E2-20) && Count <= (E2+20)){ //判断用电器2是否----拔kind = 20;UART_Put_Char(UART0,kind);LCD_P8X16Str(2,3,"OFF ",RED,BLACK); }if(Count >= (E3-20) && Count <= (E3+20)){ //判断用电器3是否----拔kind = 30;UART_Put_Char(UART0,kind);LCD_P8X16Str(2,4,"OFF ",RED,BLACK); }if(Count >= (E4-20) && Count <= (E4+20)){ //判断用电器4是否----拔kind = 40;UART_Put_Char(UART0,kind); LCD_P8X16Str(2,5,"OFF ",RED,BLACK); }if(Count >= (E5-20) && Count <= (E5+20)){ //判断用电器5是否----拔kind = 50;UART_Put_Char(UART0,kind);LCD_P8X16Str(2,6,"OFF ",RED,BLACK); }if(Count >= (E6-20) && Count <= (E6+20)){ //判断用电器6是否----拔kind = 60;UART_Put_Char(UART0,kind);LCD_P8X16Str(2,7,"OFF ",RED,BLACK); }if(Count >= (E7-20) && Count <= (E7+20)){ //判断用电器7是否----拔kind = 70;UART_Put_Char(UART0,kind);LCD_P8X16Str(2,8,"OFF ",RED,BLACK); }}}sprintf(data8,"Value%4d",ADC_Ave(ADC0,ADC1_SE9,ADC_12bit,20));LCD_P8X16Str(0,9,data8,CYAN,BLACK); //用电器1time_delay_ms(500); //延时GPIO_Reverse(PORTD,15);}}
void main(void){PLL_Init(PLL180); //初始化PLL为180M、LCD_init(); //初始化TFTDisableInterrupts; //禁止总中断LCD_display_full(BLACK); //屏幕背景为黑色LCD_P8X16Str(0,0,"AHNU: ZXF WJ ZSC",YELLOW,BLACK); //字符串输出LCD_P8X16Str(0,1,"No. ON/OFF",WHITE,BLACK); //字符串输出LCD_P8X16Str(0,2,"1",BLUE,BLACK); //用电器1LCD_P8X16Str(0,3,"2",BLUE,BLACK); //用电器2LCD_P8X16Str(0,4,"3",BLUE,BLACK); //用电器3LCD_P8X16Str(0,5,"4",BLUE,BLACK); //用电器4LCD_P8X16Str(0,6,"5",BLUE,BLACK); //用电器5LCD_P8X16Str(0,7,"6",BLUE,BLACK); //用电器6LCD_P8X16Str(0,8,"7",BLUE,BLACK); //用电器7LCD_P8X16Str(0,9,"Just do it!",PURPLE,BLACK); UART_Init(UART0,9600); //初始化UART0while(1){ GPIO_Init(PORTC,0,GPO,0);kind = UART_Get_Char(UART0);GPIO_Init(PORTA,17,GPO,0);switch(kind){//用电器插入显示case 1:LCD_P8X16Str(8,2,"ON ",GREEN,BLACK); break; //用电器1插入case 2:LCD_P8X16Str(8,3,"ON ",GREEN,BLACK); break; //用电器2插入case 3:LCD_P8X16Str(8,4,"ON ",GREEN,BLACK); break; //用电器3插入case 4:LCD_P8X16Str(8,5,"ON ",GREEN,BLACK); break; //用电器4插入case 5:LCD_P8X16Str(8,6,"ON ",GREEN,BLACK); break; //用电器5插入case 6:LCD_P8X16Str(8,7,"ON ",GREEN,BLACK); break; //用电器6插入case 7:LCD_P8X16Str(8,8,"ON ",GREEN,BLACK); break; //用电器7插入//用电器拔出显示 case 10:LCD_P8X16Str(8,2,"OFF",RED,BLACK); break; //用电器1拔出case 20:LCD_P8X16Str(8,3,"OFF ",RED,BLACK); break; //用电器2拔出case 30:LCD_P8X16Str(8,4,"OFF ",RED,BLACK); break; //用电器3拔出case 40:LCD_P8X16Str(8,5,"OFF ",RED,BLACK); break; //用电器4拔出case 50:LCD_P8X16Str(8,6,"OFF ",RED,BLACK); break; //用电器5拔出case 60:LCD_P8X16Str(8,7,"OFF ",RED,BLACK); break; //用电器6拔出case 70:LCD_P8X16Str(8,8,"OFF ",RED,BLACK); break; //用电器7拔出default:LCD_P8X16Str(0,9,"Just do it!",CYAN,BLACK); break; //用电器等待插拔中}}}
2017年全国大学生电子设计竞赛 单相用电器分析监测装置(K题)相关推荐
- 2017年全国大学生电子设计竞赛 单相用电器分析监测装置(k题)
- 单相用电器分析监测装置(K 题 本科组)-- 2017 年全国大学生电子设计竞赛试题
单相用电器分析监测装置(K 题 本科组)-- 2017 年全国大学生电子设计竞赛试题 一.任务 二.要求 1.基本要求 2.发挥部分 三.说明 四.评分意见 一.任务 设计并制作一个可根据电源线的电参 ...
- 2017 年全国大学生电子设计竞赛 仪器和主要元器件清单
2017 年全国大学生电子设计竞赛 仪器和主要元器件清单 一.本科组 1.仪器清单 2.主要元器件清单 二.高职高专组 1.仪器清单 2.主要元器件清单 一.本科组 1.仪器清单 500MHz 信号源 ...
- 2017年全国大学生电子设计竞赛:四旋翼自主飞行器探测跟踪系统(C题)主控RX23T,STM32F103VET6
2017年全国大学生电子设计竞赛 四旋翼自主飞行器探测跟踪系统(C题) [本科组] 2017年8月12日 摘 要 本系统由数据信息采集.数据信号处理.飞行姿态稳定和航向控制部分组成.系统选用瑞萨RX2 ...
- 2017年全国大学生电子设计竞赛河北省获奖名单
2017年全国大学生电子设计竞赛河北赛区获奖名单 序号 赛区 组别 号参赛队学校 学生姓名学生姓名学生姓名 奖项 250 河北 本科组 I 北华航天工业学院王宇航 赵德彪 林倩 二 ...
- 四旋翼自主飞行器探测跟踪系统(C 题 本科组)--2017 年全国大学生电子设计竞赛试题
四旋翼自主飞行器探测跟踪系统(C 题 本科组)--2017 年全国大学生电子设计竞赛试题 一.任务 二.要求 2.1.基本要求 2.2. 发挥部分 三.评分标准 四.说明 一.任务 设计并制作四旋翼自 ...
- 2017年全国大学生电子设计竞赛综合测评题
2017年全国大学生电子设计竞赛综合测评题 题目如下: 题目要求电源只能使用5V单电源.给运放使用5V单电源供电. 方波发生电路 有点像梯形是因为multisim上的LM324跟不上变化的速度,使用题 ...
- 调幅信号处理实验电路(F 题 本科组)--2017 年全国大学生电子设计竞赛试题
调幅信号处理实验电路(F 题 本科组)--2017 年全国大学生电子设计竞赛试题 一.任务 二.要求 1.基本要求 2.发挥部分 三.说明 四.评分标准 一.任务 设计并制作一个调幅信号处理实验电路. ...
- 滚球控制系统(B 题 本科组)-- 2017 年全国大学生电子设计竞赛试题
滚球控制系统(B 题 本科组)-- 2017 年全国大学生电子设计竞赛试题 一.任务 二.要求 2.1.基本部分 2.2.发挥部分 三.说明 3.1.系统结构要求与说明 3.2.测试要求与说明 四.评 ...
- 2017年全国大学生电子设计竞赛 猜题了
一年一度的电子竞赛又来了 仪器和主要元器件清单如下: [本科组] 仪器清单 500MHz信号源(带 AM调制) 低频信号发生器(1Hz~10MHz) 函数发生器(10 MHz,DDS) 单相电参数测试 ...
最新文章
- 积少成多 Flash(ActionScript 3.0 Flex 3.0) 系列文章索引
- chmod +x的意思就是给执行权限
- 从小开始学编程的小姐姐自述:我变成更好程序员的三点心得体会
- dhtmlxgrid导出的js_dhtmlxgrid jsp标签
- 卡写入保护开关原理_老电工带你解密:插卡取电开关
- python装饰器传递参数_如何将额外的参数传递给Python装饰器?
- 从案例角度解析建模平台动态规则引擎
- 《SPSS 统计分析从入门到精通(第2版)》一6.3 二项式检验
- GoAhead WebServer 架构
- python之函数用法capitalize()
- 如何对Internet Marketing网络市场营销进行数据报表分析
- web功能测试方法大全——完整!全面!(纯干货,建议收藏哦~)
- 每日单词20110507
- 分析google关键词de工具
- c mian 函数命令行参数
- Linux 配置No module named enchant
- 【Shotcut】沧海桑田_转场效果
- mysql 时间格式转换年月日时分秒
- 计算机中逻辑移位示意图,定点数运算之移位运算(收藏)
- 大豆技术面分析_外汇交易分析之技术面分析
热门文章
- LU列主元法解线性方程组
- WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透
- 配置mysql读写分离
- 电机与拖动matlab仿真,Matlab仿真软件在电机与拖动中的应用
- 直播企业掀“冲击IPO”浪潮,为何老玩家成受益者?
- 大厂面试 | 阿里巴巴大数据工程师面试题汇总
- win10计算器_喜欢 Win10 计算器?现在各个平台都能拥有!
- Tcl经典报错之 —— variable references require preced
- Oracle函数——COALESCE
- python识别图片中数字_使用Python程序识别图像中的数字