基于51单片机的数控电源设计
基于51单片机的智能充电器的设计.doc

基于51单片机的智能充电器的设计1. 引言智能充电器的设计是将充电器与微控制器相结合,实现充电过程的自动化和优化。
本文将介绍一种基于51单片机的智能充电器的设计方案。
该充电器能够根据电池的状态智能调整充电电流和充电时间,提高充电效率和电池寿命。
2. 设计方案智能充电器的设计方案如下:2.1 硬件设计充电器的硬件主要包括电源模块、控制模块、显示模块和充电模块。
2.1.1 电源模块电源模块提供稳定的直流电源供给整个系统,可以使用变压器和整流电路来获得所需要的直流电压。
2.1.2 控制模块控制模块使用51单片机作为主控芯片,通过各种传感器检测充电电流、充电电压和电池状态。
根据检测结果,控制模块可以自动调整充电电流和充电时间,以最佳的方式完成充电过程。
2.1.3 显示模块显示模块用于显示充电器的状态信息,可以使用液晶显示屏或LED灯来实现。
2.1.4 充电模块充电模块是将电能传输到电池上进行充电的部分,可以采用一定的充电控制电路来控制充电过程。
2.2 软件设计智能充电器的软件设计主要包括充电算法和控制逻辑。
2.2.1 充电算法充电算法根据电池的充电状态和特性,计算出最佳的充电电流和充电时间。
常见的充电算法包括恒压充电、恒流充电和多段充电等。
2.2.2 控制逻辑控制逻辑负责监测电池的电压、充电电流和充电时间,并根据充电算法决定是否需要调整充电参数。
控制逻辑还可以实现保护功能,比如过流保护、过温保护和反接保护等。
3. 实现过程智能充电器的实现过程可以分为硬件设计和软件开发两个步骤。
3.1 硬件设计在硬件设计阶段,需要根据设计方案选择合适的电源模块、传感器、显示模块和充电模块。
然后进行硬件电路的布局和连接,确保电路正常工作。
3.2 软件开发在软件开发阶段,首先需要编写51单片机的控制程序。
根据充电算法和控制逻辑编写相关的代码,并与硬件进行连接和测试。
然后进行功能测试和性能优化,确保系统的稳定性和可靠性。
4. 总结本文介绍了一种基于51单片机的智能充电器的设计方案。
基于89C51单片机的数控直流电源外围电路设计

输 出 电流调节 范 围等 ; 另一 种是 质量 指标 , 用 来衡 量 输 出直 流 电压 的稳 定 程 度 , 包括稳压 系数 ( 或 电压
收 稿 日期 : 2 0 1 2 — 1 1 - 2 8 修 回 日期 : 2 0 1 3 01 - 4 ) 5
6 8
波 电压等 。测 试 电路如 图 1所示 。
调 压器 电流表
信息工程 、 通信工程、 机 电一体 化、 电气 自动化等 电 类 专业 学 生必然 涉 及到 的一 个 电工 电子课 程设 计项 目。全 国大学 生 电子设 计竞 赛 曾于 第一 届 A题 、 第
二届 A题 和 第七 届 F题 ( 电流源 ) , 全 国首 届 高 职 院
设计 , 发现 许 多很难 读懂 的问题 。例 如 , 给 出参 数设 计 输 出达 2 O V 电压 , 但 运放 直接 驱动 达林 顿管 明显
无 法 输 出达 2 2 V 以上 。又 如 , 通 篇 无 关 紧 要 的 内
容, 唯 独缺 少 比较放 大环 节 设 计 及 关 键 电路 的完 整 连接 , 也 就 是说 D A C输 出到 调 整 管 之 间 内容 匮乏 ,
数
字
通
信
第4 0卷
1 . 2 质 量 指标
极管 Q 4的发 射结 , 只 能 实现 电压 到 电流 的 转换 功 能 。这 类 电路 虽 然 也能 实 现 电压 或 电流 调节 , 但 当
纹 波 电压 : 是 指ቤተ መጻሕፍቲ ባይዱ叠加在 输 出 电压 . . 上 的交 流分
量 。在额 定输 出 电压 和 负 载 电流 下 , 用 示 波 器 观测
1 ) 输 出 电流 , , ( 即额 定负 载 电流 ) , 它 的最 大值
基于AT89S51单片机的数控电源设计

