当前位置: 首页 > news >正文

基于STC89C51的太阳自动跟踪系统的设计与实现—单片机控制步进电机实现太阳跟踪控制(仿真+程序+原理图+PCB+文档)

摘  要

随着我国经济的飞速发展,促使各种能源使用入不敷出,尤其是最主要的能源,煤炭石油资源不断消耗与短缺,因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点,且分布范围广,拥有非常广阔的发展前景。但是太阳能利用效率较低,这个问题一直影响和妨碍着太阳能技术的推广和发展。

在太阳能发电中,太阳板受光面与太阳光线的角度是决定太阳能发电效率的关键因素。本设计的原理是利用传感器(光敏电阻)把接收到的光信号转换成电信号,然后经过信号处理及单片机控制后,由控制电路输出相应的控制数字信号驱动方位角调整机构和高度角调整机构实现相应的位置调整。

本课题选用STC89C51单片机作为智能单元,根据单片机的特点和所需实现的功能,着重完成了单片机外围硬件电路设计和对应的软件设计。

关键词 太阳跟踪; 单片机; 光敏

目     录

  摘  要 

  Abstract 

  第1章 绪论 

1.1 研究的背景和意义 

1.1.1课题研究的目的和意义 

1.2国内外的研究情况 

1.3论文的主要研究内容 

1.4本章小结 

  第2章 系统的总体设计 

2.1太阳跟踪方式 

2.1.1光电跟踪 

2.1.2视日运动轨迹跟踪 

2.2系统总体设计要求及分析 

2.2.1系统总体设计要求 

2.2.2系统总体设计分析 

2.3本章小结 

  第3章 系统的硬件设计 

3.1单片机控制电路 

3.1.1复位电路 

3.1.2晶振电路 

3.2光电转换电路设计 

3.2.1光电传感器 

3.2.2光电转换电路工作原理及电路设计 

3.3 AD转换模块电路设计 

3.3.1AD转换模块 

3.4步进电机驱动电路设计 

3.4.1步进电机的介绍 

3.4.2步进电机及其控制方式 

3.4.3步进电机驱动电路 

3.5单片机外围电路设计 

3.6系统实物平台搭建 

3.7本章小结 

  第4章系统软件设计 

4.1按键部分子程序 

4.2指示灯部分子程序 

4.3主程序模数转换 

4.4驱动电路子程序 

4.5 AD电压采样子程序 

4.6本章小结 

  第5章结  论 

5.1总结 

5.2不足与进一步改进 

  参考文献 

  谢  辞 

  附  录 

第1章 绪论

1.1 研究的背景和意义

随着社会的飞速发展,人们保护环境的意识也随之提高,致力开发一些环保能源,比如,在风能,水力发电,太阳能等各种新型能源中,有很多专家学者都倾向于开发太阳能。风能、水能、潮汐能、生物质能等它们都属于可再生能源,而且都来自于太阳能,所以,太阳能是那些可再生能源中最主要的基本能源。太阳能是一种新型节能能源,它与普通的能源比较有四个特点: 第一、 太阳能的总量十分巨大:每年辐射到地球表面上的太阳能大约相当于130万亿吨煤碳燃烧的热量,并且跟据世界能源会议统计,世界已经探明可着手采煤炭储量总计为15980亿吨,估计还能开采200年,全世界可以开采的化石能源总量约相当于33730亿吨原煤,由此可以说太阳能的总量是现今世界上可以开发的最大的能源。第二、太阳能具有无害性,太阳能是一种清洁无污染的能源,开发和利用太阳能不会污染环境,它是最干净的能源之一,在环境污染愈发严重的今天,这一点是非常可贵的,所以人类对太阳能的普及已经是重中之重。第三、太阳能具有普遍性:它是我们可以利用的最丰富的能源,地球生命诞生以来,它们就主要以太阳提供的辐射能生活,太阳光它普照大地,在地球上,无论哪里都有太阳能,尤其是对于交通不发达的村庄、岛屿和偏远地区更具有利用价值,也没地域限制无论陆地或海洋,到处都有,都可以直接开发利用,而且不需要开采运输。第四、太阳能还有长久性:科学家根据日前太阳产生的核能速率进行估算,得出结果,氢的储存量可以维持上百亿年,而且地球的寿命约为几十亿年,单从这一点上,就能够说明太阳能量是用之不竭的。由此可见,大规模开发和利用太阳能是我们面向未来,实现可持续发展的必经之路。  

随着社会日益发展,人类对电的需求每年以很大的幅度增加,所以对能源的需求也极速增长。全世界对这些能源的消耗在1970年约为83亿吨的标准煤,但是在1995年,这种消耗竟然达到了140亿吨的标准煤,也就是说在25年间增长了69.7%,据这种增长速率,科学家预计,到2020年全世界对能源的消耗会高达195亿吨的标准煤。据公认的估计,假如人类对能源的需求一直以现在的速度增长,那么全世界的石油将在今后40年间被消耗完,还有天然气和煤也最多分别能维持60年和200年左右。不仅如此,我们大量使用化石能源已经开始造成全球气候变暖,燃烧煤碳会通过煤渣、烟尘释放出大量的有化学毒性的重金属和有放射性的物质,严重污染了我们的生活环境。  所以,利用和开发用新兴能源和可再生能源来渐渐减少和替代化石原料的使用,是保护生态环境、走经济社会可持续发展之路的重大措施。这个举措对于世界尤其是我国来说是十分迫切的。太阳能不仅可以再生产,不污染环境,而且最主要是总量可观,分布范围广泛,所以,它是世界上公认的理想新兴清洁替代能源。

1.1.1课题研究的目的和意义

根据现况,开发利用太阳能受到科学家们越来越普遍的重视,因此,它是各国都在研究的重大课题。它对人类来说是一种取之不竭而且能自由免费利用的绿色能源。我国的太阳能资源非常丰富,它作为一种清洁无污染的能源,发展前景也是非常广阔,太阳能发电已成为全球最受欢迎的利用新型能源的方法。但是也存在一些瑕疵,太阳能也有间歇性、光照方向和光照强度随时间不断变化等等问题,这样我们就对太阳能的采集和利用提出了更高的要求。目前,我们都不能充分利用太阳能资源,因为很多太阳能电池板的排列规律基本上是固定的,所以发电的效率特别低。根据实验,在太阳能光生电中,相同条件下,采用太阳跟踪发电的装置要比固定发电的装置的发电量高出35% ,因此在太阳能利用中,进行追踪是十分重要的!智能型自动跟踪太阳的装置设计是为了解决太阳能转换效率低的问题,并且为了更大限度的利用太阳能。太阳光照射的角度不能固定,要想达到最大的集热效果,太阳能电池板应和太阳光线保持垂直。本设计要求设计一种可以自动跟踪太阳的控制系统,使太阳能电池板可以随着太阳光线的移动而转动方向,保持太阳板与太阳光线基本垂直,以达到最大的发电效率,成本低,有较好的推广利用价值。

长期以来,世界能源主要消耗石油,煤炭等矿物燃料,但是这些都是不可再生能源数量有限,同时矿物燃烧时会产生大量的二氧化碳,污染环境。所以,根据现状,各国加大力度开发新能源。于是,太阳能这个清洁可再生能源已经受到许多国家的重视和利用,充分利用太阳能资源,有着深远的能源战略意义。

1.2国内外的研究情况

我国很多科学家也都陆续展开了这方面的研究。1994年《太阳能》杂志简述了单轴液压的自动跟踪器,完成了单向跟踪,国家气象局计量站在1990年研制出了FST型全自动太阳跟踪器,成功用于太阳辐射观测。2005年与以色列合作,在江苏省南京市建立成了第一座功率为75kw的太阳能塔式热发电示范电站,并成功运行发电。

