基于STC系列单片机的串联型开关电源设计与实现

合集下载

基于STC12系列单片机的串联型开关电源设计与实现

基于STC12系列单片机的串联型开关电源设计与实现

模拟电路课程设计报告课题名称:基于STC12系列单片机的串联型开关电源设计与实现基于STC12系列单片机的串联型开关电源设计与实现开关电源是一种利用现代电力电子技术,控制开关管开通和闭合的时间比率,维持稳定输出电压的一种电源,开关电源一般是由脉冲宽度调制(PWM)控制。

基于开关电源与线性电源的不同,开关电源主要由以下的几个模块组成:1串联开关电源电路;2 AD 转换模块采集电源电压;3 PWM波形输出模块;4 LCD显示;5键盘输入设置电压;6通过CPU(STC12C5A60S2)控制算法。

系统的基本框图如下:基本思路为:首先从键盘输入一个电压值,并把该电压值在LED上面显示出来,再由A/D转换模块对串联开关电源电路的输出端进行电压采集,将采集到的电压值与键盘输入的电压值进行比较,通过闭环算法,控制PWM的脉宽输出,由此控制串联开关电压电源电路,改变输出的电压值,使得输出值与设定的电压值相等。

一:串联开关电源电路部分该电路图由一个三极管,电感,电阻,电容,二极管,还有就是接VCC和接GND端,电路相对比较简单,如图所示:原理:在PWM端无输入时,三极管相当于闭合,三极管右边的电路无电流流过,此时RL两端的电压为0V。

当PWM端有电流输入时,三极管导通,电感L1和电容C1,可以分别防止电流和电压突变,有一定的稳压作用。

高频二极管D1,可以在PWM由开向关状态转换时与电感L1形成通路,释放电感的能量。

而由于PWM端输入的是方波,也就是说三极管是处于开或者关状态的。

由此C1和R1在开状态时电容充电,R1两端的电压逐渐升高,而当三极管处于关状态时,电容C1对R1进行放电,此时电压逐渐降低。

最后通过控制三极管的开与关的时间比例便可以使得在R1两端形成稳定的电压。

二:键盘输入数据部分在该实验中,输入数据时要用到矩阵键盘,矩阵键盘又称为行列式键盘,它是用4条I/O线作为列线,4条I/O线作为行线组成的键盘。

在行线和列线的每一个交叉点上设置一个按键,由此组成了4*4的键盘.这样的行列式键盘结构可以有效地提高单片机系统中I/O口的利用率。

基于单片机控制的开关电源设计

基于单片机控制的开关电源设计

摘要:开关电源是当代电子科技技术的产物,用于达到输出电压的稳定,开关电源主要是通过改变脉宽调制(PWM)进行输出电压的改变。

它是一种电力电子装置,广泛应用于各种电子设备、工业、通信、航天航空以及军事等领域。

具有输出电压稳定、噪音小、小型化和轻型化等特点。

为了设计并实现一个单片机控制的开关电源,可以通过软件编程让单片机输出一个PWM 波形给双运算放大电路,双运算放大电路对PWM波形进行变换调压,反馈到DC-DC降压电路进行降压和稳压后输出所需要的电压。

输出电压可以通过按键调节,调节范围在0至25V,电压调节幅度为0.5V,由液晶显示屏实时显示。

单片机控制开关电源,实现电源的智能化,具有输出电压范围大、电压可调和输出电压实时显等优点。

关键字:开关电源,单片机,PWM波形,调节,智能化第一章概述开关电源是改变开关管的通断的时间比较来控制输出电压的大小的电力电子器件。

随着世界科技的快速发展,开关电源成为了人们生命中不可缺少的必需品,其应用于工业、农业、通信、航空和计算机等领域,具有高效率转换、重量小、小体积和高精度等特点。

传统的开关电源系统存在调整之繁琐,电路很繁琐,可靠性低等问题,本文通过对单片机进行编程实现开关电源的有效输出,具体是将常用电源220V交流电通入变压器转换成24V的交流电,经过整流电路得到直流信号,通过电容滤波得到相对干净的直流电分别接入两个LM2596S-ADJ芯片,一个是构成DC-DC降压型电路,一个是构成5V稳压电路,前者是控制输出电压的,后者是给单片机和液晶显示屏供电的。