( . 阳师范学院物理与电子工程学院 , 1绵 四川绵阳 610 2 汕头大学工学院机械电子工程系研究生院, 2O 0;. 广东汕头 550 ) 100
摘
要 :该项设 计的主要 目的是设计一种数 控 电源。它利 用单片机 A 8 S 1作 为主控 芯 片, 制数 字/ T9 5 控 模拟
1 设 计 说 明
直流 稳 压 电源是 常用 的电子设 备 , 能保证 在 电 网 电压 波 动 或负 载 发 生变 化 时 , 出稳 定 的 电压 。 随 它 输 着 数 控稳 压 电源 在 电子装 置 中 的普 遍 使 用 , 通 稳 压 电源 在 工 作 时产 生 的误 差 , 影 响 整 个 系 统 的精 确 普 会
电路来 实现 输 出电压 的控制 。 按 照工 作原 理 , 字集 成 电路可 以划分 为标准 逻辑 器件 、 处理 器 和可 编程 逻辑 器 件 。标 准 逻辑 器 件 数 微 是传 统 数字 系统设 计 中使用 的主要器 件 , 但是 它 的集 成 度较 低 , 件 功 能确 定 , 用 它 设计 系统 导致 电路 器 使 使 用数量 多 , 同时更改设 计 困难 。微处 理器 和可编程 逻辑 器 件都 可 以克服 上 述缺 点 , 可 编程 逻 辑器 件 工 但
21 02年 5月
绵阳师范学院学报
J u a fMin a gNoma nv r o r lo a y n r lU ies n
M a ., 01 y 2 2 V0 . No 5 1 31 .
第3 1卷
第 5期
基 于 A 8 片 机 的 数 控 电 源 设 计 T 95 S 1单
转换 器的输 出电流的大 小, 通过 第一级运算放 大器把输 出的 电流信 号转换成 电压信 号 , 再经过 第二 级运 算放 大器 放 大至相应 的倍 数 , 最后 经过 L 1 M3 7恒流输 出电压 。此设 计通过键 盘电路 与单片机 P 3口的 高三位连接 , 读入控制
基于51单片机的12V数控电源设计