此外,国外对太阳跟踪研究也有了突破性进展。二十世纪50年代,太阳能利用的领域出现了两项重大的技术突破:一是1954年在美国贝尔的实验室研制出6%实用型单晶硅电池,二是1955年以色列Tabor提出选择性吸收表面概念和理论并研制成功选择性太阳吸收涂层。这两项技术的突破为使太阳能的利用进入现代发展时期奠定了技术基础。此外,1997年美国的Blackace研制出了单轴的跟踪器,这种装置根据赤道坐标系下的太阳运行原理完成东西方向的自动跟踪,但南北方向通过手动的调节,接收器的接收效率提高了15%。1998年美国,加州成功的研制出了ATM两轴的跟踪器,使热接收率得到进一步提高。  

据现阶段国内外科学家对太阳跟踪的研究情况来看,普遍采用单轴的跟踪方式。随着科学技术的发展,太阳跟踪装置会朝着双轴的跟踪方向发展,做到同步跟踪太阳,太阳能的接收率有了很大提高。

1.3论文的主要研究内容

本设计要求设计一种自动的跟踪太阳的智能控制系统,从而更有效的利用太阳能。所以采用双轴跟踪的方法对太阳进行跟踪,使太阳能接受装置能够始终垂直于太阳。 

主要内容包括:

(1)分析太阳的变化规律,由此为基础制定比较合理的跟踪策略。

(2)分析所需要的传感器(光敏电阻)的功能及工作原理,设计光电转换电路。

(3)分析系统的硬件要求,选取符合条件的控制芯片,设计控制系统。

(4)设计控制方案,步进电机以及驱动电路。

(5)软件设计及实物平台搭建。

1.4本章小结

本章主要介绍了本课题的研究背景和意义,说明了太阳能是一种新型的清洁无污染能源,并且含量丰富,分布范围广,属于可再生能源,国内外已经开始开发利用太阳能了,并且受到国际上认可,对社会主义建设有着深远的战略意义。还介绍了本设计的总体思路和需要研究的内容。

第2章 系统的总体设计

2.1太阳跟踪方式

目前对太阳能利用最普遍的形式是通过太阳板将太阳能转换成热能,为了收集到尽可能多的太阳能,最好采取跟踪方式,使太阳板始终正对太阳。传统的跟踪方法主要采用以下两种方法:光电跟踪和视日运动轨迹跟踪,前者是闭环的随机系统,后者是开环的程控系统。

2.1.1光电跟踪

光电追踪装置利用光敏传感器,如硅光电管进行太阳光的检测。在这些装置中,光电管的安装靠近遮光板。通过调整遮光板的位置使遮光板对准太阳、硅光电池处于阴影区;当太阳西移时遮光板的阴影偏移,光电管受到阳光直射输出一定值的微电流,作为偏差信号,经放大电路放大,由伺服机构调整角度使追踪装置对准太阳完成追踪。光电追踪灵敏度高,结构设计较为简单;但受天气的影响很大,如果在稍长时间段里出现乌云遮住太阳的情况,太阳光线往往不能照射到硅光电管上,导致追踪装置无法对准太阳,甚至会引起执行机构的误动。

2.1.2视日运动轨迹跟踪

 视日运动轨迹跟踪方式有两种可分为单轴和双轴。

(1)单轴追踪。单轴跟踪又可分为水平单轴跟踪、不同倾角单轴跟踪、最佳倾角跟踪单轴追踪一般采用:①倾斜布置东西追踪;②焦线南北水平布置,东西追踪;③焦线东西水平布置,南北追踪。这三种方式都是单轴转动的南北向或东西向追踪。单轴追踪的优点是结构简单,但是由于入射光线不能始终与主光轴平行,收集太阳能的效果并不理想。

(2)双轴追踪。如果能够在太阳高度角和方位角的变化上都能够追踪太阳就可以获得最多的太阳能,全追踪即双轴就是根据这样的要求而设计的。双轴追踪又可以分为两种方式:极轴式全追踪和高度角方位角式全追踪。  

2.2系统总体设计要求及分析

2.2.1系统总体设计要求

对于本设计课题的整体要求是造价低廉、结构简单、性能可靠、充分考虑其经济性。在结构设计过程中,避免复杂和浪费,力图简单整洁,并且要便于安装和维护。另一方面,在控制单元设计中,要充分考虑到系统的全天候要求,要选用耐用和抗干扰性强的执行单元,避免发生故障。

本设计所要达到的目的是提高太阳能的利用率,确定使用太阳板将太阳能转化为电能。通常对太阳能进行转换的时候,因为太阳是不停运动的,所以如果接收装置是固定的,则无法时刻做到与太阳光线垂直,只能在固定时间吸收某一部分太阳能,而在其他时间的吸收效率不高甚至根本无法吸收到太阳能,因此,如果使太阳的吸收效率提高,必须要使太阳能吸收装置与太阳运行轨迹一致,从而可以持续吸收太阳能。在本设计中采用的是双轴跟踪法对太阳进行实时跟踪,使太阳能板能够始终正对太阳,从而提高吸收效率。

设计要求如下:

  1. 此装置能根据天气条件进行工作,晴天自动跟踪,阴天或黑夜停止跟踪。
  2. 在进行跟踪时,能确保太阳板始终与太阳光线垂直,更充分吸收太阳能。
  3. 在本设计中,要求硬件部分和软件部分能准确合理的配合和工作。

2.2.2系统总体设计分析

本设计主要模块包括:单片机控制电路,光电转换电路,AD转换电路,电机驱动电路。本部分首先主要介绍各个模块的硬件电路,以及整体实物平台搭建部分的原理分析,还有软件设计方面的研究。

硬件方面:采用双轴跟踪系统,能够同时在方位角和高度角两个方向进行跟踪,由光电传感器,信号处理及控制电路,方位角及高度角调整机构组成。传感器把接收到的光信号转换成电信号,然后经过信号处理及控制电路后,由控制电路输出相应的控制信号驱动方位角调整机构和高度角调整机构实现相应的位置调整。

软件方面:以单片机芯片为控制核心部分,经过数模转换模块,最后通过AD电压采样控制步进电机的正反转。

综上所述,本设计采用的具体方案是阳光照在光敏电阻上,通过光电转换变成电压值,输入AD转换电路,进行DA转换,然后进行AD电压采样,输入控制核心单片机,经处理后最后经过驱动芯片从而控制步进电机的正反转,使太阳板始终与太阳光线垂直。

下图为系统的总体设计方案

图2.1系统总体设计方案

2.3本章小结

本章主要介绍了太阳跟踪系统的两种跟踪方式,分别简述了两种跟踪方式的特点和原理,并最终决定采用双轴自动跟踪的方式。此外,也大体上说明了总体设计方案和原理,总结出了流程图。

第3章 系统的硬件设计

3.1单片机控制电路

为了使用方便,系统要求可以进行在线改写,并能在断电情况下保存数据而不需要保护电源,同时使系统使用尽可能少的外围扩展芯片,提高系统运行的可靠性,要求使用的单片机具有片内电擦除可编程只读存储器,基于以上原因,选用STC89C51单片机。它是由复位电路和晶振电路构成。

STC89C51单片机是最早期也最典型的产品,STC89C51单片机学习板是一款基于8位单片机处理芯片STC89C52RC的系统。STC89C52RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C52RC系列单片机是单时钟/机器周期(1T)的兼容8051 内核单片机,是高速/ 低功耗的新一代8051 单片机,全新的流水线/精简指令集结构,内部集成MAX810 专用复位电路。