输出电压的大小由PWM控制,将PWM 波形送到PWM调压电路,进行稳压和调压,并反馈到DC-DC降压电路后输出。

按键能控制输出电压的大小,输出电压能在0-25V范围里可连续调节,步加步减在0.5V,复位按键可以是输出电压恢复到5V,并由液晶显示屏显示。

单片机控制开关电源,具有灵活性好的优势,可根据设计人员的想法进行设计。

基于单片机控制的开关电源及其设计

基于单片机控制的开关电源及其设计

基于单片机控制的开关电源及其设计单片机控制的开关电源是一种高效率、高稳定性的电源系统,常用于电子设备中。

本文将介绍基于单片机控制的开关电源的原理、设计步骤以及相关注意事项。

一、原理1.1开关电源的工作原理开关电源的核心部分是一个开关管,它通过不断开闭来调整输出电压和电流。

当开关管关断时,电源输入端的电压会通过变压器产生瞬态电流,这个电流被蓄能电容器存储在电容中。

当开关管打开时,储存在电容中的能量被释放,通过滤波电感得到稳定的电压输出。

1.2单片机控制开关电源的工作原理在单片机控制的开关电源中,单片机通过控制开关管的开闭状态来调整输出电压和电流。

单片机能够实时监测电源的输入和输出情况,并根据设定的参数进行调整。

同时,单片机还可以实现一些保护功能,如过压、过流、过温等保护。

二、设计步骤2.1确定需求首先要确定开关电源的功率需求、输入电压范围和输出电压范围。

根据需求选择合适的开关管和变压器等元器件。

2.2定义控制策略根据开关电源的工作原理以及需求,确定单片机的控制策略。

可以采用PWM(脉宽调制)控制方法来控制开关管的开闭时间,以实现对输出电压的调节。

2.3确定单片机和外围电路选择合适的单片机控制器,并设计相应的外围电路,包括ADC(模拟数字转换)模块、PWM输出模块、电流传感器等。

2.4编写软件程序根据控制策略,编写单片机的控制程序,并完成软件的调试和优化。

2.5PCB设计与制造根据电路原理图设计PCB布局,并制造相关的电路板。

2.6装配与测试完成PCB板的焊接与装配,进行电源的测试和调试。

三、注意事项3.1安全性开关电源具有高电压、高电流的特点,因此在设计和使用过程中要注意安全性。

应采用合适的绝缘措施,保证电源与其他电路之间的隔离。

3.2效率和稳定性开关电源的效率和稳定性是设计过程中需要考虑的重要因素。

应合理选择元器件,控制开关管的导通和关断时间,以提高电源的效率和稳定性。

3.3EMC(电磁兼容)设计开关电源由于工作频率较高,容易产生电磁干扰。

基于单片机的开关电源设计

基于单片机的开关电源设计
众所周知,许多科学实验都离不开电源,并且在这些实验经常会对通电时间、电压高低、电流大小以及动态指标有着特殊的要求,然而目前实验所用的直流电源大多输出精度和稳定性不高;在测量上,传统的电源一般采用指针式或数码管显示电压或电流,搭配电位器来调整所要的电压及电流输出值。使用上若压要调整精确的电或者电流输出,须搭配精确的显示仪表测量,又因电位器的阻值特性非线性,在调整时,需要花费一定的时间,况且还要当心漂移,使用起来非常不方便。因此,开关电源不仅具备良好的输出质量而且还具有多功能以及一定的智化,以精确的微机控制取代精确度小的人为操作,在实验开始之前就对一些参数进行预设,这将会给各个领域中的实验研究带来不同程度的便捷与高效。
开关电源是利用现代电力电子技术,控制开关管开通和关断的之间比率,维持稳定输出电压的一种电源,具有高效率、体积小的特点。从上世纪90年代以来开关电源相继进入各种电子、电器设备领域,计算机、程控交换机、通讯、电子检测设备电源、控制设备电源等都已广泛地使用了开关电源。开关电源向着高频化、模块化和智能化方向发展
图2.1.1开关电源工作原理图
串联式开关电源输出电压滤波电路
大多数开关电源输出都是直流电压,因此,一般开关电源的输出电路都带有整流滤波电路。图2.1.2是带有整流滤波功能的串联式开关电源工作原理图。
图2.1.2带有整流滤波功能的串联式开关电源工作原理图
图2.1.2中由一个整流二极管和一个LC滤波电路组成。其中L是储能滤波电感,它的作用是在控制开关K接通期间Ton限制大电流通过,防止输入电压Ui直接加到负载R上,对负载R进行电压冲击,同时对流过电感的电流iL转化成磁能进行能量存储,然后在控制开关K关断期间Toff把磁能转化成电流iL继续向负载R提供能量输出;C是储能滤波电容,它的作用是在控制开关K接通期间Ton把流过储能电感L的部分电流转化成电荷进行存储,然后在控制开关K关断期间Toff把电荷转化成电流继续向负载R提供能量输出;D是整流二极管,主要功能是续流作用,故称它为续流二极管,其作用是在控制开关关断期间Toff,给储能滤波电感L释放能量提供电流通路。在控制开关关断期间Toff,储能电感L将产生反电动势,流过储能电感L的电流iL由反电动势eL的正极流出,通过负载R,再经过续流二极管D的正极,然后从续流二极管D的负极流出,最后回到反电动势eL的负极。

