摘要 绿色能源的开发和利用是太阳能跟踪装置,以响应中国节能减排的重要决策。该装置采用单片机、两步进电机、光电转换器及相关外部部件和传感器,其中太阳能电池板和云平台可完成360°旋转,使用两个步进电机也可以更准确地定位旋转角度,使用单片机控制、感光元件采样,然后电平比较实现方向和角度控制,当两者没有电平差时,电机静止运行,当单片机控制步进电机运动时,主题结果不仅可以用于太阳能发电,还可以用于天文观测等其他光学场所,具有较高的实用价值。 关键词:太阳能;步进电机;单片机控制;感光元件
Abstract The development and utilization of green energy is an important decision in response to China’s energy conservation and emission reduction,solar tracking device. This device USES a single chip microcomputer,plus two stepper motors,photoelectric converter and related external components and sensors and so on,including solar panels and yuntai can be very good to complete 360 ° rotation,using two step motor can also be more precise positioning of the rotation Angle,using single-chip microcomputer control,photosensitive components sampling,Again level compared to realize the position and Angle control,when there is no level difference between the motor still work,when the level difference single-chip microcomputer control stepping motor sports,subject results not only can be used for solar power,can also use the other to light place,such as astronomical observation has high practical value.
Key words: solar energy; Stepper motor; MCU control; Sensitive element
目录 摘要 Ⅰ ABSTRACT Ⅱ 第一章 绪论 1 1.1 前言 1 1.研究太阳能追踪器的目的和意义 1 1.3 对太阳能的理解 1 1.4 国内外太阳能现状及发展趋势 2 1.5 本文的主要贡献和创新 2 第二章 系统设计与实现 4 第三章 系统原理及器件介绍 3. 6系统功能设计 3.2 硬件系统分析设计 3.2.1 STM32单片机核心电路设计 3.2.2 28BYJ-48步进电机ULN2003驱动电路设计 3.2.3 关键电路设计 99 3.2.4 光检测电路设计 100 3.2.5 TFT触摸彩屏1.44寸模块 11 3.2.6 太阳能电路设计 133 3.2.7 TP4056锂电池充电模块电路设计 3.2.8 USB-5V16升压模块电路设计 3.2.9 USB-5V18升压模块电路设计 3.3 STM32 单片机系统软件设计 3.3.1编程语言选择 1919 3.3.2 KEIL项目开发环境 20 3.3.3 STM ISP程序烧录 21 3.3.4 CH340串口程序烧写模块介绍 3.4 软件开发工具 233 第四章 全文总结和展望 24 4. 24全文总结 4.二 后期工作 24 致 谢 25 参考文献 26 附录1系统部分PCB 27 288
绪论第一章
1.1 前言 随着时代的进步和科学技术的快速发展,能源需求增加,过度依赖不可再生能源,使不可再生能源存储,部分不可再生能源(石油)被视为战略资源,据目前统计,煤炭、石油、天然气将在实践中日益枯竭[1],耗尽。为了更好地实现可持续发展,设计提出了可行的太阳跟踪解决方案。 1.2 研究太阳能跟踪器的目的和意义 为了解决人们对不可再生资源的过度依赖和对清洁能源的高利用率。建议设计一个零污染、高效的设备——太阳能跟踪器。通过电机、控制器、照明板光传感器等部件的相互配合,可以实现太阳光照射最强的方向跟踪,安全绝对无污染的清洁能源,很好地阐述了光能的可行性——提出了太阳能跟踪装置的设计和生产。 1.3 了解太阳能 优点:太阳作为一种取之不尽的能源。在《太阳能利用技术》[2]中有相关提到,到达地球的表面能量相当于每秒连续向地球投放500万吨煤炭。无论太阳走到哪里,它都是财富。免费使用时,无需考虑任何运输成本和零污染。缺点:即使如此完美,也有两个致命的缺点[3]:一是能流密度很小;第二,由于(天气、夜间等)因素的不同,太阳的光强也会有很大的差距,很难长时间保持在恒定值,这在一定程度上大大影响了使用效率[4]。 1.4 国内外太阳追踪器的现状和发展趋势 国外太阳能追踪器:太阳能在2004年至2006年的发电量惊人的4961MW[5]1997年,美国Blackace单轴追踪器的热接收率提高了15%…,[6]。 国内太阳能追踪器:在应用市场上不断扩大,使用太阳能追踪器也是一个非常受欢迎的对话主题。经过多年的经验,它被用于热水器、路灯和西部计划、太阳能发电、太阳能加热等[7]。 更常用的是单轴跟踪,相比之下更需要多轴,实现全方位无死角跟踪。 1.5 工作内容 自动控制和手动调节工作方式: 自动模式:顾名思义,自动模式是一个不受人为控制的自动追求过程。设备上电后,初始化完成,根据光敏元件收集光强度A/D转换将电信号转换为数字信号,并根据数字信号的大小关系控制电机运动。当光强度值大于上方时,单片机发出控制指令,上电机向下翻转;同样,光强度大于下方,单片机发出控制指令,上电机向上翻转;当上下光强度相等时,上电机不进行任何相对翻转。左右转动,光强度值高于左,单片机发出指令,控制下电机左转相应角度;当光强度值高于右时,单片机发出控制指令,下电机向左转动相应角度;当左右照明度保持几乎平均时,下方的第一个电机将保持不动。 手动模式下,通过手动控制四个按钮的高低电平状态,实现上、下、左、右翻转。
第二章 方案选择与系统设计 2.1 方案选择 2.1.1 编译语言的选取 选项1:C语言 语言结构,丰富的操作符和程序在编写时既简单又紧凑。直接访问物理地址可以实现直接硬件控制。这个程序非常有效。 作为面向过程C语言,其特点是对算法和数据结构的处理。通过直接算术处理,实现高效输出。 选择2:C 语言 C 面向对象,更好地适应现代编程。C 的使用是有限的,嵌入式应用更多C语言被用作开发环境,C语言操作也很快。C 因为太复杂,在这方面略逊一筹。 选择3:Java Java它是一种解释性语言,Java在操作过程中,在操作前进行解释,使速度减慢;C 可以直接编译系统识别的二进制代码形式,使其运行更快。 考虑到系统的复杂性,整个过程的计算量相对较大,所以我选择了浮点的计算方法和1作为整个系统的编译方法。 2.1.选择2 控制系统总体方案 选择1:视日追踪模式 这种模式是基于天文学公式,通过公式理想化计算太阳在不同时间的不同方向和角度。后期,根据当地日常实际运行轨迹编制相应的控制算法程序,完成两个步进电机,实现俯仰和方向旋转。其优点是对外部环境的依赖较小,缺点是无论外部环境是什么天气,它都会以相同的工作方式移动,增加不必要的能耗和部件的寿命磨损。 太阳俯仰角h和方位角A如下所示:
δ倾角,Φ局部纬度,Ω太阳时角(5-1) 选择2:光电跟踪模式 具体方法:模拟电池板的区别在于,光敏元件[8]安装在四个方向,外部光强信息的反馈通过光敏元件传输到核心板A/D转换。单片机再次进行信息处理,比较光强度大于上部STM32发出控制指令,驱动上端电机向下翻转;另外三种不同的运动情况也是完全相同的控制比较方法。 通过两者的比较,选择2,简单易操作,更适合广泛使用。在相同的使用条件下,最简单的方案是最好的方案。 2.1.3选择主控系统 选择1:51单片机控制芯片。程序修改方便快捷,价格低廉,但A/D转换需要扩大,增加软硬件负担,运行速度慢,使用中保护能力差。 选项2: FPGA基于SRAM,存储编程信息SRAM中间。缺点系统断电后信息丢失,每次使用必须重新配置。 选择3:ARM高性能嵌入式系统。它在解决数据处理和控制功能方面,非常适合太阳能跟踪。断电后信息不会丢失,可无限期使用。 结合任务要求,选择3作为设计标准STM32F103C8T6。 2.1.4电机选择 选择1:步进电机。为了更好的实时跟踪,可以准确控制电机的转角。 选择2:直流电机。减速器提高扭矩,负载大,高精度电机控制直流电机不能满足设计要求。 通过控制脉冲数直接控制启动和停止。启动速度快,步距角和速度仅取决于脉冲频率,不受外部因素的影响。因此,我们选择了这个设计任务方案1作为本路线设计的驱动电机,以便更精确地控制角度值并更好地利用太阳能。 2.1.5电机驱动系统选择 选择1:L298专业电机驱动模块选型,这种类型的驱动模块易于使用和连接,并且可以同时驱动步进电机和直流电机。 选择2:用于三极管和其他分立元件的H桥。重点是优点,简单的控制方法和简单的结构。载流量小,由于元件离散,体积大,稳定性得不到保证。 选择3:采用集成芯片,ULN2003。 可驱动八个步进电机芯片,可用于两个步进电机。在实际使用中,它通常被用作为大型步进机动车辆提供动力的起点。 在本设计中,根据实际设计要求选择了选项3作为步进电机驱动系统。 2.1.5实体结构框架选择 选择1:电机互相处成90°角安装,电机的左右翻转和上下翻转,缺少互助设备会出现运动死角。 选择2:将两个电机垂直安装,改变为大于90°的安装,在不引入外部设备的情况下,可以很好的避开运动死角,从而可实现全方位无死角跟踪,综合上述情况选择方案二进行本次的实体结构设计。 2.2系统设计2.2.1 单片机构成如下图:
图2–2–1 单片机构成示意图 控制方式:第一步是将数据程序装置,输入设备将程序发送到CPU,并且相应地将每个程序发送到控制器,然后控制器完成相互命令的传输,最后作用在输出装置上,输出设备上显示的结果是原始程序的效果。 2.2.2 系统整体控制框图如下:
图2–2–2 系统整体控制框图 控制方式:完成整个驱动控制,第一步就是感光元件及光敏电阻传感器对外界光的采集,完成电压跟随,通过A/D转换,然后通过电压的比较,使用STM32F103C8T6单片机控制电机的驱动,最终完成不同电机在不同的光照强度情况下不同方向的运动,最后实现对光的最大化接收。
2.2.3 电机控制框图如下:
图2–2–3 电机控制框图 控制方式:通过光的采集,实现对电机运动方式的最终选择和控制。 1当第一组感光元件接收到的光强度值大于其他三个方向的光强度值时,电机完成电机在水平方向的正向旋转,并返回到原始状态。 2当第二组感光元件接收到的光强度大于其他三个方向的光强度时,电机在水平方向上完成电机反转并返回到原始状态。 3当第三组感光元件采集到光敏数值大于另外任何方位的值,垂直方向电机做正向旋转。 4当第四组感光元件采集到光敏数值大于另外任何方位的值,垂直方向反向运动。 感光元件在接收管的均匀照明下时,此时的照明强度几乎相等,这意味着电机的状态不移动。 2.2.4整体电路原理图如下:
图2-2-4 整体电路原理图 系统上电启动,感光元器件采集此时此刻的光照强度,进行A/D转换后单片机对光强值比较,发出指令控制步进电机相应运动【2】,初始默认状态是自动跟踪模式【3】。 手动模式,通过控制4个按键的高低电平来实现接通与断开,单个控制开关分别控制两个电机四种不同的状态运动,升压模块是为了给整个系统稳定供电而存在。
第三章 元器件介绍 3.1 系统硬件系统分析设计 3.1.1 STM32单片机核心电路设计 较低的功耗,在达到使用要求的情况下,可为实验之外提供更多的串口和扩展的应用电路【4】,对发展前景的选择多于51。 一、STM32优点: ARM架构,Cortex-M3内核;功耗控;易于开发等。 二、STM32平台的选择可靠性: 存储空间和管脚应用大;引脚与软件的高度兼容性。 STM32F103C8T6图如下:
图3-1-1(a) STM32单片机核心板接口原理图 STM32单片机实物图如下图所示:
图3-1-1(b) STM32单片机核心板实物图 3.1.2 步进电机驱动电路设计 在系统中,选择了4期5线的5V-步进电机。
- 型号为28BYJ-48。
- 直径:28mm
- 电压:5V
- 步进角度:5.625 x 1/64
- 减速比:1/64
- 单个重:0.04KG 具体驱动电路原理图如下:
图3-1-2(a) 驱动电路原理图
图3-1-2(b) 驱动电路原理图
图3-1-2© 步进电机实物图 3.1.3 按键电路设计 按键控制相当于一种电子开关,当S1受外力按下时,电路导通从而达到人机交互的效果。按键时,引脚电平发生变化,由高变低,系统开始传输手动输入指令,电机运动。 原理见下图:
图3-1-3 按键电路原理图 3.1.4 光照检测电路设计 本系统的感光元件是行业最新出现的光敏电阻元件,通过四个光敏电阻的串联,既能达到分压的效果,又对整个系统起到保护作用。光敏电阻原理图如下:
图3-1-4 光敏电阻原理 3.1.5 TFT触摸彩屏1.44寸模块 TFT,也被称为电影场效应晶体管。由点脉冲控制,这相当于为每个像素设置了一个控制开关。节点之间完全独立,也可连续控制,连续控制可提高反应速度。 一、该模块有如下特点:
- 128×128分辨率。
- 1.44寸的彩显示器。
- 色彩深度:16位。 二、接口定义 表 3-1-5 接口定义表 管脚顺序 管脚定义 功能阐述 1 GND 电源接地端 2 VCC 电源正极 3 SCL SPI时钟输入 4 SDA SPI数据输入 5 RES 屏得复位 6 DC 命令/数据选择 7 CS SPI片选输入 8 BL 背光控制输入 三、模块实物图如下图所示:
图3-1-5 显示屏
原理图如下:
图3-1-5 显示屏原理图 3.1.6 太阳能发电电路设计 太阳辐射能要通过光电效应或化学效应实现转换,那么我们首先就要使用到可以吸收太阳光的太阳能大多数面板(Solarpanel)仍然是由“硅”。对于普通的干电池或充电电池,重点是节能环保零污染 特点:超白玻璃作为高透明性的低铁玻璃,透光率达到了惊人的91.5%。 组件在自然情况下是全部裸露,而空气中的容易色变,从而影响组件的透光率。 晶体硅主要是分为多晶和单晶料是最主要的光伏材料,市场中占比也是惊人的达到了90%以上,然而在今后较长时间内也是主要是以硅作为太阳能电池板的主要材料,可将其相当不错的未来可预见性。 实物图如下图所示:
图3-1-6(a) 太阳能电池板实物图 其电路接口原理图如下图所示:
图3-1-6(b) 太阳能电池板发电接口原理图 3.1.7 TP4056锂电池充电模块电路设计 TP4056锂电池充电模块,防倒充电电路, TP4056作为恒定电流/电压可持续性充电模块,作为本次选择的有力据。为了防止因为高温和大功率状态下对芯片的影响,选用TP4056可完成对电流大小的可控调节。 本模块的特点:
- 外设通过USB直接通电。
- IN+和IN-针供电。
- 输入电压:4v-8v。
- 充电红灯点亮,充电后蓝灯点亮。 TP4056锂电池,并联电容器,稳定电压输出滤波功能。 充电原理图见下:
图3-1-7(a) TP4056锂电池充电模块接口原理图 TP4056锂电池充电模块实物图如下图所示:
图3-1-7(b) 锂电池充电模块实物图 3.1.8 USB-5V升压模块电路设计 USB5V升压模块,高效输出以及恒定频率。可提供中等电压输出规格。本设计系统采用升压模块将电压从3.7V升压到5V 实物图如下:
图3-1-8(a) 模块5V跳线取线图 在焊接USB-5V升压模块时,直接与电源线焊接,也可以单排插脚焊接后插入PCB板或通用板。 USB开关闭合,升压模块得电工作,锂电池3.3V升压到5V。增压模块失电,减小电压波动,使电压输出更加稳定。接口原理图如下:
图3-1-8(b) USB-5V升压模块接口原理图 USB-5V升压模块实物图如下图所示:
图3-1-8©USB-5V升压模块实物图 3.1.9 分压电路设计 采集电压信号大于光电转换模块要求上限值时,需要采用分压器的形式来解决电压过高引起的溢出问题。 3.2 STM32 单片机系统软件设计 3.2.1 Keil程序开发环境 C语言逻辑结构清晰,包括链接器和图书馆管理,我们使用集成开发环境(Vision)把各个部分放在一起。选择Keil通过以上的基本解释,即最后的选择,最好的选择。 Keil界面如下:
图3-3-2 Keil uVision5开发界面图 3.2.2 STM ISP程序烧录 STM ISP是用于编程的烧录软件可以直接下载单片机使用的程序,同时程序检查和编程。32开发板、下载器以及PC连接后,选择相应的串口号,选择目标程序对应端口,单击“开始变成(P)就可以完成对程序的下载”。 具体下载界面如下图所示:
图3-3-3 烧录软件下载界面 3.2.3 CH340串口程序烧写模块介绍
图3-3-4(a) CH340串口烧写模块 二、CH340串口烧写模块引脚说明
- TXD 对应RXD引脚
- RXD 对应RXD引脚
- GND 对应GND。 三、CH340串口烧写模块 具体接线图如下表所示: 表3-4-4(b) CH340串口烧写模块与单片机接线 CH340模块 单片机开发板 TXD 引脚PA10 RXD 引脚PA9 GND GND 3.4 软件开发工具
- STC11F16XE单片机开发集成环境:Keil
- 单片机下载上位机软件:STM ISP下载器MCUISP
- PCB绘图软件:dxp
- 流程图绘画软件:WPS Office
第四章 系统测试 4.1 软件调试 为了防下载程序出错,在调试前,我们需要特别留意,所编写程序在对单片机选型,是否准确无误,串口也要正确,本设计所使用的单片机型号为STM32F103c8t6,使用keil软件作为编程工具,程序完成后生成。hex文件,现在编译程序,当软件编译完成后,下方显示检查无错误,接着就是程序的调试部分,调试完成,生成最后的最终程序其型号选择如图4-1所示。Keil编译程序成功如图4-2所示。
图4-1 Keil单片机型号选择
图4-2 Keil编译成功 程序编译结束,切换输出选项卡,生成.hex文件,确认保存路径,重新编译和组建程序,后生成.hex文件。Keil生成.hex如图下图。最后将程序从Keil传输到STM32F103c8t6最小系统
图4-3 Keil生成.hex文件 4.2 系统整体调试 利用软件AD15将原理图绘制成PCB板。绘制PCB板过程是:来到了软件首先调用画好的原理图,再者电路设计图打开后点击设计菜单栏,选择Update PCB Document PCB1.PcbDoc;第三步点击验证变更,将原理图导入PCB,正常生成PCB,个体图PCB完成后,自动布线,整体的PCB完成。利用keil软件下载器将程序导入32单片机后,按照预定要求进行调试。
图5-6 布置好线的PCB图 第五章 全文总结与展望 5.1 全文总结 整个系统使用了STM32F103C8T6核心板、光敏采集电路、调压模块、步进电机等构成。光敏采集板和主控板连接线相互连接。光敏采集板安装光敏传感器模拟太阳能板。主控板按键控制及相关驱动方面进行指令控制。 一、太阳能板采光。电路稳压后将电能备用到电池里面进行储能,3.3升压到5V给整个系统供电,有单独的电源控制开关可以进行电源的通断控制。在给设备系统进行上电后,系统最初的默认形式为随太阳运动而运动的“自动模式”,还有就是可以通人为控制改为“手动模式”[9]。 二、 系统上电时,无论是自动还是手动,光敏电阻都会采集光强度并完美地显示在显示屏上,上、下、左、右四个方位。通过两个步进电机驱动来完成上下左右运动,将两个步进电机焊接在一块形成了一个角度多自由度的整体。两个电机都是通过连接线与主板进行的连接,通过光敏电阻对光强度的采集获得四个方位的不同关照强度值,最后通过与预计值的比较,最后来确定电机的运动轨迹[10]。 三、自动模式:Automatically judge the light intensity, if the light intensity below is greater than the light intensity above, the STM32 MCU will directly drive the upper motor to flip down;以便于在下午太阳西落的时候,获得更多的关照,若上面光照强度大于下面光照强度,STM32单片机就会直接驱动上端步进电机向上进行运动[11];若上下两个方位的光照强度均是大小相差无几,那么上端步进电机则不进行任何的动作。接下来就是对于当上下光照均匀左右运动的情况,若右方位的光照强度大于左方位的情况下,STM32单片机就直接驱动下方位第一个步进电机向左方位一定角度转动[12];左方光照强度高于右方光照强度,单片机直接驱动下方位步进电机左位运动[13];当左右方位采光度也保持几乎均应的时候光照,那么下方位的第一个电机也将保持不动。那么此时此刻设备的状态将是完全的禁止,STM32单片机将不对电机给出任何的运动指令[14]。 四、切换“手动模式”状态手动按键完成设备状态切换。四个按钮控制:上、下、左、右四个方位的运动。通过点动的方式来控制驱动步进电机的实际运动[15]。 四、当太阳能收集有限时,此时使用外部电源USB充电模块对其进行锂电池上电,以保障系统的正常运行[16]。 显示屏显示光敏电阻采集光的范围0-1000。自动模式和手动模式,对上、下、左、右方向进行光的采集。两个步进电机实现多维度控制,上下翻转和左右转动。 5.2 后续工作展望 它在原有的基础上,还可以与外部设备配合使用,如利用电厂的储能,向鱼塘的制氧机供电,通过电力实现步行关灯,蓝牙控制路灯等 致 谢 时间很快,毕业设计已经开始接近尾声,几年的大学学习生涯即将告一段落,在后期的研究生生涯中希望可以得到更好的视野拓展。通过本次的设计,问题也是层出不穷,也是这些困难让我学会了成长,以前几乎自己一个人没有单独做过设计,因此也遇到C程序的编写这一大困难。慢慢的一切都会因人而解,吴导师的大力帮助,是很重要的一个环节。 从这次的毕业设计中,深刻的体会到学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次毕业设计中的最大收获。硬件只有多做,自己多搭建电路来调试才能真正的学得知识。 首先,我要感谢我的导师对我的悉心指导。他为我的毕业设计指导尽心竭力,他渊博的知识、平易近人的性格以及在设计上敏锐的洞察力,使我受益非浅。在整个毕业设计期间,老师时不时提醒着我,要做什么了,听在耳里,看在眼里更是记在心里。从最初的选题到后期的完成,少不了导师的教导。占用了老师的宝贵时间,得以最后完成论文。 在大学的几年学习生活中,感谢学院也感谢各位老师让我们有了获取知识的平台,结识了一帮有着共同爱好的朋友,我们大家共同学习,为完成毕业设计打下了基础——感谢得以与大家相识、相知、相惜。 谢谢大家!
参考文献 [1] 张翠华,范小振.《能源新视野》. [M]. Boston: Artech House, 2017 , 5-8 [2] 罗金玲.《电脑编程技巧与维护》.[M].2015年第22期31-32,37共3页 [3] 武奇生.《基于ARM的单片机应用及实践》.[M].机械工业出版社12页 [4] 郭欣. 太阳能双轴跟踪系统的研究与设计[J].装备制造与教育, 2017, 03 , 6-9 [5] 杨亚龙. 太阳能电池板自动追光系统研究与实现[D]. 长安大学, 2014 , 5-6 [6] 高绪昊. 太阳能跟随系统设计[J].硅谷, 2013 02 [7] 刘卿卿,俞强,赵毛毛,王竞雄. 基于STM32的光电式太阳跟踪系统设计[J]. 仪表技术与传感器, 2017, 01 [8] 扎西顿珠 袁超 胡石峰.《黑龙江科学》. [M].2019年第24期28-31,共4页 [9] [10] 李仁浩,龚思敏,杨帆. 基于单片机控制太阳能智能跟踪控制系统的设计[J]. 仪表技术与传感器.2015(04) :21-23 [11] 叶伟慧,廖才,石金强,陈国康.基于阳光方位探测器的太阳能收集板姿态调节系统 [J]. 仪表技术与传感器, 2011(03) :156-160 [12] 刘卿卿,俞强,赵毛毛,王竞雄.基于STM32的光电式太阳跟踪系统设计[J].仪表技术与传感器.2017(01) [13] 李仁浩,龚思敏,杨帆,刘松,李小兵.基于单片机控制太阳能智能跟踪控制系统的设计[J].仪表技术与传感器.2015(04) [14] 王定玲,夏美娟.太阳能自动跟踪系统设计[J].江苏科技信息. 2017(02) [15] 申来明,杨亚龙.一种利用单片机实现太阳跟踪的设计方法[J].现代电子技术. 2014(10) [16] 许义泉,王燕昌,王子文,慕松.赤道坐标系下新型太阳能自动跟踪装置设计[J].机械设计与制造. 2013(09) [17] 闫云飞,张智恩,张力,代长林.太阳能利用技术及其应用[J].太阳能学报. 2012(S1) [18] 王阳.太阳能电池板追光系统的研究[D].沈阳工业大学.2017 [19] Du Xiaoqiang,Li Yuechan,Wang Pengcheng,Ma Zenghong,Li Dangwei,Wu Chuanyu. Design and optimization of solar tracker with U-PRU-PUS parallel mechanism [J] IOP J.MECHMACHTHEORY.2020.104107 [20] Qingli HaidongLiu. Design of Solar Energy Automatic Tracking Control System Based on Single Chip Microcomputer [J]. IOP Conference Series Earth and Environmental Science March 2019 [21] Du Xiaoqiang, Li Yuechan, Wang Pengcheng, et al. Design and optimization of solar tracker with U-PRU-PUS parallel mechanism[J]. 2021, 155:104107
附录Ⅰ系统PCB如下:
附件图 0–1主控板PCB
附件图 0–2光敏PCB
附录II部分程序 #include “my_include.h”
char dis0[25];//液晶显示暂存数组 char dis1[25];//液晶显示暂存数组
#define F_SIZE 16 #define MyLCD_Show(m,n,p) LCD_ShowString(LCD_GetPos_X(F_SIZE,m),LCD_GetPos_Y(F_SIZE,n),p,F_SIZE,false)
#define RONGCHAZHI_UD 500 //容差值 #define RONGCHAZHI 500 //容差值
#define ZHUANDONG_ZZ 50 //转动一个正角度 #define ZHUANDONG_FZ -50 //转动另一个方向转动
int lighVla_left = 0;//ad采集结果 1 int lighVla_up = 0;//ad采集结果 int lighVla_right = 0;//ad采集结果 int lighVla_down = 0;//ad采集结果 float batteryVolt = 0;//锂电池电压ad采集结果 float BatCap=80; //容量初始化
unsigned char disFlag = 0;//更新显示 unsigned char setMode =0;//设置模式 unsigned char rememberMode =0xff;//记录上一次设置状态
int main(void) { unsigned char disYplace=0; //显示所在行递增变量 USARTx_Init(USART1,9600); // My_LED_Init(); // My_RTC_Init(false); My_ADC_Init(ADC1); My_KEY_Init(); My_StepMotor_Init();
LCD_Init(); //tft初始化
// TP_Init(); //校准已经包括再此函数中 先执行LCD_Init(); 触摸校准调用显示
LCD_Clear(Color16_BLACK);//清全屏BACK_COLOR=Color16_BLACK;FRONT_COLOR=Color16_LIGHTGRAY; disYplace=0; //显示所在行递增变量 MyLCD_Show(2,disYplace++,"双轴追光系统");//显示 FRONT_COLOR=Color16_LIGHTBLUE;MyLCD_Show(1,disYplace++,"光照参数: ");//显示 MyLCD_Show(4,disYplace++,"上: ");//显示 MyLCD_Show(1,disYplace,"左: ");//显示 MyLCD_Show(9,disYplace++,"右: ");//显示 MyLCD_Show(4,disYplace++,"下: ");//显示 MyLCD_Show(1,disYplace++,"设置: ");//显示 while(1){ My_KeyScan(); if(KeyIsPress(KEY_5)) { if(setMode !=0 )setMode =0;//自动模式 else setMode=1;//手动模式 } switch(setMode) { case 0: //自动模式 if((lighVla_left - lighVla_right)>RONGCHAZHI_UD ) //调整向强光方向转动 {My_StepMotor_RotateAngle(0,ZHUANDONG_ZZ);} else if((lighVla_right - lighVla_left )>RONGCHAZHI_UD )//调整向强光方向转动 {My_StepMotor_RotateAngle(0,ZHUANDONG_FZ);} else {My_StepMotor_Stop(10);} if((lighVla_up - lighVla_down)>RONGCHAZHI_UD ) //调整向强光方向转动 {My_StepMotor_RotateAngle(1,ZHUANDONG_ZZ);} else if((lighVla_down - lighVla_up )>RONGCHAZHI_UD )//调整向强光方向转动 {My_StepMotor_RotateAngle(1,ZHUANDONG_FZ);} else {My_StepMotor_Stop(10);} break; case 1: //手动模式 if(KeyIsPressed(KEY_1))//按键按下 { My_StepMotor_RotateAngle(0,ZHUANDONG_ZZ); //转动 度数 正值一个方向 负值另一个方向 } else if(KeyIsPressed(KEY_3))//按键按下 { My_StepMotor_RotateAngle(0,ZHUANDONG_FZ);//转动 度数 正值一个方向 负值另一个方向 } else {My_StepMotor_Stop(0);} if(KeyIsPressed(KEY_2))//按键按下 { My_StepMotor_RotateAngle(1,ZHUANDONG_FZ);//转动 度数 正值一个方向 负值另一个方向 } else if(KeyIsPressed(KEY_4))//按键按下 { My_StepMotor_RotateAngle(1,ZHUANDONG_ZZ);//转动 度数 正值一个方向 负值另一个方向 } else {My_StepMotor_Stop(10);} break; default: break; } lighVla_left =1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_0)/4096; //读取ad值 转化为0-1000 lighVla_up = 1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_1)/4096; //读取ad值 转化为0-1000 lighVla_right = 1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_2)/4096; //读取ad值 转化为0-1000 lighVla_down = 1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_3)/4096; //读取ad值 转化为0-1000 if(disFlag == 1)//更新显示 { disFlag =0; FRONT_COLOR=Color16_LIGHTBLUE; disYplace=2; //显示所在行递增变量 sprintf(dis0,"上:%d ",lighVla_up);//打印 MyLCD_Show(4,disYplace++,dis0);//显示 sprintf(dis0,"%d ",lighVla_left);//打印 MyLCD_Show(4,disYplace,dis0);//显示 sprintf(dis0,"%d ",lighVla_right);//打印 MyLCD_Show(12,disYplace++,dis0);//显示 //**All notes can be deleted and modified**// if(rememberMode != setMode) { rememberMode = setMode;//记录设置模式 if(setMode == 0)MyLCD_Show(8,disYplace++,"自动 ");//显示 else if(setMode == 1)MyLCD_Show(8,disYplace++,"手动 ");//显示 } batteryVolt = My_ADC_GetValue(ADC1,ADC_Channel_4)*3.3/4096 *2 ;//锂电池电压 if(batteryVolt>4.15) //电压值对比 {BatCap = 0.99;}//容量 else if(batteryVolt<3.4) {BatCap =0;} else {BatCap = (batteryVolt-3.4)/(4.15-3.4);}//正常情况下计算比例 if(BatCap<0.45){FRONT_COLOR=Color16_RED; } sprintf(dis0,"B:%3.1fv Q:%02d%% ",batteryVolt,(int)(BatCap*100)); //打印 MyLCD_Show(1,6,dis0);//显示 }}
}