2023年简易直流电子负载设计大学生电子设计竞赛_第1页
2023年简易直流电子负载设计大学生电子设计竞赛_第2页
2023年简易直流电子负载设计大学生电子设计竞赛_第3页
2023年简易直流电子负载设计大学生电子设计竞赛_第4页
2023年简易直流电子负载设计大学生电子设计竞赛_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科大学生电子设计竞赛论文题目:简易直流电子负载

摘要系统设计了一种以具有高精度的直流电子负载。其重要由单片机控制模块、电子负载模块、频率切换模块、采样模块、显示模块和电源模块构成。在这个电力电子技术、计算机技术和自动控制技术迅速发展的时代,电源检测技术产生了革命性的变化,人们对电子负载的需求越来越多,对其性能规定也越来越高。而传统的电源检测技术面临着极大的挑战。为准确检测电源的可靠性和带载能力,因此把电力电子技术和微机控制技术有机地结合起来,实现电源的可靠检测。本系统重要以pic18f4520单片机为控制核心;设计恒流方式的电子负载,当电压变化时,流过该电子负载的电流基本恒定,且电流值可设定。涉及控制电路(MCU)、驱动隔离电路(PWM波)、主电路、采样电路、显示电路等;可以检测被测电源的电流值、电压值;各个参数都能直观的在关键词:电子负载;单片机(MCU);数模(D/A);模数(A/D);PWM。目录摘要 II1电子负载的原理及概述 11.1电子负载的意义 11.2电子负载的工作方式 11.3在本设计中要做的重要任务 11.4总体方案设计 22系统硬件设计 42.1电子负载设计模块方框图 42.2pic18f4520单片机的应用 42.3数模与模数转换 52.3.1A/D转换 62.3.2D/A转换 62.4系统模块显示 82.5电流采样 92.5.1电流采样 92.5.2电压采样 102.5.3MOSFET场效应管的应用 102.5.4集成运放的应用 112.6过压、短路保护 133系统软件设计 133.1程序设计概述 133.2电子负载程序设计流程图 13结论 18参考文献 19附录1:电子负载程序设计 21附录2:原理图 381电子负载的原理概述及方案拟定在电子技术应用领域,经常要对开关电源、线性电源、UPS电源、变压器、整流器、电池、充电器等电子设备进行测试,如何对其输出特性进行可靠、全面且比较简朴、快捷的测试,一直是仪表测试行业研究的问题。传统的测试方法中一般都采用电阻、滑线变阻器、电阻箱等充当测试负载,但这些负载不能满足我们对负载多方面的规定,如:恒定电流的负载;带输出接口的负载;随意调节的负载、恒功率的负载、动态负载;多输出端口的负载等。现在有一种新型多功能的电子负载,可据实际应用中对负载特性的规定进行设立,满足了我们对负载的各种规定,解决了开发研制测试中的困难。1.1电子负载的意义电子负载即电子负荷。凡是可以消耗能量的器件,可以广泛地称为负载。电子负载能消耗电能,使之转化成热能或其它形式的能量。静态的电子负载可以是电阻性(如功率电阻、滑线变阻器等)、电感性、电容性。但实际应用中,负载形式就较为复杂,如动态负载,消耗功率是时间函数,或电流、电压是动态的,也也许是恒定电流、恒定电阻、恒定电压,不同峰值系数(交流情况下),不同功率因数或瞬时短路等。电子负载就是在实际应用中负载比较复杂的情况下而设计生产的测试设备。它能替代传统的负载,如电阻箱、滑线变阻器、电阻线、电感、电容等。特别对吸取恒定电流或以恒定电压吸取电流,或电压电流都要在设定范围突变等传统方法不能解决的领域里,更能显示出优越性能。1.2恒定电流方式图1-1是电子负载与被测电源的连接图和外特性图。在定电流模式中,在额定使用环境下,不管输入电压大小如何变化,电子负载将根据设定值来吸取电流。图1-1电子负载的恒定电流工作方式1.3在本设计中要做的重要任务(1)恒流(CC)工作模式的电流设立范围为100mA~1000mA,设立分辨率为10mA,设立精度为±1%。还规定CC工作模式具有开路设立,相称于设立的电流值为零。(2)在恒流(CC)工作模式下,当电子负载两端电压变化10V时,规定输出电流变化的绝对值小于变化前电流值的1%。(3)具有过压保护功能,过压阈值电压为18V±0.2V。1.4总体设计方案1、方案论证及比较方案一:基于手动调节的直流电子负载基于手动调节的直流电子负载的原理图如图1-2: 图1-2手动调节的直流电子负载的原理图本方案由于电路设计的问题,对电子负载恒流恒压的控制是依靠对电阻手动调节来实现的。而单片机对电阻的调节的实现相对较为复杂,因此这里并没有采用单片机为控制核心,只是将其应用于显示模块当中。该方案采用了诸多的精密器件(如精密金属膜电阻)以获得足够高的精度,但却采用了手动调节的方式,显然是得不偿失。并且高精度的器件的价格昂贵、数量稀少、不易采购。开环的控制方式不利于精度的调节和操作的简化。电路中恒流恒压部分相对独立,技术含量较低且元器件的运用率较低。同时,系统的扩展性较差也是其弊端。方案二:基于单片机的恒压恒流电路分离的电子负载基于单片机的恒压恒流电路分离的电子负载原理图如图1-3:图1-3基于单片机的恒压恒流电路分离的电子负载原理图本方案采用了单片机控制整个系统,操作变得简朴明了。但是电路中的恒压恒流部分仍然相对独立,技术含量较低。两部分电路分别受单片机的控制。电路的输出有两个。这为测量带来了不便。同时电路元件的运用率底下且电路自身规模庞大也是其弊端。方案三:基于单片机的数控直流电子负载基于单片机的数控直流电子负载的原理图如图1-4所示。图1-4基于单片机的数控直流电子负载的原理图此方案控制核心采用pic18f4520单片机。操作时只需通过程序就能实现恒流值的调节,电流采样及显示。较好的解决了方案一因手动操作所引出的一系列弊端。方案中所采用的元器件型号比较常见且价格适中,在元件运用方面远远优于上述方案。通过电流电压采样使单片机输入到主电路PWM变化,达成题目规定。由于该方案的操作方法以及整体构架简易明了,利于电子开关的接入和控制,因此较好的实现了发挥部分关于频率方式的规定。电路中具有的运算放大器具有很大的电源电压克制化,可以大大减小输出端的纹波电压。单片机2系统硬件设计2.1电子负载设计模块方框图图2-1电子负载设计模块方框图2.2pic18f4520单片机性能特点一、高性能RISCCPU1、C编译器优化体系结构/指令设立;2、兼容PIC16和PIC17指令源代码;3、高达2MB的程序存储器;4、高达4KB的数据存储器;二、优越的外围功能模块特性1、最大拉/灌电流可达25mA;2、3个外部中断引脚;3、4个定期器TMR0、TMR1、TMR2、TMR3;4、捕获/比较/脉宽调制(CCP)模块/增强型CCP模块;5、两种工作方式的主同步串行通讯(MSSP): ①SPI主控方式(支持所有4种SPI工作模式); ②I2C主控/从动方式;6、可寻址的USART模块:支持RS-485和RS-232串口,并行从动口模式,支持中断支持位。三、高级模/数转换特性1、10位、8通道的模/数(A/D)转换模块:2、可运用休眠状态进行转换,以减少系统干扰、提高精度;3、模拟比较模块:可编程多路输入/输出技术;4、比较器参考电压模块;5、可编程的低电压探测模块(PLVD):支持低电压检测时产生中断;6、可编程的锁定复位(BOR);四、特殊的单片机特性1、增强功能的FLASH可经受100,000次擦/写操作;2、EEPROM可经受1,000,000次擦/写操作;3、FLASH/数据EEPROM数据保存期可超过40年;4、软件控制自动可改编程序(在线升级);5、上电复位电路(POR)、上电延迟定期器(PWRT)和振荡器起振定期器(OST);6、片内RC振荡的看门狗定期器(WDT)保证可靠运营;7、低功耗睡眠模式(Sleep);8、可选择不同的振荡器工作方式: ①4锁相环(主振荡器); ②2路振荡器(32KHz)时钟输入;9、通过两个引脚可进行在线串行编程(ICSP);10、通过2个脚在线调试器。图2-2PIC18F45202.3数模与模数转换方法1:运用A/D转换器和D/A转换器来实现数模与模数转换,具有高速、低功耗、高性能,的特点,但价格昂贵,增长电路体积。方法2:pic18f4520单片机提供了定期器,也就直接提供PWM输出功能。这就可以通过单片机的PWM输出,再加上简朴的外围电路及相应的软件设计,实现对PWM的信号解决,得到稳定,精确的模拟输出,以实现D/A转换,这将大大减少电子设备的成本,减小体积,并容易提高精度。综合考虑选择方法2A/D转换一般模数转换涉及采样、保持、量化和编码四个过程。采样就是将一个连续变化的信号x(t)转换成时间上离散的采样信号x(n)。通常采样脉冲的宽度tw是很短的,故采样输出是断续的窄脉冲。要把一个采样输出信号数字化,需要将采样输出所得的瞬时模拟信号保持一段时间,这就是保持过程。量化是将连续幅度的抽样信号转换成离散时间、离散幅度的数字信号,量化的重要问题就是量化误差。编码是将量化后的信号编码成二进制代码输出。这些过程有些是合并进行的。例如,采样和保持就运用一个电路连接完毕,量化和编码也是在转换过程同时实现的,且所用时间又是保持时间的一部分。PWM即脉冲宽度调制,PWM信号是一种周期(T)固定、占空比变化的数字信号。当对其进行积分或低通滤波后,便可获得与其脉冲宽度呈正比的模拟电压,于是将该电压作为试探值与被测模拟量进行比较便可获得与被测模拟量相相应的PWM值或数字量。本设计是运用定期器产生PWM脉冲输出信号,运用比较器作为试探结果状态标志,采用改善的逐次逼近试探算法来实现对被测模拟量的A/D变换。由于一般单片机内部都有定期器,因此可直接运用片内定期器来产生PWM信号即可2.3一、应用PWM实现D/A转换的理论分析应用周期一定而高低电平的占空比可以调制的PWM方波信号,实现PWM信号到D/A转换器的抱负方法是:采用模拟低通滤波器滤掉PWM输出的高频部分,保存低频的直流分量,即可得到相应的D/A转换输出,低通滤波器的带宽决定了D/A转换器的带宽的范围。图2-3所示的PWM信号可以用分段函数表达为:图2-3PWM信号(2.1)其中:T是单片机中技术脉冲的基本周期,即单片机每隔T时间记一次数(计数器的值增长或者减少1),N是PWM波一个周期的计数脉冲个数,n是PWM波一个周期中高电平的计数脉冲序号,和分别是PWM波中高低电平的电压值,k为整个周期波序号,t为时间。为了对PWM信号的频谱进行分析,以下提供了一个设计滤波器的理论基础。傅里叶变换理论指出,任何一个周期为T的连续信号,都可以表达为频率是基频的整数倍的正,余弦谐波分量之和。把式(2.1)所表达的函数展开傅里叶级数,得到式(2.2)(2.2)从式(2.2)可以看出,式中第一个方括弧为直流分量,第二项为第一次谐波分量,第三项为大于一次的高次谐波分量。式(2.2)中的直流分量与从0到,直流分量在变化,这正是电压输出的D/A转换器所需要的。因此,假如能把式(2.2)中除直流分分量的谐波过滤掉,则可以得到从PWM波到电压输出D/A转换器的转换,即PWM波可以通过一个低通滤波器进行调解。式(2.2)中的第二项的幅度和相角与有关,频率为,该频率是设计低通滤波器的依据。假如能把1次谐波很好的过滤掉,则高次谐波就应当就基本不存在了。根据上述分析可以得到如图2-4所示的从PWM到D/A转换器输出信号解决方块图,根据该方块图可以有许多电路实现方法,在单片机的应用中还可以通过软件的方法进行精确度调整和误差的进一步校正。图2-4从PWM到D/A转换器二、转换器分辨率及误差分析PWM到D/A转换器输出的误差来源受两方面制约:决定D/A转换器分辨率的PWM信号的基频和没有被低通滤波器滤除的纹波。在D/A转换器的应用中,分辨率是一个很重要的参数,分辨率计算直接与和的也许变化有关,计算公式如下:(2.3)其中是分辨率,是指的最小变化量2.4系统显示模块方案一:电压和电流的显示可以用数码管,但数码管的只能显示简朴的数字,其电路复杂,占用资源较多,显示信息少,不宜显示大量信息。方案二:使用功能更好的液晶显示,增长显示信息的可读性,看起来更方便。而JM1602C字符点阵液晶模块有明显的优点:微功耗,尺寸小,超薄轻巧,显示信息量大,笔迹美观,视觉舒适,并且容易控制。经比较,故选用方案二进行设计,液晶显示程序框图如下:图2-5液晶显示程序框图2.5电流采样2.5电流采样中,借助采样电阻一方面将电流信号转换为电压信号,装换为电压信号后,经放大器LM324把信号传送给集成运放电路,LM324内部涉及有两个独立的、高增益、内部频率补偿的运算放大器,适合于电源电压范围很宽的单电源使用,也合用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围涉及传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。图2-6LM324内部电路图2-7电流采样原理图2.5.2电压采样 电压采样也运用了LM324用作反向放大器 图2-8电压采样原理图2.5.3MOSFET场效管的应用MOS型晶体管的特点是特别适合于开关状态工作,由于它正向导通时的电阻极小,并且开关速度快,所以是一种抱负的开关元件。⑴MOS型场效应管的特点①栅极控制功率小。和双极型晶体管相比,MOS管栅极是绝缘的、在高频工作时虽然有栅极电流存在。但其值甚小,所以栅极的输入功率也很小。②由于MOS管是电压控制器件,它不像双极型晶体管那样,在基区有也许积存大量少数载流子,从而影响高速开关。所以同样功率的管子,MOS型的开关速度要比双极型管子快得多。③MOS管子的耐压比双极型管于低.通常很少超过1000V.而双极型管子可以做到1600V以下.这对于大功率开关而言,无疑是一大缺陷。④MOS管子不像双极型管子那样存在明显的二次击穿现象,所以在中、低压情况下,其工作的可靠性要高—些。过电压保护的设计也可以简朴一些。⑵MOS型场效应管的输出特性曲线MOS型场效应管的输出特性曲线如图所示;其内部结构如图所示。图2-9MOS型场效管输出特性曲线图2-10MOS场效管内部结构⑶MOS型场效应管的选型鉴于MOS管的良好开关特性,在本次设计中,对被测电源功率的控制,也就是对电流的控制,决定选用场效管IRFP254。MOSFET场效管IRFP254参数:①漏极-源极击穿电压Vdss=250V;②静态导通电阻Rds(on)=0.14;③漏源连续导通电流Id=23A。2.5.4集成运放的应用在本设计中,电流信号的检测放大部分、单片机控制功率信号输出部分,以及场效应管驱动信号部分,均应用集成运放芯片进行信号的放大及解决。以下相应用到的运放功能作进一步介绍。图2-11集成运放主电路(1)集成运放第一级基本反相放大电路应用图2-12集成运放基本反相放大电路①图2-17为运放基本反相放大电路。图中R1为输入隔离电阻,Rf为负反馈电阻,Rp为平衡电阻。Rp=R4//R6。电路的闭环放大倍数为Avf=-R6/R4。代入电阻数值,电路的Avf值最大为1.3。负号表达输出电压与输入电压相位相反。电路的输入电阻为R4,若要保证电路放大倍数足够大,则Rf值势必要相应的增大。这将使电路的精度下降、漂移增大。所以基本反相放大器只合用于输入阻抗规定不高的场合。②基本反相放大电路的调整方法:先将输入端接地,细心调整Rw调零电位器,使输出电压为零。为减少输入基极电流导致的误差,应使平衡电阻R5等于R6和R4的并联。在实际调整中,应根据实测结果对R6值进行适当调整,以满足所需增益的规定。⑵集成运放第二级基本反相放大电路应用图2-13运放基本反相放大电路①图2-18为运放基本同相放大电路。同相放大电路闭环放大倍数计算公式为:Avf=-R9/R7由公式可见,选用系列电阻时,闭环放大倍数不容易为整数。②电路的调整方法和注意事项将输入端接地,调整调零电位器R4,使输出电压为零。同相放大器将引入等于输入信号的共模电压,这将对运放的输入共模电压范围提出较高的规定。也就是说,同相放大器的输入信号不得超过运放的输入共模电压范围。在作为跟随器使用时,跟随精度与共模克制比直接有关。由于是直接耦合,故信号源内阻直接串入输入端。使用中应尽量使信号源内阻对两个输入端都相等,否则将减少电路克制共模的能力。规定运放的输入失调电流尽也许小。2.6过压、短路保护当电源的输出电压超过其最大的限定电压时,电源会将其输出关闭,称之为过电压保护。过电压保护测试用来验证电源在出现上述异常情况时,能否对的地作出反映。过电压保护功能对于一些对电压敏感的负载特别重要,如:CPU、存储器、逻辑电路等。由于这些元件若工作电压超过其额定值时,会导致永久性的损坏。当电源的输出短路时,则电源应当限制其输出电流或关闭其输出,以避免损坏。短路保护测试是验证当输出短路时,电源能否对的反映。电子负载可采用短路测试键来模拟短路负载,可以直接测量其短路时的输出电压及电流。3系统软件设计3.1程序设计概述程序设计环节一般概括为以下几点:⑴分析题意拟定算法。对复杂的问题进行具体分析,找出合理的计算方法及适当的数据结构。⑵根据算法画出程序框图。画程序框图可以把算法和解题环节逐步具体化,以减少犯错的也许性。⑶编写程序。根据程序框图所表达的算法和环节,选用适当指令排列起来,构成一个有机整体,即程序。3.2电子负载程序设计流程图⑴电子负载程序设计主程序流程图如图3-1所示。开始开始系统初始化系统初始化数码管测试数码管测试调AD转换子程序调AD转换子程序调显示子程序显示U调显示子程序显示U有按键按下否?无有按键按下否?调PWM占空比调AD转换子程序调PWM占空比调AD转换子程序调显示子程序显示I调显示子程序显示I有按键按下否?有按键按下否?调PWM占空比调AD转换子程序调PWM占空比调AD转换子程序调显示子程序显示P调显示子程序显示P有按键按下否?有按键按下否?调PWM占空比调AD转换子程序调PWM占空比调AD转换子程序图3-1主程序流程图⑵电子负载程序设计按键程序流程图如图3-2所示。图3-2按键程序流程图结论设计的基于pic16f877单片机控制的电子负载,可以实现题目规定的基本功能,达成稳流的效果。各个参数都能直观的在数码管上显示。此电子负载能很好的替代传统的测试方法中一般采用的电阻、滑线变阻器、电阻箱等,更简朴、更快捷、更可靠地对电源、变压器、整流器等电子设备进行输出特性的测试。但是,本设计还存在着很多局限性,比如是功率消耗型器件,希望能在以后能改善这方面的缺陷。本次设计的电子负载,从最开始的资料搜集,到电路的设计;从最开始的元件选型,到电路板的焊接,再到现在的实物的整体调试……在我组3位成员的共同努力下克服重重困难,最后走向成功。遗憾时间的仓促,本次设计存在很多有待改善的方方面面,更存在很多低档的错漏和失误的地方。我们会在此后的学习过程中不断努力,不断进步。参考文献[1]孙安青著PIC系列单片机开发实例精解中国电力出版社2023[2]徐爱钧著智能化测量控制仪表原理与设计北京航空航天大学出版社2023[3]段尚枢著运算放大器应用基础哈尔滨工业大学出版社1998[4]沙占友著集成化智能传感器原理与应用电子工业出版社2023[5]赖寿宏著微型计算机控制技术机械工业出版社1994[6]通用集成电路速查手册[7]WWW.ALLDATASHEET.COM芯片查询网站[8]网站附录1:电子负载设计程序#include "p18f4520.h"#defineucharunsignedchar#defineuintunsignedinttypedefunsignedromconstchar ROM;unsignedcharUPKeyFlag;unsignedcharDOWNKeyFlag;unsignedcharYXCKMS;unsignedchart_data;//unsignedcharADFlag;//A/D转换完毕标志变量unsignedintDLFK;unsignedintDYFK;unsignedintDLGD;unsignedintdata1=0;unsignedintdata2=0;unsignedintdata3=0;unsignedintsp;unsignedintPID_RESULT;unsignedintFreq;//unsignedcharGZBZ_data;floatS_PID,S_PIDF;floatLB_data,LBP_data,LBA_data;intE_PID;inttzl;/*********************************************************************************************/unionadrs{inty1; unsignedcharadre[2];}adresult; /**************************************************************************************************/#defineCLRWDT _asmCLRWDT_endasm #defineRSFXTRISBbits.TRISB3#defineRSPORTBbits.RB3#defineRWFXTRISBbits.TRISB4#defineRWPORTBbits.RB4#defineEFXTRISBbits.TRISB5#defineEPORTBbits.RB5#defineADDFXTRISDbits.TRISD0//S1#defineADDPORTDbits.RD0#defineSHIFTFXTRISDbits.TRISD1//S2#defineSHIFTPORTDbits.RD1#defineMENFXTRISDbits.TRISD2//S3#defineMENPORTDbits.RD2#defineUPFXTRISDbits.TRISD3//S4#defineUPPORTDbits.RD3#defineDOWNFXTRISDbits.TRISD4//S5#defineDOWNPORTDbits.RD4#defineSDDLFXTRISDbits.TRISD5//S6#defineSDDLPORTDbits.RD5/******************************************************/#define FirstLineStart 0x80#define SecondLineStart 0x90#define ThirdLineStart 0x88#define FourthLineStart 0x98#define COM0#define DAT1#defineTIMERCOUNT1400/****************显示设立*************************/ROMSD[]={"设定"};ROMDY[]={"电压"};ROMDL[]={"电流"};ROMTZ[]={"占空比"};ROMTZL[]={"调整率"};ROMHY[]={"电子设计"};ROMGZ[]={"过载"};ROMFS[]={"%"};ROMMA[]={"mA"};ROMV[]={"mV"};ROM YI[]={"1"};ROM ER[]={"2"};ROM SA[]={"3"};ROM SI[]={"4"};ROM WU[]={"5"};ROM LI[]={"6"};ROM QI[]={"7"};ROM BA[]={"8"};ROM JI[]={"9"};ROM SH[]={"0"};ROM KO[]={"."};ucharcount;unsignedintsd=10;unsignedintdl=0;unsignedintdy=0;unsignedinttz=0;//floatcharwq=4;ucharasd[4];ucharadl[4];ucharady[5];ucharatz[4];/*****************************************函数定义********************************************/voidPIC18_HIGHT_ISR(void);voidPIC18_LOW_ISR(void);voidPWM_TJ(void);/*******************************中断********************************************************/#pragmacodehight_vector_section=0x08voidhight_vector(void){_asmgotoPIC18_HIGHT_ISR_endasm}#pragmacodelow_vector_section=0x18voidlow_vector(void){_asmgotoPIC18_LOW_ISR_endasm}#pragmacode#pragmainterruptPIC18_HIGHT_ISRvoidPIC18_HIGHT_ISR(){if(INTCONbits.TMR0IF==1){INTCONbits.TMR0IF=0;if(count>60){count=0;}elsecount++;TMR0H=(65536-TIMERCOUNT)/256;TMR0L=(65536-TIMERCOUNT)%256;}}#pragmainterruptPIC18_LOW_ISRvoidPIC18_LOW_ISR(){if(PIR1bits.TMR1IF==1){PIR1bits.TMR1IF=0;if(t_data>2){sp=1;t_data=0;}elset_data++;TMR1H=0x00;TMR1L=0x06;}}/**************************************延时函数*********************************************************//***********************************************************************************************/voidDelayus(ucharx){uchari;while(x--){for(i=5;i>0;i--){;}}}voidDelayms(ucharx){uchari;while(x--){//delay1msfor(i=10;i>0;i--){charj;j=count;while(1){//delay100usif(count-j)break;}}}}voidDelay10ms(ucharx){while(x--){Delayms(10);}}voidDelays(ucharx){uchari;while(x--){Delay10ms(100);}}/*********************************************************************************************/voidWrLCD(uchardatacomm,ucharcontent){ uchardiscontent,i,j; Delayus(200); discontent=content; RS=1; //前5个同步码 E=0; RW=1; for(i=5;i>0;i--){ E=1; E=0; } //写指令位RW RW=0; E=1; E=0; //RS-DataorInstructioncode if(datacomm) RW=1;//data else RW=0;//command E=1; E=0; RW=0; E=1; E=0; for(j=2;j>0;j--){ for(i=4;i>0;i--){ discontent=discontent<<1; RW=STATUSbits.C; //Status寄存器中的进位标志E=1; E=0; } RW=0; for(i=4;i>0;i--){ E=1; E=0; } }}voidClrram(void){ WrLCD(COM,0x30); WrLCD(COM,0x01); Delayms(5);}voidLCDInit(void){ WrLCD(COM,0x30); //30基本指令动作//Delayms(2); WrLCD(COM,0x0c);//Delayms(2); WrLCD(COM,0x01); ///*清屏,地址指针指向00H*/ Delayms(4); //产生至少1.6ms延时 WrLCD(COM,0x02);//Delayms(2); WrLCD(COM,0x06); ///*光标的移动方向,光标右移,AC自动加一*/// WrLCD(COM,0x0e); ///*开显示,开光标,光标位置不反白且闪烁*/// WrLCD(COM,0x0c); ///*开显示,关光标*/// WrLCD(COM,0x0f); ///*开显示,开光标,光标位置反白且闪烁*/// WrLCD(COM,0x10); //光标左移一位// WrLCD(COM,0x14); //光标右移一位Delayms(2); Clrram();}voidChnDisp(ROM*chn,ucharlinepos,uchardispos){ uchari=0,startpos; WrLCD(COM,0x30); switch(linepos) { case1: startpos=FirstLineStart; break; case2: startpos=SecondLineStart; break; case3: startpos=ThirdLineStart; break; case4: startpos=FourthLineStart; break; } WrLCD(COM,(startpos+dispos));while(chn[i]!='\0'){ WrLCD(DAT,chn[i]); i++; }}/***********************************************************************************************/voidShow(uchar*p,ucharx4,uchary4){ucharm;for(m=0;m<4;m++){switch(*p){ case0:ChnDisp(SH,x4,m+y4);break; case1:ChnDisp(YI,x4,m+y4);break; case2:ChnDisp(ER,x4,m+y4);break; case3:ChnDisp(SA,x4,m+y4);break; case4:ChnDisp(SI,x4,m+y4);break; case5:ChnDisp(WU,x4,m+y4);break; case6:ChnDisp(LI,x4,m+y4);break; case7:ChnDisp(QI,x4,m+y4);break; case8:ChnDisp(BA,x4,m+y4);break; case9:ChnDisp(JI,x4,m+y4);break;case10:ChnDisp(KO,x4,m+y4);break; }p++;}}voidShow1(uchar*p,ucharx4,uchary4){ucharm;for(m=0;m<5;m++){switch(*p){ case0:ChnDisp(SH,x4,m+y4);break; case1:ChnDisp(YI,x4,m+y4);break; case2:ChnDisp(ER,x4,m+y4);break; case3:ChnDisp(SA,x4,m+y4);break; case4:ChnDisp(SI,x4,m+y4);break; case5:ChnDisp(WU,x4,m+y4);break; case6:ChnDisp(LI,x4,m+y4);break; case7:ChnDisp(QI,x4,m+y4);break; case8:ChnDisp(BA,x4,m+y4);break; case9:ChnDisp(JI,x4,m+y4);break;case10:ChnDisp(KO,x4,m+y4);break; }p++;}}voidShowNumber(uchar*p,intx,ucharx4,uchary4){uchar*m;inti;i=x;m=p;*m=i/1000;i=i%1000;m++;*m=i/100;i=i%100;m++;*m=i/10;i=i%10;m++;*m=i;Show(p,x4,y4);}voidShow3(uchar*p,intx,ucharx4,uchary4){uchar*m;inti;i=x;m=p;*m=i/10000;i=i%10000;m++;*m=i/1000;i=i%1000;m++;*m=i/100;i=i%100;m++;*m=i/10;i=i%10;m++;*m=i;Show1(p,x4,y4);}voidShift(void){if(SHIFT==0){Delay10ms(2);if(SHIFT==0){//PWM_shift();Delay10ms(2); if(wq==1) wq=4; else wq--;}}}voidAdd(void){if(ADD==0){Delay10ms(2);if(ADD==0){//PWM_add();//Delay10ms(10);switch(wq){ case0:sd=sd+1000; break; case1:sd=sd+100; break; case2:sd=sd+10; break; case3:sd=sd+1; break; } if(sd>2023) sd=0;}} }/*voidScanKey(void){PWM_TJ();if(MEN==0){Delay10ms(2); if(MEN==0){Delay10ms(20); while(1){ Shift();Add();PWM_TJ();SDDLHS(); ShowNumber(asd,sd,1,3);ShowNumber(ady,dy,3,3);ShowNumber(adl,dl,2,3);ShowNumber(atz,tz,4,4);if(MEN==0){Delay10ms(2); if(MEN==0){Delay10ms(20);break;}} }//endofwhile }}}*//************************************************************* 定期器0初始化*************************************************************/voidInitTimer0(void){INTCONbits.GIEH=1;//enablethegeneralinterruptionINTCONbits.GIEL=1;//enabletheperipheralinterruptionT0CONbits.TMR0ON=0;//disableTimer2T0CONbits.T08BIT=0;T0CONbits.T0CS=0;//选择内部时钟为时钟源INTCONbits.TMR0IE=1;//enableTimer0overflowinterruption//INTCON2bits.TMR0IP=0;TMR0H=(65536-TIMERCOUNT)/256;TMR0L=(65536-TIMERCOUNT)%256;INTCONbits.TMR0IF=0;//清除溢出标志T0CONbits.TMR0ON=1;//enableTimer2}/****************定期器1初始化*******************************/voidInitTimer1(void){T1CONbits.TMR1ON=0;//严禁Timer1//IPR1bits.TMR1IP=1;//从01改到1PIR1bits.TMR1IF=0;PIE1bits.TMR1IE=1;T1CONbits.RD16=0; //RD16:16位读/写模式使能位//1=使能通过一次16位操作对Timer1寄存器进行读写//0=使能通过两次8位操作对Timer1寄存器进行读写T1CONbits.T1CKPS1=1;//1:8T1CONbits.T1CKPS0=1;T1CONbits.TMR1CS=0;//内部时钟源RCONbits.IPEN=1;//中断优先级使能位IPR1bits.TMR1IP=0;//初始值为1让PWM控制进入低优先级入口.TMR1H=0x00;TMR1L=0x00;T1CONbits.TMR1ON=1;}voidInitPort(void){RSFX=RWFX=EFX=0;ADDFX=MENFX=SHIFTFX=1;UPFX=DOWNFX=SDDLFX=1;}voidPIC18_PWM_Init(void)//PWM定期器2初始化,15KHZ{TRISCbits.TRISC1=0;//配置RC1为输出引脚PWM输出TMR2=0;//初始值为0PR2=255;//产生频率为15KHZ的PWM信号T2CON=0x04;//预分频经为1:1,启动TIMER2工作Freq=10;tz=Freq;CCP2CON=(CCP2CON&0x0F)|((Freq%4)<<4);CCPR2L=Freq/4;CCP2CON=0x0C;//配置CCP2模块工作在PWM模式UPKeyFlag=0;DOWNKeyFlag=0;}voidFZ(){CCP2CON=(CCP2CON&0x0F)|((Freq%4)<<4);CCPR2L=Freq/4;CCP2CON=0x0C;//配置CCP2模块工作在PWM模式}voidPWM_TJ(void){if(UP==0){Delay1KTCYx(16);//延时1mSif((0==UP)&&(0==DOWNKeyFlag))//再判断{//Delay1KTCYx(16);//延时1mSFreq++;//占空比加1 tz=Freq; if(1024==Freq)Freq=1023;//加到最大值CCP2CON=(CCP2CON&0x0F)|((Freq%4)<<4);CCPR2L=Freq/4; UPKeyFlag=1;//置成功辨认按键标志}}else{if(1==UPKeyFlag)UPKeyFlag=0;}//清按键标志if(DOWN==0)//占空比减少按键按下{Delay1KTCYx(16);//延时1mSif((0==DOWN)&&(0==DOWNKeyFlag))//再判断{Freq--;//占空比减1 tz=Freq;if(0==Freq)Freq=1;//减到最小值CCPR2L=Freq>>2;CCP2CONbits.DC2B1=(Freq&&0x02)>>1; CCP2CONbits.DC2B0=Freq&&0x001;DOWNKeyFlag=1;//置成功辨认按键标志}}else{if(1==DOWNKeyFlag)DOWNKeyFlag=0;}//清按键标志}voidPIC18_ADC__Init(void){ADCON0=0;ADCON1=0x0D;//使能AN0和AN1通道//ADCON1bits.VCFG0=0;//配置A/D模块的参考电压为+5V//ADCON1bits.VCFG1=0;ADCON2bits.ADFM=1;//配置转换结果最低位对齐方式ADCON2bits.ACQT2=1;//配置采样时间为16*TCYADCON2bits.ACQT1=1;ADCON2bits.ACQT0=0;ADCON2bits.ADCS2=0;//配置A/D时钟源为FOSC/32ADCON2bits.ADCS1=1;ADCON2bits.ADCS0=0;ADCON0bits.ADON=1;//使能A/D转换器模块//ADCON0bits.GO=1;//启动A/D转换开始//ADFlag=0;}//*******************A/D转换子程序**********************************///*******************入口:选择A/D通道号****************************///*******************出口:A/D结果送入adresult.y1*******************/voidAD_CONVERT(){Delayus(15);ADCON0bits.GO=1;Delayus(15);do{;//CLRWDT();}while(ADCON0bits.GO==1);adresult.adre[0]=ADRESL;adresult.adre[1]=ADRESH;}//********************************************************************///*******************数字滤波子程序*********************************/voidSZLB_SUB(){LB_data=LBP_data*0.8+LBA_data*0.2;}//**********************************************************************/voidCJ_AD(){ADCON0=0X81;AD_CONVERT();LBP_data=DYFK;LBA_data=adresult.y1;//采集电压反馈;SZLB_SUB();DYFK=LB_data;dy=2*DYFK;ADCON0=0X89;AD_CONVERT();LBP_data=DLFK;LBA_data=adresult.y1;//采集电流反馈;SZLB_SUB();DLFK=LB_data;}//************闭环PID调节程序*******************************************///************S3用来设立运营模式****************************************/voidSUB_PID(){S_PIDF=0.0;E_PID=DLGD-DLFK;S_PIDF=0.05*E_PID+S_PIDF;S_PID=0.05*E_PID+S_PIDF;if(S_PID>1000.0){S_PID=1000.0;S_PIDF=1000.0;}if(S_PID<0.0){S_PID=0.0;S_PID

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论