基于stm32的太阳跟踪装置设计与制作

对绿色能源的开发和利用是响应我国节能减排,环保政策的举措,太阳能作为可持续,零污染,具有很高的环保价值和经济效益,高效利用太阳能还可以有效替代部分化石能源,从而降低因石化能源燃烧导致的污染,减轻雾霾。然而农村太阳能丰富,却没能得到很好的利用,即便现有的发电产品对太阳能电池板也大多采用固定支架。课题对此提出了能够跟踪太阳方向的云台支架,可实现太阳能电池板自动调节而始终面向光线最强的一面,提高太阳能发电的利用率。课题从云台,电机驱动,控制器,光线传感器,液晶显示等构成,课题成果不仅可以用到太阳能发电,还可以用到其它的向光场所,如天文观测等具有较高的实用价值。

太阳能;电机驱动;控制器;光线传感器;液晶显示屏;

The development and utilization of green energy is a response to China's energy conservation, emission reduction and environmental protection policies. As sustainable and zero pollution, solar energy has high environmental protection value and economic benefits. Efficient use of solar energy can also effectively replace some fossil energy, thus reducing pollution caused by petrochemical energy combustion and reducing smog. However, rural solar energy is abundant, but it is not well utilized. Even the existing power generation products mostly use fixed brackets for solar panels. In this paper, a pan-tilt bracket that can track the direction of the sun is proposed, which can realize the automatic adjustment of solar panels and always face the strongest side of light, and improve the utilization rate of solar power generation. The project consists of pan/tilt, motor drive, controller, light sensor, liquid crystal display, etc. The results of the project can be used not only in solar power generation, but also in other light-oriented places, such as astronomical observation, which has high practical value.

Key words: solar energy; Motor drive; A controller; Light sensor; Liquid crystal display screen;

随着时代的进步与科技的飞速发展,使得对能源的需求随之增加,对不可再生能源的过度依赖[1],从而使得不可再生能源的存储量急剧减少,一些不可再生能源(石油)被视为战略资源,据目前统计,煤炭、石油、天然气也会在岁月的实践中而日趋枯竭,消耗殆尽。这些不可再生能源的产生显然跟不上人类对其的需求,为更好的实现可持续发展,本课题提出了一种太阳追踪的可行方案,可以大大提升对太阳能的利用,减少对不可再生资源的过度依赖。

为了解决人们对不可再生资源的过度依赖和对清洁能源的高利用率。提出设计一款零污染高效率的装置——太阳追踪器。通过电机,控制器,采光板光线传感器等元器件之间的相互配合,实现对太阳光照射最强的方位,实现全方位无死角跟踪,恰巧正好急需这样一款具有安全、环保、高效率、以及取之不尽用之不竭的特点,也很方便就可以获取,如风能和潮汐能一样是绝对的无污染清洁能源,这也就很好的阐述了光能的可行性[2]。——对此提出太阳跟踪装置设计与制作。

优点:太阳作为一个取之不尽用之不竭的能源。在《太阳能利用技术》[3]就有相关的提到,所到达地球表面能量等同于每秒向地球源源不断的投放了500万吨煤炭。阳光所到之处,皆为财富,免费使用的同时也不需要考虑任何的运输费用以及零污染等特性。

缺点:即便如此的看似完美无缺,也存在着两个致命性缺点[4]:一是能流密度很小;二是太阳的光照强度也会因为(天气、白夜等)因素的不同而有着很大的差距,很难长时间维持在恒定值,这也在一定程度上大大的影响了使用效率[5]。

国外太阳追踪器:对太阳能的使用在两千零四年到两千零六年太阳能的发电量都是惊人的4961MW[6],在一九九七年,美国的Blackace研制了单轴追踪器,热接收率提高了百分之十五......,后期围绕高效率,轻质量展开。在太阳能游艇、太阳能飞机、太阳能瓦片等方面得到运用,也见证了太阳能利用的高效率性[7]。

