基于单片机的太阳能跟踪控制毕业设计论文_学士学位论文(编辑修改稿)内容摘要:

当它受到光的照射时,半导体片(光敏层)内就激发出电子—空穴对,参与导电,使电路中电流增强。 为了获得高的灵敏度,光敏电阻的电极常采用梳状图案,它是在一定的掩膜下向光电导薄膜上蒸镀金或铟等金属形成的。 一般 光敏电阻器结构如下图所示。 光敏电阻器通常由光敏层、玻璃基片(或树脂防潮膜)和电极等组成。 光敏电阻器在电路中用字母“R”或“RL”、“RG”表示。 基于本次设计的要求,我选用CDS光敏电阻GL3537,其暗阻是10K。 惠斯通电桥简介可以有电桥电路图电桥法测量是一种很重要的测量技术。 由于电桥法线路原理简明,仪器结构简单,操作方便,测量的灵敏度和精确度较高等优点,使它广泛应用于电磁测量,也广泛应用于非电量测量。 【4】电桥可以测量电阻、电容、电感、频率、压力、温度等许多物理量。 同时,在现代自动控制及仪器仪表中,常利用电桥的这些特点进行设计、调试和控制。 电桥分为直流电桥和交流电桥两大类。 直流电桥又分为单臂电桥和双臂电桥,单臂电桥又称为惠斯通电桥,主要用于精确测量中值电阻。 双臂电桥又称为开尔文电桥,主要用于精确测量低值电阻。 本次设计主要是应用惠斯通电桥将电阻变化转化成电压变化。 : 惠斯通电桥由于所选光敏电阻的暗阻是10K,当R1=R3,R2=R4时电桥的输出电压灵敏度最高,称为等臂电桥,这时电桥输出是VOUT=R1/R1*U,所以R1,R3,R4也选用10k电阻。 运放LM358简介通过光敏电阻采集到的信号需要通过运算放大电路转化成适合单片机处理的信号,因此用到集成运算放大器。 本次设计选择LM358运算放大器。 LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。 它的使用范围包括传感放大器、直流增益模组、音频放大器、工业控制、DC增益部件和其他所有可用单电源供电的使用运算放大器的场合。 LM358的封装形式有塑封8引线双列直插式和贴片式。 特性: 内部频率补偿。 直流电压增益高(约100dB)。 单位增益频带宽(约1MHz)。 电源电压范围宽:单电源(3—30V);双电源(177。 177。 15V)。 低功耗电流,适合于电池供电。 低输入偏流。 低输入失调电压和失调电流。 共模输入电压范围宽,包括接地。 差模输入电压范围宽,等于电源电压范围。 输出电压摆幅大()。 参数:输入偏置电流45nA。 输入失调电流50nA。 输入共模电压最大值VCC~ V。 共模抑制比80dB。 电源抑制比100dB。 : LM358管脚图 单片机控制系统方案单片机在控制过程应用的特点是以控制理论为基础的系统自动化控制,所以一般有较明确的系统组成结构,有严谨的数学算法和较复杂的响应过程,这主要是因为在过程控制中对速度,时间,精度有严格的要求,特别是对过渡过程要求是十分严格的。 单片机在过程控制中,通常是对一个过程的直接数字控制,也即是DDC控制,很少涉及管理,其原因在于单片机的内存容量,速度,字长都不适应于管理目的。 现代计算机控制系统中最基本的控制是DDC控制,然后才是监视控制,管理等层次。 各种层次往往采用不同结构的计算机。 在DDC 控制中适宜采用单片机。 单片机在DDC控制中有着显著的特点。 它体积小,可以做成体积极小的控制器用于一些体积不大的设备和空间有效的生产过程,控制过程,在现代化的汽车中就有不少单片机的控制器,包括点火控制,节油控制等。 单片机还有温度范围宽,抗干扰能力强的特点,故在强电场,强磁场的工业环境中有良好的工作性能,在温度变化范围大的恶劣条件下仍能正常工作;在钢铁工业的冶炼,轧钢过程中普遍应用单片机进行过程控制。 航天航空,军事装置,航海,交通设备中,单片机的应用也越来越广泛。 本设计跟踪控制装置属于典型的闭环控制系统,需要控制的对象是两片感光电路板。 被控量是跟踪器的转角位置,执行元件是步进电机,反馈元件是光电传感器,而步进电机的转动状态及传感器的反馈信号都是在单片机控制系统的控制下完成的。 :单片机步进电机光敏电阻输入量控制量输出量偏差—— 单片机控制系统框图3 太阳能跟踪控制器硬件电路设计 系统组成原理本系统由STC89C52单片机,ULN2003A,光敏电阻,TLC1543,LM358等组成。 :跟踪器步进电机驱动器单片机传感器信号处理A/D转换器 硬件框图 单片机供电电源通过7805稳压芯片和电容的滤波作用组成5V稳压电路主要给单片机供电,: 5V稳压电路原理图 单片机最小系统 单片机最小系统原理图 跟踪器设计: 跟踪器原理图 A/D采集电路设计TLC1543三个控制输入端CS,I/O,CLOCK,ADDRESS和一个数据输入端DATAOUT遵循串行外设接口SPI协议,要求微处理器具有SPI接口。 但本次设计中采用51系列单片机中未置SPI接口,需要通过软件模拟SPI协议以便和TLC2543接口。 ,。 本次设计只使用两个通道 ,即A1和A2,因此通道地址为0000B和0001B。 REF+接5V电源,REF接地。 : A/D采集电路原理图单片机软件编程可以使复杂的控制过程实现自动控制和精确控制,避免了失步、振荡等对控制精度的影响;用软件代替环形分配器,通过对单片机的设定,用同一种电路实现了多相步进电机的控制和驱动,大大提高了接口电路的灵活性和通用性;单片机的强大功能使显示电路、键盘电路、复位电路等外围电路有机的组合,大大提高系统的交互性。 IN1IN4 输入端,经ULN2003A 放大和倒相后的输出脉冲信号驱动步进电机作相应的作。 ULN2003A的 COM 端和步进电机的 COMCOM2 连接到 VCC。 : 调整单片机输出的步进脉冲频率的方法: A、软件延时方法 改变延时的时间长度就可以改变输出脉冲的频率,但这种方法使 CPU 长时间等待,无法进行其它工作,因此没有实用价值。 在单独进行步进电机的演示时可以采用。 B、定时器中断方法 在中断服务子程序中进行脉冲输出操作,调整定时器的定时常数就可以实现调速。 这种方法占用 CPU 时间较少,是一种比较实用的调速方法。 用单片机对步进电机进行速度控制,实际上就是控制每次换相的时间间隔。 升速时,使脉冲频率逐渐升高,降速时则相反。 本设计采用方案B。 ULN2003A驱动步进电机模块原理图图太小,看不清,此图可以放大放在附录中,或者只要电机与单片机的接口部分,别的不要。 针对性强,去掉一部分图,此图还可以扩大些。 4 太阳能跟踪控制器软件设计 程序流程图:Y开始定时器初始化键盘扫描NUM=1?步进电机起动起动步进电机停止两路A/D采集adc1adc2步进电机反转步进电机停止步进电机正转adc1adc2NYNN是N 流程图。 太阳能跟踪控制器程序设计 主函数 定义键值num,adc1和adc2作为A/D两通道输出结果,程序一开始进行定时器1的初始化,即设置定时时间,打开总中断和定时中断。 开始时步进电机处于停止状态。 void main(void) { uchar num。 uint adc1=0。 uint adc2=0。 Init_Timer1()。 Coil_OFF。 在循环中调用按键扫描函数,并进行判断。 若值为1,则停止标志置0,表示步进电机起动;若值为2,则停止标志置1,表示步进电机停止。 while(1) { num=KeyScan()。 //循环调用按键扫描 if(num==1) { StopFlag=0。 } else if (num == 2) { Coil_OFF。 StopFlag=1。 }分别采集通道1和通道2 ,并比较采集结果,来决定正反转标志。 若两通道采集结果相等,表示跟踪上太阳光的位置,步进电机停止转动。 adc1 = AD_1543(0x00)。 adc2= AD_1543(0X02)。 if (adc1 adc2) flag = 0。 else if(adc1 adc2) flag = 1。 else Coil_OFF。 }} 定时器1中断初始化函数void Init_Timer1(void){使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 TMOD |= 0x10。 给定初值,定时时间是65536usTH1=0。 TL1=0。 总中断打开,定时器1中断打开,定时器1开关打开,定时器1优先级设为最高EA=1。 ET1=1。 TR1=1。 PT1=1。 } 延时函数大约延迟1s。 void DelayUs2x(unsigned char t){ while(t)。 }void DelayMs(unsigned char t){ while(t) { DelayUs2x(245)。 DelayUs2x(245)。 }} 按键扫描函数 由于键盘按下时,会产生抖动现象,所以要先消抖,这里采用软件消抖的方法,通过延时10ms后,再次判断按键是否按下,若确实按下,再执行相应赋键值操作;若没被按下,则为抖动,赋键值为0。 unsigned char KeyScan(void){ Unsigned char keyvalue。 if(KeyPort!=0xff) { DelayMs(10)。 if(KeyPort!=0xff) { keyvalue=KeyPort。 while(KeyPort!=0xff)。 switch(keyvalue) { case 0xfe:return 1。 break。 case 0xfd:return 2。 break。 default:return 0。 break。 } } } return 0。 } 定时器1中断子程序控制步进电机正反转void Timer1_isr(void) interrupt 3 using 1{ static unsigned char i,j。 TH1=0。 TL1=0。 先判断启停标志,若是起动状态,再判断正反转标志。 若为正转,则按ABCD循环的相序依次导通;若为反转,则按DCBA循环的相序依次导通。 时间间隔为定时器1的都定时时间。 if(!StopFlag) { if(flag) //正转 { switch(i) { case 0:Coil_A1。 i++。 break。 case 1:Coil_AB1。 i++。 break。 case 2:Coil_B1。 i++。 break。 case 3:Coil_BC1。 i++。 break。 case 4:Coil_C1。 i++。 break。 case 5:Coil_CD1。 i++。 break。 case 6:Coil_D1。 i++。 break。 case 7:Coil_DA1。 i++。 break。 case 8:i=0。 break。 default:break。 } } else //反转 { switch(j) { case 0:Coil_DA1。 j++。 break。 case 1:Coil_D1。 j++。 break。 case 2:Coil_CD1。 j++。 break。 case 3:Coil_C1。 j++。 break。 case 4:Coil_BC1。 j++。 break。 case 5:Coil_B1。 j++。 break。 case 6:Coil_AB1。 j++。 break。 case 7:Coil_A1。 j++。 break。 case 8:j=0。 break。 default:break。 }}}} TLC1543采集函数 n为命令字,控制通道,输出数据长度,输出格式,极性选择。 int AD_1543(uchar n){ data uchar i,j。 idata union { uchar ch[2]。 ui。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。