基于51单片机的12V数控电源设计2008年08月14日星期四下午 01:54忙了三天终于把数控电源搞定了.这次做的数控电源设计思想没什么新意,就是一个数模转换(ADC0809)和一个模数转换(DAC0832),再加上两个单片机分别控制0809和0832,组成一个反馈网络,来得到输入的数字相对应的电压,电压范围很小,只有0~12.75V.显示部分采用四段共阴数码管,为什么不用共阳的?哎,只因为最开始买零件的时候没有注意到单片机的驱动能力问题,买了一堆很不实用的零件.所以...之所以用两片单片机,也是因为觉得之前的单片机都没什么用了,以后改学430了,这些旧的单片机就用来做成一些实用的东西吧.呵呵,省得浪费.整块板子做出来之后有10*7cm那么大,用洞洞板焊的.实测电路输出精度+/-0.05V在12V范围内.硬件设计:第一块单片机P0口接数码管代码段的驱动,P2.4~P2.7接四位的位选线,P2.0~P2.3节四个独立操作按键 [模式] [加] [减] [确定] ,P1口接ADC0809的八位数据输出.P3.0~P3.3口接0809的控制线.P3.5~P3.7和第二块单片机的P2.0,P2.1,P2.2相连,用来控制数模输出增减.三根控制线作用分别为 [输出改变允许控制Control_1] [增减信号Control_2] [增减速度控制Control_speed]第二块单片机除了前面的三根控制线,就只剩下和DAC0832的控制线了,看电路图.用0832输出控制LM317可调三端稳压器的输出电压:DAC0809所需时钟脉冲由NE555产生系统电源:5V 12V GND -12V程序清单:第一块单片机:(接0809,四段数码管,四个独立按键)#include<reg51.h>#define uchar unsigned charint i=0,a=0;//定义循环算子uchar hold=5;//当前操作数[0-led1][1-led2][2-led3][3-led4][4-快速调节][5-无] uchar Get_data=0;//模数转换得到的结果int Get_data2=0;//将Get_data*5用以方便转化 (做电压表时用)//uchar led[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//阳极驱动不带小数点uchar led[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};//阴极驱动//uchar point[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00};//阳极驱动带小数点uchar point[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xFF};uchar V_list[]={30,36,60,66,90,100,120,180,240};//电压值列表uchar V_index=6;//预置电压索引.uchar num[4]={10,5,0,0};//显示缓存uchar V_num=100;//显示的电压对应在0~255电之间的值,预置压数5Vuchar time=0;//控制模数转换频率变量uchar times=0;//控制按键允许速度变量uchar scan_grant=1;//允许输入uchar hide_flag=0;//隐藏标志[0隐藏][1显示]和hold配合用于控制某一位数码管的亮灭uchar hide_time=0;//用于控制数码管闪烁快慢//uchar zhengshu,xiaoshu_1,xiaoshu_2;void delay(int s);void key_mode();void key_add();void key_sub();void key_confirm();void display();void ADC();void convert();//将get_data填入到num[]数组中void scan_key();//键盘扫描函数void compare();//比较函数(Control_1 Control_2)[00-正确][11-加][10减]//定义位选线sbit led_1=P2^7;sbit led_2=P2^6;sbit led_3=P2^5;sbit led_4=P2^4;sbit mode=P2^0;sbit add=P2^1;sbit sub=P2^2;sbit confirm=P2^3;//0809四根控制线sbit ALE=P3^0;sbit START=P3^1;sbit OE=P3^2;sbit EOC=P3^3;//两根控制线sbit Control_1=P3^6;//变化控制线[1变化][0不变] sbit Control_2=P3^7;//增减控制线[1增][0减] sbit Control_speed=P3^5;//控制变化速度sbit close=P3^4;//当电压稳定时为0;void main(){//初始化led_1=0;led_2=0;led_3=0;led_4=0;//初始化定时器TMOD=0x01; //定时器0,方式1TH0=0x3c;TL0=0xb0;ET0=1; //允许定时器0中断TR0=1; //启动定时器0运行EA=1; //全部中断允许Control_1=0;Control_2=0;while(1){time++;if(time>=10){time=0;//扫描键盘if(hold==5){ADC();//模数转换compare();//转换结果比较,修改控制变量}else{Control_1=0;Control_2=0;}}if(scan_grant==0)scan_key();convert();scan_grant=1;EA=1;}hide_time++;if(hide_time>=80){hide_time=0;if(hide_flag==1){hide_flag=0;}else{hide_flag=1;}}display();}}//延时函数void delay(int s){for(i=0;i<s;i++){}}//按键处理------------------------------------ void key_mode(){delay(1000);if(mode==0){hold++;if(hold>=6){hold=1;}}}void key_add()//加函数{delay(1000);if(add==0){if(hold==0)//当前操作数[0-led1 即num[0]]{}if(hold==1)//当前操作数[1-led2 即num[1]]{if(V_num<=235){V_num=V_num+20;}//加1Vif(hold==2)//当前操作数[2-led3 即num[2]]{if(V_num<=253){V_num=V_num+2;}//加0.1V}if(hold==3)//当前操作数[3-led4 即num[3]]{if(V_num<=254){V_num++;}//加0.05V}if(hold==4)//当前操作数[4-快速调节即V_index] {if(V_index<=7){V_index++;}V_num=V_list[V_index];}if(hold==5)//当前操作数[5-无]{}}}void key_sub()//减函数{delay(1000);if(sub==0){if(hold==0)//当前操作数[0-led1 即num[0]]{}if(hold==1)//当前操作数[1-led2 即num[1]]{if(V_num>=20){V_num=V_num-20;}//减1V}if(hold==2)//当前操作数[2-led3 即num[2]]{if(V_num>=2){V_num=V_num-2;}//减0.1V}if(hold==3)//当前操作数[3-led4 即num[3]]{if(V_num>=1){V_num--;}//减0.05V}if(hold==4)//当前操作数[4-快速调节即V_index] {if(V_index>=1){V_index--;}V_num=V_list[V_index];}if(hold==5)//当前操作数[5-无]{}}}void key_confirm(){delay(1000);if(confirm==0){hold=5;}}//------------------------------------------------------------- void display(){/* led_1=1;if(num[0]==0)//如果第一位是0的话就不显示,led[10]是空{P0=led[10];}else{P0=led[num[0]];}delay(100);led_1=0;P0=0xFF;led_2=1;P0=point[num[1]];delay(100);led_2=0;P0=0xFF;led_3=1;P0=led[num[2]];delay(100);led_3=0;P0=0xFF;led_4=1;P0=led[num[3]];delay(100);led_4=0;P0=0xFF;*/if(hide_flag==1){if(hold==4){delay(400);return;}if(hold!=1){led_1=1;if(num[0]==0)//如果第一位是0的话就不显示,led[10]是空 {P0=led[10];}else{P0=led[num[0]];}delay(100);led_1=0;P0=0xFF;led_2=1;P0=point[num[1]];delay(100);led_2=0;P0=0xFF;}if(hold!=2){led_3=1;P0=led[num[2]];delay(100);led_3=0;P0=0xFF;}if(hold!=3){led_4=1;P0=led[num[3]];delay(100);led_4=0;P0=0xFF;}}if(hide_flag==0){led_1=1;if(num[0]==0)//如果第一位是0的话就不显示,led[10]是空 {P0=led[10];}else{P0=led[num[0]];}delay(100);led_1=0;P0=0xFF;led_2=1;P0=point[num[1]];delay(100);led_2=0;P0=0xFF;led_3=1;P0=led[num[2]];delay(100);led_3=0;P0=0xFF;led_4=1;P0=led[num[3]];delay(100);led_4=0;P0=0xFF;}}void ADC(){START=0;OE=0;START=1;delay(65);START=0;while(EOC==1){}OE=1;delay(65);Get_data=P1;OE=0;// convert();}void convert(){//基准电压要为12.8V/* Get_data2=Get_data*5;num[0]=Get_data2/1000;Get_data2=Get_data2%1000;num[1]=Get_data2/100;Get_data2=Get_data2%100;num[2]=Get_data2/10;Get_data2=Get_data2%10;num[3]=Get_data2; */Get_data2=V_num*5;//Get_data2=Get_data*5;num[0]=Get_data2/1000;Get_data2=Get_data2%1000;num[1]=Get_data2/100;Get_data2=Get_data2%100;num[2]=Get_data2/10;Get_data2=Get_data2%10;num[3]=Get_data2;}void scan_key()//键盘扫描后函数分配{if(mode==0)key_mode();if(add==0)key_add();if(sub==0)key_sub();if(confirm==0)key_confirm();}void compare()//比较函数(Control_1 Control_2)[00-正确][11-加][10减] {Control_1=0;Control_2=0;if(V_num<(Get_data-1)){Control_1=1;Control_2=0;if((Get_data-V_num)>=10){Control_speed=1;close=1;}else{Control_speed=0;close=0;}}if(V_num>(Get_data+1)){Control_1=1;Control_2=1;if((V_num-Get_data)>=10){Control_speed=1;close=1;}else{Control_speed=0;close=0;}}}//中断函数://定时器中断T0用于消除按键等待//定时器中断T1用于进入AD转换函数//--------------------------------------------------------------------//-------------------------定时器中断服务程序-------------------------//--------------------------定时器0工作方式1--------------------------//任务://1:限定进入按键扫描程序的时间间隔,避免在短时间内多次进入键盘扫描而造成误操作//--------------------------------------------------------------------void clear_key() interrupt 1 using 1{times=times+1;if(times==7)//这个数字决定了按键上限速度.{times=0;scan_grant=0;//允许输入EA=0;}TH0=0x3c; //计数器初值重载TL0=0xb0;}第二块单片机(接0832)#include<reg51.h>#define uchar unsigned charint i;sbit CS12=P3^0;//控制线sbit WR12=P3^1;//控制线sbit led=P2^2;//控制led亮灭sbit Control_1=P2^1;//变化控制线1 [1变化][0不变]sbit Control_2=P2^0;//加减控制线2 [1增][0减]sbit Control_speed=P2^3;//变化速度控制uchar out=0;//输出数据uchar a=0;void delay(int s);void main(){P1=0;WR12=0;CS12=0;Control_1=1;Control_2=1;Control_speed=1;while(1){for(a=0;a<=20;a++){delay(1000);}//根据控制信号线决定加减.if(Control_1==1){if(led==0){led=1;}else{led=0;}if(Control_2==1){if(out<=254)if(Control_speed==0){out++;}if(Control_speed==1){out=out+10;}}if(Control_2==0){if(out>=1)if(Control_speed==0){out--;}if(Control_speed==1){out=out-10;}}//写操作WR12=0;CS12=0;P1=out;delay(100);CS12=1;WR12=1;}if(Control_1==0) {led=1;}/*if(out>=255) {out=255;}if(out<=1){out=0;}*/}}void delay(int s) {for(i=0;i<s;i++) {}}。
基于单片机的数控直流稳压电源设计