国内太阳追踪器:在应用市场上面得到了不断扩张,对于太阳能追踪器的利用那也是一个相当热门的谈话主题,途径多年的经验,将其用在了太阳能热水器、太阳能路灯以及西部计划、利用太阳能发电、太阳能供暖等等[8]。

更多的往往是采用单轴跟踪的方式,相比之下更需要多轴,实现全方位无死角跟踪。

针对不同条件下,提出了自动控制和手动调节的两种工作方式:

其中以“自动模式”概述:在自动追寻的过程中,会自动判断光的强度的大小,若下面光照强度大于上面光照强度,STM32单片机就会直接驱动上端电机向下翻转;以便于在下午太阳西落的时候,获得更多的光照,若上面光照强度大于下面光照强度,STM32单片机就会直接驱动上端步进电机向上运动;若上下两个方位的光照强度均等,上端步进电机不进行动作。在上下光照均匀,左右方向运动的情况,右方位的光照强度大于左方位,STM32单片机就直接驱动下方位第一个步进电机向左方位一定角度转动;若左方位的光照强度大于右方位的光照强度,STM32单片机就直接驱动下方位第一个步进电机向左方位进行运动;当左右方位采光度也保持几乎均应的时候光照,那么下方位的第一个电机也将保持不动。

“手动模式”状态进行使用按键手动来完成设备状态的切换。四个按键对应控制电机完成:上、下、左、右的翻转动作。通过点动的方式来控制驱动步进电机的实际运动。

在给设备系统进行上电后,系统最初为“自动模式”,这样可以更好的在不受人为干预的情况下实现对太阳能的最大接收。

编译语言的选取

方案一:C语言

简洁紧凑、灵活方便;运算符的丰富性;数据结构的丰富性;结构式语言;语法局限性小,程序编写自由度大;通过对物理地址的直接访问,使得完全可以对硬件实现直接控制;程序执行效率高。

C语言面向过程,最主要的在于算法和数据结构。通过一个过程,对输入进行运算处理得到输出。

方案二:C++

C++语言是面向对象的语言,在C的基础上添加了面向对象、模板等现在程序设计语言的特性。拓展了面向对象设计的内容,使之更加符合现代程序设计的需要。

看似C++比C多了很多优点和特性,但C++并不是所有场合都适用,很多嵌入式开发系统,都只提供了C语言的开发环境,而没有提供C++的开发环境。很多C++语言不愿意干的脏活累活,C语言干起来快活得很。而C++因为过于复杂,在这方面就稍逊一筹了。

方案三:Java

Java是一种解释性语言,Java人气极高,但其代码由于需要在运行前进行解释因此性能表现更差。C++会被编译为二进制形式,因此其能够立即运行且速度更快。两个程序都足够大、而且C++的代码经过优化,两者的速度差就会变得很显著甚至很惊人,C++会比java快很多。

从系统的复杂性出发来考虑,同时整个过程的计算量比较大,因此我选用了浮点数的计算方式,选用方案一作为整个系统编译方式。

2.2 控制系统总体方案选取

方案一:视日寻迹追踪模式

这样的一种模式,是基于天文学公式来得出太阳在不同时候的理论性的方位角和俯仰角,在后根据太阳每天在当地实际的运行轨迹位置编写控制算法程序,通过使用控制算法的方式来实现对太阳所在位置的计算,最后通过驱动太阳能板的两个步进电机来达到俯仰和方位上的转动。有点是对外界环境的依赖小,同是也存在弊端,那就是不管外界环境是何种天气,它都会以同样的工作方式运动,增加了不必要的能耗和元器件的寿命磨损。

太阳的俯仰角h和方位角A的两个位置参数,可表达如下所示:

δ为赤纬角,Φ是本地纬度,Ω表示太阳时角。

方案二:光电追踪模式

该模式的核心算法是利用光敏传感器对太阳位置进行检测。具体方法:在遮阳板两侧完全对称地安装光敏传感器,当太阳光垂直照射在太阳能光伏电池板上时,安装在两侧上的光敏传感器所产生的电信号相等,将这两路信号经过放大后送入比较器进行比较,此时不驱动步进电机进行转动。当太阳位置移动后,遮阳板对阳光进行遮挡,此时两侧的光敏传感器产生的电信号不相等,从而经过放大比较后产生差信号,电机开始运动,完成太阳跟踪过程。