基于单片机控制的开关电源及其设计

基于单片机控制的开关电源及其设计

2、基于单片机控制的开关电源的可选设计方案由单片机控制的开关电源, 从对电源输出的控制来说, 可以有三种控制方式, 因此, 可供选择的设计方案有三种:( 1) 单片机输出一个电压( 经D/AC 芯片或PWM方式) , 用作开关电源的基准电压。

这种方案仅仅就是用单片机代替了原来开关电源的基准电压, 可以用按键设定电源的输出电压值, 单片机并没有加入电源的反馈环, 电源电路并没有什么改动。

这种方式最简单。

( 2) 单片机与开关电源专用PWM芯片相结合。

此方案利用单片机扩展A/D 转换器, 不断检测电源的输出电压, 根据电源输出电压与设定值之差, 调整D/A 转换器的输出, 控制PWM芯片, 间接控制电源的工作。

这种方式单片机已加入到电源的反馈环中, 代替原来的比较放大环节, 单片机的程序要采用比较复杂的PID 算法。

( 3) 单片机直接控制型。

即单片机扩展A/DC, 不断检测电源的输出电压, 根据电源输出电压与设定值之差, 输出PWM波, 直接控制电源的工作。

这种方式单片机介入电源工作最多。

3、最优设计方案分析三种方案比较第一种方案: 单片机输出一个电压( 经D/AC芯片或PWM方式) , 用作开关电源的基准电压。

这种方案中, 仅仅就是用单片机代替了原来开关电源的基准电压, 没有什么实际性的意义。

第二种方案: 由单片机调整D/AC 的输出, 控制PWM芯片, 间接控制电源的工作。

这种方案中单片机可以只就是完成一些弹性的模拟给定, 后面则由开关电源专用PWM芯片完成一些工作。

在这种方案中,对单片机的要求不就是很高, 51 系列单片机已可胜任; 从成本上考虑,51 系列单片机与许多PWM控制芯片的价格低廉; 另外, 此方案充分解决了由单片机直接控制型的开关电源普遍存在的问题———由于单片机输出的的PWM脉冲频率低, 导致精度低, 不能满足要求的问题。

因此, 单片机与PWM芯片相结合, 就是一种完全可行的方案。

基于STC12系列单片机的串联型开关电源系统设计应用

基于STC12系列单片机的串联型开关电源系统设计应用

单片机及模数综合系统设计课题名称:基于STC12系列单片机的串联型开关电源设计与实现--单片机控制部分一、实验目的:本模拟电路课程设计要求制作开关电源的模拟电路部分,在掌握原理的基础上将其与单片机相结合,完成开关电源的设计。

本报告旨在详述开关电源的原理分析、计算、仿真波形、相关控制方法以及程序展示。

二、总体设计思路本设计由开关电源的主电路和控制电路两部分组成,主电路主要处理电能,控制电路主要处理电信号,采用负反馈构成一个自动控制系统。

开关电源采用PWM 控制方式,通过给定量与反馈量的比较得到偏差,通过调节器控制PWM 输出,从而控制开关电源的输出。

当键盘输入预置电压后,单片机通过PWM输出一个固定频率的脉冲信号,作用于串联开关电源的二极管和三极管,使三极管以一定的频率导通与断开,然后输出进行AD转化,转化后的结果再给单片机进行输出,进行数码管显示。