基于单片机的数控直流稳压电源设计一、概述随着科技的飞速发展,电子设备在我们的日常生活和工业生产中扮演着越来越重要的角色。
这些设备的稳定运行离不开一个关键的组件——电源。
在各种电源类型中,直流稳压电源因其输出电压稳定、负载调整率好、效率高等优点,被广泛应用于各种电子设备和精密仪器中。
传统的直流稳压电源通常采用模拟电路设计,但这种方法存在着电路复杂、稳定性差、调整困难等问题。
为了解决这些问题,本文提出了一种基于单片机的数控直流稳压电源设计方案。
本设计采用单片机作为控制核心,通过编程实现对电源输出电压的精确控制和调整。
相比于传统的模拟电路设计,基于单片机的数控直流稳压电源具有以下优点:单片机具有强大的计算和处理能力,能够实现复杂的控制算法,从而提高电源的稳定性和精度单片机可以通过软件编程实现各种功能,具有很强的灵活性和可扩展性单片机的使用可以大大简化电路设计,降低成本,提高系统的可靠性。
本文将详细介绍基于单片机的数控直流稳压电源的设计原理、硬件电路和软件程序。
我们将介绍电源的设计原理和基本组成,包括单片机控制模块、电源模块、显示模块等我们将详细介绍硬件电路的设计和实现,包括电源电路、单片机接口电路、显示电路等我们将介绍软件程序的设计和实现,包括主程序、控制算法、显示程序等。
1. 数控直流稳压电源的应用背景与意义随着科技的快速发展,电力电子技术广泛应用于各个行业和领域,直流稳压电源作为其中的关键组成部分,其性能的稳定性和可靠性直接影响着整个系统的运行效果。
传统的直流稳压电源多采用模拟电路实现,其调节精度、稳定性以及智能化程度相对较低,难以满足现代电子设备对电源的高性能要求。
开发一种高性能、智能化的数控直流稳压电源具有重要意义。
数控直流稳压电源通过引入单片机控制技术,实现了对电源输出电压和电流的精确控制。
它可以根据实际需求,通过编程灵活调整输出电压和电流的大小,提高了电源的适应性和灵活性。
同时,数控直流稳压电源还具备过流、过压、过热等多重保护功能,有效提高了电源的安全性和可靠性。
基于单片机的高性能数控恒流源设计与实现

