还剩40页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
摘要AVR系列的单片机不仅具有良好的集成性能而且都具备在线编程接口其中的Mega系列还具备JTAG仿真和下载功能;含有片内看门狗电路、片内Flash、同步串行接口SPI;多数AVR单片机还内嵌了A/D转换器、EEPROM、模拟比较器、PWM定时计数器等多种功能;AVR单片机的I/O接口具有很强的驱动能力灌入电流可直接驱动继电器、LCD等元件从而省去驱动电路节约系统成本关键词直流稳压电源;AVR单片机;液晶显示NumericalcontroldcmanostatdesignAbstractAVRseriessingle-chipnotonlyhasgoodintegratedperformance,AndallhaveonlineprogramminginterfaceOneoftheMegaserieshasJTAGsimulationanddownloadfunction;Containspieceinsidewatch-dogcircuitpieceinsideFlashsynchronousserialinterfaceSPIMostAVRmicrocontrollerisembeddedwithA/DconvertersEEPROMsimulatedcomparatorPWMtimingcountermultiplefunctionsAVRSCMsI/OinterfacehasastrongdriveabilityintothecurrentcanbedirectlydrivenrelaysLCDeliminatingelementssuchasdrivingcircuitmanagingsystemcost.Keywords:dcvoltagestabilizerAVRmicrocontrollerLCDdisplay目录TOC\o1-3\h\z\u摘要IAbstractII引言11直流稳压电源的概述
21.1什么是直流稳压电源
21.2研究背景及意义
31.3国内外研究现状32系统功能43方案论证与比较
53.1稳压电源的分类
53.2稳压电源部分方案5方案一简单的并联型稳压电源5方案二串联型稳压电源6方案三输出可调的开关电源
63.3三端集成稳压芯片6方案一:采用LM317可调式三端稳压器电源6方案二:采用7805三端稳压器电源
63.4数字显示部分7方案一用Atmage16实现模数转换7方案二采用三位半A/D转换器ICL710774系统硬件设计
74.1电路原理
74.2Atmage16单片机模块分析
84.3系统模块95系统的软件设计
135.1程序设计
135.2程序流程图13结束语14参考文献15致谢16附录1电路原理图)17附录2(数控直流稳压电源程序)18引言直流稳压电源是电子技术常用的设备之一.广泛的应用于教学、科研等领域.传统的多功能直流稳压电源功能简单、难控制、可靠性低.干抗大,精度低且体积大、复杂度高.瞢通直流稳压电源品种很多.但均存在以下问题输出电压悬通过粗调(波段开关)及细调(电位器)来调节.这样,当输出电压需要精确输出,或需要在一个小范圈内改变时如I.02一
1.03V,困难就较大.另外,随着使用时问的增加,波段开关及电位器难免接触不良,对输出会有影响.常常通过硬件对过载进行限流或截流型保护,电路构成复杂,稳压精度也不高.本文设计了一种以单片机为核心的智能化高精度简易直流电源,克服了传统直流电压源的缺点,具有很高的应用价值1直流稳压电源的概述
1.1什么是直流稳压电源直流稳压电源又称直流稳压器它的供电电压大都是交流电压,当交流供电电压的电压或输出负载电阻变化时,稳压器的直接输出电压都能保持稳定稳压器的参数有电压稳定度、纹波系数和响应速度等前者表示输入电压的变化对输出电压的影响纹波系数表示在额定工作情况下,输出电压中交流分量的大小;后者表示输入电压或负载急剧变化时,电压回到正常值所需时间直流稳压电源分连续导电式与开关式两类前者由工频变压器把单相或三相交流电压变到适当值,然后经整流、滤波,获得不稳定的直流电源,再经稳压电路得到稳定电压或电流这种电源线路简单、纹波小、相互干扰小,但体积大、耗材多,效率低常低于40%~60%后者以改变调整元件或开关的通断时间比来调节输出电压,从而达到稳压
[2]这类电源功耗小,效率可达85%左右,但缺点是纹波大、相互干扰大所以,80年代以来发展迅速从工作方式上可分为
①可控整流型用改变晶闸管的导通时间来调整输出电压
②斩波型输入是不稳定的直流电压,以改变开关电路的通断比得到单向脉动直流,再经滤波后得到稳定直流电压
③变换器型不稳定直流电压先经逆变器变换成高频交流电,再经变压、整流、滤波后,从所得新的直流输出电压取样,反馈控制逆变器工作频率,达到稳定输出直流电压的目的直流稳压电源是电子技术常用的设备之一,广泛的应用于电路,教学试验和科学研究等领域传统的多功能直流稳压电源功能简单、难控制、可靠性低、干扰大、精度低且体积大、复杂度高普通直流稳压电源品种很多.但均存在以下问题输出电压是通过粗调(波段开关及细调电位器来调节这样,当输出电压需要精确输出,或需要在一个小范围内改变时(如
1.02~103V,困难就较大另外,随着使用时间的增加,波段开关及电位器难免接触不良,对输出会有影响常常通过硬件对过载进行限流或截流型保护,电路构成复杂,稳压精度也不高
[3]目前使用的可控直流电源大部分是点动的,利用分立器件,体积大,效率低,可靠性差,操作不方便,故障率高随着电子技术的发展,各种电子,电器设备对电源的性能要求提高,电源不断朝数字化,高效率,模块化和智能化发展以单片机系统为核心而设计的新一代——数控直流电源,它不但电路简单,结构紧凑,价格低廉,性能优越,而且由于单片机具有计算和控制能力,利用它对数据进行各种计算,从而可排除和减少模拟电路引起的误差,输出电压和限定电流采用键盘输入方式,电源的外表美观,操作使用方便,克服了传统直流电压源的缺点,具有较高的使用价值单片机对直流稳压电源进行控制,改善了电源的性能,使用方便灵活,且成本较低,同时控制系统在软件上还可进一步改进,以扩展其功能,而并不需要增加硬件开销,从而提高电源的性能价格比直流稳压电源可广泛应用于国防、科研、大专院校、实验室、工矿企业、电解、电镀、直流电机、充电设备等
[4]
1.2研究背景及意义直流稳压电源是电子技术常用的设备之一广泛的应用于教学、科研等领域传统的多功能直流稳压电源功能简单、难控制、可靠性低、干扰大、精度低且体积大、复杂度高普通直流稳压电源品种很多但均存在以下二个问题:1输出电压是通过粗调波段开关及细调电位器来调节这样当输出电压需要精确输出或需要在一个小范围内改变时如
1.05~
1.07V困难就较大另外随着使用时间的增加波段开关及电位器难免接触不良对输出会有影响2稳压方式均是采用串联型稳压电路对过载进行限流或截流型保护电路构成复杂稳压精度也不高在家用电器和其他各类电子设备中,通常都需要电压稳定的直流电源供电但在实际生活中,都是由220V的交流电网供电这就需要通过变压、整流、滤波、稳压电路将交流电转换成稳定的直流电滤波器用于滤去整流输出电压中的纹波,一般传统电路由滤波扼流圈和电容器组成,若由晶体管滤波器来替代,则可缩小直流电源的体积,减轻其重量,且晶体管滤波直流电源不需直流稳压器就能用作家用电器的电源,这既降低了家用电器的成本,又缩小了其体积,使家用电器小型化传统的直流稳压电源通常采用电位器和波段开关来实现电压的调节并由电压表指示电压值的大小.因此电压的调整精度不高读数欠直观电位器也易磨损.而基于单片机控制的直流稳压电源能较好地解决以上传统稳压电源的不足随着科学技术的不断发展特别是计算机技术的突飞猛进现代工业应用的工控产品均需要有低纹波、宽调整范围的高压电源特别是在一些高能物理领域急需电脑或单片机控制的低纹波、宽调整范围的电源
[5]
1.3国内外研究现状电源——作为当今人们生活中普遍存在的电子商品,从上世纪九十年代末起便迅速发展随着对系统更高效率和更低功耗的需求,电信与数据通讯设备的技术更新推动电源行业中直流/直流电源转换器向更高灵活性和智能化方向发展从80年代的第一代分布式供电系统开始转向到20世纪末更为先进的第四代分布式供电结构以及中间母线结构,直流/直流电源行业正面临着新的挑战,即如何在现有系统加入嵌入式电源智能系统和数字控制然而,早在90年代中,半导体生产商们就开发出了数控电源管理技术,而在当时,这种方案的性价比与当时广泛使用的模拟控制方案相比处与劣势,因而无法被广泛采用由于板载电源管理的更广泛应用和行业能源节约和运行最优化的关注,电源行业和半导体生产商们便开始共同开发这种名为“数控电源”的新产品而如今随着直流电源技术的飞跃发展整流系统由以前的分立元件和集成电路控制发展为微机控制从而使直流电源智能化具有遥测、遥信、遥控的三遥功能基本实现了直流电源的无人值守并且,在当今科技快速发展过程中,模块化是直流电源的发展趋势,并联运行是电源产品大容量化的一个有效手段,可以通过设计N+1冗余电源系统,实现容量扩展,提高电源系统的可靠性、可用性,缩短维修、维护时间,从而使企业产生更大的效益
[6]如扬州鼎华公司近年来结合美国SorensenAmrel等公司的先进技术,成功开发了单机最大功率120KW智能模块电源,可以并联32台(可扩展到64台),使最大输出功率可以达到7600kW以上智能模块电源采用电流型控制模式,集中式散热技术,实时多任务监控,具有高效、高可靠、超低辐射,维护快捷等优点,机箱结构紧凑,防腐与散热也作了多方面的加强它的应用将会克服大功率电源的制造、运输及维修等困难而且和传统可控硅电源相比节电20%-30%节能优势,奠定了它将是未来大功率直流电源的首选从组成上,数控电源可分成器件、主电路与控制等三部分电源采用数字控制,具有以下明显优点:1易于采用先进的控制方法和智能控制策略,使电源模块的智能化程度更高,性能更完美2控制灵活,系统升级方便,甚至可以在线修改控制算法,而不必改动硬件线路3控制系统的可靠性提高,易于标准化,可以针对不同的系统或不同型号的产品,采用统一的控制板,而只是对控制软件做一些调整即可
[7]2系统功能系统电压调节范围为0~12V,最大输出电流1A,具有过载和短路保护功能输出电压可用1602LCD液晶显示键盘设有6个键,复位键,步进增减1V两个键,步进增减
0.1V两个键以及确认键
[8]复位键用于启动参数设定状态(5V),步进增减键用于设定参数数值,确认键用于确认输出设定值
[23].电源开机设定电压输出默认值为5V通过步进增减按键功能选择可在不同的设定参数之间切换,再按确认键进入设定电压输出状态若按复位键,则电压输出恢复5V系统设有自动识别功能,将不接受超出使用范围(0~12V)的设定值3方案论证与比较
3.1稳压电源的分类稳压电源的分类方法繁多,按输出电源的类型分有直流稳压电源和交流稳压电源;按稳压电路与负载的连接方式分有串联稳压电源和并联稳压电源;按调整管的工作状态分有线性稳压电源和开关稳压电源;按电路类型分有简单稳压电源和反馈型稳压电源
[9]我们必须弄清楚各个类别的特点,才能从中选出最佳方案
3.2稳压电源部分方案方案一简单的并联型稳压电源并联型稳压电源的调整元件与负载并联,因而具有极低的输出电阻,动态特性好,电路简单,并具有自动保护功能;负载短路时调整管截止,可靠性高,但效率低,尤其是在小电流时调整管需承受很大的电流,损耗过大方案二串联型稳压电源并联稳压电源有效率低、输出电压调节范围小和稳定度不高这三个缺点而串联稳压电源可以避免这些缺点而简易串联稳压电源输出电压受稳压管稳压值得限制无法调节,必须对简易稳压电源进行改进,增加一级放大电路,专门负责将输出电压的变化量放大后控制调整管的工作由于整个控制过程是一个负反馈过程,所以这样的稳压电源叫串联负反馈稳压电源而这部分电路的设计会比较麻烦方案三输出可调的开关电源开关电源的功能元件工作在开关状态,因而效率高,输出功率大;且容易实现短路保护与过流保护,只是电路在低输出电压时开关频率低,纹波大,稳定度差综合考虑效率,输出功率,输入输出电压,负载调整率本设计选用方案三,要求较低,较易实现.对于效率和纹波的要求可以通过仔细调整磁性元件的参数L,Q,M等使其工作在最佳状态我们在选择方案的时候考虑到电路要简单,元件要容易找,所以我们选择了上述的方案中的第三个方案
[10]稳压电路部分可以采用三极管等分立元件来实现,也可以采用集成三端集成稳压芯片从性价比来说,采用三端集成稳压芯片来实现要好很多,现在的稳压芯片功能强大,且价格低廉,很适合我们此次的设计
3.3三端集成稳压芯片方案一:采用LM317可调式三端稳压器电源LM317可调式三端稳压器电源能够连续输出可调的直流电压.不过它只能连续调正电压,稳压器内部含有过流,过热保护电路;由一个电阻R和一个可变电位器RP组成电压输出调节电路,输出电压为:Vo=
1.251+RP/R.方案二:采用7805三端稳压器电源固定式三端稳压电源7805是由输出脚Vo,输入脚Vi和接地脚GND组成,它的稳压值为+5V,它属于CW78xx系列的稳压器,输入端接电容可以进一步的滤波,输出端也要接电容可以改善负载的瞬间影响,此电路的稳定性也比较好,使用起来可靠、方便,而且价格便宜
[11]本设计只需使用到5V输出作为单片机的电源输入,所以选用方案一
3.4数字显示部分方案一用Atmage16实现模数转换利用单片机的软硬件资源实现高精度高速A/D转换,转换精度和转换速度还可以通过软件来改变,价格也低廉不过对软件部分要求较高方案二采用三位半A/D转换器ICL7107ICL7107是高性能,低功耗的三位半A/D转换器,它含有七段译码器,显示驱动,参考源和时钟系统,它将高性能和低成本结合在一起
[12]精度相对方案一要差,所以数字显示部分采用方案一4系统硬件设计
4.1电路原理电路系统结构如图1所示,系统选用Atmage16单片机为控制核心,外部扩展1602驱动芯片用以实现电压输出功能,同时1602液晶显示相应的输出电压值单片机计算设定值与A/D转换采样反馈值的偏差以及偏差的变化率,得出相应的输出值,由D/A转换变换为模拟量去驱动电压输出控制电路,从而使电压稳定在设定值图1电路系统结构图
4.2Atmage16单片机模块分析其外部引脚封装如图2所示图2ATmage16外部引脚与封装示意图其中,各个引脚的功能如下a电源、系统晶振、芯片复位引脚Vcc:芯片供电(片内数字电路电源)输入引脚,使用时连接到电源正极AVcc为端口A和片内ADC模拟电路电源输入引脚不使用ADC时,直接连接到电源正极;使用ADC时,应通过一个低通电源滤波器与Vcc连接AREF使用ADC时,可作为外部ADC参考源的输入引脚GND:芯片接地引脚,使用时接地XTAL2片内反相振荡放大器的输出端XTAL1片内反相振荡放大器和内部时钟操作电路的输入端RESET RESET为芯片复位输入引脚在该引脚上施加(拉低)一个最小脉冲宽度为
1.5us的低电平将引起芯片的硬件复位(外部复位)b32根I/O引脚,分成PA、PB、PC和PD四个8位端口,他们全部是可编程控制的双(多)功能复用的I/O引脚(口)四个端口的第一功能是通用的双向数字输入/输出(I/O)口,其中每一位都可以由指令设置为独立的输入口,或输出口当I/O设置为输入时,引脚内部还配置有上拉电阻,这个内部的上拉电阻可通过编程设置为上拉有效或上拉无效如果AVR的I/O口设置为输出方式工作,当其输出高电平时,能够输出20mA的电流,而当其输出低电平时,可以吸收40mA的电流因此AVR的I/O口驱动能力非常强,能够直接驱动LED发光二极管、数码管等而早期单片机I/O口的驱动能力只有5mA,驱动LED时,还需要增加外部的驱动电路和器件芯片Reset复位后,所有I/O口的缺省状态为输入方式,上拉电阻无效,即I/O为输入高阻的三态状态c应用ATmage16主要完成PWM波的输出及控制功能它可以先产生一定脉宽的PWM波,作为L1603驱动电路输入信号,然后根据所需要的基准电压与检测到的输出电压的比较,调整脉宽,即改变占空比,最终实现高性能可调直流稳压图3内部晶体振荡器外接电路
4.3系统模块1L6203驱动模块L6203驱动模块就是将5V的输入电压变成Vin的电压24V,一方面提高电压,一方面提高电流电源驱动芯片的选择,由于器材的限制以及使用CMOS管需要的驱动需要注意比较多的前级推动,如果直接使用电机驱动芯片L6203,其价格实惠,电路简单而且效果非常好图4L6203驱动模块图5L6203的外观图L6203的各管脚说明见下表DeviceL6203NameFunction1OUT2Ouputof2ndHalfBridge2VsSupplyVoltage3OUT1OutputoffirstHalfBridge4BOOT1AboostrapcapacitorconnectedtothispinensuresefficientdrivingoftheupperPOWERDMOStransistor.5IN1DigitalInputfromtheMotorController6GNDCommonGroundTerminal7IN2DigitalInputfromtheMotorController8BOOT2AboostrapcapacitorconnectedtothispinensuresefficientdrivingoftheupperPOWERDMOStransistor9VrefInternalvoltagereference.AcapacitorfromthispintoGNDisrecommended.TheinternalRef.Voltagecansourceoutacurrentof2mAmax.10SENSEAresistorRsenseconnectedtothispinprovidesfeedbackformotorcurrentcontrol11ENABLEWhenalogichighispresentonthispintheDMOSPOWERtransistorsareenabledtobeselectivelydrivenbyIN1andIN
2.235V电源模块单片机要工作需要有5V电源输入,本设计采用7805稳压电源电路图65V系统电源模块41602液晶显示模块如果采用数码管显示,其价格便宜,但是占用端口较多,功耗大、显示不功能不全而用1602液晶显示,则占用端口少,显示功能较全面,驱动电流小所以选择选择1602液晶显示图7给出1602字符液晶作为信号显示部分图71602液晶显示模块5输出电压采集反馈电路模块图8输出电压采集反馈电路5系统的软件设计
5.1程序设计数控直流稳压电源的程序主要包括3个方面的内容一是单片机从按键中读取数据,而后和原有的输出电压进行比较;二是利用按键进行输出的调整;三是从单片机中读取数据传输到1602液晶显示器,进而显示输出电压
5.2程序流程图如图9所示图9程序流程图结束语利用单片机对直流稳压电源进行控制,改善了电源的性能,使用方便灵活,且成本较低另一方面,根据对电源的新要求,控制系统在软件上还可进一步改进,以扩展其功能,而并不需要增加硬件开销,从而提高了电源的性能价格比参考文献王兆安黄俊.电力电子技术[M].北京:机械工业出版社2005
[2]李文元.高精度工业用可调直流电源的设计和制造[R].兰州理工大学2000
[3]张毅刚.单片机原理及应用[M].北京高等教育出版社,2004
[4]范立南.单片微型计算机控制系统设计[M].北京;人民邮电出版社,2004
[5]王水平史俊杰田庆安.开关稳压电源—原理、设计及实用电路修订版[M].西安:西安电子科技大学出版社2005
[6]潘永雄.新编单片机原理与应用[M].西安:西安电子科技大学出版社2003
[7]瞿德福编著《数字电路与模拟电路》[M].中国标准出版社,2004年4月
[8]竞新.数字电子电路第1版[M].北京清华大学出版社,2003
[9]《电路与电子技术实验教程》[M],中国计量学院出版社
[10]薛永毅、王淑英编著《新型电源电路应用实例》[M].电子工业出版社,2001年10月
[11]论数字技术[J].《电子报》合订本,四川科学技术出版社,
2002.12
[12]曹巧媛.《单片机原理及应用》[M].电子工业出版社,1997年6月致谢经过几个月的忙碌,本次毕业设计已经接近尾声,作为一个大学生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有老师的督促指导,想要完成这个设计是难以想象的所以在这里首先要感谢申慧娟老师,她在百忙之中抽空给我指导写毕业设计从理论学习到查阅资料,设计草案的确定和修改,中期检查,后期详细设计,装配草图等整个过程中都给予了我悉心的指导虽然在这段时间里申老师有许多工作要忙,但是申老师仍然抽出大量时间细心地帮助我纠正论文中的错误除了敬佩申老师的专业水平外,她的治学严谨和科学研究的精神也是我永远学习的榜样,并将积极影响我今后的学习和工作其次要衷心的感谢指导我理论学习的老师,他们给予了我很多学习经验和技巧,以及与我一起学习和作毕业设计的各位同学,他们给了我许多建议和意见在这次设中我克服了许多困难,最后将设计圆满的完成附录1电路原理图)附录2(数控直流稳压电源程序)/*****************************************************ThisprogramwasproducedbytheCodeWizardAVRV
1.
25.7aEvaluationAutomaticProgramGeneratorCopyright1998-2007PavelHaiducHPInfoTechs.r.l.http://www.hpinfotech.comProject:Version:Date:2010-5-20Author:Freewareforevaluationandnon-commercialuseonlyCompany:Comments:Chiptype:ATmega16Programtype:ApplicationClockfrequency:
8.000000MHzMemorymodel:SmallExternalSRAMsize:0DataStacksize:256*****************************************************/#includemega
16.h#include
1602.c#includeadc.c/*------------------------------------------------------全局定义-----------------------------------------------------*/#definechoice0x7e#defineupPIND.6#definedownPIND.0#definerightPIND.2#defineleftPIND.1#defineokPIND.3#defineEnablePORTD.7/**********************定义界面内容*******/flashucharset1[]=PlesesetVolt:;//flashucharshu[]=
0123456789.;flashucharputvolt[]=Volt:;flashucharputamp[]=Amp:;flashucharstart[]=Starting;//flashucharerror[]=error;uintvolt=50;/*------------------------------------------------------功能进入系统的初始化函数-----------------------------------------------------*/voidintosys{uchari;lcd_init;write_comlcd_clr;write_com0x80;delay_ms5;fori=0;i8;i++{write_datastart[i];//启动开机界面delay_ms2;//延时写入,可以防止液晶处于忙状态}write_com0x80+0x40;delay_ms5;fori=0;i16;i++{write_data-;delay_ms100;}}/*------------------------------------------------------用户界面一,设置界面-----------------------------------------------------*/voiduser_1{uchari;write_comlcd_clr;write_com0x80;delay_ms5;fori=0;i16;i++{write_dataputvolt[i];delay_ms5;}write_com0x80+0x40;delay_ms5;fori=0;i16;i++{write_dataputamp[i];delay_ms5;}};/*------------------------------------------------------用户界面2,输出状态下-----------------------------------------------------*/voiduser_2{uchari;write_comlcd_clr;write_com0x80+1;delay_ms5;fori=0;i16;i++{write_dataputvolt[i];delay_ms3;}write_com0x80+0x40;delay_ms5;fori=0;i16;i++{write_dataset1[i];delay_ms3;}}/*------------------------------------------------------显示数据函数,将数据分开-----------------------------------------------------*/voidshow_datauintdata{charch1ch2ch3;ch1=data/100;ch2=data/10%10;ch3=data%10;ifch1==0{write_data0x30+ch2;delay_ms4;write_data.;delay_ms4;write_data0x30+ch3;delay_ms4;write_data0x20;}else{write_data0x30+ch1;delay_ms4;write_data0x30+ch2;delay_ms4;write_data.;delay_ms4;write_data0x30+ch3;delay_ms4;}}/*------------------------------------------------------显示电压值-----------------------------------------------------*/voidshow_voltuintdata{write_com0x80+6;show_datadata;}/*------------------------------------------------------显示电流值-----------------------------------------------------*/voidshow_ampuintdata{charch1ch2ch3ch4;write_com0x80+0x45;ch1=data/1000;ch2=data/100%10;ch3=data/10%10;ch4=data%10;write_data0x30+ch1;delay_ms4;write_data.;delay_ms4;write_data0x30+ch2;delay_ms4;write_data0x30+ch3;delay_ms4;write_data0x30+ch4;delay_ms4;}/*------------------------------------------------------读取电流值-----------------------------------------------------*/uintRead_Amp{unsignedintfreeback_ampampdata[]temp;ucharchiij;forchi=0;chi50;chi++{ampdata[chi]=mega16_ad0*
2.6/10;//delay_ms2;}fori=0;i50;i++{forj=0;j50;j++{ifampdata[i]ampdata[j]{temp=ampdata[i];ampdata[i]=ampdata[j];ampdata[j]=temp;}}}freeback_amp=ampdata
[24]+ampdata
[25]+ampdata
[26]/3;returnfreeback_amp;}/*------------------------------------------------------读取输出电压-----------------------------------------------------*/uintRead_Output_Volt{unsignedintfreeback_voltdata[]temp;ucharchiij;forchi=0;chi30;chi++{data[chi]=mega16_ad1*
0.15;//delay_ms2;}fori=0;i30;i++{forj=0;j30;j++{ifdata[i]data[j]{temp=data[i];data[i]=data[j];data[j]=temp;}}}freeback_volt=data
[14]+data
[15]+data
[16]/3;returnfreeback_volt;}/*------------------------------------------------------输出与设置比较程序-----------------------------------------------------*/voidcheak{show_voltRead_Output_Volt;whileRead_Output_Voltvolt{OCR1B--;delay_ms3;}whileRead_Output_Voltvolt{OCR1B++;delay_ms3;}show_ampRead_Amp;}/*------------------------------------------------------电压设置1-----------------------------------------------------*/voiduser_set1{user_2;Enable=0;whileok{SREG.0=0;ifup==0{volt++;delay_ms50;}elseifdown==0{volt--;delay_ms50;}elseifright==0volt=volt-10;elseifleft==0volt=volt+10;ifSREG.0==1{volt=0;}ifvolt120{volt=120;}delay_ms100;show_voltvolt;}OCR1B=
1.7*volt;Enable=1;}/*------------------------------------------------------电压设置2,输出不关闭的情况调节电压-----------------------------------------------------*/voiduser_set2{while1{whileok/*当确定键没有被按下时使用up/down按键实时调节输出电压并且可以查看电流*/{SREG.0=0;ifup==0{volt++;}elseifdown==0{volt--;}elseifright==0{volt=volt-10;}elseifleft==0{volt=volt+10;}ifSREG.0==1{volt=0;//OCR1B=
1.7*volt;}ifvolt120{volt=120;//OCR1B=
1.7*volt;}delay_ms100;//show_voltvolt;Enable=1;cheak;};//delay_ms20;while~ok;user_set1;user_1;}}/*------------------------------------------------------主函数-----------------------------------------------------*/voidmain{DDRD=0xB0;PORTD=0X4F;TCCR1A=0Xa1;//8位快速PWM,OC1A为普通用途,OC1B为PWMTCCR1B=0X09;//无预分频位,fpwm=8000000/256=
31.5kdelay_ms100;intosys;//Enable=1;user_set1;user_1;user_set2;}ThisprogramwasproducedbytheCodeWizardAVRV
1.
25.7aEvaluationAutomaticProgramGeneratorCopyright1998-2007PavelHaiducHPInfoTechs.r.l.http://www.hpinfotech.comProject:Version:Date:2010-5-20Author:Freewareforevaluationandnon-commercialuseonlyCompany:Comments:Chiptype:ATmega16Programtype:ApplicationClockfrequency:
8.000000MHzMemorymodel:SmallExternalSRAMsize:0DataStacksize:256*****************************************************/#includemega
16.h#include
1602.c#includeadc.c/*------------------------------------------------------全局定义-----------------------------------------------------*/#definechoice0x7e#defineupPIND.6#definedownPIND.0#definerightPIND.2#defineleftPIND.1#defineokPIND.3#defineEnablePORTD.7/**********************定义界面内容*******/flashucharset1[]=PlesesetVolt:;//flashucharshu[]=
0123456789.;flashucharputvolt[]=Volt:;flashucharputamp[]=Amp:;flashucharstart[]=Starting;//flashucharerror[]=error;uintvolt=50;/*------------------------------------------------------功能进入系统的初始化函数-----------------------------------------------------*/voidintosys{uchari;lcd_init;write_comlcd_clr;write_com0x80;delay_ms5;fori=0;i8;i++{write_datastart[i];//启动开机界面delay_ms2;//延时写入,可以防止液晶处于忙状态}write_com0x80+0x40;delay_ms5;fori=0;i16;i++{write_data-;delay_ms100;}}/*------------------------------------------------------用户界面一,设置界面-----------------------------------------------------*/voiduser_1{uchari;write_comlcd_clr;write_com0x80;delay_ms5;fori=0;i16;i++{write_dataputvolt[i];delay_ms5;}write_com0x80+0x40;delay_ms5;fori=0;i16;i++{write_dataputamp[i];delay_ms5;}};/*------------------------------------------------------用户界面2,输出状态下-----------------------------------------------------*/voiduser_2{uchari;write_comlcd_clr;write_com0x80+1;delay_ms5;fori=0;i16;i++{write_dataputvolt[i];delay_ms3;}write_com0x80+0x40;delay_ms5;fori=0;i16;i++{write_dataset1[i];delay_ms3;}}/*------------------------------------------------------显示数据函数,将数据分开-----------------------------------------------------*/voidshow_datauintdata{charch1ch2ch3;ch1=data/100;ch2=data/10%10;ch3=data%10;ifch1==0{write_data0x30+ch2;delay_ms4;write_data.;delay_ms4;write_data0x30+ch3;delay_ms4;write_data0x20;}else{write_data0x30+ch1;delay_ms4;write_data0x30+ch2;delay_ms4;write_data.;delay_ms4;write_data0x30+ch3;delay_ms4;}}/*------------------------------------------------------显示电压值-----------------------------------------------------*/voidshow_voltuintdata{write_com0x80+6;show_datadata;}/*------------------------------------------------------显示电流值-----------------------------------------------------*/voidshow_ampuintdata{charch1ch2ch3ch4;write_com0x80+0x45;ch1=data/1000;ch2=data/100%10;ch3=data/10%10;ch4=data%10;write_data0x30+ch1;delay_ms4;write_data.;delay_ms4;write_data0x30+ch2;delay_ms4;write_data0x30+ch3;delay_ms4;write_data0x30+ch4;delay_ms4;}/*------------------------------------------------------读取电流值-----------------------------------------------------*/uintRead_Amp{unsignedintfreeback_ampampdata[]temp;ucharchiij;forchi=0;chi50;chi++{ampdata[chi]=mega16_ad0*
2.6/10;//delay_ms2;}fori=0;i50;i++{forj=0;j50;j++{ifampdata[i]ampdata[j]{temp=ampdata[i];ampdata[i]=ampdata[j];ampdata[j]=temp;}}}freeback_amp=ampdata
[24]+ampdata
[25]+ampdata
[26]/3;returnfreeback_amp;}/*------------------------------------------------------读取输出电压-----------------------------------------------------*/uintRead_Output_Volt{unsignedintfreeback_voltdata[]temp;ucharchiij;forchi=0;chi30;chi++{data[chi]=mega16_ad1*
0.15;//delay_ms2;}fori=0;i30;i++{forj=0;j30;j++{ifdata[i]data[j]{temp=data[i];data[i]=data[j];data[j]=temp;}}}freeback_volt=data
[14]+data
[15]+data
[16]/3;returnfreeback_volt;}/*------------------------------------------------------输出与设置比较程序-----------------------------------------------------*/voidcheak{show_voltRead_Output_Volt;whileRead_Output_Voltvolt{OCR1B--;delay_ms3;}whileRead_Output_Voltvolt{OCR1B++;delay_ms3;}show_ampRead_Amp;}/*------------------------------------------------------电压设置1-----------------------------------------------------*/voiduser_set1{user_2;Enable=0;whileok{SREG.0=0;ifup==0{volt++;delay_ms50;}elseifdown==0{volt--;delay_ms50;}elseifright==0volt=volt-10;elseifleft==0volt=volt+10;ifSREG.0==1{volt=0;}ifvolt120{volt=120;}delay_ms100;show_voltvolt;}OCR1B=
1.7*volt;Enable=1;}/*------------------------------------------------------电压设置2,输出不关闭的情况调节电压-----------------------------------------------------*/voiduser_set2{while1{whileok/*当确定键没有被按下时使用up/down按键实时调节输出电压并且可以查看电流*/{SREG.0=0;ifup==0{volt++;}elseifdown==0{volt--;}elseifright==0{volt=volt-10;}elseifleft==0{volt=volt+10;}ifSREG.0==1{volt=0;//OCR1B=
1.7*volt;}ifvolt120{volt=120;//OCR1B=
1.7*volt;}delay_ms100;//show_voltvolt;Enable=1;cheak;};//delay_ms20;while~ok;user_set1;user_1;}}/*------------------------------------------------------主函数-----------------------------------------------------*/voidmain{DDRD=0xB0;PORTD=0X4F;TCCR1A=0Xa1;//8位快速PWM,OC1A为普通用途,OC1B为PWMTCCR1B=0X09;//无预分频位,fpwm=8000000/256=
31.5kdelay_ms100;intosys;//Enable=1;user_set1;user_1;user_set2;}键盘单片机电路系统结构如图1所示,系统选用Atmage16单片机为控制核心,外部扩展1602驱动芯片用以实现电压输出功能,同时1602液晶显示相应的输出电压值单片机计算设定值与A/D转换采样反馈值的偏差以及偏差的变化率,得出相应的输出值,由D/A转换变换为模拟量去驱动电压输出控制电路,从而使电压稳定在设定值驱动芯片负载显示器示器电源PAGE14。