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

上传人:李司机 文档编号:1091117 上传时间:2022-06-23 格式:DOC 页数:11 大小:86.50KB
返回 下载 相关 举报
基于单片机的稳压电源设计原理说明.doc_第1页
第1页 / 共11页
基于单片机的稳压电源设计原理说明.doc_第2页
第2页 / 共11页
基于单片机的稳压电源设计原理说明.doc_第3页
第3页 / 共11页
基于单片机的稳压电源设计原理说明.doc_第4页
第4页 / 共11页
基于单片机的稳压电源设计原理说明.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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

1、4 稳压电源设计4.1 电路分析稳压电路见图4-1所示。三极管射极电压是稳压电源的输出电压,可以接用电器或负载,这个电压值通过TLC549A/D,同TLC548数据转换后,送往单片机处理并显示。调整按键可以改变输入TLC5615的数据。TLC5615的输出电压通过运算放大器与实际输出取样电压比较,控制三极管的电压输出。稳压电路的电压输出接受单片机检测,同时又受单片机的控制。电路在仿真时,各点的电压都连接有电压表显示。图 1 稳压电路4.2 电路模块一、A/D转换部分TLC549 对输出电压进行采集,其操作如下: 1cs先为高电平。cs为片选信号,为1时,输入脉 i/o clock不起作用;2c

2、lock=03cs=0; cs置底电平。 同时date_out为高。=1; 4延时1.4us。setup time,cs low before first clock;5开始转化数据。因为TLC549是8位串行模数转换器。需将8位数据依次串行输出。期间,clock高低电平转化一次;68次数据转化之后。cs置1,片选无效。等待17us后读出数据。二、D/A转换部分TLC5615为10位D/A转换电路,其原理TLC5615的PDF文件。输出电压 = 转换数值/1024*2*基准电压三、显示采用数码管对A/D转换后的数据进行显示,因为TLC549 是8位A/D,程序中需要对转化的数据进行处理后才能在

3、七段数码管上动态显示。TLC549的检测电压值围为05V,A/D转换后数据位0255,应该显示05,并且包含小数点部分。四、按键操作部分四个独立的按键主要是对DA 的输入数据进行操作的,ADD按键,SUB 按键 这些按键在安下一次松开后便进行加1 的操作,若按键超过一定的时间则增加步长,使其数值能够快速增加,这样就不必要达到一个电压时,一直按几百次。SUB按键也是如此。至于那个预读取按键,主要是用于保存你要常用的电压值,这样一来你就可以在使用此电源时,不必要每次都要按键调整,可以通过读取AT24C04的值进行电压预置,保存按键,是用于保存你长使用的电压值,通过此次的电压值保存,使你可以快速达到

4、你所要求的电压值。4.3 编程思路程序分为键盘处理、D/A、A/D和存储四个模块。运用扫描法,对键盘进行扫描,有按键就更改输入TLC5615 的数值,ADD按键是对数据进行加以操做,长按的话使步进值增大,实现快加,按键与按键同,预读取按键用于读取中预置的数值,保存按键用于保存当前电压值;显示部分主要是对采集回来的电压进行处理显示,它主要是在定时器的中断服务程序中显示,刷新显示一次;模块,通过对的串行数据输入,使其在输出电压时可控,输出电压后经,三极管,加上负载输出电压,输出电压后,用芯片采集一次,送数码管显示。4.5 程序清单主函数:#include #include intrins.h#in

5、clude AT24C04.h#define uchar unsigned char#define uint unsigned intuchar code LED10 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar code Bit_sel4 = 0x08,0x04,0x02,0x01 ; /各个数码管对应的位选数据sbit DIO = P10; /数据线sbit CS = P11; /片选sbit CLK = P12;/io口时钟sbit SCS = P14;sbit SDATA = P15;sbit SCLK = P13;

6、sbit ADD = P30;sbit SUB = P31;sbit Pre_read = P32;sbit Store = P33;uint qian,bai,shi,ge; /用于显示数码管的 千,百,十,个 等四位的显示uint val,num; /val 是用于输入DA 的数据,num是用于判断是不是长按的uint cp; /计数的变量uchar key_stat;uchar add_stat,sub_stat;uchar st_flag,pre_flag;void delay /微妙级是延时函数while_nop_;/*函数名称:deal函数作用:处理AD的返回值函数参数:无函数返回

7、值:无*/ void deal /显示程序qian=num/1000; /千,百,十,个处理bai=num/100%10;shi=num/10%10;ge=num%10; /*函数名称:TL549_AD函数作用:返回AD的返回值函数参数:无函数返回值:data_ad*/uint TL549_AD /TLC549处理uchar i;uint data_ad = 0;CS = 1;/初始化,启动CLK = 0;CS = 0;_nop_; fori = 0;i /读取采集数据,读取的是上一次采集数据CLK = 1; ifdata_ad |= 0x01;CLK = 0; data_ad = data_

