数控稳压电源设计实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档