通过两者的比较,选择方案二,简单易操作性,更适合被普及广泛使用,在同等使用条件下,最简方案,则是最优方案。

2.3主控系统选择

方案一:51单片机作为控制芯片。主要是表现在:主要控制参数是使用设置寄存器变量得以实现,在程序的修改方面,也是相当的方便快捷,成本也是相对低廉,性能与相对简单的太阳能跟踪装置系统匹配;数字化的控制系统,可以达到较高的精度。

方案二:采用FPGA这样的大规模可编程逻辑器件,但本题属于控制类,即现场可编程门阵列[WJ1] ,它是在PAL、EPLD等可编程器件的基础上进-一步发展的产物。

方案三:ARM作为一种高性能嵌入式系统。考虑到方案的可实行性,STM32可以很好的解决数据处理和控制功能,十分适用于太阳能跟踪,虽是ARM价格昂贵,但是在后期的可拓展空间更大。[WJ2] 

结合本次设计的任务要求,以及上诉三种方案的相对比较,最后选用方案三更适合本课题的设计标准,具体采用STM32F103C8T6。

2.4电机选择

方案一:选择步进电机,然而步进电机的最大优点就是可以精确地控制电机步数和角度,缺点是价格昂贵。

方案二:选择直流电机。价格便宜是它的一大亮点,通过减速齿可以提高扭力,具有更大的负载,但是对电机的高精度控制直流电机达不到设计要求。

步进电机作为一种将电脉冲转换成相应角位移或线位移的电磁机械装置。通过直接控制输入的脉冲数量,直接控制其启停,启动是速度快,步距角和转速只取决于脉冲频率,受外界影响因素小。因此,对于本设计任务要求,为更精确地完成对角度值的精度把控,更好地利用太阳能,因此我选用方案一作为本次课程设计的驱动电机。

2.5步进电机驱动系统选择

方案一:L298专业电机驱动模块的选择,这类驱动模块的操作方便以及接口简单同时他们既可以驱动步进电机,也可驱动直流电机。

方案二:三极管等分立元件搭H桥。亮点在于实惠型,控制方式简单以及结构简单。优点的同时也伴随着弊端的存在,电流的承载能力比较小,相同的驱动能力受到限制,分立元件则体积较大同时稳定性也得不到保证。

方案三:采用集成芯片,ULN2003。 .

达林顿管ULN2003,该芯片最多可一次驱动八块步进电机,本设计作用于两个步进电机,在实际的使用中,往往起着放点输出的作用用于驱动大负载的步进电机等。

本次设计综合考虑,依据实际设计需求,选择方案三作为步进电机的驱动系统。

2.6实体结构框架选择

方案一:两电机互相处以垂直状态,电机一是左右的转动而电机二是上下的转动,在不引入外界条件辅助设备的情况下会出现运动死角,从成本化出发是不可取的。

方案二:将两个电机由之前的垂直安装,改变为大于90°的安装,在不引入外部设备的情况下,可以很好的避开运动死角,从而可实现全方位无死角跟踪,综合上述情况选择方案二进行本次的实体结构设计。

2.2系统设计

2.2.1 单片机构成如下图:

逻辑不通顺,要指出FPGA不适用于本题的缺点

STM32整体比FPGA便宜很多,这条论证建议修改,或者做一个成本对比表再下结论

控制方式:第一步就是将数据程序输入到输入设备里面,输入设备将程序传输给运算器CPU和存储器,各自程序都对应的传输到控制器里面,由控制器完成完成相互的指令传递,最后都是作用于输出设备,在输出设备上显示出来的结果就是最初程序所要表达的效果。

2.2.2 系统整体控制框图如下:


图2–2–2 系统整体控制框图