有如下功能:

·8位CPU·4kbytes程序存储器(ROM) (52为8K)  

·128bytes的数据存储器(RAM) (52有256bytes的RAM)

·32条I/O口线

·111条指令,大部分为单字节指令

·21个专用寄存器  

·2个可编程定时/计数器

·5个中断源,2个优先级(52有6个)

·一个全双工串行通信口  

·外部数据存储器寻址空间为64kB

·外部程序存储器寻址空间为64kB  

·逻辑操作位寻址功能

·双列直插40PinDIP封装

·单一+5V电源供电

 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

 RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;  

ROM:用以存放程序、一些原始数据和表格;  

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;  

一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

 片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。

图中各引脚连接:

LED1  LED2是两个指示灯分别代表自动模式和手动模式;TX  RX是指串口通讯接口即程序下载接口;KEY1-KEY5是代表五个按键,其中一个是手动和自动模式之间的切换,另外四个是手动模式下,手动控制电机的上下左右四个方向的转动;X1  X2是连接晶振电路的;IN1-INT8是一个上拉排阻,它连接驱动芯片ULN2803,目的是提高输出电平,增加单片机的驱动能力;SDA  SCL分别代表连接I²C总线的数据线和时钟线。

图3.1单片机最小系统

3.1.1复位电路

单片机的置位和复位,都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。  单片机复位电路原理是在单片机的复位引脚RST上外接电阻和电容,实现上电复位。当复位电平持续两个机器周期以上时复位有效。复位电平的持续时间必须大于单片机的两个机器周期。具体数值可以由RC电路计算出时间常数。

 

图3.2复位电路

3.1.2晶振电路

 单片机系统里都有晶振,在单片机系统里晶振作用非常大,全程叫晶体振荡器,他结合单片机内部电路产生单片机所需的时钟频率,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。  在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。  单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各 部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。  晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。 STC89C51使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。

3.2光电转换电路设计

3.2.1光电传感器

光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,当它受到光的照射时,半导体片(光敏层)内 就激发出电子—空穴对,参与导电,使电路中电流增强。

光敏电阻的工作原理是基于内光电效应。在半导体光敏材料两端装上电极引线,将其封装在带有透明窗的管壳里就构成光敏电阻,为了增加灵敏度,两电极常做成梳状。入射光消失后,由光子激发产生的电子—空穴对将复合,光敏电阻的阻值也就恢复原值。在光敏电阻两端的金属电极加上电压,其中便有电流通过,受到一定波长的光线照射时,电流就会随光强的增大而变大,从而实现光电转换。光敏电阻没有极性,纯粹是一个电阻器件,使用时既可加直流电压,也加交流电压。半导体的导电能力取决于半导体导带内载流子数目的多少。

3.2.2光电转换电路工作原理及电路设计

光电转换装置接收太阳光,将光信号转换成电信号,根据所采集到的信号,由单片机分析得最终控制的步进电动旋转与转向来达到太阳能板,结果始终是垂直于入射光线,从而达到利用太阳能的最高效率。其中光电检测A对左远离光线进行检测,当光线远离电池板时A检测会给单片机信号,单片机控制驱动芯片驱动电机M1正转使电池板跟随光线左转。光电检测B对右远离光线进行检测,当光线远离电池板时B检测到并实时传输给单片机信号,单片机控制驱动芯片驱动电机M1反转使电池板跟随光线右转。光电检测C与D对太阳垂直角度的变化进行检测,并将检测到的光线变化信号传输给单片机,单片机进行进一步处理后控制驱动芯片驱动电机M2的正反转,从而实现电池板垂直角度的调整。光敏电阻的分布如图所示

          图3.3光敏电阻模型       

图3.4光电转换电路

3.3 AD转换模块电路设计

3.3.1AD转换模块

1.AD模块的组成

AD转换电路包括电压信号输入部分, AD转换部分和AD电压采样,信号输出部分。

2.AD转换原理及电路设计

由光电转换电路所得到的信号为模拟信号,所以采用AD转换器,将模拟信号转换为数字信号,然后通过单片机进行处理。模拟量可以是电压、电流等信号,但在AD转换前,输入到AD转换器的输入信号必须是电压信号。AD转换后,输出的数字信号可以有8位、10位、12位和16位等。在本设计中采用的是PCF8591芯片,PCF8591 是一种具有 I2C 总线接口的 8 位 A/D D/A 转换芯片,在与 CPU的信息传输过程中仅靠时钟线 SCL 和数据线 SDA 就可以实现。 I2C 总线是Philips (飞利浦)公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单 ,可维护性好, 易实现系统扩展, 易实现模块化标准化设计, 可靠性高等优点。  

PCF8591 为单一电源供电(2.5 6 V)典型值为 5 V,CMOS 工艺 PCF8591 有 4 路 8 位 A/D 输入,属逐次比较型,内含采样保持电路; 1 路 8 位 D/A 输出,内含有 DAC的数据寄存器 A/D D/A 的最大转换速率约为 11 kHz,但是转换的基准电源需由外部提供。 PCF8591具有4个模拟输入、1个模拟输出和1个串行I²C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I²C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I²C总线以串行的方式进行传输。

图3.5 AD转换模块                   

3.4步进电机驱动电路设计

3.4.1步进电机的介绍

前面介绍了光电转换电路,AD转换电路,和单片机电路部分的设计,其最终的目的也就是要控制步进电机的正反转。步进电机是将电脉冲转化为角位移的开环控制执行机构。步进电机又称为脉冲电动机,当步进驱动器接收到一个脉冲信号, 它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。其中步距角是对应一个脉冲信号,电机转子转过的角位移用θ表示。θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。四拍运行时步距角为θ=360度/(50*4)=1.8度,八拍运行时步距角为θ=360度/(50*8)=0.9度。在负载能力范围内这些关系不因电源电压、负载大小、环境条件的波动而变化。因而可适用于开环系统中作为执行元件,使控制系统大为简化。步进电动机可以在很宽的范围内通过改变脉冲频率来调速;能够快速反转和制动。它不需要变换可直接将数字脉冲信号转换为角位移,很适合采用微型计算机控制。步进电动机是纯粹的数字控制电动机。它将电脉冲信号转变成角位移,即给一个脉冲信号,步动机就转动一个角度,因此作常适合于单片机控制,推动了步进电动机的发展,为步进电动机的应用开辟了广阔的前景。

3.4.2步进电机及其控制方式

本系统用到的是四相步进电动机,四相步进电动机是将电信号转变成角位移或线位移的开关控制元件,其转速、停止位置只与脉冲信号的频率和脉冲数有关,具有误差小,易控制等特点,广泛用于仪器设计。选用28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-),八拍(A-AB-B-BC-C-CD-D-DA-A)。

3.4.3步进电机驱动电路

步进电机单靠交流供电或直流电源无法运动,必须与驱动电路同时使用时才能发挥其功能,步进电机驱动器(驱动电路)由决定换向顺序的控制电路(或称为逻辑电路)与控制电机输出功率的换相电路(或称为功率电路(power stage))组成。本图是步进电机驱动电路原理图。驱动电路通过ULN2803构成比较多的驱动电路,8个NPN达林顿晶体管,连接在阵列非常适合逻辑接口电平数字电路(例如TTL,CMOS或PMOS上/ NMOS)和较高的电流/电压,如电灯,电磁阀,继电器,打印锤或其他类似的负载,广泛的使用范围:计算机,工业和消费应用。所有设备功能由集电极输出和钳位二极管瞬态抑制。该ULN2803是专为符合标准TTL。该电路为反向输出型,即输入低电平电压,输出端才能导通工作。

