文献标识码:A
DOI:10.16157/j.issn.0258-7998.2015.12.005
中文引用格式:王长清,余丙涛,潘德强. 基于STM32的逐阳帆控制系统设计[J].电子技术应用,2015,41(12):25-27,31.
英文引用格式:Wang Changqing,Yu Bingtao,Pan Deqiang. A solar tracker system based on STM32[J].Application of Electronic Technique,2015,41(12):25-27,31.
0 引言
太阳能作为一种清洁、可持续发展的新能源,目前已经被大量利用。由于在同一地理位置观测到的太阳方位角时刻处于变化当中,导致固定支架式太阳能电池板发电量较低。目前,国内部分光伏电站已经大量采用可跟踪式太阳能支架。光伏电站一般建于人烟稀少的荒漠地区,占地面积大,系统维护较为困难,对跟踪支架控制系统的可靠性和调试便利性提出了要求。文献[1]提出的高精度太阳能跟踪控制器解决了太阳跟踪精度的问题,但是控制功能单一,实用性不强。文献[2]提出的控制系统实用性较强,有大风天气的保护模式,但是系统维护升级复杂,同时因为没有备份系统程序,一旦程序出现不可恢复性问题,系统就不能正常工作,可靠性不高。
针对以上方案存在系统维护升级困难、可靠性不高的问题,本文提出的基于STM32的太阳能跟踪系统,具有升级维护方便、系统可靠性高、实用性强的特点,目前已经被应用于内蒙古自治区察右中旗库伦光伏电站的跟踪式光伏支架项目中。为了解决系统升级困难的问题,该系统创新性地将ZigBee技术和应用编程技术结合应用于工程之中,实现了无线升级的功能,将后期维护升级人员的工作量减小到最少。为了方便后台管理,系统将信息通过ModBus协议上报。该系统有抗风和抗雪两种保护模式,提高了系统抵抗自热灾害的性能。为了保证系统的可靠性,系统将控制芯片的片内Flash分为BootLoader程序区、主程序区和备份程序区,当主程序因不可知因素扰乱不能正常工作时,系统通过BootLoader程序跳转至备份程序区继续运行。同时,系统通过μC/OS II操作系统对系统任务进行调度管理,保证系统的实时性和稳定性。经实际应用测试,该系统工作稳定。
1 系统原理
系统采用ST公司的STM32F103ZET6为主控芯片,外部挂载GPS模块、角度传感器、EEROM、ZigBee模块以及独立键盘。系统通过GPS模块获取当前经纬度值,通过读取STM32内部的时钟模块,计算出当前时间值,并通过经纬度和时间值计算出太阳方位角。系统通过读取角度传感器获取当前太阳能板的方位角度值,计算出太阳当前的方位角与太阳能板倾斜角的角度差,再根据该差值驱动电机将太阳能板转动一定角度。由于光伏电站一般建于人烟较少的地区,维护比较困难,所以对太阳追踪系统的稳定性要求较高。本系统通过对片内Flash进行分区,将片内512 K Flash分为BootLoader程序区、主程序区和备份程序区,保证系统在主程序卡死时能够跳转到备份程序区继续运行,从而提高了系统的稳定性。由于光伏电站占地面积太大,动辄多达1到2平方公里,动用人力来对区域内所有设备进行升级维护工作量太大,本系统通过ZigBee技术实现了区域内无线网络覆盖,使维护人员在一台设备上即可对网内任一设备进行无线升级,减少了工作量。为了方便光伏电站对逐阳帆系统进行管理,本系统采用ModBus通讯协议提供RS485接口,以便后台对追踪系统进行参数设置和信息查询。本系统设有独立键盘,用于手动控制。由于系统较为复杂,对系统的稳定性和实时性都有一定的要求,所以本系统采用μC/OS II 操作系统对任务进行管理。
2 系统硬件设计
系统分为主板和从板,主板安装在电控柜,用于控制三相交流电机。从板安装于斜单轴主梁上,外部挂载角度传感器,用于获取角度信息。主板与从板通过RS485串行总线通信。主板的串口1用于获取GPS信息,串口2用于与ZigBee模块通信。串口3和串口4接RS485接口。串口5接RS232接口。电机驱动采用三相交流电机正反转模块。为了扩大ZigBee的通信范围,系统通过CC2592进行功率放大。按键采用自锁式按键开关。系统硬件结构图如图1。
3 系统软件设计
3.1 从板软件设计
从板用于采集太阳能板当前方位角度值并通过RS485总线反馈给主板。从板的程序流程图如图2。
系统首先配置时钟,本系统采用外部8 MHz晶振,经芯片内部倍频后,系统时钟为72 MHz。外设初始化包括IIC、定时器和串口。MPU6050的初始化包括解除休眠状态、设置陀螺仪采样率选择量程等。主程序通过检测接收完成标志位来判断一帧数据是否接收完成,并检测是否是关键字,若是关键字,则读MPU6050,计算三轴角度并通过串口发送。
3.2 主板软件设计
主板的程序分为BootLoader部分和APP部分。
BootLoader部分用于无线IAP和处理系统异常,代码存放在片内Flash 0x8000000到0x8002FFF 12 KB空间范围内。程序首先解锁Flash,然后初始化串口和IIC。IIC挂载24C02,用于存放系统标识字。初始化完成后,读取存在24C02中的标识字,并进行加1操作,再存入24C02。在主循环中读取存放在24C02中的标识字,通过标识字的值来判断系统当前的状态。如果标识字为1,说明此刻在进行IAP应用程序升级,此时系统通过Ymodem协议接收.bin文件并执行新程序。如果标识字为2,说明App程序卡死,导致系统没有及时复位,此时程序跳转至备份程序区。当标识字大于2时,说明备份程序也卡死,此时程序不再跳转,点亮LED进行报警。BootLoader程序的地址偏移量为0,共12 K 地址空间;App程序的地址偏移量为0x3000,250 K 地址空间;备份程序的地址偏移量为0x41800,250 K地址空间。BootLoader程序流程图如图3。
App部分程序流程图如图4。系统通过μC/OS II 操作系统来对各个任务进行管理。由于App部分的代码存放在Flash中的地址偏移量为0x8003000,所以在程序开始时,需要设置地址偏移量:SCB->VTOR=Flash_BASE | 0x3000。设置完后初始化各种外设并初始化系统,创建开始任务,最后开始对系统的各个任务进行处理。
启动任务主要是用于创建二值信号量、邮箱、内存区和系统的各种任务。在完成创建后,需要删除启动任务。
系统设置任务用于设置系统参数,由于系统设置任务是关键任务,所以其优先级仅次于起始任务。系统设置任务通过串口1与上位机连接,设置的参数有时间、经纬度、板长、板间距、限位角、避风角、避雪角度。系统首先通过SETSYSTEM指令进入系统设置状态,并通过串口在上位机界面上打印提示信息。进入系统设置状态以后,通过不同的指令进行不同参数的设置。在设置RTC时间时,需要将时间换算成秒数,再将该值写入RTC的秒寄存器,同时注意闰年换算。由于电站后台需要对系统信息进行查询,所以需要将系统参数写入到保持寄存器中,方便后台查询管理。在系统设置的循环中加入系统延时,即将该任务挂起,提高系统的实时性。保证在进行系统设置时,系统的各个任务仍然可以调度。系统设置任务的程序流程图如图 5。
由于ModBus任务的实时性较高,可用信号量或者邮箱来触发,在实际测试中发现将ModBus处理函数放在定时器中断服务程序中更好。本系统支持ModBus的命令有01,02,03,04,05,15,16。保持寄存器中包含的信息为从机地址、时间信息、经纬度、限位角、工作模式等信息。
按键任务用于检测按键事件,保证系统可以手动控制。任务轮询模式按键是否有按键按下,如果按下,进行消抖,发送邮箱。在按键任务中需要注意的是系统必须是轮询电平而不是上升沿或者下降沿。在模式按键按下之前,正转和反转按键按下,系统不做任何操作。
电机驱动任务用于获取GPS、RTC、角度数据。并根据当前系统模式来驱动电机。电机驱动任务的程序流程图如图6。
经计算,太阳方位角基本上为2分钟转0.5度,因此程序对实时性要求不高。当模式按键按下以后,按键任务会发送邮箱给电机驱动任务。当电机驱动任务接收到邮箱以后,会检测正转反转以及模式按键是否按下。3个按键均为自锁按键,只有在模式按键有效的情况下,正反转按键才有效。如果在1秒之内没有收到邮箱,此时电机驱动任务结束挂起,取得CPU所有权。申请内存存放GPS、角度、时间信息。读GPS,如果当前GPS无效,读RTC时间,并将时间值写入时间寄存器。读角度值,如果角度值无效,电机停止转动,并点亮LED报警。读模式寄存器的值,1为自动模式,2为避风模式,3为避雪模式。如果是自动模式,需要根据时间、经纬度、板子参数计算出太阳的方位角,驱动电机。
3.3 ZigBee程序设计
ZigBee部分主要是透传作用。系统采用的ZigBee协议版本为ZStack 2.5.1a。协调器与上位机相连,在协调器收到串口数据以后,将收到的数据进行广播。所有子节点收到协调器广播的数据以后,将数据通过串口发送给控制板。如果当前的控制板处于BootLoader模式,则控制板将ZigBee模块通过串口发送过来的数据写入Flash。子节点将控制板通过串口发送过来的数据单播给协调器,协调器收到子节点单播的数据以后,通过串口发送给上位机。系统需要预编译MT_TASK,在MT层处理串口数据。在MT层接收完一帧数据以后,将数据打包,发往应用层。应用层收到数据以后,将数据解包,然后调用AF_DataRequest()函数将串口字符串发送出去。当收到空中发过来的数据以后,应用层会有AF_INCOMING_MSG_CMD事件产生,在该事件的处理函数中对数据进行解包,然后将有效数据通过串口发送出去。
4 结论
该系统的创新处为把ZigBee技术应用于光伏电厂,通过ZigBee技术和应用程序编程技术实现了系统程序无线更新,减轻了调试人员的工作量。通过对片内Flash分区,写入备份程序,保证了系统的可靠性。同时系统的多种工作模式保证了系统的抗风、抗雪性能。在实际现场的测试,该系统运行稳定。目前,该系统已经被应用于上海摩昆新能源科技有限公司承担的内蒙库伦光伏电站二期可跟踪光伏支架的项目中。
参考文献
[1] 王小鑫,胡红利,王博.高精度太阳能跟踪控制器[J].光电与控制,2012(12):80-83.
[2] 仲玉芳,王慧芬,叶建锋.光伏发电系统太阳跟踪装置的研究[J].太阳能学报,2013(10):1762-1767.
[3] 万蓉凤,修春波,卢少磊.基于ZigBee技术的风速测量系统的设计[J].中南大学学报(自然科学版),2013(S1):162-165.
[4] 丁力,宋志平,徐萌萌.基于STM32的嵌入式测控系统设计[J].中南大学学报(自然科学版),2013(S1):260-265.
[5] 王钰博,黄凯,陈辰.嵌入式Flash读取加速技术及实现[J].浙江大学学报(工学板),2014(09):1570-1579.
[6] 张猛,房俊龙.基于ZigBee和Internet的温室群环境远程监控系统设计[J].农业工程学报,2013(S1):171-176.
[7] 肖振锋,袁蓉湘,邓翔天.基于MSP430F169的远程智能故障检测器[J].电力自动化设备,2013(01):160-164.
[8] 李鹏,黄新波,赵隆.智能输电线路状态监测代理的研究与设计[J].中国电机工程学报,2013(16):153-161.
[9] 李传伟,常关羽,于振兴.基于无线传感网络的石油钻机设备远程监控系统的设计与实现[J].西北工业大学学报,2013(02).
[10] 王林军,许立晓,邵磊.碟式太阳能自动跟踪系统传动机构的误差分析[J].农业工程学报,2014(18):63-39.
[11] 刘琨,邹琴梅,胡玉超.塔式太阳能热发电自主式定日镜系统设计[J].北京工业大学学报,2014(07):1073-1078.
[12] 邸斌,宋宏明.一种新型太阳能跟踪系统的研究[J].哈尔滨理工大学学报,2012(02):67-71.