控制方式:完成整个驱动控制,第一步就是感光元件及光敏电阻传感器对外界光的采集,完成电压跟随,通过A/D转换,然后通过电压的比较,使用STM32F103C8T6单片机控制电机的驱动,最终完成不同电机在不同的光照强度情况下不同方向的运动,最后实现对光的最大化接收。


2.2.3 电机控制框图如下:


图2–2–3 电机控制框图

控制方式:通过光敏传感器对光的采集,实现了最后对电机运动方式的不同选择和控制。

当感光元器件第一组接受到的光照强度值大于其它三个方位的光照强度时,那么电机完成水平方向的电机正转,并返回最初状态。

当感光元器件第二组接受到的光照强度值大于其它三个方位的光照强度时,那么电机完成水平方向的电机反转,并返回最初状态。

当感光元器件第三组接受到的光照强度值大于其它三个方位的光照强度时,那么电机完成垂直方向的电机正转,并返回最初状态。

当感光元器件第四组接受到的光照强度值大于其它三个方位的光照强度时,那么电机完成垂直方向的电机反正,并返回最初状态。

当所有的感光元器件都处于接受管的均匀照射时,此时的光照强度几乎大小相等,也就电机的状态保持不运动。

 2.2.4整体电路原理图如下:


图2-2-4 整体电路原理图

系统软件总体设计流程如图 2-2-4 所示。系统启动后,软件先进行初始化等工作,当程序初始化完成后,通过 感光元器件获得当前的光照强度,然后根据初始化的参数,控制步进电机将太阳能光伏板转动到理论的初始状态,预定方位。将太阳能光伏板转动到理论位置后,程序开始判断步进电机转动模式是手动模式还是自动,初始默认状态是自动跟踪模式。

当手动模式时,人为调整电机控制上下左右 4 个按键的状态,使得电机按照人们预想的方向进行运动,以此来得以控制四个方位的不同垂直转动和水平移动的俯仰角和方位角。当程序判断为自动模式后,开始自动读取检测电路的返回信号,当检测到是各个方位的光照强度值有较大的的差异是,那么单片机就发出控制指令控制步进电机进行转动,升压模块是为了给整个系统稳定供电而存在。


第三章 元器件介绍

3.1 系统硬件系统分析设计

3.1.1 STM32单片机核心电路设计

STM32单片机系列,处理器是基于ARM 7架构的32位,可以支持实时仿真的同时也可以实现跟踪的微控制器。对于本系统之所以使用STM32的原因便是,设计最初,要求达到的就并非最低成本与更小功耗,而是在实现规定的设计需求外,可以更好的为实验外的部分需求而提供更多的串口和扩展应用电路而选择,对于发展前景也相较于51有了更多的选择。

一、STM32的主要优点:

采用ARM架构的Cortex-M3内核

实时性能的优越无可厚非性

功耗控制的把握性

出众及创新的外设

集成整合的高度完善性

易于开发性,可以更好的快速投入市场使用

二、STM32平台的选择可靠性:

同平台的项目开发,STM32是最优之选,具体表现如下:

存储空间和管脚应用少到大存储空间和多管脚的过度

对于苛求性能的应用到电池供电的应用

对于简单应用到高端应用的过度

对软件和引脚的高度兼容性,也使得其具有了灵活多变性。

STM32F103C8T6核心板接口电路图如下所示:


图3-1-1(a) STM32单片机核心板接口原理图

STM32单片机实物图如下图所示:


图3-1-1(b) STM32单片机核心板实物图

3.1.2 28BYJ-48步进电机ULN2003驱动电路设计

步进电机是通过电脉冲信号的采集,再者就是将其转换为角、线位移的开环控制电机,在正常的运行工作下,电机的启停是通过对脉冲信号的采集比较。什么是步距角呢?那就是通过驱动步进电机,使其按照预定的角度和方向进行运动,通过位移量的控制从而使其达到对转动方向和转到角度的精确控制,以此达到对太阳光采集达到最大值化。