8、ad 1; CS = 1;data_ad = data_ad * ; return; /*函数名称:TLC5615_DA函数作用:TLC5615_DA 将da转换后模拟输出函数参数:da函数返回值:无*/void TLC5615_DA /TLC5615 的DA 转换函数uchar i;da=6;SCS=0;SCLK=0;for i=0;iSDATA=;SCLK=1;da=1;SCLK=0;SCS=1;SCLK=0;for i=0;i;/*函数名称:key_scan函数作用:处理那些独立键盘函数参数:无函数返回值:无*/void key_scanif / ADD 按键的键盘处理函数delay;i

9、f add_stat = 1;num +;elseadd_stat = 0;num = 0;/此处判断是不是长按,长按的话 使其步进值 加大if = 300 val += 5;num = 0;if val +;num = 0;add_stat = 0;if = 1024val = 1023;if /SUB 按键的键盘处理函数delay;if sub_stat = 1;num +;if = 300val -= 5;num = 0;if val -;num = 0;sub_stat = 0;if val val = 0;if /预读数据的 键盘处理函数delay;if pre_flag = 1;i

10、f pre_flag = 0;val = read_24C04;/从AT24C04中的地址20 中读出预存储的数据if /保存数值 按键的键盘处理函数delay;if st_flag = 1;if st_flag= 0;write_24C04; /向AT24C04中的地址20 写入存储的数据/*函数名称:timer0_init 函数作用:初始化定时器0,并设置函数参数:无函数返回值:无*/void timer0_init / timer0中断初始化函数EA = 0; TMOD = 0x01; TR0 = 0; TL0 = %256; /设置计数器初值TH0 = /256; PT0 = 1; E

11、T0 = 1; EA = 1; TR0 = 1; /*函数名称:main函数作用:main主函数入口函数参数:无函数返回值:无*/void main /主程序 timer0_init;/初始化定时器0init_24C04;/初始化AT24C04while key_scan;/调用键盘扫描函数TLC5615_DA;/处理键盘发送过来的值 /*函数名称:timer0_isr interrupt 1函数作用:定时器0,方式1,的中断服务子程序函数参数:无函数返回值:无*/void timer0_isr interrupt 1 / timer0中断服务函数 /数码管的位选变量TR0 = 0; /停止计

12、数TL0 = %256;/重新载入计数器初值TH0 = /256; cp+; /位循环变量加1if= 4cp = 0; dealTL549_AD; /循环显示1次,j清零 TR0 = 1;P0=0xff; /与j对应,P2输出数码管的位选信号switchcase 0: P0 = LEDge; break; case 1: P0 = LEDshi; break; case 2: P0 = LEDbai&0x7f; break;case 3: P0 = LEDqian; break; P2 = Bit_selcp; AT24C04 的驱动:#ifndef AT24C04_10_04_07sbit

13、ATCLK=P16;sbit SDA=P17;sbit a7=ACC7;sbit a6=ACC6;sbit a5=ACC5;sbit a4=ACC4;sbit a3=ACC3;sbit a2=ACC2;sbit a1=ACC1;sbit a0=ACC0;/*24C04的初始化* */void init_24C04SDA=1;_nop_;ATCLK=1;_nop_;/*启动24C04*/void start_24C04SDA=1;_nop_;ATCLK=1;_nop_;SDA=0;_nop_;ATCLK=0;_nop_;/*停止24C04*/void stop_24C04SDA=0;_nop_;

14、ATCLK=1;_nop_;SDA=1;_nop_;/*24C04应答*/void responseunsigned char i;ATCLK=1;_nop_;while&ii+;ATCLK=0;_nop_;/*读取24C04一个字节*/unsigned char read_byteSDA=1;ATCLK=1;a7=SDA;ATCLK=0;ATCLK=1;a6=SDA;ATCLK=0;ATCLK=1;a5=SDA;ATCLK=0;ATCLK=1;a4=SDA;ATCLK=0;ATCLK=1;a3=SDA;ATCLK=0;ATCLK=1;a2=SDA;ATCLK=0;ATCLK=1;a1=SDA

15、;ATCLK=0;ATCLK=1;a0=SDA;ATCLK=0;SDA=1;ATCLK=0;return ACC;/*写入24C04一个字节*/void write_byteACC=addr;SDA=a7;ATCLK=1;ATCLK=0;SDA=a6;ATCLK=1;ATCLK=0;SDA=a5;ATCLK=1;ATCLK=0;SDA=a4;ATCLK=1;ATCLK=0;SDA=a3;ATCLK=1;ATCLK=0;SDA=a2;ATCLK=1;ATCLK=0;SDA=a1;ATCLK=1;ATCLK=0;SDA=a0;ATCLK=1;ATCLK=0;SDA=1;ATCLK=0;/*写24C04的数据*/void write_24C04start_24C04;write_byte;response;write_byte;response;write_byte;response;stop_24C04;/*读24C04的数据*/unsigned char read_24C04unsigned char t;start_24C04;write_byte;response;write_byte;response;start_24C04;write_byte;response;t=read_byte;stop_24C04;return t;#endif11 / 11

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号