数控稳压电源设计实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的数控直流稳压电源的设计
1.ADC0804简介
ADC的主要特性如下:
1)CMOS的逐渐逼近使AD转换器。
2)具有8位解析能力,转换时间为100μs,最大误差为1个LSB值(最小电压刻度)。3)采用差动式模拟电压输入,三态式数字输入。
2. ADC0804的引脚图1如下:
图1 ADC0804引脚图 3 外部特性(引脚功能)
CS :片选端,此为低态驱动引脚,若=0,则ADC0804工作;若=1,则ADC0804不工
作,输出数据引脚DB0到DB7呈高阻状态。
WR :控制芯片启动的输入端,若=0,即可使ADC0804开始进行模拟-数字转换动作。
INTR :转换结束信号输出端,输出电平高跳到低表示本次转换已经完成,可作为中断或查
询信号。
RD :转换结果读出控制端,当它与CS 同时为低电平时,输出数据锁存器DB 0~DB 7各端上
出现8位并行二进制数码,以表示D A 结果。
CLK :时钟脉冲输入引脚,ADC0804接受100到1460KHz 的时钟脉冲。可配合CLK-R 引脚,以外加的电阻、电容由内部电路自行产生时钟脉冲,其振荡频率为CLK f ≈1.11RC 。 CLK-R :时钟脉冲输出引脚,可连接电阻以产生时钟脉冲。
2REF V :参考电压输入引脚,通常本引脚所连接的电压是输入模拟电压最大值的一半。 )(+IN V :模拟电压输入引脚。 )(-IN V :模拟电压输入引脚。
CC V :电源引脚或参考电压引脚,通常是连接+5V ,以作为电源之用。
GND :数字信号接地引脚。
AGND :模拟信号接地引脚,通常本引脚都与GND 引脚连接后接地,若处理高干扰的模拟信号,本引脚可单独接地。 DB0~DB7:数字输出数据引脚。 电路图介绍:
本实例采用Protuse 软件仿真,现总电路图如图2所示:
图2 数控稳压电源总电路图
总电路主要由单片机控制LED数码管显示输出、AD转换电路、稳压输出电路等部分组成。
单片机的P0口接4位LED数码管的8个输入口,P1口接ADC0804的8个输出口,P2口接DAC0832的8个输入口,P3.0~P3.2接LED数码管的三位位选信号,P3.4和P3.5为按钮开关,控制电压值步进的增减。
工作过程简单介绍:
本实例能够实现输出0~5v电压输出,并可控制电压值以步进位0.2V的增减。以单片机为控制核心,由单片机比较预设值与A/D转换采样反馈值的偏差,得出相应的输出值,由D/A转换电路变换为模拟量去驱动电压输出电路,从而使电压稳定在设定值。
1.稳压输出电路
单片机根据预设值和A/ D 转换的采样值计算出输出值,通过数据总线把数据传送到
DAC0832, 进行D/ A 转换,由IOUT1、IOUT2 输出相应的模拟电流信号,经运算放大器转换为0~5V 的模拟电压信号,再经由运放和三极管构成的稳压电路实现输出,由运放电路驱动电压调整管Q1,过流保护由过流电压采样电阻和限流晶体管构成,当输出电流过大,限流晶体管Q2就会导通分流,使得输出电压减少,输出功率减少。并将输出电压送到A/ D 转换电路,采样处理后,反馈到单片机。当采样值高于设定值,单片机计算出输出量减小,相应Q1 基极电位下降,输出电压下降。当输出电压过低时, 电压反馈稳定过程与此相反。由此, 实现了输出电压的稳定。
电路原理图如图3所示:
图3 输出稳压电路
2 .AD转换电路
AD转换电路由ADC0804构成,以外加的电阻、电容由内部电路自行产生时钟脉冲,
其振荡频率为CLK f ≈1.11RC ,可取R=10K ,C=150pf 。模数转换完成以后,将ADC0804输出的数字量送到单片机的P1口。
电路原理图如图4所示:
图4 AD 转换电路
3. 系统总流程图
Y N
Y N
Y
N
图5 系统软件流程图 C 语言程序:
#include
#define uchar unsigned char #define uint unsigned int uchar
code
table[11]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,
0x82 ,0XD8,0x80,0x90,0xFF}; //不带小数点的显示段码表
uchar code table0[11]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10, 0xFF};
//带小数点的的显示段码表
uchar dis[3]={0x00,0x00,0x00}; //定义一个显示缓冲数组void add(); //加函数
void reduce(); //减函数
void delay(uint t); //延时函数
void display(); //显示函数
void adc(); //AD转换函数
void change(); //比较调整输出函数
void init(); //显示值赋值函数
sbit P3_4=P3^4;
sbit P3_5=P3^5;
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit wr=P3^3;
sbit intr=P3^6;
sbit rd=P3^7;
uchar var=0;
int var2;
uchar num,out=0;
void display()
{
P3_0=1;