基于单片机的高性能数控恒流源设计与实现数控恒流源是一种功能比较强大的电子元器件。
它能够为其他电子元器件提供稳定的电流输出,这对很多电子设备的正常运行起到了重要的保障作用。
在工业生产领域,尤其是半导体、电路板等领域,数控恒流源的应用相当广泛。
在本文中,我将介绍一种基于单片机的高性能数控恒流源,让我们一起来看看吧。
一、设计原理该数控恒流源主要由单片机、操作界面、甄别功放和恒流稳压器四部分组成。
单片机和操作界面相连,利用程序控制电流的大小,同时可以显示电流大小和一些操作信息。
甄别功放是用来放大输出电流的,而恒流稳压器则是保证输出电流的稳定性。
二、具体实现1. 单片机电路在本设计中,我们选择了AVR单片机,主要是因为其性价比高以及易于编程的特点。
使用单片机所需的周边电路如晶振、电源电路等,这里就不再赘述。
2. 操作界面我们选择了一个12864的液晶显示器,以及四个按键,分别为上、下、左、右。
通过这些按键来选择电流大小和操作模式等。
3. 甄别功放甄别功放主要是用来放大输出电流的,我们选择了OPA548T 作为甄别功放。
其最大音量及输出功率分别为24V和200W,应该足够满足在工业生产领域的需求。
4. 恒流稳压器稳压芯片使用的是LM317,它可以输出1.2V至37V的电压,并可以有一个电流稳定的输出。
在本设计中,我们将其设置为输出1A的电流。
并用一个调节电阻来实现输出电流的调节。
三、总结本文介绍了一种基于单片机的高性能数控恒流源。
它具有功能强大、精度高、控制方便等优点。
在工业生产领域中,它有着广泛的应用。
希望本文能够对大家在这一领域里的设计和实现提供一些启示和帮助。
基于51单片机的直流数控电源设计