现如今步进电机在机械、数电模电等都已经涉及。相比直流电机而言,则交流电机在常规双环形脉冲信号电路所组成控制系统方可使用,其中涉及到了机械、电子等诸多专业知识。步进电机在系统中是作为执行元件,却在机电一体化行业得到了充分地认可,同时而是被广泛应用在各种自动化控制系统之中。

系统中选用4相5线的5V步进电机。

具体参数如下:

型号为28BYJ-48。

直径:28mm

电压:5V

步进角度:5.625 x 1/64

减速比:1/64

单个重:0.04KG

使用普通uln2003芯片驱动,配套开发板使用也是可以的,可以进行直接插接。

具体驱动电路原理图如下:


图3-1-2(a) 驱动电路原理图


图3-1-2(b) 步进电机实物图

3.1.3 按键电路设计

按键控制相当于一种电子开关,通过控制按键的闭合与断开从而实现对电源腿短的控制,其内部原理主要是通过内部的金属弹簧片因受外力的作用而相对运动,按键在整个控制过程中占据着输入的主导地位,使其达到人机交互的结果,当按键被人为按下的时候,所对应的单片机引脚电平由高变为低电平,以此达到对系统发出手动输入指令。注意,按键个数可变。

其电路原理图如下图所示:

[WJ1] 

图3-1-3(a) 按键电路原理图

在整个电路里面,也可以把电阻作为上拉电阻,以此达到对按键信号输出的稳定性控制,按键的个数是可以根据实际需求对其进行适当的增加与删减。

[WJ2] 

图3-1-3(b) 按键电路原理图

3.1.4 光照检测电路设计

本系统的感光元件是行业最新出现的光敏电阻元件,其制作而成的主要原材料是由硫化隔或者是硒化隔等半导体材料制成,工作原理是针对于内光电效应得以实现。在使用过程中电阻值会跟随着外部的光照强度的不同而随之呈现为正态分布,规律性变化。依据本系统中使用到的光敏电阻,针对于其的特殊性能,在现如今的如此高速发展的现代社会也将得到更为广泛的用武之地,通过四个光敏电阻的串联,达到分压的效果,同时也是起着对整个系统的一个保护作用。光敏电阻原理图如下:

[WJ3] 

图3-1-4(a) 光敏电阻原理

3.1.5 TFT触摸彩屏1.44寸模块

TFT(Thin Film Transistor)也被称之为薄膜场效应晶体管,隶属于有源矩阵液晶显示器之一。然而对于TFT显示器,像素通过点脉冲直接控制,相当于对每个像素都有一个控制开关,也因此这样使得每个节点都是处于完全独立的状态,然而也可以实现对它进行连续控制,通过连续控制不仅提高显示器的在使用中的反应速度同时也可以实现对色阶的显示实现精确控制。TFT液晶显示屏的亮点是亮度好、对比度高等。

全新LCD模块,本模块是通用型的TFTLCD模块。

一、该模块有如下特点:

128×128的分辨率。

1.44寸彩屏。

驱动IC:ST7735。

色彩深度:16位(65K色)。

二、接口定义

表 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.6 太阳能发电路设计

太阳辐射能要通过光电效应或者化学效应来实现电能的转换,那么我们首先就要使用到可以吸收太阳光的太阳能电池板(Solar panel),其制作材料大部分依旧使用“硅”,对于其普通的干电池或者充电电池而言,最大的亮点则是节能环保零污染。

一、太阳能电池板结构组成

1)超白玻璃是一种具有在高透明性的低铁玻璃,透光率达到了惊人的91.5%,晶莹剔透、高贵典雅的特征,因此也被富裕了“水晶王子”的美称。

2)使用EVA作为固定钢化玻璃和电池片的原材料,对于使用中的EVA材质的好坏,这也会是直接影响到相关组件的使用寿命,当相关组件在自然情况下是全部裸露在自然化环境中,而空气中的容易色变,从而影响组件的透光率。

晶体硅主要是分为多晶和单晶料是最主要的光伏材料,在市场中的占比也是惊人的达到了90%以上,然而在今后较长时间内也是主要是以硅作为太阳能电池板的主要材料,可将其相当不错的未来可预见性。