系统的基本框图及控制部分如下:控制过程原理分析:单片机所采用的芯片为STC12C5A60S2,该芯片在拥有8051内核的基础上加入了10为AD和PWM发生器。

通过程序,即可控制单片机产生一定占空比的PWM 脉冲,将此脉冲输入到模拟电路部分,在模拟电路的输出端即可产生一定的输出电压,可比较容易的通过程序来实现对输出电压的控制。

但上述的开环控制是无法达到精确的调节电压,因此需要采用闭环控制来精确调制。

即,对输出电压进行AD采样,将其输入回单片机中进行数据处理。

单片机根据处理的结果来对输出电压做出修正,经过这样的逐步调节即可达到闭环的精密输出。

由此原理,可以将整个过程分成一下模块:PWM波形输出模块,模拟电路模块,AD转换模块,数码管显示模块,键盘输入模块。

控制过程基本思路为:首先从键盘输入一个电压值,并把该电压值在数码管上面显示出来,再由A/D转换模块对串联开关电源电路的输出端进行电压采集,将采集到的电压值与键盘输入的电压值进行比较,通过闭环算法,控制PWM的脉宽输出,由此控制串联开关电压电源电路,改变输出的电压值,使得输出值与设定的电压值相等。

基于单片机的开关电源设计

基于单片机的开关电源设计

摘要本设计由STC89S52单片机系统,PWM脉宽调制信号控制芯片TL494,开关电源Buck串联降压电路, A/D模块, D/A模块, 键盘输入和LCD显示输出模块,制作了一个输出电压为5V-15V可调DC/DC模块构成的供电系统。

电源模块由TL494控制Buck电流构成,通过电压反馈控制将输出电压稳压到所需要的电压。

STC89C52单片机控制器采样输出电压,通过给电源模块一个调节信号,改变各电源模块的内部输出电压,从而实现输出稳定可调的电压。

关键词:STC89C52单片机; TL494; PWM脉宽调制信号; Buck电路AbstractThe design microcontroller system by STC89S52, PWM pulse width modulation signal control chip TL494 switching power supply Buck series buck circuit modules of the A / D, D / A module, keyboard input and LCD displays the output modules to produce an output voltage of 5V-15V adjustable power supply system of the DC / DC module. The power module is controlled by the TL494 Buck current is constituted by the voltage feedback control of theoutput voltage regulator to the desired voltage. STC89C52 microcontroller controller the sampling output voltage by a regulating signal to the power supply module, the internal output voltage of to change each power module, in order to achieve stable output adjustable voltage.Keywords:STC89C52CM; TL494; PWM Any diversion; Buck circuit目录摘要 (I)Abstract................................................................................................................................................... I I 第一章绪论. (1)1.1引言 (1)1.2 开关电源简介 (1)第二章开关电源DC/DC电路设计思路 (2)2.1 开关电源的工作原理 (2)2.2 开关电源的常见拓扑结构简介 (3)2.3 开关电源DC/DC拓扑设计思路 (4)2.3.1 DC/DC基本拓扑设计方案 (4)2.4 DC/DC电路实现 (5)2.4.1 DC/DC回路参数设计 (7)2.5 系统供电模块设计 (8)2.5.1 整流滤波电路设计 (8)2.5.2 工作辅助电源参数设计 (9)第三章控制系统的设计思路 (10)3.2 单片机模块的设计 (11)3.2.1 STC89C52性能简介 (11)3.2.2 最小系统设计 (11)3.3 A/D模块设计 (12)3.3.1芯片介绍 (12)3.3.2 TLC549工作时序 (13)3.3.3 A/D电路设计 (14)3.4 D/A模块设计 (15)3.4.1 D/A芯片功能介绍 (15)3.4.2 D/A芯片I2C总线数据通信基本协议 (15)3.5 接口电路的设计 (17)3.5.1显示接口电路设计 (17)3.5.2 显示接口电路设计 (17)第四章程序设计 (19)4.1 主程序流程图的设计 (19)4.2 键盘扫描程序设计 (20)4.3 A/D程序设计 (21)4.4 D/A程序设计 (22)第五章系统仿真 (23)5.1 仿真仪器 (23)5.2 仿真方法 (23)5.3 仿真结果与分析 (23)参考文献 (24)附录一:系统整体原理图 (25)附录二:程序代码 (26)结论与展望...........................................................................致谢 (35)第一章绪论1.1引言随着电子技术的发展,数字电路应用领域的扩展,现今社会,产品智能化、数字化已成为人们追求的一种趋势,设备的性能、价格、发展空间等备受人们的关注,尤其对电子设备的精密度和稳定度最为关心。

