1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

前言

小编大学期间共参加了三次省级/国家级的电子设计竞赛/单片机应用设计大赛,均获得了一等奖,现将这些作品分享出来,供有需要的朋友进行学习。

大学期间,电子类的比赛比较重要的比赛应该就是每年暑假的省/国家级大学生电子设计竞赛吧,其中省赛是偶数年,国赛是奇数年,小编都有参加过,上一篇分享了我们团队参加2016年省赛做的循迹小车,感兴趣的朋友可移步至省电子设计竞赛一等奖作品分享(一)

本文分享的是我们团队参加2017年国赛做的单相用电器分析监测装置,这个比赛我们团队获了省一等奖,不是国家级一等奖,筛选出省一之后,还要进一步筛选,有个综合测评,队友太给力,综测成绩也挺好的,但是还是由于比赛的得分太低了,没办法派出去评国奖,唉。

竞赛题目

每年的TI杯电子设计竞赛都会出好几个题(关于17年TI杯电子竞赛的题目,有兴趣的可在后台回复:2017,进行获取),这次比赛我们选的是题目——单相用电器分析监测装置。该题题目及要求如下:

方案的选择及比较

一、系统框图

该系统有两部分组成:主机及从机。

主机以STM32为主控制器,通过SPI与ATT7022电能采集模块进行通信。ATT7022模块负责采集用电器的一些电源参数,如电压,电流,有功功率,无功功率等。我们判断用电器状态需要用到的参数是有功功率,经过一定的判断算法判断用电器的工作状态,然后将判断好的用电器的状态通过ZigBee无线模块发送给从机。

从机也是以一片STM32为主控制器,将主机发送过来的用电器的工作状态发送至串口屏上进行显示。

我们采用主从结构的原因是因为题目的发挥部分有要求:

方案选择的分析如下:

一、电能计量芯片的选择

1、电能信息采集模块主要是由电能采集芯片 ATT7022、电压互感器、电流互感器三部分组成。主要负责采集电压、电流数据,并转化为功率、电能信息,将用电信息存储于 ATT7022 的寄存器。

2、该芯片即可用于三相交流电的采集也可用于单相交流电的采集, ATT7022E 集成了 7 路 Sigma-delta ADC、参考电压电路以及所有功率、能量、有效值、功率因数及频率测量的数字信号处理等电路,能够测量各相以及合相的有功功率、无功功率、视在功率、有功能量及无功能量,同时还能测量各相电流、电压有效值、功率因数、相角、频率等参数,充分满足单相用电器监测装置的需求。

3、在输入 220V 交流电压经 6 个 22k 电阻进行分压,经电压互感器后接的精密检流电阻接入 ATT7022E 检测引脚,输入电流经电流互感器进行 1000: 1 分流经检流电阻接入 ATT7022E 的检流引脚。电压互感器和电流互感器将高电压进行隔离,很好的起到保护作用。 ATT7022E 模块由外部晶振及基本的外围配置电阻电容组成最小系统。

二、用电器状态判断

1、根据题意的要求电器的电流范围为0.005A-10.0A通过公式P=UI计算知,我们选择电器的功率范围1.1-2200W。

2、对于可识别的工作电器总数不低于7,且电流<5mA的大于5件,我们通过ATT7022电能芯片采集并传输得到各个用电器的工作状态。

3、我们将收到的电器参数通过Zigbee传输显示在液晶界面(time<=2s)。

4、第四点也是我们重点实现的步骤,由于需要实时指示当前用电器的情况,我们通过单片机读回的总功率去匹配不同用电器使用的功率和从而得出结果。通过对比了罗列法,穷举法,以及二进制模拟法。

(1)罗列法的实现太过于复杂,需将所有组合罗列并放在一个数组里面,太耗时间,太过繁琐。

(2)穷举法,通过算法能够快速得到我们所需要的结果,但是在相同功率不同用电器使用数的情况下,它并不能反应出我们实际的电器使用数。

(3)二进制模拟法,通过该方法我们将用电器的打开,关闭,分别对应二进制的0与1。通过C语言for循环遍历数组,从而得出我们预期的结果。如图所示我们通过二进制模拟,可以很清楚的看到用电器状态。

三、主、从机之间的通信

主从机之间通过ZigBee无线模块进行通信,ZigBee模块与主控之间通过串口连接。主机通过ZigBee模块往从机发送特定格式的字符串数据,从机使用中断的方式进行接收数据,然后在后台解析数据并刷新数据至串口屏上。

主机发送数据:

从机接收数据:

从机解析并显示数据:

四、屏幕界面图

这是我们的屏幕界面,用的是串口屏,串口屏我们用得很多,因为很方便地进行显示,而且显示效果也比较好。我的毕业设计也是用串口屏来显示的,有兴趣的朋友可移步至:智能桌面天气预报系统(终)进行查看。

代码获取

发现以前写的代码很乱,整理了一下,现在上传上来,有兴趣的朋友可关注微信公众号【嵌入式大杂烩】回复关键词:监测装置,即可获取。

【往期精彩笔记推荐】

学习使用带参宏,提高编程基础(一)

学习使用带参宏,提高编程基础(二)