实物图如下图所示:


图3-1-6(a) 太阳能电池板实物图

其电路接口原理图如下图所示:


图3-1-6(b) 太阳能电池板发电接口原理图

3.1.7 TP4056锂电池充电模块电路设计

TP4056锂电池充电模块是可以适用于USB电源和与适配器,其内部采用PMOSFET架构,再使用了防倒充电电路,因此不需要外接隔离二极管,防止电回流,TP4056是作为一种恒定电流/电压的可持续性充电模块,也是作为本次选择的有力依据。为了防止因为高温和大功率状态下对芯片的影响,选用TP4056可完成对电流大小的可控调节。

本模块特点:

板载TP4056锂电充电管理芯片。

USB接头,可完成直接电脑或者外设通过USB口直接上电。

IN+与IN-排针供电。

输入电压范围值:4V-8V,输出最大充电电流范围值:1000mA。

充电时红灯亮,充电完成蓝灯亮。

TP4056锂电池充电模块接口原理图如下图所示,锂电池并联的电容是滤波作用,保证锂电池充电电压的稳定平稳输出。

锂电池充电模块如下:


图3-1-7(a) TP4056锂电池充电模块接口原理图

TP4056锂电池充电模块实物图如下图所示:


图3-1-7(b) 锂电池充电模块实物图

3.1.8 USB-5V升压模块电路设计

本USB-5V升压模块,器件丝印为4X-NXH也称之为HX3001,是一款高效输出、恒定频率、PWM控制。其显著特点是低压0.9V低压启动,同时转换效率高达94%,中等功率运用,可提供我电压输出规格。此设计系统使用的既是升压模块将3.7V升压到5V的电压的转换过程。

三、使用说明

本模块USB母口输出5V直流电压,如果需要外接5V电源线,可以直接充USB母口座的5V正极焊盘或者模块正面特定位置电容一端跳线取线。

实物图如下:


图3-1-8(a) 模块5V跳线取线图

USB-5V升压模块焊接时,可以直接用电源线直接焊接电源输入端,也可以插入单排针焊接后插在PCB板或万用板上。

下图就是USB-5V升压模块接口原理图,当我们将开关拨下后,系统中的升压模块得电开始正常工作,随之使3.3V锂电池电压升压到5V,相反则是升压模块不工作。电容的作用在系统中都是起着减小电压波动,让电压更平稳的输出。

接口原理图如下:

[WJ4] 

图3-1-8(b) USB-5V升压模块接口原理图

USB-5V升压模块实物图如下图所示:


图3-1-8(c)USB-5V升压模块实物图

3.1.9 分压电路设计

串联分压的原理:

在串联电路,不变的是电流大小处处相等,各个分支的电压之和为电压总和,即分电路电压从始至终都小于总电压,因此称为分压。

当所采集到的电压信号超过选择的A/D模块最大采集电压值,那么就在这时就需要采用分压电阻的形式来解决因电压过大而出现的溢出。其电路原理图如下图所示:

;

图3-1-9(a) 分压电路原理图



图3-1-9(b) 分压电路原理

3.2 STM32 单片机系统软件设计

3.2.1 Keil程序开发环境

系统中所使用到的单片机开发环境是Keil,而与汇编相比,C语言的闪光点则是在可维护性、结构性、可读性、功能上,一目了然的逻辑框架,使得易学易用,在Keil的中,有着C编译器、链接器和库管理等在内的一整套而又完整开发方案,我们使用集成开发环境(μVision),把各个部分组合在一起。通过上面的基本诠释选择Keil那就是最后的选择,最好的选择。当然了运行Keil软件需要WIN98、WINXP等操作系统都是可以的。其中Keil有以下特点:

Keil软件可以支持在WIN7、WIN8以及WINXP等多种操作系统,这也是给编译者程序员提供了及其丰富的库函数与功能强大的开发工具。

Keil实现从编辑到编译到到连最后到调试的一整套开发流程。

Keil软件界面如下图所示:


图3-3-2 Keil uVision5开发界面图