基于51单片机的直流数控电源设计标题:基于51单片机的直流数控电源设计正文:一、设计背景随着科技的不断发展和进步,电子技术在工业、医疗、交通、家庭等领域中的应用越来越广泛。
而在这些领域中,直流电源的需求十分重要。
传统的直流电源虽然能够满足一定程度上的需求,但相较于智能化、高效化的直流数控电源却存在种种不足。
针对这一情况,基于51单片机的直流数控电源应运而生。
本文将对其设计进行阐述。
二、数控电源的基本要求在电源设计之初,需要制定基本的电源要求。
一方面,直流数控电源应能够提供充足的电源输出(常规为50V),同时具备较强的稳定性和可靠性;另一方面,电源应兼顾功率控制和电流控制的需求,在使用真空管、半导体器件等时,对于转换效率和响应时间也有一定的要求。
三、电路设计技术指标明确后,进入电路设计阶段。
本设计基于51单片机+PWM实现,其主要流程包括:输入、心形预放大、PWM使能/停止、保护电路、过流保护等。
1. 输入:本设计采用串口输入,是最常用的方式。
2. 心形预放大:通常,用三极管实现预放大。
3. PWM使能/停止:使用PWM实现电流和电压的调节,从而实现精准控制。
4. 保护电路:在设计之初,应加入防爆、过压、恒流等保护。
5. 过流保护:过流保护在实际使用中十分重要,可以避免硬件损坏,保证智能化的数控电源的长期使用效果。
四、实现流程当数控电源运行后,按下电源开关,开启电源,中间的方型LED灯亮,表明电源运行正常。
通过上位机串口调节不同的参数,包括电荷电压、电流限制、电流保护等。
电压的调节基于DAC输出,电流的调节由微控制器PWM实现。
当实现各项参数的设定后,按下返回键,数据将被保存至EEPROM浮点存储器中,在下次开机后可实现自动恢复设置。
五、结尾数控电源的设计是目前智能化电源控制的重点研究方向,本设计采用基于51单片机、PWM和保护电路相结合的方案,实现业内对于电源的要求。
在未来的发展中,数控电源的应用将逐渐普及,有望在智能工厂、汽车电子等领域发挥出更大的作用。
基于单片机的数控直流稳压电源