基本工作原理:如果1脚输入高电平1,则16脚输出低电平0,反之一样!一般来说,步进电动机的工作电压是5V,对应芯片的9脚接步进电动机的工作电压5V。输入接上拉电阻即接单片机引脚。引脚输入低电平,ULN2003就输出高电平,正反转跟输入电平有关。电路图如图所示。

图3.6驱动芯片

3.5单片机外围电路设计

1、电源模块电路

其中J1是指开关按键

图3.7电源电路

2、按键电路

其中S1是手动和自动模式之间的切换,默认为自动模式,S2,S3,S4,S5是手动模式下,利用手动按键来控制步进电机的正反转。

图3.8按键电路

3、指示灯电路    

系统默认为自动模式,接通电源后LED1亮,当按下S1按键时,切换成手动模式,LED2亮。       

图3.9指示灯电路

3.6系统实物平台搭建

本设计要求:,机械部分主要由电池板支架,转动轴,底座和步进电机构成,机械装置由电机驱动,可使电池板在水平方向360度和垂直方向0~80度之间自由旋转。控制部分主要由STC89C51单片机系统构成。  跟踪系统机械结构大致为用螺丝把一个控制方位的步进电机控制在底座上,然后在步进电机上安装转动轴,上面连接水平方向步进电机的底座。水平步进电机也被用螺丝控制在垂直方向的底座上,也安装了转动轴,并且连接着太阳板和光敏电阻等部件。机机械结构的工作原理为用2个步进电机分别对高度角和方位角2个方向进行控制。跟踪器的方位轴垂直地平面,控制水平方向;另一根轴与方位轴垂直称为俯仰轴,控制垂直方向,最后两个步进电机分别与单片机控制系统连接,具体是跟驱动芯片ULN2803连接,而此芯片又与AD转换芯片连接,从而控制步进电机。工作时,太阳跟踪器根据太阳运动的位置,通过方位轴转动改变方位角来改变水平方向,通过俯仰轴作俯仰运动改变接收平台的倾斜角来改变垂直方向,从而使太阳光线与太阳板垂直,以达到跟踪的目的。

3.7本章小结

本章介绍了本系统各部分硬件模块的简介和工作原理,主要模块有光电转换电路,AD转换模块,步进电机控制电路,其中还有一些小部件,比如,按键模块,LED显示模块,电源模块,复位电路,晶振电路。最后介绍了实物平台的具体搭建。

第4章系统软件设计

本设计采用的是51单片机,它是控制这个系统的核心部分,软件部分也由单片机来操作,其最终目的就是正确控制电机的正反转。本部分以单片机为核心部件将各个电路模块都连接起来,使我们更清楚设计本意。可设上下左右四个方向的光敏电阻的电压值分别为U1、U2、U3、U4,设精度为10

图4.1软件流程图

4.1按键部分子程序

按键电路默认状态为自动模式。

if(!ENTER)     

  {

   Delay_ms(20);

   while(!ENTER);

   k++; 

  }

4.2指示灯部分子程序

LED1输出高电平说明此装置在自动模式下。

if(k%2 == 0)       

  {

  LED1 = 1;

  LED2 = 0;

4.3主程序模数转换

数模转换是本设计的关键部分,光电转换的电压值输入到AD模块后,经过PCF8951芯片里的电压采样,最后输出数字信号,再把信息传送给单片机,从而控制步进电机正反转。流程图如下

    

图4.2AD模块流程图

本设计AD转换模块用到的芯片是PCF8951,它有4路8位A/D输入,属于逐次比较型,内含采样保持电路,1路8位输出,内含有ADC数据寄存器。意思是芯片内有四个通道,所以分为以下程序的四种情况。

 Case0是用来读取8951芯片第一通道所采集的到模拟量的值;0x41是控制发送的字节;IRcvByte(PCF8591)是用来接收读取AD转换的数据;本设计在AD模块中,利用芯片PCF8951,输入和输出都进行了电压保持采样,即系统内部自己进行了两次采样,所以最后输出电压得需要IRcvByte(PCF8591)*2,这才保证输入和输出数据相同,确保了数据的准确性;ADC是用来寄存每一通道输出的数据。以下通道同理。程序中,最后一个if语句是指在手动模式下的操作。

for(i=0;i<8;i++)           

  {

   switch(AD_CHANNEL)

   {

    case 0: PCF8591_ISendByte(PCF8591,0x41);

    AD_Up=PCF8591_IRcvByte(PCF8591)*2;  //ADC0 模数转换1

    break;  

    

    case 1: PCF8591_ISendByte(PCF8591,0x42);

    AD_Down=PCF8591_IRcvByte(PCF8591)*2;  //ADC1  模数转换2

    break;  

    case 2: PCF8591_ISendByte(PCF8591,0x43);

    AD_Left=PCF8591_IRcvByte(PCF8591)*2;  //ADC2 模数转换3

    break;  

    

    case 3: PCF8591_ISendByte(PCF8591,0x40);

    AD_Right=PCF8591_IRcvByte(PCF8591)*2;  //ADC3  模数转换4

    break;

   }

   Send_Hex(Table,4);

   if(++AD_CHANNEL>3)

   {

    AD_CHANNEL=0;

    Table[0] = AD_Up;

   Table[1] = AD_Down;

   Table[2] = AD_Left;

   Table[3] = AD_Right;

    }

  }

  }

  if(k%2 == 1)

  {

   LED1 = 0;

   LED2 = 1;

   AD_Up = 0; //上

   AD_Down = 0;//下

   AD_Left = 0;//左

   AD_Right = 0;//右 

  }  

4.4驱动电路子程序

设定10为精度值,本设计中一共有上下左右四个光敏电阻,在光照下就会产生电压,上边电压大于下边电压或者两边电压值差大于10,或者手动模式下按下向下的按键,水平电机反转,若下边电压大于上边电压或者两边电压值差大于10,或者手动模式下按下向上的按键,水平电机正转。同理,左边电压大于右边电压或者两者差值大于10,或者手动模式下按下向右的按键,方位电机右转,若右边电压大于左边或者两者差值大于10,或者手动模式下按下向左的按键,方位电机左转。具体程序如下:

if(((AD_Up<AD_Down)&&(AD_Down-AD_Up>10))||(!UP))//上转

  {

   for(i=0;i<10;i++)

   {

    for(j=0;j<4;j++)

    {

     P0=Motor_Up[j];

     Delay_ms(10);

    }  

   } 

  }

  //

  if(((AD_Up>AD_Down)&&(AD_Up-AD_Down>10))||(!DOWN))//下转

  {

   for(i=0;i<10;i++)

   {

    for(j=0;j<4;j++)

    {

     P0=Motor_Down[j];

     Delay_ms(10);

    }  

   }

  }

  /

  if(((AD_Left<AD_Right)&&(AD_Right-AD_Left>10))||(!LEFT))//左转

  {

   for(i=0;i<10;i++)

   {

    for(j=0;j<4;j++)

    {

     P0=Motor_Left[j];

     Delay_ms(10);

    }  

   }

  

  }

  //

  if(((AD_Left>AD_Right)&&(AD_Left-AD_Right>10))||(!RIGHT))//右转

  {

   for(i=0;i<10;i++)

   {

    for(j=0;j<4;j++)

    {

     P0=Motor_Right[j];

     Delay_ms(10);

    }  

   }

  }

  

  Delay_ms(100);//延时,可适当修改

 }

}

4.5 AD电压采样子程序

将光电转换电路中测得的电压值通过AD转换模块转换为数值采样再存到单片机内存里,进行比较,AD电压采样可以决定采样的精度,下面介绍芯片内部原理。

  1. I2C总线数据位的传输    

