基于单片机的稳压电源设计原理说明.docx

上传人:b****0 文档编号:300627 上传时间:2022-10-08 格式:DOCX 页数:13 大小:380.86KB
下载 相关 举报
基于单片机的稳压电源设计原理说明.docx_第1页
第1页 / 共13页
基于单片机的稳压电源设计原理说明.docx_第2页
第2页 / 共13页
基于单片机的稳压电源设计原理说明.docx_第3页
第3页 / 共13页
基于单片机的稳压电源设计原理说明.docx_第4页
第4页 / 共13页
基于单片机的稳压电源设计原理说明.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于单片机的稳压电源设计原理说明.docx

《基于单片机的稳压电源设计原理说明.docx》由会员分享,可在线阅读,更多相关《基于单片机的稳压电源设计原理说明.docx(13页珍藏版)》请在冰豆网上搜索。

基于单片机的稳压电源设计原理说明.docx

基于单片机的稳压电源设计原理说明

4稳压电源设计

4.1电路分析

稳压电路见图4-1所示。

三极管射极电压是稳压电源的输出电压,可以接用电器或负载,这个电压值通过TLC549(A/D,同TLC548)数据转换后,送往单片机处理并显示。

调整按键可以改变输入TLC5615(D/A,同TLC5616)的数据。

TLC5615的输出电压通过运算放大器与实际输出取样电压比较,控制三极管的电压输出。

稳压电路的电压输出接受单片机检测,同时又受单片机的控制。

电路在仿真时,各点的电压都连接有电压表显示。

4.2电路模块

一、A/D转换部分

TLC549对输出电压进行采集,其操作如下:

(1)cs先为高电平。

(cs为片选信号,为1时,输入脉i/oclock不起作用);

(2)clock=0

(3)cs=0;cs置底电平。

同时date_out为高。

(=1);

(4)延时1.4us。

(setuptime,cslowbeforefirstclock);

(5)开始转化数据。

因为TLC549是8位串行模数转换器。

需将8位数据依次串行输出。

期间,clock高低电平转化一次;

(6)8次数据转化之后。

cs置1,片选无效。

等待17us后读出数据。

二、D/A转换部分

TLC5615为10位D/A转换电路,其原理TLC5615的PDF文件。

输出电压=(转换数值/1024)*2*基准电压

三、显示

采用数码管对A/D转换后的数据进行显示,因为TLC549是8位A/D,程序中需要对转化的数据进行处理后才能在七段数码管上动态显示。

TLC549的检测电压值范围为0~5V,A/D转换后数据位0~255,应该显示0~5,并且包含小数点部分。

四、按键操作部分

四个独立的按键主要是对DA的输入数据进行操作的,ADD按键,SUB按键这些按键在安下一次松开后便进行加1的操作,若按键超过一定的时间则增加步长,使其数值能够快速增加,这样就不必要达到一个电压时,一直按几百次。

SUB按键也是如此。

至于那个预读取按键,主要是用于保存你要常用的电压值,这样一来你就可以在使用此电源时,不必要每次都要按键调整,可以通过读取AT24C04的值进行电压预置,保存按键,是用于保存你长使用的电压值,通过此次的电压值保存,使你可以快速达到你所要求的电压值。

4.3编程思路

程序分为键盘处理、D/A、A/D和存储四个模块。

运用扫描法,对键盘进行扫描,有按键就更改输入TLC5615的数值,ADD按键是对数据进行加以操做,长按的话使步进值增大,实现快加,SUB按键与ADD按键同,预读取按键用于读取AT24C04中预置的数值,保存按键用于保存当前电压值;显示部分主要是对TLC549采集回来的电压进行处理显示,它主要是在定时器0的中断服务程序中显示,100ms刷新显示一次;TLC5615模块,通过对dA的串行数据输入,使其在输出电压时可控,输出电压后经lm324,三极管,加上负载输出电压,输出电压后,用TLC549芯片100ms采集一次,送数码管显示。

4.5程序清单

主函数:

#include

#include"intrins.h"