基于单片机控制的开关电源及其设计

基于单片机控制的开关电源及其设计

2.基于单片机控制的开关电源的可选设计方案由单片机控制的开关电源, 从对电源输出的控制来说, 可以有三种控制方式, 因此, 可供选择的设计方案有三种:( 1) 单片机输出一个电压( 经D/AC 芯片或PWM方式) , 用作开关电源的基准电压。

这种方案仅仅是用单片机代替了原来开关电源的基准电压, 可以用按键设定电源的输出电压值, 单片机并没有加入电源的反馈环, 电源电路并没有什么改动。

这种方式最简单。

( 2) 单片机和开关电源专用PWM芯片相结合。

此方案利用单片机扩展A/D 转换器, 不断检测电源的输出电压, 根据电源输出电压与设定值之差, 调整D/A 转换器的输出, 控制PWM芯片, 间接控制电源的工作。

这种方式单片机已加入到电源的反馈环中, 代替原来的比较放大环节, 单片机的程序要采用比较复杂的PID 算法。

( 3) 单片机直接控制型。

即单片机扩展A/DC, 不断检测电源的输出电压, 根据电源输出电压与设定值之差, 输出PWM波, 直接控制电源的工作。

这种方式单片机介入电源工作最多。

3.最优设计方案分析三种方案比较第一种方案: 单片机输出一个电压( 经D/AC芯片或PWM方式) , 用作开关电源的基准电压。

这种方案中, 仅仅是用单片机代替了原来开关电源的基准电压, 没有什么实际性的意义。

第二种方案: 由单片机调整D/AC 的输出, 控制PWM芯片, 间接控制电源的工作。

这种方案中单片机可以只是完成一些弹性的模拟给定, 后面则由开关电源专用PWM芯片完成一些工作。

在这种方案中,对单片机的要求不是很高, 51 系列单片机已可胜任; 从成本上考虑,51 系列单片机和许多PWM控制芯片的价格低廉; 另外, 此方案充分解决了由单片机直接控制型的开关电源普遍存在的问题———由于单片机输出的的PWM脉冲频率低, 导致精度低, 不能满足要求的问题。

因此, 单片机和PWM芯片相结合, 是一种完全可行的方案。

第三种方案: 是最彻底的单片机控制开关电源, 但对单片机的要求也高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机及模数综合系统设计课题名称:基于STC12系列单片机的串联型开关电源设计与实现--单片机控制部分一、实验目的:本模拟电路课程设计要求制作开关电源的模拟电路部分,在掌握原理的基础上将其与单片机相结合,完成开关电源的设计。

本报告旨在详述开关电源的原理分析、计算、仿真波形、相关控制方法以及程序展示。

二、总体设计思路本设计由开关电源的主电路和控制电路两部分组成,主电路主要处理电能,控制电路主要处理电信号,采用负反馈构成一个自动控制系统。

开关电源采用PWM 控制方式,通过给定量与反馈量的比较得到偏差,通过调节器控制PWM 输出,从而控制开关电源的输出。

当键盘输入预置电压后,单片机通过PWM输出一个固定频率的脉冲信号,作用于串联开关电源的二极管和三极管,使三极管以一定的频率导通与断开,然后输出进行AD转化,转化后的结果再给单片机进行输出,进行数码管显示。

系统的基本框图及控制部分如下:控制过程原理分析:单片机所采用的芯片为STC12C5A60S2,该芯片在拥有8051内核的基础上加入了10为AD和PWM发生器。

通过程序,即可控制单片机产生一定占空比的PWM 脉冲,将此脉冲输入到模拟电路部分,在模拟电路的输出端即可产生一定的输出电压,可比较容易的通过程序来实现对输出电压的控制。

但上述的开环控制是无法达到精确的调节电压,因此需要采用闭环控制来精确调制。

即,对输出电压进行AD采样,将其输入回单片机中进行数据处理。