它是由串行数据线(SDA)和串行时钟线(SCL)组成。连接到总线上的每一个器件都有一个唯一的地址,而且都可以作为一个发生器或接收器,SDA和SCL都是双向线路,分别通过一个电阻连接到电源端。前提是连接到总线上的器件的SDA和SCL端必须是漏极或集电极开路型。I2C总线上的数据传输速率在标准模式下可达100Kb/s,快速模式可达400Kb/s,高速模式下可达3.4Mb/s。连接到总线的器件数量只由总线的电容(400PF)限制决定。     

 I2C总线上每传输一个数据位必须产生一个时钟脉冲,I2C总线上数据传输的有效性要求SDA线上的数据必须在时钟线SCL的高电平期间保存稳定,数据线的改变只能在时钟线为低电平期间。在标准模式下,高低电平宽度必须大于4.7us(即每次时钟线需延时4.7us后才能改变)。

2、I2C总线数据的传输  

数据传输的字节格式要求:发送到SDA线上的每一个字节必须为8位,每次发送的字节数量不受限制,从机在接收完一个字节后向主机发送一个应答位,主机在收到从机应答后才会发送第二字节数据,发送数据时先发数据的最高位。

  数据传输中的应答:相应的应答位由接收方(从机)产生,在应答的时钟脉冲期间,发送方(主机)应释放SDA线(使其为高电平)。在应答过程中,接收方(从机)必须将数据线SDA拉低,使它在这个时钟脉冲的高电平期间保持稳定的低电平。  

#include <PCF8591.H>        

bit PCF859_ack;                 /*应答标志位*/

   

/*******************************************************************

                     起动总线函数               

函数原型: void  Start_I2c();  

功能:     启动I2C总线,即发送I2C起始条件.  

********************************************************************/

void PCF8591_Start()

{

 PCF8591_SDA=1;         /*发送起始条件的数据信号*/

 _Nop();

 PCF8591_SCL=1;

 _Nop();        /*起始条件建立时间大于4.7us,延时*/

 _Nop();_Nop();_Nop();_Nop();    

 PCF8591_SDA=0;         /*发送起始信号*/

 _Nop();        /* 起始条件锁定时间大于4μs*/

 _Nop();_Nop();_Nop();_Nop();       

 PCF8591_SCL=0;       /*钳住I2C总线,准备发送或接收数据 */

 _Nop();_Nop();

}

/*******************************************************************

                      结束总线函数               

函数原型: void  Stop_I2c();  

功能:     结束I2C总线,即发送I2C结束条件.  

********************************************************************/

void PCF8591_Stop()

{

  PCF8591_SDA=0;      /*发送结束条件的数据信号*/

  _Nop();       /*发送结束条件的时钟信号*/

  PCF8591_SCL=1;      /*结束条件建立时间大于4μs*/

  _Nop();_Nop();_Nop();_Nop();_Nop();

  PCF8591_SDA=1;      /*发送I2C总线结束信号*/

  _Nop();_Nop();_Nop();_Nop();

}

/*******************************************************************

                 字节数据发送函数               

函数原型: void  SendByte(UCHAR c);

功能:     将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对

          此状态位进行操作.(不应答或非应答都使ack=0)     

           发送数据正常,ack=1; ack=0表示被控器无应答或损坏。

********************************************************************/

void  PCF8591_SendByte(unsigned char  c)

{

 unsigned char  BitCnt;

 for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/

    {

     if((c<<BitCnt)&0x80)PCF8591_SDA=1;   /*判断发送位*/

       else  PCF8591_SDA=0;                

     _Nop();

     PCF8591_SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/

      _Nop(); _Nop();             /*保证时钟高电平周期大于4μs*/

      _Nop();_Nop();_Nop();         

     PCF8591_SCL=0;

    }

    _Nop();_Nop();

    PCF8591_SDA=1;                /*8位发送完后释放数据线,准备接收应答位*/

    _Nop();_Nop();   

    PCF8591_SCL=1;

    _Nop();_Nop();_Nop();

    if(PCF8591_SDA==1)PCF859_ack=0;     

       else PCF859_ack=1;        /*判断是否接收到应答信号*/

    PCF8591_SCL=0;

    _Nop();_Nop();

}

/*******************************************************************

                 字节数据接收函数               

函数原型: UCHAR  RcvByte();

功能:        用来接收从器件传来的数据,并判断总线错误(不发应答信号),

          发完后请用应答函数应答从机。  

********************************************************************/    

unsigned char  PCF8591_RcvByte()

{

  unsigned char  retc;

  unsigned char  BitCnt;

  

  retc=0;

  PCF8591_SDA=1;                     /*置数据线为输入方式*/

  for(BitCnt=0;BitCnt<8;BitCnt++)

      {

        _Nop();           

        PCF8591_SCL=0;                  /*置时钟线为低,准备接收数据位*/

        _Nop();_Nop();                 /*时钟低电平周期大于4.7μs*/

        _Nop();_Nop();_Nop();

        PCF8591_SCL=1;                  /*置时钟线为高使数据线上数据有效*/

        _Nop();_Nop();

        retc=retc<<1;

        if(PCF8591_SDA==1)retc=retc+1;  /*读数据位,接收的数据位放入retc中 */

        _Nop();_Nop();

      }

  PCF8591_SCL=0;    

  _Nop();_Nop();

  return(retc);

}

/********************************************************************

                     应答子函数

函数原型:  void Ack_I2c(bit a);

功能:      主控器进行应答信号(可以是应答或非应答信号,由位参数a决定)

********************************************************************/

void PCF8591_Ack(bit a)

{

  

  if(a==0)PCF8591_SDA=0;              /*在此发出应答或非应答信号 */

  else PCF8591_SDA=1;

  _Nop();_Nop();_Nop();      

  PCF8591_SCL=1;

  _Nop();_Nop();                    /*时钟低电平周期大于4μs*/

  _Nop();_Nop();_Nop();  

  PCF8591_SCL=0;                     /*清时钟线,钳住I2C总线以便继续接收*/

  _Nop();_Nop();    

}

///

/*******************************************************************

DAC 变换, 转化函数               

*******************************************************************/

bit PCF8591_DACconversion(unsigned char sla,unsigned char c,  unsigned char Val)

{

   PCF8591_Start();              //启动总线

   PCF8591_SendByte(sla);            //发送器件地址

   if(PCF859_ack==0)return(0);

   PCF8591_SendByte(c);              //发送控制字节

   if(PCF859_ack==0)return(0);

   PCF8591_SendByte(Val);            //发送DAC的数值  

   if(PCF859_ack==0)return(0);

   PCF8591_Stop();               //结束总线

   return(1);

}

/*******************************************************************

ADC发送字节[命令]数据函数               

*******************************************************************/

bit PCF8591_ISendByte(unsigned char sla,unsigned char c)

{

   PCF8591_Start();              //启动总线

   PCF8591_SendByte(sla);            //发送器件地址

   if(PCF859_ack==0)return(0);

   PCF8591_SendByte(c);              //发送数据

   if(PCF859_ack==0)return(0);

   PCF8591_Stop();               //结束总线

   return(1);

}

/*******************************************************************

ADC读字节数据函数               

*******************************************************************/

unsigned char PCF8591_IRcvByte(unsigned char sla)

{  unsigned char c;

   PCF8591_Start();          //启动总线

   PCF8591_SendByte(sla+1);      //发送器件地址

   if(PCF859_ack==0)return(0);

   c=PCF8591_RcvByte();          //读取数据0

   PCF8591_Ack(1);           //发送非就答位

   PCF8591_Stop();           //结束总线

   return(c);

}

4.6本章小结

