版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
霏FF摘要:DC—DCAT89S52、脉宽调制器TL494、数模转换ADC0804等为器件通过控制调节输出波的方法,实现20V~30V5V~10V之内稳定的直流电源电压输出。报告包括了DC-DC开关电源及其控制系统的主要功能,系统的技术指标,调试分析,针对用户操作的详细说明,对系统中某几个部分的深入扩展研究,心得体会和实物等等,包括了与此:ThereportismainlyabouttheDC-DCsystemcontrolledbysinglechip,includingthedesigntocontrolthe wavethroughthechipAT89S52,chipTL494,andtheA/DchipADC0804andsoon,soastogeneratingaDCpowersupplyrangingfrom5Vto10Vinconditionoftheinputvoltagerangingfrom20Vto30V.ThisreportintroducesfurtherexnationsofinnerworkingsoftheDC-DCswitchingpowersupply;includingthedesigningandimplementationsofitscontrolsystem,majorfunctions.Thedesignspecifications,plusthedebuggingandtestingprocess,aswellasuserinstructionsmanualarealsoattachedinthereport.DC-DC;switchingvoltageregulator;SingleChipMicyoco;low-passfilter;ADC0804; 概 编写说 名词定 缩略 系统总 系统组 DC-DC开关电源子系 电压控制子系 电压检测子系 单片机子系 系统的主要功能[1] DC-DC开关电源子系统的硬件设 系统功能和设计指 实现功 主要指 系统设计原 系统的主要部分和参数的说 主要器件 TL494电路设 一些典型问题的分 电压控制子系统的硬件设 实现功能和设计指 实现功 设计指 系统设计原 有源滤波器系 光电耦合电 电阻Rctl的选择问 电压测量子系统的硬件设 主要功能和设计指 主要功 设计指 系统设计原 AD0804部 AD0804外部电路连 单片机子系统及软件设 单片机子系统的简要介 功能特性的概 系统板上与本设计中相关部 单片机软件程序描 主程序流 重要的全局变量和常 主要模块描 附加模块描 致 参考文 附录 开发环 硬件开 软件开 附录 软件程序开环/闭环控制程 占空比—开环电压转换程序 输出电压—闭环AD编码程序 附录 系统操作说明 操作界面说明 附录 测试和分 测试项目和方 测试的资 及分 附录E课程学习心得和意见建 附录F实物概编写说本文档为交通大学电子工程系学生大三上学期科技创新关于单片机控制DC-DC开关电源178组具体设计内容编写,本文详细阐述了各部分电路系统的工作原理和设计方法,系统及有关问题的讨论与研究,适合具有一定电子技术及单片机知识基础的人名词定DC-DC:输入电压为DC直流电压,输出也为DC直流电压的电路开关电源:利用现代电力电子技术,控制开关晶体管开通和关断的时间比率,维持稳定输出电压的一种电源。开环/闭环控制:所谓开环控制是指依靠前馈信息所进行的控制,闭环控制是指依照后馈信息所定。纹波:输出端呈现的与输入频率及开关变换频率同步的分量,用峰峰值表RAM(数据)、ROM(程序)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路中,所以称为单片(单)机。缩略DC-DCDirect-Current-Direct-PulseWidthADCogtoDigital即模拟数字信号转换器。用于将模拟信号按照一定速度转换为数字信号LPFlowpass系统系统组DC-DC开关电源,单片机控制系统,D/AA/D转换四个部分组成,系统组成框图2.1所示20-DC输
5-10V可调1ADC输
变换变换
整整
2.1组成示意图DC-DC开关电源子系30V30V5~10V电器图 DC-DC开关电源部分结构图本系统是以TL494为控制器的CC开关电源部分,在一块印刷电路板上实现C-20V~30V5~10V电压控制子单片机小系
整 有
信号变电压控制部2.3电压控制部分结构图电压控制部分主要通过单片机改变信号的占空比来改变输出电压,使输出能达到5~10V,从而达到开环控制的效果,其间要经过整形和低通滤波的整形和滤波,然后再经过信号变换4N25光耦合器件。电压检测子单片机小系8位编码
AD
信号变关键器件
C=图 电压检测部分结构图这部分系统开环输出电压,然后输入给ADC0804进行编码,然后将8位二进制编码输入给单片机子系单片机子系统提供信号,利用输出占空比的变化来控制输出的电压值,并且同时系统的主要功能[1]DC-DC开关电源系统(稳压器)是系统的执行模块,它以开关的方式完成稳压目的,并负电压控制系统将单片机输出的信号经低通滤波器和非线形光电耦合器,将数字信号电压检测系统具有反馈输出电压的作用,将输出电压模拟值转换成数字信号送回单片机系统,使单片机通过反馈调节的方法使输出电压稳定在期望值。DC-DC开关电源子系统的硬件设系统功能和2)主要指5.0V10.0V(30.0V±0.1V):1%1%(20.0V±0.1V30.0V±0.1V100mV(30±0.1V,10±0.1V):ms级限流值:1.1A左系统设计原3-1DC-DC源的原理图。图中TL494、开关三极管(TIP42),基极电阻构成一个可控关闭与断开时间的脚对Vs(输出电压V0的线性分压)进行采样,通过和其内部的参考电压Vref(TL494 了一个5V基准电压可用)进行比较后,使得开关三极管(TIP42)处于截止状态,上面没有电流通过,然后由后级电路进行放电,此时TL494的1号管脚仍在不断地进行电压采样,直到其采样压低于Vref时,打开开关三极管,使其对后级电路进行充电。其中电感为主要的储能元件。因为Vref是一个固定不变的比较电压,那么我们只要调节分压电阻就可达到在某个范围内改变及稳定Vo的目的。这就是降压型开关电源的工作原理。由于充放电过程需要一定的时间,所以输出端Vo图3-2系统的主要部分和参数TL494是DC-DC部分的器件,因而对于它的了解能使我们更好的了解DC-DC子系统的工TL4943-3-3TL494内部结构(TL494Tl4943-3-4TL494管脚定义图(TL494 13:[OUTPUTCTRL] 第二个运放的正输入端 TL494TL494器、脉宽调制比较器以及输出电路等组成。1、2脚是误差放大器I的同相和反相输入端;3脚是相位校正和增益控制;4脚为间歇期调理,其上加0~3.3V电压时可使截止时间从2%线性变化到100%;5、6脚分别用于外接振荡电阻和振荡电容;7脚为接地端;8、9脚和11、10脚分别为TL494;12;13接地时为并联单端输出方式,接14脚时为推挽输出方式;14脚为5V基准电压输出端,最大输出电流10mA;15、16脚是误差放大器II的反相和同相输入端。内部的线性锯齿波振荡器频率f=1.1/(Rt*Ct),它可以有两个外接元件Rt,Ct来调节。内置两个误差放大器,可以构成电压反馈调节器和电流反馈调节器,分别控制输出电压的稳定和输出电流保护。设置了5V基准电压源。它的死区时间可以通过pin4的外接电压调整。输出端可以单端,可以双端,本实验中采端类型的脉宽调制器,即。输出脉冲的宽度调制,是通过电容器Ct上的正极性锯齿波电压与其他两个控制信号电压进行比较来实现的。激励输出管Q1Q2TL494电路设3-5DC-DC开关电源电路连接振荡电路:C3和R3与TL494的5、6管脚相连组成TL494 R1、R2、TIP42与TL494的8、11、12管脚构成输入与输出开关电路,当8号管脚输出的为高点平时开关三极管截止,则输入输出级断开,反之闭合。R3、R4、C2R5、R8、TL494的2、14管脚确定TL494的1号比较器(2管脚)的Vref。TL494的14号管脚输出恒定的约5.0V的参考电压Vref,经R5、R8分压后形成Vref1(约2.5V)送入2号管脚。R11—R14构成输出电压Vo采样分压网络,形成Vs送入1号比较器1管脚与(4)电路一起构成Vo稳压调节电路。 22k1k一些典型问由于设计要求输出的纹波峰峰值在100mV以内,效率在情况下要达到65%以上。通过查阅DatesheetTL494的开关频率(5,6CTRT的电容电阻能电感值(受工艺条件限制——3-4层)C5值(受工艺条件限制;不很经济)。电压控制子系统的硬件设实现功能和实现功通过单片机系统板上的按键来输入设定要求的DC-DC开关电源输出电压,通过单片机进行计算,输出具有其所对应的占空比的控制信号,信号经由有源低通滤波以取出其直流分量,4N25DC-DC开关电源子系统的电压反馈比例控制网络,改变电压设计指输出电压控制精度0.05V(输入系统设计原4-1输出电压控制电路的整体构成如图4-1所示,包括整形电路、有源滤波器、信号变换和三整形电路的结构框图如图4-2所示。由于在,每台电源的性能不尽相同,且输出的电压4-240114V基准电压,使其为滤波电路提供稳定的工作电压。4-3所示。 其器件为TL431。器件图见图4-7所4-4TL431 基准电压输出TL431Vref(2.5V)36V范围内的任何值。TL4311mAR14-3OV(1R1)O
Re
+R1×
Re1VRef=2.5V,要求输出电压VO=4V,1mA。所以由上式可得阻值取值:R51Ω,R11.5K,R22.5K。有源滤波器4-4所示。单片机输出占空比经过有源低通滤波器,滤除高频成分,只剩4-4有源滤波器系统原理图元件参数:R1=R2=51KC1=C2=1uF;对于低频的输入信号,C1,C1可以看作开路,此时信号直接输入集成运算放大器的正向输对于高频的输入信号(信号频率远大于滤波器截止频率),C1,C2可以看作短路此时高频C1流入接地线,而不在输出端出现。UA741是有源低通滤波器的电路中的重要器件。LM741管脚图见图4- LM741管脚光电耦合电电路如图4-5所示。随着光耦的输入电压的增大(或减小),其输入电流也相应增大(或减4N254-5光耦器件见图4-
4-6 4.3电阻Rctl的选择问Rctl,所以它起到了分压的作用。一开始我们按照上的要求选择了3.9KΩ,但发现此时输出电2.5KΩ的电阻,从而各方面都得到了改善电压测量子系统的硬件设主要功能和在有输出电压测量子系统时,整个系统就工作在闭环控制方式。它的设计思想是通过光耦4N25将输出电压进来,经过模数转换器ADC0804的量化编码,输入给单片机。单片机通过软件编程,不断地将读入编码所对应的电压值与要求达到的电压值进行比较,并控制输出波的。系统设计原5-1通过光耦4N25将输出电压进来,在这里光耦主要起到系统的作用,在经过光耦编程,不断地将读入编码所对应的电压值与要求达到的电压值进行比较,并控制输出波的内部结5-20804内部结构ADC0804管脚定义(如图5-3所示5-3[CS]片选[RD]读端 中断输出[VIN+]模拟信号正输入端[VIN-]模拟信号负输入端[AGND]模拟地 基准电压输入 数据输出AD0804外部图5- ADC0804的典型连接电路((摘自图5- ADC0804的实验连接电路(与单片机小系统的连接5-6ADC0804的实验连接电路(其他引脚的连接0804编码原理决定电路阻值的选对R1和R2要合理地取值,以使VA的变化范围较大,根据4N25的datasheet上面的近似,R1=2K//51K,R2=5.1KVA的变化区间在(3.186V—1.297V)。K=(Vin+Vin-)/VrefR3=1.8K、R4=810VIN(-)=1.278VKmin(VAmax–VIN(-))/ < 即Kmax< 单片机子系统及软件设单片机子系统的简要介片机,它在一块超大规模集成电路上同时集成了CPU、ROM、RAM、TIMER/COUNTER(定32I/O口48两个166128独立的64K每个80511212可把时钟频率除以12取倒数然后指令执行所须的周期数。功能特性的AT89S52是一个低功耗,高性能CMOS8ATMEL公司的高密度、非易失性技术制造,兼容标准MCS-51指令系统及80C51引脚结构,内集成了通用8位处理器,片内含8kBytesISP(In-systemprogrble)可反复擦写1000次的Flash只读程序器。微控特点:40个引脚,8kBytesFlash片内程序器,256bytes的随机存取数据器(RAM),32个外部I/O口线,5个中断优先级2层中断嵌套中断,3个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。另外,AT89S52可降至0Hz静态逻辑操作,支2种软件可选择节电模式。空闲模式下,CPURAM、定时器/断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下AT89S52的封装图和内部电路方块图:6.1AT89S52PDIP封装格6.2AT89S52方框系统板上与本设计中相I/O端P1、P2、P3口均是一个具有内部上拉电阻的8位双向I/O口,输出缓冲器能驱动4TTL逻辑电平;对端口写“1”时,内部上拉电阻把端口拉高,因此可以作为输使用。此外,P1.0和P1.2分别作定时器计数器2的外部计数输入(P1.0/T2)和定时器计数器2的触发输入(P1.1/T2EX)定时/计数在单片机应用和控制系统中,经常需要对某个控制参数和控制对象定时进行控制.这种定时一般可采用两种方法.一是利用延时程序来实现,但这样会降低CPU的工作效率;另外法就是通过个可编程的实时时钟或可编程的时钟接口来实现.这种方法可以使CPU与时钟并行工作,并且不会影响CPU的效率.除了定时外,还有一些控制是按对某种的计数结果来进行的,因此,单片机内部均设有可编程的定时器/计数器。8051单片机有三个16位定时/计数器,实验中用到两个,即T0和TCON(Timercontroller)TR111停止工作;TR000停止TMOD用来设置定时器的工作方式和时钟源(I/0口的触发电平还是处理器的时钟脉冲),10。6.1定时器/计数器方式控制寄存器TMOD(不可位寻址 Timer1Timer0GATEGATETR=1INT=1GATE=0TR定时 M1与M0组合将控制四种不同的工作方000自动重装初值的113定时器0:分成两8中AT89S526个中断源:两个外部中断(INT0INT1),三个定时中断(0、1、2)10所示每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断允许总控制位EA,它能一次所有中断。如表6.2所示,IE.6位是可用的。对于AT89S52,IE.51,它们为AT89系列新产6.3AT89S52表 中断使能寄存器 —EA:使能标志位置位则所有中断使能复位则所有中 :保ET22中断使能ES:串行通信中断使能ET11中断使能EX11使能ET00中断使能EX00使能6.3中断优先单片机软件主程序流发内部算法,根据一定的函数关系,产生一定占空比的波,使输出电压与数码管显示值一致。闭环工作模式:识别用户通过按键输入的期望电压数值,将数值在数码管上显示;ADC电路的反馈所转换的数字信号,并根据此信号调整输出的矩形的占空比,使电路输出的电压值开开返返返读入AD转换返读入AD转换重要的全局变量和常输:P1.0~P1.3,由单片机开发板硬件按键实现激sbitKEY1=P1^0;sbitKEY2=P1^1;sbitKEY3=P1^2;sbit输出端口定义:P3.5,输 sbit1sunsignedchar1s软件定时器溢出标志bit数码管位驱动和指示灯驱动信号输出缓存,定义了一个可位寻址的变unsignedcharbdataoutput_sel;sbitled_1=output_sel^5;sbitled_2=output_sel^6;sbitled_3=output_sel^7;sbitled_4=output_sel^4;数码管扫描驱动指针,为测试外部器(U36264),特使用xdata类unsignedcharxdata测试用计数值十进制表示,为测试外部器(U36264),特使用xdata类unsignedcharxdataunsignedintkey1;unsignedintkey2;unsignedintkey3;unsignedintkey4;输入电压unsignedintinput_data;unsignedintlast_input_data;unsignedintxdatahilv_time;unsignedintxdatalolv_time;unsignedintxdatalolv1;unsignedintxdatalolv2;unsignedintxdatahilv1;unsignedintxdataAD0804输入的数据,最近20次的转换值,有效提高转换精intunsignedintidataarray[20];unsignedintidataarray_total;inta_ptr=0;当前有ADC0804编unsignedint模式选择,0为开环,1int中间变量,0为启动AD转换,1为读int主要模块描<主程序模块检测按键,每隔1s(软件定时)计算一次数码显示数组的modemode对应当前模式,0为开环控制,1array[]为N元数组,A/D转换得到的AD值change_inputdata(),检测按键的改变,从而转变input_data的值。Input_data的初值为800,8.0VKEY1按下时,mode值取反,表示在开环和闭环控制之间的转换。当按键KEY2按下时,input_data10,即电压值减1。当按键KEY3按下时,input_data101KEY4按下时,input_data500,表示电压值5.0V(RESET的终值来满足调试的不同需要)。unsignedintopen_loop_table(unsignedint51组input_data和hilv_time的对应关系表,根据占空比—电压的转换关系设定的值,使输出一定占空比的波,从而得到开环的输出电压这里占空比与电压的关系可应用第一次中期检测时的程序测得。(见后附录bitCMP(unsignedintAD_data,unsignedintADC0804AD值经过关系表的对照,反映当前输出电压与期望电压之间的大小,如果当前的AD值大于期望电压对应的AD值,即当前01。INC_VOLTAGE()hilv_time0.05V定时器中断voidtimer1()interrupt3using定时11的初始化值{}{}功能实现:调整P3.5的高低电平,使其输出期望的信号,为了保证输出的稳定,减小边缘的毛刺,中断1中不能放入过多的操作。由于定时器的初值分和低位(TH1,TL1),都是<定时器中断0timer0()interrupt1using定时0初始化:#defineV_TH00xee#defineV_TL00x00功能实现如if(++digi_scaner>=5)digi_scaner=1;switch(digi_scaner){case1:/**/output_sel|=0x01;ADDR_8SEGNUMTOSEG7(digi[0]);*输出到锁存器U5(在电路图中找)*/case2:/**/output_sel|=0x02;ADDR_8SEGNUMTOSEG7(digi[1])&0x7F;*输出到锁存器U5*/case3:/**/output_sel|=0x04;ADDR_8SEGNUMTOSEG7(digi[2]);*输出到锁U5*/case4:/**/output_sel|=0x08;ADDR_8SEGNUMTOSEG7(digi[3]);*输出到锁U5*/}说明:在本系统中采取扫描式四位数码管显示,设定digi_scaner为数码管扫描指针,每次中断指向一个数码管(即显示一个数码管),5ms间隔中断一次,对一个数码管进行驱动,频率足够快则肉眼观察不出闪烁,但若主程序或其它中断中有程序段中断时间过长将导致中断0 1s1s的定时器,用于按键模块if{clock1s_flag1;/*1秒到时,溢出标志置1clock1s=}功能实现:01s定时器用于input_data的变化。AD0804读ADDR_0804=0x00;//array[a_ptr++]=ADDR_0804;if(a_ptr>=N)a_ptr=0;功能实现:定义ADC0804地址:#define 根据资料可知ADC0804转换时间为100μs,中断0每5ms中断一次,理论上可以每次中断都益的帮助,所以并不需要如此高频率的读写,因此在每次启动读写后都会设置延迟delay()为了提高精度,排除误差,我们取array[]不断轮循返回编码,而后取最近20次的转换<开环控制占空比转化模块if(mode==0)//运行开环模{hilv_time=}功能实现:input_data_表得到hilv_time,赋值给断1的初寄存器,使其输出。并且只有当mod=0,才启动该功能模块。<闭环控制占空比调整模块else//运行闭环模式{if(input_data!=hilv_time={for(i=0;i<N;i++)array_total=array_total+array[i];if(CMP(AD_data,input_data)==0)}}功能实现:闭环控制对电压比的调整是在开环输出电压的基础上进行的,所以只有NADC0804AD_data,将其与期望电压对AD值比较,做微增电压或微减电压的调整。附加模块描<开环电压_占空比转换模块功能描述 波占空比的大小,经整形滤波后输入DC—DC开关电源系统中的光耦合耦合器件,使其输出电压5—10V可调。输入项按键KEY1—KEY4:改变占空比参数hilv_time的值,KEY1/KEY2按下hilv_time/20(2000),1%;KEY3/KEY4hilv_time加/1,占空比0.05%。波的占空比输出项digi[0]=(test_counter-a*2000)/200; digi[1]test_counter-a*2000-b*200)/20;/*计算个位数digi[2]=(test_counter-a*2000-b*200-c*20)/2; /*1位数*/digi[3]=(test_counter-a*2000-b*200-c*20-d*2)*5;/*2位数*/<AD编码功能描述bitCMP(unsignedintAD_data,unsignedintinput_data)需要一个电压编码5.0~10.0V51功能实现在Timer0中添加<ADC0804>部分的程序(见定时器中断0的模块说明),在array[]不断轮循返回的编码,而后取最近20次的转换值(array[0]-array[19]),取其平均值后数码管输入项仍为占空比控制参数hilv_time,通过按键改变其值来使波占空比变化输出项:在DC—DC输出端测量输出电压,数码管显示对应AD值,得到对照表。 for(i=0;i<N;i++)array_total=array_total+array[i];digi[0]current/1000;/*计算千位数digi[1]current-a*1000)/100;/*计算百位数digi[2]=(current-a*1000-b*100)/10; digi[3]current-a*1000-b*100-c*10);/*计算个位数[注]上述所有程序请见后附录致衷心地感谢同组同学的完美配合和对彼此的支持。虽然只有两个人,实验任务看起来繁重,但经过这一段时间以来我们一起在饿着肚子思考如何实现目标功能,如何查错纠错,如何将精度提高,如何改善不稳定,几个小时甚至十几个小时的艰难历程让我们之间越来越默契,协保证实验如期完成。最后还要向所有为我们实验提供过帮助的工作人员道一声谢,感谢为我们的课程提参考文马忠梅等,单片机的C语言应用程序设计,航空航天大学陈章龙等,嵌入式技术与系统——InterXScale结构与开发,航空航天大学ATMEL,8BITMICROCONTROLLERWITH8KBYTESIN-SYSTEMPROGR FLASHAT89S52,2001交大电子工程系,科技创新[5]课程任务要求附录 开发环硬件开信号发生器(调试时使用软件开ProCKEIL烧录工具 附录 软件程序开环/#include<absacc.h>#include<reg51.h> 常量定 /*#defineV_T10xfd/*SCOM9600baud,!notice:crystal11.0592MHz*/#defineV_TH00xee/*~5ms,!notice:crystal11.0592MHz*/#defineV_TL0/*1s软件定时器溢出值,200个5ms*/#defineV_T1s /*#defineADDR_8SEG/*数码管位驱动和指示灯驱动寄存器地址*/#defineADDR_SEL #defineTOTAL_TIME/**/#defineADDR_0804XBYTE[0x6000]/*sbitKEY1=P1^0;sbitKEY2=P1^1;sbitKEY3=P1^2;sbitKEY4=P1^3; 变量定 unsignedcharbdataoutput_sel;sbitled_1=output_sel^5;sbitled_2=output_sel^6;sbitled_3=output_sel^7;sbitled_4=/*数码管扫描驱动指针,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi_scaner;/*测试用计数器,为测试外部器(U36264),特使用xdata类型*/unsignedintxdatatest_counter;/*测试用计数值十进制表示,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi[4];/*1s*/unsignedcharclock1s;/*1s*/bitclock1s_flag;unsignedinthilv_time;unsignedintlolv_time;unsignedintlolv1;unsignedintlolv2;unsignedinthilv1;unsignedinthilv2;unsignedcharstate;unsignedinttemp;/*AD*/inti;intunsignedintidataarray[20];unsignedintidataarray_total;inta_ptr=0;unsignedint/**/unsignedintinput_data;unsignedintlast_input_data;/*模式选择,0为开环,1为闭环*/intmode;/*中间变量,0AD转换,1为读入转换值*/intT; 函数定 /****7段数码显示译码DATA7D7~0PGFEDCBAunsignedcharNUMTOSEG7(unsignedchar{unsignedcharAA;switch(DATA){case0:AA=0xc0;break;/*'0'*/case1:AA=0xf9;break;/*'1'*/case2:AA=0xa4;break;/*'2'*/case3:AA=0xb0;break;/*'3'*/case4:AA=0x99;break;/*'4'*/case5:AA=0x92;break;/*'5'*/case6:AA=0x82;break;/*'6'*/case7:AA=0xf8;break;/*'7'*/case8:AA=0x80;break;/*'8'*/case9:AA=0x90;break;/*'9'*/case10:AA=0x88;break;/*'A'*/case11:AA=0x83;break;/*'B'*/case12:AA=0xc6;break;/*'C'*/case13:AA=0xa1;break;/*'D'*/case14:AA=0x86;break;/*'E'*/case15:AA=0x8e;break;/*case:AA=0xbf;break/*破折号,此处原误为0xdf,系04级王资凯同学指正*/case'_':AA=0xf7;break;/*下划线*/case':AA=0xff;break/*消隐*/default:AA=0xff;}}void{intm,n;}{if(KEY2==0)//增加输入电{{input_data=input_data+10;}}if(KEY3==0)//减小输入电{{input_data=input_data-10;}}if(KEY4==0)//RESET输入电{}}{if(hilv_time>1600)}{if(hilv_time<400)}unsignedintopen_loop_table(unsignedint{//input_data和hilv_timeswitch{case500:temp=615;break;case510:case520:case530:case540:case550:case560:case570:case580:case590:case600:case610:case620:case630:case640:case650:case660:case670:case680:case690:case700:case710:case720:case730:case740:case750:case760:case770:case780:case790:case800:case810:case820:case830:case840:case850:case860:case870:case880:case890:case900:case910:case920:case930:case940:case950:case960:case970:case980:case990:case1000:temp=1034;break;default:temp=1600;}return}bitCMP(unsignedintAD_data,unsignedintinput_data)//AD_data0-255,input_data500-{unsignedint//input_data化为和AD_dataswitch{case500:temp=251;break;case510:case520:case530:case540:case550:case560:case570:case580:case590:case600:case610:case620:case630:case640:case650:case660:case670:case680:case690:case700:case710:case720:case730:case740:case750:case760:case770:case780:case790:case800:case810:case820:case830:case840:case850:case860:case870:case880:case890:case900:case910:case920:case930:case940:case950:case960:case970:case980:case990:case1000:temp=8;break;default:temp=0;}return0;return1;}/****T05mstimer0()interrupt1using{if(KEY1==0)//模式改{{}}/**//*1*/if(++clock1s>=V_T1s){clock1s_flag1;/*11clock1s=}output_sel0xf0;*初值,令数码管驱动位无效,指示灯全灭if(KEY1==0)led_1=0;if(KEY2==0)led_2=0;if(KEY3==0)led_3=0;if(KEY4==0)led_4=/*数码管扫描驱动指针值从1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个if(++digi_scaner>=5)digi_scaner=1;switch(digi_scaner){case1/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[0]);*输出到锁存器U5)*/case2/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[1])&0x7F;*输出到锁存器U5*/case3/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[2]);*输出到锁存器U5*/case4/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[3]);*输出到锁存器U5*/}ADDR_SEL=output_sel; ADDR_0804=0x00;//0804array[a_ptr++]=ADDR_0804;if(a_ptr>=N)a_ptr=0;/*开中断}voidtimer1()interrupt3using{{}{}/****{/**//****//****//**串行通信口工作初始化,注:本例中虽未使用到串行通信口,但本段程序无妨保留**/ /*SCOMMODE1(8BITUARTVARBR)*//****//**开定时器,定时器0,1中断允许**/input_data=800;last_input_data=800;/*T0*/{ifclock1s_flag)/*检查1秒定时是否到{digi[0]input_data/1000;/*计算千位数digi[1]input_data- /*计算百位数digi[2]=(input_data-digi[0]*1000-digi[1]*100)/10; digi[3]=mode;//显示模式类型if(mode==0)//运行开环模{hilv_time=}else//运行闭环模{if(input_data!=hilv_time={for(i=0;i<N;i++)array_total=array_total+array[i];if(CMP(AD_data,input_data)==0)}}}}}占空比—开环电压转换#include<absacc.h>#include<reg51.h> 常量定 /*#defineV_T10xfd/*SCOM9600baud,!notice:crystal11.0592MHz*/#defineV_TH00xee/*~5ms,!notice:crystal11.0592MHz*/#defineV_TL0/*1s软件定时器溢出值,200个5ms*/#defineV_T1s /*#define /*数码管位驱动和指示灯驱动寄存器地址*/#define #defineTOTAL_TIME/*sbit sbit sbit sbitKEY4= 变量定 unsignedcharbdataoutput_sel;sbitled_1=output_sel^5;sbitled_2=output_sel^6;sbitled_3=output_sel^7;sbitled_4=/*数码管扫描驱动指针,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi_scaner;/*测试用计数器,为测试外部器(U36264),特使用xdata类型*/unsignedintxdatatest_counter;/*测试用计数值十进制表示,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi[4];/*1s*/unsignedcharclock1s;/*1s*/bitclock1s_flag;unsignedintxdatahilv_time;unsignedintxdatalolv_time;unsignedintxdatalolv1;unsignedintxdatalolv2;unsignedintxdatahilv1;unsignedintxdatahilv2;unsignedintxdataa;unsignedintxdatab;unsignedintxdatac;unsignedintxdatad;unsignedintxdatae;unsignedcharxdatastate;unsignedcharxdataset=0; 函数定 /****7段数码显示译码
DATA7D7~0PGFEDCBAunsignedcharNUMTOSEG7(unsignedchar{unsignedcharAA;switch(DATA){case0:AA=0xc0;break;/*'0'*/case1:AA=0xf9;break;/*'1'*/case2:AA=0xa4;break;/*'2'*/case3:AA=0xb0;break;/*'3'*/case4:AA=0x99;break;/*'4'*/case5:AA=0x92;break;/*'5'*/case6:AA=0x82;break;/*'6'*/case7:AA=0xf8;break;/*'7'*/case8:AA=0x80;break;/*case9:AA=0x90;break;/*'9'*/case10:AA=0x88;break;/*'A'*/case11:AA=0x83;break;/*'B'*/case12:AA=0xc6;break;/*'C'*/case13:AA=0xa1;break;/*'D'*/case14:AA=0x86;break;/*'E'*/case15:AA=0x8e;break;/*case'-':AA=0xbf;break;/*破折号,此处原误为0xdf,系04级 case'_':AA=0xf7;break;/*下划线*/case':AA=0xff;break/*消隐*/default:AA=0xff;}}void{intm,n;}{
{{if(hilv_time>1600)}}{{}}{{if(}}{{}}}/****T05mstimer0()interrupt1using{/*关中断/**//*1*/if(++clock1s>=V_T1s){clock1s_flag1;/*11clock1s=}output_sel0xf0;*初值,令数码管驱动位无效,指示灯全灭if(KEY1==0)led_1=0;if(KEY2==0)led_2=0;if(KEY3==0)led_3=0;if(KEY4==0)led_4=/*数码管扫描驱动指针值从1到4重复变换,每5ms间隔对一个数码管进行驱动,20ms一个*/if(++digi_scaner>=5)digi_scaner=1;switch{case1/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[0]);*输出到锁存器U5(在电路图中找)*/case2/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[1]);*输出到锁存器U5*/case3/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[2])&0x7F;*输出到锁存器U5*/case4/*output_sel|=ADDR_8SEGNUMTOSEG7(digi[3]);*输出到锁存器U5*/}ADDR_SEL /*输出到锁存器U6(在电路图中找/*开中断}voidtimer1()interrupt3using{{}{}
/****{/**//****//****//**串行通信口工作初始化,注:本例中虽未使用到串行通信口,但本段程序无妨保留**/ /*SCOMMODE1(8BITUARTVARBR)*//****/hilv1=(65536-/**开定时器,定时器0,1中断允许**//*T0*/{ifclock1s_flag)/*检查1秒定时是否到{a /*计算千位数btest_counter- /*计算百位数ctest_counter-a*2000- /*计算十位数dtest_counter-a*2000-b*200- /*计算个位数e=(test_counter-a*2000-b*200-c*20-digi[0]=b;digi[1]=c;digi[2]=d; }}}输出电压—闭环AD编码程序#include<absacc.h>#include<reg51.h> 常量定 /*#defineV_T10xfd/*SCOM9600baud,!notice:crystal11.0592MHz*/#defineV_TH00xee/*~5ms,!notice:crystal11.0592MHz*/#defineV_TL0/*1s软件定时器溢出值,200个5ms*/#defineV_T1s /*#defineADDR_8SEG/*数码管位驱动和指示灯驱动寄存器地址*/#defineADDR_SEL #defineTOTAL_TIME/*sbitKEY1=P1^0;sbitKEY2=P1^1;sbitKEY3=P1^2;sbitKEY4=P1^3; /**/#defineADDR_0804XBYTE[0x6000]/*AD*/inti;intunsignedintidataarray[20];unsignedintidataarray_total;inta_ptr=0;unsignedintcurrent; 变量定 /**/unsignedcharbdataoutput_sel;sbitled_1=output_sel^5;sbitled_2=output_sel^6;sbitled_3=output_sel^7;sbitled_4=/*数码管扫描驱动指针,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi_scaner;/*测试用计数器,为测试外部器(U36264),特使用xdata类型*/unsignedintxdatatest_counter;/*测试用计数值十进制表示,为测试外部器(U36264),特使用xdata类型*/unsignedcharxdatadigi[4];/*1s*/unsignedcharclock1s;/*1s*/bitclock1s_flag;unsignedintxdatahilv_time;unsignedintxdatalolv_time;unsignedintxdatalolv1;unsignedintxdatalolv2;unsignedintxdatahilv1;unsignedintxdatahilv2;unsignedintxdataa;unsignedintxdatab;unsignedintxdatac;unsignedintxdatad;unsignedcharxdatastate; 函数定 /****7段数码显示译码DATA7D7~0PGFEDCBAunsignedcharNUMTOSEG7(unsignedchar{unsignedcharAA;switch(DATA){case0:AA=0xc0;break;/*'0'*/case1:AA=0xf9;break;/*'1'*/case2:AA=0xa4;break;/*'2'*/case3:AA=0xb0;break;/*'3'*/case4:AA=0x99;break;/*'4'*/case5:AA=0x92;break;/*'5'*/case6:AA=0x82;break;/*'6'*/case7:AA=0xf8;break;/*'7'*/case8:AA=0x80;break;/*'8'*/case9:AA=0x90;break;/*'9'*/case10:AA=0x88;break;/*'A'*/case11:AA=0x83;break;/*'B'*/case12:AA=0xc6;break;/*'C'*/case13:AA=0xa1;bre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大班听评课记录6
- 虫儿飞听评课记录
- 桑日县2024年一级造价工程师《土建计量》高分通关卷含解析
- 青岛市2024年一级造价工程师《土建计量》高分冲刺试题含解析
- 小壁虎找尾巴课件
- 《激励原理》课件
- 《丁卡因半数致死量》课件
- 《感应式电能表》课件
- 《灭火逃生常识简介》课件
- 品牌营销工作计划例文
- GB/T 30002-2024儿童牙刷通用技术要求
- 动画制作员(高级工)技能鉴定理论考试题库(含答案)
- 2024年婴幼儿发展引导员(高级)职业技能鉴定考试题库(含答案)
- 2024年新课标卷高考化学试卷试题真题答案详解(精校打印版)
- 国开电大软件工程形考作业3参考答案
- (完整word版)英语四级单词大全
- 齐鲁文化智慧树知到答案章节测试2023年齐鲁师范学院
- 山东省政府采购评审专家学习检测题库1-200
- 印章保管及使用责任书
- 小学主题班会《那些伴我成长的动画片》PPT课件
- 高中武术形神拳单元计划
评论
0/150
提交评论