基于单片机的数控直流稳压电源在电子设备中,直流稳压电源是非常重要的一部分,它能够为其他电路、芯片或者整个系统提供稳定可靠的电源供应。
而基于单片机的数控直流稳压电源技术则能够在一定程度上提升电源的稳定性和可调性,本文将介绍基于单片机的数控直流稳压电源的原理和设计。
1. 引言直流稳压电源在各种电子设备中都起着至关重要的作用。
传统的直流稳压电源主要采用稳压二极管、稳压管等元件,无法实现精准的控制和调节。
而基于单片机的数控直流稳压电源通过单片机的控制和监测,能够实现电源输出的精确控制和稳定性。
2. 设计原理基于单片机的数控直流稳压电源采用了反馈控制的原理,通过单片机对电源输出进行监测和调节。
其基本原理如下:首先,将输入交流电源经过整流和滤波,得到稳定的直流电压。
然后,通过单片机的模数转换功能,将电源输出电压转换为数字信号。
单片机通过比较这个数字信号与设定值,计算出控制电源输出的PWM 信号。
接下来,PWM信号经过数模转换后,通过放大电路驱动功率开关管。
功率开关管的导通与截止控制决定了电源的输出电压。
单片机通过不断调整PWM信号的占空比,实现对电源输出电压的精确调节。
同时,通过单片机监测电源输出电压的实际值,并与设定值进行比较,若存在偏差,则单片机通过反馈控制的方式调整PWM信号,使电源输出电压保持在设定值附近,从而实现直流稳压电源的功能。
3. 设计步骤基于单片机的数控直流稳压电源的设计步骤如下:3.1 硬件设计根据需要设计输出电压范围和电流容量,选取适当的元器件。
包括整流滤波电路、模数转换电路、功率开关管和放大电路等。
3.2 软件设计编写单片机的控制程序,实现电源输出的精确控制和稳定性。
包括模数转换、PWM控制和反馈控制等功能。
3.3 系统集成将硬件电路和单片机控制程序进行集成,进行系统调试和优化。
通过实验和测试,不断优化电源的稳定性和可调性。
4. 应用示例基于单片机的数控直流稳压电源的应用非常广泛。
例如,可以应用于实验室、工业自动化、通信设备等领域。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的数控电源设计
本文介绍了以51系列单片机为控制单元,以数模转换器DAC0832输出参考电压,以该参考电压控制电压转换模块LM350的输出电压大小。
该电路设计简单,应用广泛,精度较高等特点。
关键词:单片机(MCU),数模转换器(DA),掉电存储器(EEPROM)。
引言
目前所使用的直流可调电源中,几乎都为旋纽开关调节电压,调节精度不高,而且经常跳变,使用麻烦。
利用数控电源,可以达到每步0.1V的精度,输出电压范围0~15V,电流可以达到2A。
系统结构
图1:硬件系统结构图
对选用芯片说明
DAC0832是一款常用的数摸转换器,它有两种连接模式,一种是电压输出模式,另外一种是电流输出模式,为了设计的方便,选用电压输出模式,如电路图所示,Iout1和Iout2之间接一参考电压,VREF输出可控制电压信号。
它有三种工作方式:不带缓冲工作方式,单缓冲工作方式,双缓冲工作方式。
该电路采用单缓冲模式,由电路图可知,由于/WR2=/XFER=0,DAC寄存处于直通状态。
又由于ILE=1,故只要在选中该片(/CS=0)的地址时,写入(/WR=0)数字量,则该数字信号立即传送到输入寄存器,并直通至DAC 寄存器,经过短暂的建立时间,即可以获得相应的模拟电压,一旦写入操作结束,/WR1和/CS立即变为高电平,则写入的数据被输入寄存器锁存,直到再次写入刷新。
AT24C02是一款常用的可掉电保存数据的ROM,2K比特容量,采用I2C总线操作,关于它的具体操作方法参考相关资料。
图2:主硬件电路图
图3:参考电压电路图
硬件电路设计
采用常用的51芯片作为控制器,P0口和DAC0832的数据口直接相连,DA的/CS和/WR1连接后接P2.0,/WR2和/XEFR接地,让DA工作在单缓冲方式下。
DA的11脚接参考电压,参考电压电路如图2所示,通过调节可调电阻调节LM336的输出电压为5.12V,所以在DAC的8脚输出电压的分辨率为5.12V/256=0.02V,也就是说DA输入数据端每增加1,电压增加0.02V。
DA的电压输出端接放大器OP07的输入端,放大器的放大倍数为 R8/(R8+R9)=1K/(1K+4K)=5,输出到电压模块LM350的电压分辨率=0.02V×5=0.1V。
所以,当MCU输出数据增加1的时候,最终输出电压增加0.1V,当调节电压的时候,可以以每次0.1V的梯度增加或者降低电压。
本电路设计三个按键,KEY1为翻页按键,最近设置的电压大小保存在EEROM里面,比如10个电压,按一下KEY1,电压变为下一个,省去了反复设置电压的麻烦,KEY2为电压+,KEY3为电压+,按一下KEY2,当前电压增加0.1V,按一下KEY3,当前电压减小0.1V。
限于篇幅原因,未画出数码管显示电路,该系统使用3个数码管,可以显示三位数,一个小数位,比如可以显示12.5V,采用动态扫描驱动方式。
本主电路的原理是通过MCU控制DA的输出电压大小,通过放大器放大,给电压模块作为最终输出的参考电压,真正的电压,电流还是由电压模块LM350输出。
为了达到2A的输出电流,LM350必须选用金属外壳封装,并且带稍大面积的散热片。
软件流程
软件系统
软件的设计主要完成三方面的功能:
1.设置电压并且保存,主要是对EEROM的操作。
2.把设置的电压送到DA,主要是对DA的操作。
3.中断显示,把设置的电压显示到LED数码管上。
该数控电压源实现保存最近10电压功能,当打开电源的时候,它显示和输出的必须是上次使用电压大小,所以在EEROM中使用11个地址保存数据,第一个地址保存当前电压编号,大小为1~10。
第2个地址~第11个地址连续保存10个电压大小数据。
电压编号的大小分别对应到相应地址电压大小。
对软件流程做一下说明:当电源打开的时候,MCU进行复位,寄存器清零。
接着电源应该显示和输出上次关机前的电压大小,这时候MCU先读取EEPROM中保存的电压编号,根据电压编号读出对应电压,把该数据送到DA,在转换成BCD码送到显示部分。
这时候程序循环检测是否有按键信号,如果KEY1按下,电压编号指向下一个,保存该电压编号,读对应电压,把他送到DA并且显示。
如果KEY2按下,当前电压数据加1,相对应输出电压(POWER—OUT引脚)增加0.1V,保存设置电压数据。
如果KEY3按下,电压数据减1,输出电压
减少0.1V,保存设置电压数据。
结语
该数控电压源经过时间实际使用说明,具有精度高,使用方便,硬件电路简单等特点。
如果要作成产品,还需要增加电流测量和显示部分,对这部分电路请参考相关资料。
本文主要对如何控制功率输出电压大小做出个例子,该电路对测量领域,以及马达调速方面都可以扩展使用。
参考文献:
1.陆坤.奚大顺等《电子设计技术》电子科技大学出版社. 1997.5
2.马忠梅.籍顺心等《单片机的C语言应用程序设计》北京航空航天大学出版社2001.5。