可调直流稳压电源的分析与设计

可调直流稳压电源的分析与设计[20200131184815]
【摘要】
本文以51单片机为核心部件,设计了一种直流稳压电源。本文所设计的电源可预置电压、可对输出电压步进调整、同时可以直接显示输出的电压信号和电流信号。系统主要由51系列的单片机作为主要控制器电路,配合以稳压控制电路、信号数据显示电路、电压/电流采样电路、键盘输入电路、直流稳压电源五个部分构成。本文设计的系统的工作原理,是以51系列的单片机为主控制核心单元,以数模转换芯片DAC0832来输出参考电压,控制电压转换模块LM317输出电压大小,同时用模数转换芯片ADC832对采样的电压、电流转换为数字信号,随后输出,整个过程由单片机实现闭环控制。本文最后对所设计的电路进行了仿真,证明设计是合理的。
 *查看完整论文请+Q: 351916072 
关键字:】单片机(MCU),模数转换器(DAC),数模转换器(ADC),闭环控制
目录
一、前言    1
(一)、研究背景及意义    1
(二)、课题的主要内容    1
二、电源系统的硬件设计    2
(一)、系统总体框图    2
(二)、系统各部分的电路设计    3
1、单片机控制电路    3
2、稳压控制电路    3
3、电压与电流采样电路    5
4、键盘电路    6
5、显示电路    7
6、电源电路    8
三、系统的软件设计    10
(一)、软件设计思路    10
(二)、系统软件流程    10
1、主程序模块    10
2、闭环比较程序模块    12
3、AD转换程序模块    13
4、DA转换程序模块    13
(三)、系统仿真    14
1、DA输出仿真    14
2、AD输出仿真    15
3、单片机控制电路及外围电路仿真    16
结论    16
参考文献    18
致谢    19
附录    20
附录1:系统整体原理图    20
附录2:系统源程序    21
三、系统的软件设计
(一)、软件控制过程
当系统上电后,立刻开始进行进行初始化,分别是对端口的初始化,对定时器初始化,对D/A、A/D的初始化。随后系统默认电压,默认电流。这一整个过程是这样的:首先是按键扫描,其次是D/A转换,随之是将转换的电压/电流数值显示出来,通过读取A/D转换并比较后来纠正电压/电流数值显示,然后又是重复进行按键扫描等过程。
(二)、系统软件流程
1、主程序
系统主程序负责与各子程序模块的接口和检査键盘功能号。当程序运行后,即开始检测有没有按键按下,如果偶那么就进入设定按键功能,液晶显示屏直接显示CPU设定的数值,使CPU资源得到充分利用,同时系统不断采集外部数据,经过相关运算、分析,然后发出命令对实际值进行相应的修正,控制输出电压可调、稳定。流程图如图3-1所示。
图 3-1  主程序流程图
2、闭环比较程序模块
流程图如图3-2所示,通过调用闭环比较子程序得出实际值与设定值的差值,如果是实际值大于设定值则将原来的显示设定值减去这个差值再送去转换,如果是实际值小于设定值则将原来的显示设定值加上这个差值再送去转换。
图 3-2  闭环比较流程图
3、AD转换程序模块
流程图如图3-3所示,当AD测量到电压为5V时,ADC转换的结果为255,由于我们希望七段数码管上显示5000,所以要把255*19.6,才会得到5000,在此将乘以196,而非19.6,如此将可得到10倍大的值,即50000,将此值除以10000,所得的商数输出到七段数码管的千位数,将results除以1000,其商数再除以10,所得的余数输出到七段数码管的百位,再将results除以100,其商数再除以10,所得的余数输出到七段数码管的十位数,将results除以10,所得的余数再输出到个位。但是由于我们显示的步进电压为0.1V。所以我们只要用4位数码管的2位就行,所以我们将所得的数只保留下千位与百位,其余舍去。
 
3-3  AD转换流程图
4、DA转换程序模块
流程图如图3-4所示,键盘对单片机输入数据,(所要得到的电压值),单片机将得到的数据进行转化成D/A转换器DAC0832所需要的数字信号。假设键盘输入的电流值为A,由于DAC0832为8位的D/A转换器,待转换的数字信号最大值为2^ 8-1=255,考虑到数值连续性问题细调D/A采用250档,而我们选用的基准电压源为2.5V,所以每档的电压值为0.01V,DA最大输出为99/250,输出最大电压为0.99V,经过放大之后变为9.
3-4  DA转换流程图
(三)、系统仿真
1、DA输出仿真
DA输出从0-9.9V,步进0.1V。由于protues里面没有STC的单片机,而12C5408AD是MCS-51系列单片机,兼容8051指令,所以我就用一块8051单片机代替。其仿真的效果如图3-5所示。
附录2:源程序
#include <reg52.H>
#include <STDIO.H>
#include <INTRINS.H>
#include <MATH.H>
#define     Nop() _nop_()
#define    OAT PO
uchar go;
Sbit Kl=P3^l;   //第一个键
Sbit K2=P3^2;  //第二个键
Sbit K3=P3^3;  //第二个键
Sbit WR2 = P3^0; //DAC的控制端
//位定义
#define Lcd_Dala PO;   //定义数据端口
Sbit RS = P2^0;  //定义连接端口
Sbit RW = P2 ^1;
Sbit E = P2 ^2;
Sbit Busy = P0^7;
Sbit hold=0;
Sbit _lnt=0;
Sbit k =0;
Sbit m=0;
Bit fushu=0;
Bit q=0;
//全局变量定义
unit  DAdat;  //存放发送到DA的数据
unit  x;
// uchar     ADdat; //存放从DAC读出的数据
uchar vol; //存放输入电压值
uchar keynum;
uchar kyreg;
uchar temp  //存放功能状态
uchar hh;//数组定义
static code uchar Disp[ ]"0123456789-";
static code uchar Disp2[ ]="Error! ";

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jxgc/zdh/4605.html

好棒文