#include"AT24C04.h"

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeLED[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharcodeBit_sel[4]={0x08,0x04,0x02,0x01};//各个数码管对应的位选数据

sbitDIO=P1^0;//数据线

sbitCS=P1^1;//片选

sbitCLK=P1^2;//io口时钟

sbitSCS=P1^4;

sbitSDATA=P1^5;

sbitSCLK=P1^3;

sbitADD=P3^0;

sbitSUB=P3^1;

sbitPre_read=P3^2;

sbitStore=P3^3;

num是用于判断是不是长按

uintqian,bai,shi,ge;//用于显示数码管的千,百,十,个等四位的显示

uintval,num;//val是用于输入DA的数据,

uintcp;//计数的变量

ucharkey_stat;

ucharadd_stat,sub_stat;

ucharst_flag,pre_flag;

voiddelay(uintx)

{

while(x--)_nop_();

}

//微妙级是延时函数

/**********************************************函数名称:

deal函数作用:

处理AD的返回值函数参数:

无函数返回值:

voiddeal(uintnum)//显示程序

//TLC549处理

//初始化,启动

/**********************************************函数名称:

TL549_AD()函数作用:

返回AD的返回值函数参数:

无函数返回值:

data_ad

uintTL549_AD()

{

uchari;

uintdata_ad=0;

CS=1;

CLK=0;

CS=0;

_nop_();

for(i=0;i<8;i++)//读取采集数据,读取的是上一次采集数据{

CLK=1;

if(DIO)data_ad|=0x01;

CLK=0;

data_ad=data_ad<<1;

}

CS=1;

data_ad=data_ad*(500/256);return(data_ad);

}

/**********************************************

函数名称:

TLC5615_DA(uintda)函数作用:

TLC5615_DA将da转换后模拟输出函数参数:

da

函数返回值:

无**********************************************/voidTLC5615_DA(uintda)//TLC5615的DA转换函数{

uchari;

da<<=6;

SCS=0;

SCLK=0;

for(i=0;i<12;i++)

{

SDATA=(bit)(da&0x8000);

SCLK=1;

da<<=1;

SCLK=0;

}

SCS=1;

SCLK=0;

for(i=0;i<12;i++);

}/**********************************************

函数名称:

key_scan()函数作用:

处理那些独立键盘函数参数:

无函数返回值:

voidkey_scan()

{

if(ADD==0)//ADD按键的键盘处理函数{

delay(10);

if(ADD==0)

{

add_stat=1;

num++;

}

else

{

add_stat=0;

num=0;

}

//此处判断是不是长按,长按的话使其步进值加大

if(ADD==0&&add_stat==1&&num>=300)

{

val+=5;

num=0;

}

if(ADD==1&&add_stat==1)

{

val++;

num=0;add_stat=0;

}

if(val>=1024)

{

val=1023;

}

}

if(SUB==0)//SUB按键的键盘处理函数{

delay(10);

if(SUB==0)

{

sub_stat=1;

num++;

}

if(SUB==0&&sub_stat==1&&num>=300)

{

val-=5;

num=0;

}

if(SUB==1&&sub_stat==1)

{

val--;

num=0;

sub_stat=0;

}

if(val<=0)

val=0;

}

if(Pre_read==0)

{delay(100);if(Pre_read==0){pre_flag=1;

}

if(Pre_read==1&&pre_flag==1){

pre_flag=0;val=read_24C04(20);存储的数据

}

}

//预读数据的键盘处理函数

//从AT24C04中的地址20中读出预

if(Store==0)

{delay(100);if(Store==0){st_flag=1;

}

if(Store==1&&st_flag==1)

{

st_flag=0;

write_24C04(20,val);

数据

}

}

}

//保存数值按键的键盘处理函数

//向AT24C04中的地址20写入存储的

函数名称:

timer0_init(void)

 

函数作用:

初始化定时器0,并设置函数参数:

无函数返回值:

**********************************************/

voidtimer0_init(void)//timer0中断初始化函数{

EA=0;

TMOD=0x01;

TR0=0;

TL0=(65536-5000)%256;//设置计数器初值

TH0=(65536-5000)/256;

PT0=1;

ET0=1;

EA=1;

TR0=1;

//主程序

}/**********************************************函数名称:

main(void)函数作用:

main主函数入口函数参数:

无函数返回值:

voidmain(void)

{

timer0_init();//初始化定时器0

init_24C04();//初始化AT24C04

while

(1)

{

key_scan();//调用键盘扫描函数

TLC5615_DA(val);//处理键盘发送过来的值

}

}

/**********************************************

函数名称:

timer0_isr(void)interrupt1函数作用:

定时器0,方式1,的中断服务子程序函数参数:

无函数返回值:

**********************************************/

voidtimer0_isr(void)interrupt1//timer0中断服务函数{

//数码管的位选变量

TR0=0;

//停止计数

TL0=(65536-5000)%256;//重新载

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1