本章主要介绍了整个系统中各个模块的软件设计及原理,还有编写的程序,主要模块的软件编程,比如,按键模块,LED灯显示模块,步进电机驱动模块,AD转换还有AD电压采样模块。具体解释如上。

第5章结  论

5.1总结

本设计采取了传统的硬件和软件相结合的开发方法,使用了STC89C51单片机作为整个系统的控制处理中心,它具有硬件设计方便,资源丰富,软件部分程序指令快速简单,驱动能力强等优点,保证了该系统反应的快速性和灵敏性。从资料的查找到电路的设计,从程序的编写到功能的基本实现,一路坎坷。在设计过程中不断的发现问题,同时也不断的解决问题,越来越发觉制作实物相比整体设计要难一些,实际制作过程中会遇到多种多样的问题,要通过不断的测试和实验来解决。

5.2不足与进一步改进

当然,本设计也存在很多不足之处比如程序算法的设计不尽完美,各样器件的参数不太准确等等,还有一些未发现的瑕疵之处,都需要在调试和实践之后进行许多的改进。而且不能粗心大意,一开始就因单片机一脚没连接导致单片机不起作用,浪费时间又浪费精力,因此,做任何事都要细心,要考虑的周全,不能因为一时的失败而丧失信心,从哪里跌倒了要从哪里爬起来,只有有了这样的精神,才会从问题中学到更多的知识,为我们以后更好的发展奠定了基础。

最后,本太阳能自动跟踪系统基本能满足设计的要求,能实现按照所预先设计的思想运转,各个模块电路也都运行正常,但是由于本人的知识和水平的有限,在机械设计部分知识的欠缺,使得本系统在这方面有很大的不足。如果此系统能够在机械设计上有较多改进,能够加上液晶显示模块的话,相信本系统将会有很大的改进,在性能上会有很大的提高。

  参考文献

 [1]李申生.太阳能[M].北京:北京人民教育出版社,1988:12-14.

 [2]王炳忠.太阳能—未来能源之星[M].北京:高教出版社,1990:20-21.

 [3]a b Philibert,Cedric(2005).”The  Present and Future use of Solar Thermal Energy as a Primary Source of Energy ”.IEA.Archived from the original on[M] 2011-12-12.

 [4]言惠.太阳能21世纪的能源[J].上海大中型电机,2004,(04):16-18.

 [5]陈维,李戬洪.太阳能利用中的跟踪控制方式的研究[J].能源工程,2003,(03):18-21.

 [6] 孙茵茵,鲍剑斌,王凡.太阳自动跟踪器的研究[J].机械设计与制造,2005(7): 157-159

 [7] 陈维,李戬洪.太阳能利用中的跟踪控制方式的研究[J].能源工程,2003,(03):18-21.

 [8] 欧阳名三,余世杰,沈玉樑.采用单片机的太阳能电池最大功率点跟踪控制器[J]. 电子技术,2002(12):49-51

 [9] 王雪文.太阳能电池板自动跟踪控制系统设计[J].西北大学学报(自然科学版).  2004,34(2):163-164.

 [10]薛建国.基于单片机的太阳能电池自动追踪系统的设计[J].长春师范学院学报,2005,24(3):26-30.

 [11]James F.Cox.Fundamentals of linear electronics:integrated and discrete. Cengage Learning. [M],91-. 26 June 2001[20 August 2011].

 [12]朱定华.单片机原理及接口技术[M].北京:电子工业出版社,2001:25-27.

 [13]周兴华.光敏器件[J].电子世界,1999,(12):53-54.

 [14]范志刚.光电测试技术[M].北京:电子工业出版社,2004:24-26.

 [15] 余泽通,宋长源.硅光电池板自动跟踪太阳机械装置的设计[J].新乡学院学报,2008(3):70-71

 [16] 李建庚.一种智能型全自动太阳跟踪装置的机械设计[J].太阳能学报,2003,24(03):330-333.                                         

相关文章:

基于STC89C51的太阳自动跟踪系统的设计与实现—单片机控制步进电机实现太阳跟踪控制(仿真+程序+原理图+PCB+文档)

摘 要 随着我国经济的飞速发展&#xff0c;促使各种能源使用入不敷出&#xff0c;尤其是最主要的能源&#xff0c;煤炭石油资源不断消耗与短缺&#xff0c;因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点&#xff0c;且分布范围广&…...

JAVA_数据结构_栈和队列

1.栈&#xff08;Stack&#xff09; 1.1概念 栈是一种特殊的线性表&#xff0c;它只允许一端进行增删查改操作&#xff0c;它的头称为栈顶&#xff0c;进行压栈和出栈的操作&#xff0c;则另一端称为栈底&#xff0c;并且它遵循着先进后出的操作。 压栈&#xff1a;也可称为进…...

独立组网和非独立组网

独立组网&#xff08;SA&#xff09; vs. 非独立组网&#xff08;NSA&#xff09; 5G组网方式主要分为 独立组网&#xff08;SA, Standalone&#xff09; 和 非独立组网&#xff08;NSA, Non-Standalone&#xff09;&#xff0c;两者在网络架构、核心网、应用场景等方面有所不…...

HR人员和组织信息同步AD域服务器实战方法JAVA

HR人员和组织信息同步AD域服务器 前期准备AD域基础知识整理HR同步AD的逻辑代码结构配置文件设置启动类HR组织的BeanHR人员Bean获取HR人员和组织信息的类AD中处理组织和人员的类日志配置 POM.xml文件生成EXE文件服务器定时任务异常问题注意事项 前期准备 1、开发语言&#xff1…...

【云上CPU玩转AIGC】——腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…...

【测试开发】OKR 网页管理端自动化测试报告

【测试报告】OKR 管理端 项目名称版本号测试负责人测试完成日期联系方式OKR 管理端4.0马铭胜2025-03-2115362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中&#xff0c;个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而&#xff0c;如何设定并持…...

go语言中空结构体

空结构体(struct{}) 普通理解 在结构体中&#xff0c;可以包裹一系列与对象相关的属性&#xff0c;但若该对象没有属性呢&#xff1f;那它就是一个空结构体。 空结构体&#xff0c;和正常的结构体一样&#xff0c;可以接收方法函数。 type Lamp struct{}func (l Lamp) On()…...

如何缓解大语言模型推理中的“幻觉”(Hallucination)?

目录 如何缓解大语言模型推理中的“幻觉”&#xff08;Hallucination&#xff09;&#xff1f; 1. 什么是大语言模型的“幻觉”&#xff08;Hallucination&#xff09;&#xff1f; 幻觉的常见类型 2. 如何缓解大模型的幻觉问题&#xff1f; 方法 1&#xff1a;使用知识检索…...

优选算法系列(3.二分查找 )

目录 一.二分查找&#xff08;easy&#xff09; 题目链接&#xff1a;704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; 代码&#xff1a; 二.在排序数组中查找元素的第⼀个和最后⼀个位置&#xff08;medium&#xff09; 题目链接&#xff1a;34.…...

【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation

论文地址&#xff1a;Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来&#xff0c;多行为推荐模型取得了显著成功。然而&#xff0c;许多模型未充分考虑不同行为之间的共性与差异性&#xff0c;以…...

细胞计数专题 | 高效 + 精准!点成LUNA-III™细胞计数仪解锁活细胞检测与浓度分析新高度

1 引言 在生物医学研究中&#xff0c;准确的细胞计数至关重要&#xff0c;它影响着细胞治疗、疾病诊断、组织再生和生物测定等应用领域。传统的手动计数方法既耗时又容易产生偏差。像点成LUNA-III™自动细胞计数仪这样的自动化系统&#xff0c;为提高计数的准确性、可重复性和…...