单片机根据处理的结果来对输出电压做出修正,经过这样的逐步调节即可达到闭环的精密输出。

由此原理,可以将整个过程分成一下模块:PWM波形输出模块,模拟电路模块,AD转换模块,数码管显示模块,键盘输入模块。

控制过程基本思路为:首先从键盘输入一个电压值,并把该电压值在数码管上面显示出来,再由A/D转换模块对串联开关电源电路的输出端进行电压采集,将采集到的电压值与键盘输入的电压值进行比较,通过闭环算法,控制PWM的脉宽输出,由此控制串联开关电压电源电路,改变输出的电压值,使得输出值与设定的电压值相等。

三、系统各单元模块电路设计1、键盘输入数据部分分别接到单片机的P2.4,P2.5,P2.6,P2.7。

每路通过电阻进行上拉,可以编程实现控制单片机运行不同程序。

为了判断键盘上面的按键是否有按下的,可以事先对P2.4,P2.5,P2.6,P2.7端口赋值,便可以知道具体是哪个按键被按下了。

例如:P2.4=0,便可知道P2.4对应的按键已经按下了。

键盘输入模块程序如下:void key( ) //键盘扫描函数{if(P2_6== 0){delay(10);//延时去抖动if(P2_6== 0){while(P2_6== 0)if(a<9){a++; }else a=0;}}if(P2_5 == 0){delay(10);//延时去抖动if(P2_5 == 0){while(P2_5== 0);if(b<9){b++; }else(b=0);}if(P2_4 == 0){delay(10);//延时去抖动if(P2_4 == 0){while(P2_4== 0);if(c<5){c++;}else c=0;}}if(P2_7==0){delay(10);if(P2_7==0){while(P2_7==0);P1_5=!P1_5;} }}2、数码管数据显示部分知道了上面在键盘输入的数值后,便要在数码管上面显示出来。

该实验板的8位数码管是共阴极的数码管,使用端口为P0和P2.0-P2.4口,且为动态数码管,因此在同一时间,只有一个数码管是亮着,但由于人眼的视觉残留,使得看上去是全部一起亮着的。

8位分别有段选和位选,段选就是要一个数码管显示的字型,而位选则是由低电平选中所要那一个数码管,该数码管才能亮。

因此要使得数码管亮并显示数字,则必须在位选时该数码管的位选管脚出于低电平,然后再通过段选显示字型。

如下图所示的数码管:数码管显示模块程序为:void display(float x){uint M,N,I;I=100*x/100;N=(100*x-100*I)/10;M=100*x-100*I-10*N;P2_0=0;P0=table[0];delay(10);P2_0=1;P2_1=0;P0=gao_table[I];delay(10);P2_1 =1;P2_2=0;P0=table[N];delay(10);P2_2= 1;P2_3=0;P0=table[M];delay(10);P2_3=1;}3、控制PWM输出部分STC12C5A60S2系列单片机集成了两路可编程计数器阵列(PCA)模块,可用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制(PWM)输出。

在该实验中主要用到PWM脉宽调制输出,通过对特殊功能寄存器初始化,就可以在P1.3(选择模式0时)或P1.4(选择模式1时)端口输出可调占空比的高速脉冲。