3.2.2 STM ISP程序烧录

STM ISP是用于stm32进行程序的烧录软件,可以实现通过直接下载单片机所用程序,同时也是完全支持编程的编写、程序的校验等。单片机开发板、下载器和PC连接完成后,第一步打开软件并选择对应的串口号,再者就是选择目标程序文件对应所在的地址,最后鼠标单击“开始变成(P)就可以完成对程序的下载”。

具体下载界面如下图所示:


图3-3-3 烧录软件下载界面

3.2.3 CH340串口程序烧写模块介绍

CH340串口烧写模块,通过USB接口相接,这使得可以实现与任何一台笔记本电脑的完成对STC系列单片机的程序烧写,通过此下载器的高性能和低成本的绝对优势,显然在本次STC系列单片机中的应用也将表现得格外独到。

一、CH340串口烧写模块特点:

支持 USB多种通信,非单一固定通信。

全面支持WIN98、VISTA、WIN7 等多种现目前常见的操作系统,适应性强。

采用USB接口直接供电。

在对芯片编程时,可自行供电也可以从USB口来获电。

新程序的编写不影响目标板的程序运行。

投射范围广,对于STC全系列芯片烧录支持的。

输出电压接口使用编程器提供3.3V与5V。

速度更快更稳定。

使用进口原装芯片,使得其能够在能高速稳定编程。

模块如下图所示:


图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


STC11F16XE单片机开发集成环境:Keil

单片机下载上位机软件:STM ISP下载器MCUISP

PCB绘图软件:dxp

流程图绘画

整个系统使用了以STM32F103C8T6单片机作为核心板、太阳能板、锂电池充电、稳压电路、光敏采集电路、驱动电路、升压稳压模块、步进电机、按键电路组成。整个系统共计有光敏采集板与主控板和两块板子,以对应的连接线进行相互连接。其中光敏采集板主要放置光敏传感器,模拟太阳能板的运作;另外的主控板起着对显示器、电源接通管理、按键接通控制以及步进电机的相关驱动。

具体控制展现如下:

一、太阳能板将太阳光能进行收集,收集的同时进行光能与电能的转换,通过电路的稳压过程,将电传递给备用电池进行电量的储存,在干锂电池经过升压模块和稳压模块稳压到5V给整个系统供电,有单独的电源控制开关可以进行电源的通断控制。在给设备系统进行上电后,系统最初的默认形式为随太阳运动而运动的“自动模式”,还有就是可以通人为控制改为“手动模式”[9]也是可行的。

二、在系统通电的情况下不管是属于自动还是手动模式,此时的光敏电阻都会采集光线强度,并且在显示屏上面进行完美的显示出来,其中显示的效果为上、下、左、右四个方位。通过两个步进电机驱动来完成上下左右运动,将两个步进电机焊接在一块形成了一个角度多自由度的整体。两个电机都是通过连接线与主板进行的连接,通过光敏电阻对光强度的采集获得四个方位的不同关照强度值,最后通过与预计值的比较,最后来确定电机的运动轨迹[10]。

三、其中以“自动模式”为例:在自动追寻的过程中,会自动判断光的强高度的大小,若下面光照强度大于上面光照强度,STM32单片机就会直接驱动上端电机向下翻转;以便于在下午太阳西落的时候,获得更多的关照,若上面光照强度大于下面光照强度,STM32单片机就会直接驱动上端步进电机向上进行运动[11];若上下两个方位的光照强度均是大小相差无几,那么上端步进电机则不进行任何的动作。接下来就是对于当上下光照均匀左右运动的情况,若右方位的光照强度大于左方位的情况下,STM32单片机就直接驱动下方位第一个步进电机向左方位一定角度转动[12];若左方位的光照强度大于右方位的光照强度,STM32单片机就直接驱动下方位第一个步进电机向左方位进行运动[13];当左右方位采光度也保持几乎均应的时候光照,那么下方位的第一个电机也将保持不动。那么此时此刻设备的状态将是完全的禁止,STM32单片机将不对电机给出任何的运动指令[14]。