糊涂人寄信——递推

思路分析&#xff1a;当有n封信&#xff0c;n个信封时。第k封信没有装在第k个信封里&#xff08;k从1~n&#xff09;&#xff0c;就算所有的信封都装错了。我们可以得知的是&#xff0c;当有1封信,时&#xff0c;装错类别数为0。当有两封信时&#xff0c;装错类别为1。 当有三…...

深入Python C API:掌握常用函数与实战技巧

深入Python C API&#xff1a;掌握常用函数与实战技巧 Python的灵活性和易用性使其成为广泛应用的编程语言&#xff0c;但在某些场景下&#xff08;如高性能计算、与C/C代码交互&#xff09;&#xff0c;直接使用C语言扩展Python的能力变得尤为重要。Python C API&#xff08;…...

第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略

目录 1. 项目需求 2. 网络选择 2.1 UNet模块 2.2 TransUnet 2.2.1 SE模块 2.2.2 CBAM 2.3 关键代码 3 对比试验 3.1 unet 3.2 transformerSE 3.3 transformerCBAM 4. 结果分析 5. 推理 6. 下载 1. 项目需求 本文需要做的工作是基于CNN和Transformer的心脏左心室…...

Word中公式自动标号带章节编号

&#xff08;1&#xff09;插入一行三列的表格&#xff0c;设置宽度分别为0.5&#xff0c;13.39和1.5&#xff0c;设置纵向居中&#xff0c;中间列居中对齐&#xff0c;最右侧列靠右对齐&#xff0c;设置段落如下 &#xff08;2&#xff09;插入域代码 【Word】利用域代码快速实…...

AI风向标《AI与视频制作全攻略:从入门到精通实战课程》

课程信息 AI风向标《AI与视频制作全攻略&#xff1a;从入门到精通实战课程》,夸克网盘和百度网盘课程。 课程介绍 《AI与视频制作全攻略&#xff1a;从入门到精通实战课程》是一套全面融合AI技术与视频制作的实战课程&#xff0c;旨在帮助创作者从基础软件使用到高级视频剪辑…...

el-table折叠懒加载支持排序

el-table折叠懒加载支持排序 因为el-table懒加载的子节点是通过缓存实现的&#xff0c;如果想在展开的情况下直接刷新对应子节点数据&#xff0c;要操作el-table组件自身数据&#xff0c;否则不会更新 以排序功能为例 maps: new Map() //用于存储子节点懒加载的数据// 加载子…...

Kotlin v2.1.20 发布,标准库又有哪些变化?

大家吼哇&#xff01;就在三小时前&#xff0c;Kotlin v2.1.20 发布了&#xff0c;更新的内容也已经在官网上更新&#xff1a;What’s new in Kotlin 2.1.20 。 我粗略地看了一下&#xff0c;下面为大家选出一些我比较感兴趣、且你可能也会感兴趣的内容。 注意&#xff01;这里…...

AI智能问答“胡说八道“-RAG探索之路

AI智能问答"胡说八道"-RAG探索之路 背景信息RAGRAG技术的知识难题分块矛盾知识缺失相互冲突 RAG知识优化实践分块优化缺失优化冲突优化 未来展望 背景信息 你有没有遇到过这样的场景&#xff1f;当你向智能助手提问&#xff1a;“某科技公司为何突然更换高层领导&am…...

【yolo】YOLO训练参数输入之模型输入尺寸

模型输入尺寸是YOLO训练和推理过程中非常重要的参数之一。YOLO要求输入图像的尺寸是固定的&#xff0c;通常为正方形&#xff08;如416416、640640等&#xff09;。这个尺寸直接影响模型的性能和速度。以下是对模型输入尺寸的详细介绍&#xff1a; 1. 模型输入尺寸的作用 统一…...

[原创](Modern C++)现代C++的关键性概念: 如何声明一个返回数组指针的函数?

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、C …...

1204. 【高精度练习】密码

文章目录 题目描述输入输出样例输入样例输出数据范围限制CAC代码 题目描述 人们在做一个破译密码游戏&#xff1a; 有两支密码棒分别是红色和蓝色&#xff0c;把红色密码棒上的数字减去蓝色 密码棒上的数字&#xff0c;就是开启密码锁的密码。 现已知密码棒上的数字位数不超过…...

DigitalFoto公司如何用日事清流程管理工具实现任务优先级与状态可视化?

一、业务介绍 在DigitalFoto&#xff0c;设计和制造先进的摄影器材&#xff0c;如稳定器、灯光设备和支架&#xff0c;是日常工作的核心。公司的业务模式包括为其他品牌设计和制造定制产品&#xff0c;无论是作为OEM还是ODM。这样的多样化业务需求推动了公司在产品开发上必须非…...

解锁C++编程能力:基础语法解析

C入门基础 一、C的第一个程序二、命名空间三、C输入&输出四、缺省参数/默认参数五、函数重载六、引用1.引用的特性2.引用的使用引用做返回值场景 3.const引用只有指针和引用涉及权限放大、缩小的问题&#xff0c;普通变量没有 4.指针和引用的关系 七、inline八、nullptr 一…...

【Leetcode 每日一题】2680. 最大或值

问题背景 给你一个下标从 0 0 0 开始长度为 n n n 的整数数组 n u m s nums nums 和一个整数 k k k。每一次操作中&#xff0c;你可以选择一个数并将它乘 2 2 2。 你最多可以进行 k k k 次操作&#xff0c;请你返回 n u m s [ 0 ] ∣ n u m s [ 1 ] ∣ . . . ∣ n u m …...

YOLO魔改之SAM空间注意力模块

