一. 技术方案分析与选择
1. 系统基本方案的分析与选择
通过Keil 5编程,将程序烧录到STM32F103C8T6单片机中,单片机向IM1281B模块发送modbus协议,该模块检测采集用电器相关数据,通过HC-05蓝牙模块将数据传输给单片机,单片机通过串口显示屏实现人机交互功能。本方案采用IM1281B为核心构成的用电器分析监测装置,相比以电流采样电阻、变压器及相位检测电路为核心构成的单相用电器分析监测装置而言,此模块内部集成了电能采样芯片,能节省大量排版布线时间及PCB设计时间,且成本价格低廉,控制采样简单。
2. 主控制器件的分析与选择
方案一:选用LPC54608J512单片机作为控制核心
LPC546 MCU 系列采用 ARM® Cortex®-M4 内核,可提供以太网支持,并设有一个 TFT LCD 控制器和两个 CAN FD 模块。 LPC546 MCU 旨在提高灵活性和性能可扩展性,可提供高达 180MHz 的性能,同时保持低至 120uA/MHz 的功率效率。 LPC546 MCU 具有多21个通信接口,可满足下一代物联网应用的人机界面和连接需求。
方案二:选用FPGA(现场可编程门阵列)作为控制核心
FPGA采用并行输入/输出方式,运行处理速度快,具有丰富的开发工具和方便的开发环境,易于调试,并且将所有器件集成在一个芯片上,减小了控制板的体积,具有良好的稳定性、扩展性。但是我们不熟悉FPGA且其成本较高。
方案三:选用STM32F103C8T6单片机作为控制核心
STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。可提供高达72Mhz的性能。速度高,含有37个I/O口,3个USART,内置RC振荡器,精度更高,温漂更小。内含A/D转换器,可实现本赛题中对模拟信号的处理。符合赛题制作要求。
综合三个方案的性价比及实用性,我们选用STM32F103C8T6单片机作为控制核心。
图1
3. 数据检测采集模块的分析与选择
方案一:串电阻检测电流
选择一个电阻,连接到电路中用差分放大器采集电阻的电压值,进而求出电流。此方案具有电路结构清晰、成本低的优点,但测试误差大,温漂较大,无隔离,容易受地的干扰。
方案二:采用CS5463模块
此模块可以测量电源线瞬时的电参数信息,如电压、电流和功率,具有电脑-脉冲转化功能、相位补偿和系统校准等功能。该模块具有与MCU单片机通讯的双向串口,可编程的电脑-脉冲输出功能。但是该模块不适合我们作品的反复试验,且现有资料不全。
方案三:采用IM1281B高配版计量模块
IM1281B采用全隔离采样, 最小电能变量0.001kWh,内置电压采样、电流采样、计量通讯、校表算法、电能处理、数据转换等多种功能,功能齐全。应用难度系数极低,性能卓越,适合多种工业环境及高要求领域
综合三款数据检测采集模块的性价比及实用性,我们选择第三种方案。
图2
4. 人机交互部分
方案一:采用1.8寸TFT
TFT式显示器具有高响应度、高亮度、高对比度等优点,呈现给用户的画面色彩鲜艳,饱和度高,纯白、纯黑画面非常的纯净。但该屏幕的缺点体现在亮度的局限性,由于其超薄的外形无法实现超高亮度的需求,在亮度上会存在一定的限制,且比较耗电和成本较高。
方案二:采用0.96寸OLED
OLED基层使用富于柔韧性的材料,不会使用刚性材料,有机塑料层更薄、更轻而且更富于柔韧性。OLED为自发光,不需逆光系统,具有对比度高、耗电低、反应速度快等优点,耗电低对于电池供电的设备来说,尤其重要。界面大小能够显示我们所需内容。
综合考虑两款输出显示模块的优缺点,我们选择第二种方案。
5. 主、从机通信部分
采用TTL串行通信,单片机作为主机,IM1281B模块作为从机,两者通过两个HC-05蓝牙模块,由单片机向IM1281B模块发送modbus协议实现无线通信。
HC-05蓝牙模块体积小巧(3.57cm*1.52cm),工厂贴片生产,保证贴片质量。并套透明热缩管,防尘美观,且有一定的防静电能力。
MODBUS 是 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。modbus的帧格式简单、紧凑,编程简单,格式规范,易于传输。用户不必知道modbus的技术细节,只需参考说明手册并按要求完成配置,即可在短时间内实现设备间的连接通信。
图3 HC-05蓝牙模块原理图
6. 电源模块
方案一:采用1.5v干电池。
选用多节1.5V干电池,干电池能量转化率高,供能稳定可靠,可制成各种形状,大小,使用方便,易于维护,可在各种环境下工作,且价格便宜,随处都可以买到。但干电池易于自放电,在不使用时要蜡封保存,防止电解液中的水分挥发。还要避免高温潮湿。长期不使用的电器要取下干电池,防止电解液流出而腐蚀电器。干电池丢弃后会污染环境。
方案二:采用ACDC电源模块
采用ACDC电源模块,将220V电压转换为5V电压输出,此电源模块具有高效率、高功率因数、低纹波、电磁兼容性好、可靠性高、应用范围广等优点。此赛题中,满足对单片机供电的需求。
通过分析二者性价比,我们选择第二种方案。
二. 系统理论分析与计算
2.1 取样电阻的计算
题目给出电流范围为5mA~10A,考虑到电阻损耗的电能和功率,由以下公式:
Umin = IminR = 5Ma · 10mΩ = 50uV
Umax = ImaxR =10A · 10mΩ = 0.1V
Pmax = I²maxR = 10A · 10A · 10mΩ = 1W
可知两端最小电压为50uV,最大电压为0.1V,最大功率为1W
2.2 最小电流负载的计算
由题目要求,基础部分任务五为其他,我们自制负载,因最小电流为0.005mA,则自制可识别最小电流负载为:
R = Uin / Imin = 200V / 5mA = 44K
2.3 有功功率的计算
有功功率是指在交流电路中一个周期内发出或负载消耗的瞬时功率的积分的平均值(或负载电阻所消耗的功率),因此,也称平均功率。
记瞬时电压为u(t),瞬时电流为i(t),瞬时功率为p(t),则 :
记有功功率为P,则:
2.4 电能的计算
电能公式: W=UIt=Pt,
其中U为电力系统的工作电压,I为工作电流,t为通电时间,P为功率。
三. 程序设计
3.1电路的设计 系统总体框图
图4
3.2 程序的设计
3.2.1程序的设计思路
1)用电器的种类识别:将检测采集到的数据与预先学习好的数据进行对比,找出待测用电器与其他用电器特征参量,进行对比,进而选出用电器的种类。
2)学习功能:将所学习的用电器参数进行储存,并进行建表操作,当检测到此用电器参数时,查表对比,找出用电器种类。
下面是根据功率检测识别用电器的主要程序:
//================================================================
void IM1281B_JudgeSta(void)
{
int i = 0, iii=0;
int times = 0, timestmp = 0;
int ElectricalSta[7] = {0}; // 存储用电器状态(1或0)
u32 p_sta[7]; //各个用电器工作状态对应的实时功率,要么为0要么为该用电器已知功率
p_sum = 0;
for (times = 0; times < 128; times++)
{
//----------------------------------------------------------------------产生128组序列 ElectricalSta[7] ,表示7种用电器使用情况
timestmp = times;
for (i = 0; i < 7; i++){
ElectricalSta[i] = 0; //数组清零
}
i = 0;
while (timestmp)
{
ElectricalSta[i] = timestmp % 2; //求余数1 or 0;
timestmp = timestmp / 2;
i++;
}
//---------------------------------------------------------------------- 分类讨论,跳过不合理情况
//----------------------------------------------------------------------求出实测在用用电器的总功率 p_sum
//---------------------------------------//7号
if(PowerSum > 1000.0){ ElectricalSta[Load_seven] = 1; elecsta[Load_seven] = 1; }
if(PowerSum <= 1000.0){ElectricalSta[Load_seven] = 0; elecsta[Load_seven] = 0; }
//---------------------------------------//6号
if(PowerSum > 49.0 && PowerSum<1000.0) { ElectricalSta[Load_six] = 1; elecsta[Load_six] = 1; }
if(PowerSum <= 49.0) { ElectricalSta[Load_six] = 0; elecsta[Load_six] = 0; }
//---------------------------------------//1号
if(Load_Para[4]>PF_error) { ElectricalSta[Load_one] = 0; elecsta[Load_one] = 0; }
if((Load_Para[4]<=PF_error)&&(PowerSum>3.0)){ ElectricalSta[Load_one] = 1; elecsta[Load_one] = 1; }
//---------------------------------------
for (i = 0; i < 7; i++) //遍历数组
{
//---------------------------------------
p_sta[i] = ElectricalSta[i] * powers[i];
}
for (i = 0; i < 7; i++)
{
p_sum += p_sta[i];
}
//----------------------------------------------------------------------
if (my_ABS(p_sum, PowerSum) <= error_MAX) //进行匹配 假设匹配PowerSum
{
for (i = 0; i < 7; i++)
{
elecsta[i] = ElectricalSta[i]; //把得到的用电器工作状态序列输出储存到数组 elecsta[7]
}
p_sum = 0;
break; //在这里跳出所有循环的【【【】【【【【】【】【】】】】【】】】
}
//----------------------------------------------------------------------
p_sum = 0;
}
//if(my_ABS(PowerSum, powers[4])<1){elecsta[4] = 1;}
//
for(iii=0; iii<7; iii++){
P_sumShow += elecsta[iii] * powers[iii];
}
if(UI_page==1) oled_printf_float(65, 5, P_sumShow, 4, 2);
P_sumShow = 0;
//-------------------------------------
if (Load_Para[4] < PF_error){ //1号
elecsta[0] = 1;
}
if (PowerSum > 1000.0){ //7号
elecsta[6] = 1;
}
}
3.2.2 程序功能描述
按键功能:设置装置的工作状态、清除测试记录和调整程序相关参数清零程序
显示功能:显示电流、电压、功率、工作状态等信息。
误差校准功能:对采集模块采集的数据进行校准,使测试数据更接近理论值。
通信功能:用stm32F103C8T6单片机的UART实现蓝牙通信和与计量芯片通信。
3.2.3 程序流程图
图5
四. 测试方案与测试结果
4.1 测试方案
(1)硬件测试
通过杜邦线将各个模块连接,搭建各个模块的实际电路,用万用表检查各引脚间有无短路情况,通电有无过热现象,对各电路的电气参数进行测量分析,并记录结果。
(2)软件测试
使用Altium Designer和multisim分别进行画原理图和仿真测试,并记录结果,将数据与实际测量数据进行对比分析,记录大小与误差。
(3)硬件软件联调
利用STM32F103C8T6开发环境编辑或修改程序,使用芯片AD口采集并转换电路中的特征参数,再利用oled显示屏实现人机交互,多次测试并检查数据,当所测数据与实际数据不符时,调试程序并修改电路,直到出现正确结果为止。
4.2 测试条件与仪器
测试条件:硬件与原理图完全相同,多次检查无误,硬件电路保证无虚焊。
测试仪器:高精度的万用表,功率计。
4.3 测试结果与分析
用电器 |
电流 (mA) |
电压 (V) |
有功功率 (W) |
电能 (J) |
因数 |
电饭锅 |
7460 |
223 |
1667 |
150 |
1 |
手机充电器 |
169 |
224 |
18 |
650 |
0.4 |
电烙铁 |
163 |
224 |
36 |
660 |
1 |
测试结果对比实际测量值,在误差范围内,符合实际值,且识别模式下的工作电流满足不大于15mA。
4.4 结论与体会
在误差范围内,我们基本实现了赛题的所有要求,并得到以下结论:
1、有功功率存在叠加定理。
2、AD采集模块能够采集模拟数据并转换成数字量。
3、oled屏幕能够起到显示作用,且可以实现同时显示多个内容。
4、蓝牙传输模块可以实现无线通信。
5、IM1281B可以检测电源线的电参数信息,据此可以分析用电器类别和工作状态。
通过此次赛题,本小组成员深刻体会到了团队协作的重要性,巩固和学习了专业知识,锻炼了动手实践的能力,对STM32F103C8T6单片机、IM1281B模块、家用电器等有了更深入的了解。学会了团队成员间应如何更好地沟通,共同进步,整个过程每个人都受益匪浅。
五. 参考文献
[1]谭浩强.C语言程序设计[M].北京:清华大学出版社,2012.
[2]吴建平.传感器原理及应用[M].北京:机械工业出版社,2009.
[3]周航慈.单片机应用程序设计技术[M].北京:北京航空航天大学出版社,1991.
[4]谭博学,苗汇静.集成电路原理及应用(第2版)[M].北京:电子工业出版社,2008.
[5]黄志伟.全国大学生电子设计竞赛制作实训(第二版)[M].北京:北京航空航天大学出版社2011.
附录一 电路原理图
STM32F103C8T6原理图
IM1281B模块原理图
附录二 源程序