思享国logo
  • 点赞

    2

  • 宝推

    0

  • 10

  • 回复

  • 下载附件

    1

返回顶部

点赞数

2

回复数

1

被浏览

620

利用SLH89F5162和XRP7664可实时监测功耗的智能电表直流供电设计(二)——软件和测试结果

2018-01-11 14:04更新
  • 干货下载
  • LCD12864实时显示
  • 500mA读取时钟数据

关于利用SLH89F5162和XRP7664可功耗实时监测的智能电表直流供电设计,原理和硬件设计部分已经和大家分享过了,详细可参考http://www.all4lib.com/topic/5324。这里再和大家分享关于软件和测试结果部分,一起学习下吧~~


软件执行任务?

  • 显示:实时显示最新的数据到LCD上,500mA刷新一次数据;
  • 控制电压输出的开关,采集电压、电流值,计算出功率,平均电压、平均电流值;
  • 实时查询:过压、过流动作,一旦有过流过压现象,则立马断开供电;
  • 定时开启、关闭的时间,到达设置的时间,执行相应的开启或者关闭动作;
  • 500mA读取一次时钟数据,显示在LCD上;
  • 查询按键动作,以配置设置的参数;
  • 串口数据输出,以提供调试、上发给上位机的功能。
  • 记录配置信息:过压、过流值设定,定时时间设定,告警信息保存等。


代码框架?

微信图片_20180111105325

软件采用的是分文件、分功能的方式进行编写,其好处是为代码可视性、后期升级提供了极大的便利。主函数也采用简洁类型的函数调用,标记执行的方式,条理清晰醒目。


软件框图?

1.硬件框图

微信图片_20180111105257


2.软件流程图

由硬件部分的框架和软件框架,可以设计如下的流程图。

微信图片_20180111105231


3.软件代码

源代码可在附件中下载,这里附上主函数的部分代码。

void main(void)
{
	io_inout_set();				//IO初始化
	PWR_OUT_init();				//电源输出控制初始化
	init_overall();				//系统总的初始化
	clear_screen();				//LCD清屏
	
	while(1)
	{
		if(poll_flag1)
		{
			poll_flag1 = 0;
			key_poll();			//按键查询
		}
		if(poll_flag2)
		if(poll_flag3)
		{
			poll_flag3 = 0;
			LED1_run();			//指示灯显示
			Read_RTC_str(date_str);
			VIadc_poll();		//电流电压采集
			Alarm_poll();		//告警查询
			Editor_run_poll();	//配置项保存
		}
		if(poll_flag2)
		{
			poll_flag2 = 0;
			LCD_show_poll();	//LCD显示
			//LCD_show_VIstr();
			#ifdef UART_LOG
			test_poll();		//测试数据输出
			#endif
		}
	}
}


测试结果?

1.外框图

顶层元件及外框图,板子的长宽为9.7x5.4cm。

微信图片_20180111110527


2.成果展示

①未加上液晶

微信图片_20180111105437

②加上液晶

微信图片_20180111105234

③液晶效果图:

微信图片_20180111105237

主页面显示的数据为外接设备的用电情况,0.5秒更新一次,实时显示各项参数。电压的单位是V,最小可显示到1mV;电流的单位是A,最小可显示到0.1mA;功率的单位是W,最小可显示到1mW。


3.测试界面

①开机界面:

微信图片_20180111105243


②定时开关设置界面:

微信图片_20180111105247

③实时时钟设置界面:

微信图片_20180111105250


④警告界面:

微信图片_20180111105254            微信图片_20180111111121


:附件中可以下载相关资料,包括源代码、原理图、PCB、数据手册。


您尚未登录, 登入  或  注册  后可查看全部