基于SAM注意力的YOLOv7改进算法详解(可用于工业检测方案) 一、应用场景说明 本改进算法适用于以下工业检测场景: ​复杂背景下的微小目标检测​(电子元件缺陷、PCB板焊点)​密集目标重叠检测​(传送带上的包裹分拣、人群计数)​动态环境目标追踪​(无人机巡检、自动驾…...

基于 TRIZ 理论的筏式养殖吊笼清洗装备设计研究

基于 TRIZ 理论的筏式养殖吊笼清洗装备设计研究 一、引言 筏式养殖在水产养殖业中占据重要地位&#xff0c;吊笼作为养殖贝类、藻类等生物的关键器具&#xff0c;其清洁程度直接影响养殖生物的健康与产量。传统的吊笼清洗方式多依赖人工&#xff0c;效率低下、劳动强度大且清洗…...

Day11 动态规划入门

动态规划 就是 : 给定一个问题&#xff0c;我们把它拆成一个个子问题&#xff0c;直到子问题可以直接解决。然后把子问题的答案保存起来&#xff0c;以减少重复计算。再根据子问题答案反推&#xff0c;得出原问题解的一种方法. 记忆化搜索 暴力dfs 记录答案 动态规划入门思…...

配置阿里云yum源

配置阿里云yum源 修改默认的yum仓库&#xff0c;把原有的移动到创建的目录里&#xff08;踢出国外的yum源&#xff09; # 切换到/ect/yum.repos.d/目录下 cd /etc/yum.repos.d/ # 新建repo目录 mkdir repo # 把原有的移动到创建的目录里 mv ./*.repo ./repo/配置yum源 # 找到…...

在Linux系统安装Ollama两种方法:自动安装和手动安装,并配置自启动服务

目录 一、命令自动安装‌ &#xff08;一&#xff09;使用命令行安装 &#xff08;二&#xff09;配置环境变量 &#xff08;三&#xff09;重新加载systemd配置并重启服务 ‌二、手动安装‌ &#xff08;一&#xff09;下载本地文件 &#xff08;二&#xff09;解压并安…...

Python Django入门(创建应用程序)

在本章中&#xff0c;你将学习如何使用 Django&#xff08;http://djangoproject.com/ &#xff09;来开发一个名为“学习笔记”&#xff08;Learning Log&#xff09;的项目&#xff0c;这是一个在线日志系统&#xff0c;让你能够记录所学习的有关特定主题的知识。 我们将为这…...

HCIP-2 RSTP快速生成树

HCIP-2 RSTP快速生成树 STP的不足&#xff1a; 1.STP的端口角色过于简单不丰富&#xff0c;部署时不能很好的应用与较为复杂的网络环境中。 2.STP的迁移状态过于冗长&#xff0c;侦听、学习、阻塞状态下都是不转发业务流量。 3.STP的算法较为繁琐。 TCN TCA TC。 4.STP被动…...

软考-软件设计师-计算机网络

一、七层模型 中继器&#xff1a;信号会随着距离的增加而逐渐衰减&#xff0c;中继器可以接受一端的信息再将其原封不动的发给另一端&#xff0c;起到延长传输距离的作用&#xff1b; 集线器&#xff1a;多端口的中继器&#xff0c;所有端口公用一个冲突域&#xff1b; 网桥&…...

夸克网盘任务脚本——进阶自动版

脚本是用于自动管理和更新夸克云盘(Quark Cloud Drive)上的文件和目录的Python脚本。其主要功能包括自动下载、更新、重命名、删除文件和文件夹,以及处理和发送通知,可以在特定的时间间隔内运行,根据配置文件进行操作。 主要功能 1. Quark 类: __init__:初始化类,设置…...

squirrel语言全面介绍

Squirrel 是一种较新的程序设计语言&#xff0c;由意大利人 Alberto Demichelis 开发&#xff0c;其设计目标是成为一个强大的脚本工具&#xff0c;适用于游戏等对大小、内存带宽和实时性有要求的应用程序。以下是对 Squirrel 语言的全面介绍&#xff1a; 语言特性 动态类型&a…...

北京南文观点:品牌如何抢占AI 认知的 “黄金节点“

在算法主导的信息洪流中&#xff0c;品牌正在经历一场隐蔽的认知权争夺战&#xff0c;当用户向ChatGPT咨询"哪家新能源车企技术最可靠"时&#xff0c;AI调取的知识图谱数据源将直接决定品牌认知排序。南文乐园科技文化&#xff08;北京&#xff09;有限公司&#xff…...

使用Python在Word中创建、读取和删除列表 - 详解

目录 工具与设置 Python在Word中创建列表 使用默认样式创建有序&#xff08;编号&#xff09;列表 使用默认样式创建无序&#xff08;项目符号&#xff09;列表 创建多级列表 使用自定义样式创建列表 Python读取Word中的列表 Python从Word中删除列表 在Word中&#xff…...

分布式中间件:RabbitMQ确认消费机制

分布式中间件&#xff1a;RabbitMQ确认消费机制 在分布式系统中&#xff0c;消息队列是实现异步通信和系统解耦的重要组件。RabbitMQ 作为一款功能强大的消息队列中间件&#xff0c;提供了丰富的特性来保证消息的可靠传输和消费。其中&#xff0c;确认消费机制是确保消息被正确…...

Redis的大Key问题如何解决?

大家好&#xff0c;我是锋哥。今天分享关于【Redis的大Key问题如何解决?】面试题。希望对大家有帮助&#xff1b; Redis的大Key问题如何解决? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis的大Key问题指的是存储在Redis中的某些键&#xff08;Key&#xf…...

日语学习-日语知识点小记-构建基础-JLPT-N4N5阶段(25):解释说明:という

日语学习-日语知识点小记-构建基础-JLPT-N4&N5阶段(25):解释说明:という 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)复习语法(2) 解释说明:という3、单词(1)日语单词(2)日语片假名单词4、相近词辨析5、单词辨析记录6、总结1、前言 (1)情况说明 …...

Windows10配置OpenJDK11

下载 # 华为OpenJDK镜像源 https://mirrors.huaweicloud.com/openjdk/11.0.2/解压 # 解压后至于C:\Dev\Env\Java\jdk-11.0.2目录下 https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_windows-x64_bin.zip编译安装 # 以管理员身份运行 CMD命令提示符 并进入JD…...

Python实验:读写文本文件并添加行号

[实验目的] 熟练掌握内置函数open()的用法&#xff1b;熟练运用内置函数len()、max()、和enumerate()&#xff1b;熟练运用字符串的strip()、ljust()和其它方法&#xff1b;熟练运用列表推导式。 [实验和内容] 1.编写一个程序demo.py&#xff0c;要求运行该程序后&#xff0…...

什么是 NDC 坐标?什么是世界坐标?

什么是 NDC 坐标&#xff08;归一化设备坐标&#xff09;&#xff1f; 定义 NDC&#xff08;Normalized Device Coordinates&#xff09; 是三维图形渲染管线中的中间坐标系统&#xff0c;范围为 [-1, 1]&#xff08;x、y、z 轴均为此范围&#xff09;。它是设备无关的标准化…...

25年护网二面

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

《鸟哥的Linux私房菜基础篇》---5 vim 程序编辑器

目录 一、vim程序编辑器的简介 二、命令模式快捷键&#xff08;默认模式&#xff09; 1、光标移动 2、编辑操作 3、搜索与替换 三、插入模式快捷键 四、底行模式快捷键&#xff08;按&#xff1a;进入&#xff09; 五、高级技巧 1、分屏操作 2、多文件编辑 3、可视化…...

Day21:在排序数组中查找数字

某班级考试成绩按非严格递增顺序记录于整数数组 scores&#xff0c;请返回目标成绩 target 的出现次数。 示例 1&#xff1a; 输入: scores [2, 2, 3, 4, 4, 4, 5, 6, 6, 8], target 4 输出: 3 示例 2&#xff1a; 输入: scores [1, 2, 3, 5, 7, 9], target 6 输出: 0 …...

Android音视频多媒体开源库基础大全

从事音视频开发工作&#xff0c;需要了解哪些常见的开源库&#xff0c;从应用到底软系统&#xff0c;整理了九大类&#xff0c;这里一次帮你总结完。 包含了应用层的MediaRecorder、surfaceView&#xff0c;以及常见音视频处理库FFmpeg和OpenCV&#xff0c;还有视频渲染和音频…...

ManiWAV:通过野外的音频-视频数据学习机器人操作

24年6月来自斯坦福大学、哥伦比亚大学和 TRI 的论文“ManiWAV: Learning Robot Manipulation from In-the-Wild Audio-Visual Data”。 音频信号通过接触为机器人交互和物体属性提供丰富的信息。这些信息可以简化接触丰富的机器人操作技能学习&#xff0c;尤其是当视觉信息本身…...

传感器研习社:Swift Navigation与意法半导体(STMicroelectronics)合作 共同推出端到端GNSS汽车自动驾驶解决方案

自动驾驶系统单纯依赖感知传感器进行定位在遇到恶劣天气或缺乏车道标线的道路场景时很容易失效。此外&#xff0c;由于激光雷达&#xff08;LiDAR&#xff09;、视觉等传感器的成本高昂以及将众多不同组件整合为统一系统的复杂性&#xff0c;都可能增加产品研发成本或延迟产品上…...

Java 二维数组元素降序排序(非冒泡排序)

说明&#xff1a;每次比较出最大值后&#xff0c;把最大值设置为最小值-1&#xff0c;再次比较该数组&#xff1b; 创建Object b[][] new Object[N][2];来存储String和Int两种类型数据到同一个数组里 package com.MyJava;import java.util.Scanner;public class Test {public…...