PWM模块程序如下:void PWM_Drv_Init(void){CCON = 0; //初始化PCA控制寄存器CL = 0; //初始化PCA计数器CH = 0;CMOD = 0x08;CR = 1; }void PWM0_Drv_SetDuty(unsigned char DutyValue){CCAP0H = CCAP0L = DutyValue; //设置看空比CCAPM0 = 0x42;CR = 1; }PWM 仿真图为:4、AD转换模块(完成万用表功能,即测量开关电源输出电压)STC12C5A60S2系列单片机自带有8路10位高速A/D转换器,在本实验中只用到其中的一路,故可以通过软件设计选择其中的一路用来测量电压。

在不需作为A/D转换的端口可以继续作为I/O口使用。

AD转换对特殊功能寄存器的初始化主要有ADC_CONTR和A/D转换结果寄存器ADC_RES(用来存放高八位) ﹑ADC_RESL(用来存放低两位);在ADC_CONTR中包含有ADC电源控制位ADC_POWER,模数转换器转换速度控制位SPEED1 ﹑SPEED0,模数转换器转换结束标志位ADC_FLAG,模数转换器(ADC)转换启动控制位ADC_START,模拟输入通道选择CHS1/CHS2/CHS3。

由于是2套时钟,在设置ADC_CONTR控制寄存器的语句执行之后,要经过4个CPU时钟的延时,其值才能够保证被这只进ADC_CONTR控制寄存器,所以设置ADC_CONTR控制寄存器后,要加4个空操作延时才能正确读到ADC_CONTR寄存器的值。

ADC的结构如下图所示:AD转化模块的程序为:void ADC_Drv_Demo(void){if(ADC_Finish_Flag == TRUE){ADC_Finish_Flag = FALSE;ADC_Drv_StartCh(ADC_channel);m=ADC_Result[ADC_channel]*5.0/1024;}}5、闭环控制算法这部分是整个实验中最重要的部分,该部分主要是通过A/D采集数据控制PWM输出,PWM 控制开关电源输出,以达到稳定,即让开关电源输出电压稳定在键盘输入的电压值。

针对前面的要求,则需要用单片机来完成所有的控制与计算。

在该实验中,作为AD采集的端口为P1.7,PWM输出端口为P1.3,在采集完电压数据的时候把数据存放在ADC之中,而从键盘输入数值时,键盘上显示的是一个小数,但在单片机中存在中间变量temp的是一个整数,为小数的1000倍,因此在引用数码管显示的数值时要将temp除以1000才能得到实际的设置电压数值Vs;另一方面,采集回来的电压ADC要转换成实际的电压数值,则由下面的算法得出:真实值 Vr = ADV*5.0/1024.0在得到这两个数值之后对他们进行比较,要是Vr<Vs,说明采集回来的电压偏低,此时则要降低PWM输出脉冲的占空比;同理,当Vr>Vs时,则要增大PWM输出脉冲的占空比,由此而使得串联开关电路的输出电压与事先所设置的电压值相同。

实际测得的电压与设置的电压对比表格如下:Vs <0.8 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Vr —0.79 0.89 0.98 1.08 1.18 1.28 1.39 1.49 1.59 1.71.8 1.92.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.93.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.94.0 >4. 02.983.12 3.19 3.28 3.39 3.48 3.59 3.68 3.79 3.96 3.98—通过上面的表格可以看出来,虽然实际测出来的电压Vr和设置的电压Vs有一定的误差,但是总体还是在设置的电压附近波动,所能输出地电压范围为0.8v~4.0v。

误差原因分析:(1)单片机电源不够稳定,在接入电脑后给单片机提供的电压小于5V(2)提供给AD转换的参考电压不够精确,使转化存在误差。

四、心得体会通过这次实验让我知道理论需要联合实际,只有将自己所掌握的知识真正应用于实际才算真正的掌握了知识。

在刚开始做的时候我对于单片机的知识理论只是有一些模糊的印象,不能真正掌握单片机的知识,比如用AD采样需要用单片机的哪些管脚,还有数码管需要用哪些管脚控制,并且哪些管脚控制段选,哪些控制位选。

这些我都不太清楚,但通过请教才会用程序写出来。

虽然这次实验做出来了,但是我还是有些知识无法真正掌握,比如定时器中断或定时,所以这次实验我只能用delay延时来写。

通过这次实验我还注意到细节决定一个程序是否能成功运行,比如我在写程序是应用了if……else格式,可是因为在写的过程中括号没对齐,使程序没能成功运行,经过同学帮忙才成功运行。

还有的细节就是关于键盘的防抖动问题。

总体来说,我通过这次课程设计不单单学到了很多单片机和C51编程的的知识,更多的是学会了学习的方法,能够将所学到的知识用到实验上面,可以把知识记得更清楚。

这还更多地提高了在遇到实际问题时该怎样解决实际问题的能力。

更深入地学习C语言,又可以更多地提高自己的逻辑,思考能力,使思维结构更严谨。

希望在以后的学习之中可以更多地接触到这样的实验,那样就可以更好地提高自己的动手能力与对所学知识的运用能力本实验C程序源代码:/******************************************************************************//***文件名:开关稳压电源.c*****************************************************//***功能:设定电压初始值,使得输出电压值与数码管显示值相同*********************//***单片机型号:STC12C5A60S2(带AD转换与PWM脉宽调制输出功能)**************//******************************************************************************//******************************************************************************/#include "stc12c5a60s2.h"#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define TRUE 1#define FALSE 0void delay( uint z);//延时函数声明void display(float m ); //显示函数声明void key( ); //键盘扫描函数void ADC_Drv_InitCh(unsigned char ChNo);void ADC_Drv_StartCh(unsigned char ChNo);void ADC_Drv_Service(void);void ADC_Drv_Demo(void);void PWM_Drv_Init(void);void PWM0_Drv_SetDuty(unsigned char DutyValue);uchar ADC_channel =7; //选中哪一个通道的变量(范围 0 -- 7)uint ADC_Result[8]=0; //保存ADC转换结果float m,n;uchar D;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar code gao_table[]={0x40,0x79,0x24,0x30,0x19,0x12};sbit P2_0=P2^0;sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2^3;sbit P2_4=P2^4;sbit P2_5=P2^5;sbit P2_6=P2^6;sbit P2_7=P2^7;sbit PWM0=P1^3; //定义PWM0的输出端sbit P1_5=P1^5;bit ADC_Finish_Flag=FALSE; //ADC完成标志 uint a,b,c;void main( ){a=0,b=0,c=0,D=100;P1_5=0;ADC_Drv_InitCh(7);ADC_Drv_StartCh(7);PWM_Drv_Init( );while(1){key( );n=c+0.1*b+0.01*a;ADC_Drv_Service();ADC_Drv_Demo();PWM0_Drv_SetDuty(D);if(m<n){if((m+0.05)>n);else{if(D<=0)D=0;elseD--;}}if(m>n){if((m-0.05)<n);else{if(D>=255)D=255;elseD++;}}if(P1_5)display(m);elsedisplay(n);}}void delay(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void key( ) //键盘扫描函数 {if(P2_6== 0){delay(10);//延时去抖动if(P2_6== 0){while(P2_6== 0);if(a<9){a++; }else a=0;}}if(P2_5 == 0){delay(10);//延时去抖动if(P2_5 == 0){while(P2_5== 0);if(b<9){b++; }else(b=0);}}if(P2_4 == 0){delay(10);//延时去抖动 if(P2_4 == 0){while(P2_4== 0);if(c<5){c++;}else c=0;}}if(P2_7==0){delay(10);if(P2_7==0){while(P2_7==0);P1_5=!P1_5;}}}void display(float x){uint M,N,I;I=100*x/100;N=(100*x-100*I)/10;M=100*x-100*I-10*N;P2_0=0;P0=table[0];delay(10);P2_0=1;P2_1=0;P0=gao_table[I];delay(10);P2_1 =1;P2_2=0;P0=table[N];delay(10);P2_2= 1;P2_3=0;P0=table[M];delay(10);P2_3=1;}void ADC_Drv_InitCh(unsigned char ChNo){P1ASF = P1ASF | (0x01 << ChNo); //初始化相应通道工作在AD模式下}void ADC_Drv_StartCh(uchar ChNo) //转换启动{uint Delay = 0x00;P1ASF = P1ASF | (0x01 << ChNo); //初始化相应通道工作在AD模式下ADC_RES = 0; //Clear previous resultADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ChNo; //for(Delay = 0x00;Delay < 500;Delay++); //ADC power-on and delayIE = 0xA0 | IE; //可位寻址中断允许寄存器用于AD中断EA = 1; //单片机CPU总中断}void ADC_Drv_Service(void){ADC_Result[ADC_channel] = ADC_RES;ADC_Result[ADC_channel] = (ADC_Result[ADC_channel] << 2) | ADC_RESL;ADC_Finish_Flag = TRUE;}void ADC_Drv_Demo(void){if(ADC_Finish_Flag == TRUE){ADC_Finish_Flag = FALSE;ADC_Drv_StartCh(ADC_channel);m=ADC_Result[ADC_channel]*5.0/1024;}}void PWM_Drv_Init(void){CCON = 0; //初始化PCA控制寄存器CL = 0; //初始化PCA计数器CH = 0;CMOD = 0x08;CR = 1;}void PWM0_Drv_SetDuty(unsigned char DutyValue) {CCAP0H = CCAP0L = DutyValue; //设置看空比CCAPM0 = 0x42;CR = 1;}。

相关文档
最新文档