三、也可以切换为“手动模式”状态进行使用按键手动来完成设备状态的切换。四个按键对应控制电机完成:上、下、左、右的翻转动作。通过点动的方式来控制驱动步进电机的实际运动[15]。

四、当太阳能采集受限的时候,那么此时就使用外部电源USB充电模块对其进行锂电池上电,以保障系统的正常运行[16]。

1.44寸显示屏显示了光敏电阻采集光强的数值范围为0-1000,在实际应用过程中不管是处于自动还是手动模式下工作,光敏电阻都可以通过上、下、左、右四个方位来进行光的采集。其中通过两个不同维度的步进电机驱动来实现,既是上下翻滚和左右转动。上端步进电机与光敏采集板直接像粘接,两板通过连接线直接焊接而成。当然了对其的封装也是很有必要的完善过程。

在原有的基础上还可以进行与外部设备进行搭配使用,比如在发电厂蓄电上的使用、对鱼塘中的制氧机进行提供供电、通过电红外传感器实现人走灯灭,蓝牙远程控制路灯等。


参考文献

张翠华,范小振.《能源新视野》. [M]. Boston: Artech House, 2017 , 5-8

舟丹.太阳能发展利用进入新时代[J].中外能源, 2013 , 56-60

罗运俊.《太阳能利用技术》化学工业出版社[M]. 化学工业出版社, 2015 , 6-10

叶伟慧,廖才,石金强,陈国康. 基于单片机的跟踪式太阳能追光控制系统[J].北京:清华大学出版社, 2020, 01:44-45

郭欣. 太阳能双轴跟踪系统的研究与设计[J].装备制造与教育, 2017, 03 , 6-9

杨亚龙. 太阳能电池板自动追光系统研究与实现[D]. 长安大学, 2014 , 5-6

高绪昊. 太阳能跟随系统设计[J].硅谷, 2013 02

刘卿卿,俞强,赵毛毛,王竞雄. 基于STM32的光电式太阳跟踪系统设计[J]. 仪表技术与传感器, 2017, 01

李仁浩,龚思敏,杨帆. 基于单片机控制太阳能智能跟踪控制系统的设计[J]. 仪表技术与传感器.2015(04) :21-23

叶伟慧,廖才,石金强,陈国康.基于阳光方位探测器的太阳能收集板姿态调节系统 [J]. 仪表技术与传感器, 2011(03) :156-160

刘卿卿,俞强,赵毛毛,王竞雄.基于STM32的光电式太阳跟踪系统设计[J].仪表技术与传感器.2017(01)

李仁浩,龚思敏,杨帆,刘松,李小兵.基于单片机控制太阳能智能跟踪控制系统的设计[J].仪表技术与传感器.2015(04)

王定玲,夏美娟.太阳能自动跟踪系统设计[J].江苏科技信息. 2017(02)

申来明,杨亚龙.一种利用单片机实现太阳跟踪的设计方法[J].现代电子技术. 2014(10)

许义泉,王燕昌,王子文,慕松.赤道坐标系下新型太阳能自动跟踪装置设计[J].机械设计与制造. 2013(09)

闫云飞,张智恩,张力,代长林.太阳能利用技术及其应用[J].太阳能学报. 2012(S1)

王阳.太阳能电池板追光系统的研究[D].沈阳工业大学.2017

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

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

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;       lighVla_up = 1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_1)/4096;         lighVla_right = 1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_2)/4096;         lighVla_down = 1000 - 1000*My_ADC_GetValue(ADC1,ADC_Channel_3)/4096;         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);//显示                

        }

    }                                              

}  


上面完成了方案论证,系统设计,现在应该加一章作为测试章,详细阐述测试使用的环境,测试方案框图,测试步骤,测试数据记录成表格,做测试结果分析,总结判断是否达到预期目标

比如,追光的基本功能测试结果是什么样,不同光强下系统的旋转方式是怎么样的,连续测量N次,每次的数据记录在表中是什么样的等等

你可能感兴趣的:(基于stm32的太阳跟踪装置设计与制作)