⑴ 基于单片机控制的可调直流稳压电源设计的原理图和程序 (1)控制器为单片机,电压输出范围为0-12V
机控制的可调直流稳压电源设计的原理图和
zheyang kend
⑵ 我用单片机设计数控直流稳压电源需要买那些器件啊
最简单的是变压器+LM317+DA+AD,就是效率低,网上有这种Proteus的仿真
复杂点的可以把LM317换成集成的DCDC芯片,比如常见的LM2596adj,输出更稳定的可以用ST的L5972或者TI的STP5430等等都可以做到,当然用分离元件也是可以的,
再难点的可以做隔离式开关电源,没有基础还是建议别做这种隔离的。
⑶ LM317 51单片机数控稳压电源,如何调大输出电压最大值
看电路上边 OP07是作电压比较器,DAC0832输出基准电压,和LM317输出电压比较,来控制LM317输出稳定到基准电压的值,所以输出电压要靠电压基准来控制,而DAC0832的电源最大为15V,想要获得更大的电压只能进行放大,同时OP07供电电压也要提高。
单片机,全称单片微型计算机(英语:Single-Chip Microcomputer),又称微控制器(Microcontroller),是把中央处理器、存储器、定时/计数器(Timer/Counter)、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。与应用在个人电脑中的通用型微处理器相比,它更强调自供应(不用外接硬件)和节约成本。它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出接口简单,功能较低。由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。
⑷ 单片机控制直流稳压电源
首先你得有DA,
单片机可以使用PWM来做个简单DA,
如果单片机没有PWM的可以用IO模拟PWM,
接着经过RC平滑后到运放做基准,
如果不用LM317的话可以直接驱动一个三极管就可以做个小电流数控电源,
如果还要大电流那就弄多个功率三极管,
驱动LM317的话就要从调节电压脚入手,
修改反馈电压即可修改输出电压,
还有不懂的可以Q上搜我名。
⑸ 基于8051单片机和DAC0832的可调直流稳压电源设计的汇编语言
51单片机数控直流电源的设计2:
#include <REG52.H>
#include <STDIO.H>
#include <INTRINS.H>
#include <MATH.H>
#define uchar unsigned char
#define uint unsigned int
#define _Nop() _nop_()
#define DAT P0
uchar go;
sbit K1=P3^1;//
第一个键
sbit K2=P3^2;//
第二个键
sbit K3=P3^3;//
第三个键
sbit WR2 = P3^0; //DAC
的控制端
//
位定义
#define Lcd_Data P0 //
定义数据端口
sbit RS = P2 ^ 0; //
定义连接端口
sbit RW = P2 ^ 1;
sbit E = P2 ^ 2;
sbit Busy = P0 ^ 7;
bit hold=0;
bit _Int=0;
bit k =0;
bit m=0; 惠州学院毕业论文bit fushu=0;
bit q=0;
//
全局变量定义
uint DAdat;//
存放送到
DA
的数据 32uint x;
//uchar ADdat;//
存放从
ADC
读出的数据
uchar vol; //
存放输入电压值
uchar keynum;
uchar kyreg;
uchar temp;//
存放功能状态
uchar hh;
///
数组定义
static code uchar Disp[]="0123456789-";
static code uchar Disp2[]="Error! ";
static code uchar Disp3[]="Vol is:";
//
函数声明
uchar keyread(void); //
读键函数
uchar keyread2(void); //
读键函数
2
uchar keyread3(void); //
读键函数
3
void reADC(void); //AD
反馈读数函数
uchar cmp(uchar ADdat,uchar DAdat); //
反馈比较函数基于51单片机数控直流电源的设计void lcdinit(); // LCD
初始化函数
void lcdcmd(uchar cmd); //LCD
写控制字函数
void lcddata(uchar dat); //LCD
写数据函数
void seDAC(uchar DAdata);// DAC
送数函数
void delay(uchar t); //
延时函数
void extint(void);
void volchange(); //
输出电压自增自减函数
/***********************DAC
送数
*********************/
main() //
主程序
{
unsigned int vol;
uchar i,j,l=0,a=0,b=0,e=0; 33 bit dian=0;
bit o=0,p=0;//
负数标志位、确认标志位
delay(255);
EA=1;
EX0=1;
PX0=1;
IT0=1;
//EX1=1;
//IT1=1;
pp:
a=b=0;dian=0;o=p=0,x=0;
P1=0;
lcdinit();
lcdcmd(0x80);
for(j=0;j<7;j++) //
开机送
0V
并显示到
LCD
{
lcddata(Disp3[j]);
}
seDAC(128);
DAdat=128;
lcddata('0');
lcddata('0');
lcddata('.');
lcddata('0');
lcddata('V');
while(1)
{
while(!k)
{ delay(200); 34 i=keyread();
if(!m)
{
lcdcmd(0x1);
for(j=0;j<7;j++)
lcddata(Disp3[j]);
m=1;
}
else if(i==11){m=0;goto pp;} //
复位
⑹ 求C51单片机程序的注释,(数控直流稳压电源的设计)
本人估计,你是用proteus仿真做的吧,因为DAC0832的工作脉冲你是靠IO口取反来实现的,以下是我对程序的注释,由于你没给出原理图,有不合理之处在所难勉.
有些地方我认为没必要说的就不细说,不明再问
#include<reg51.h>
#include<absacc.h> //头文件,可使用其中定山纤凳义的宏来访问绝对地址
#define dac0832 XBYTE[0X7fff] //DAC位置定义,跟据实际原理图而定
unsigned char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管码值表
float s;
/*******************DAC0832控制位的定义,视实际原理图而定*************/
sbit ALE=P3^0; //DAC0832 ALE脚工作脉冲位定义
sbit START=P3^1; //DAC0832 START位定义
sbit EOC=P3^2; //转换结束标志位
sbit OE=P3^3; //输出允许位
sbit SHCP=P2^0; //数码管驱动芯片(如595)位定义
sbit DS=P2^1; //同上
sbit STCP=P2^2; //同上
sbit P11=P3^5;
sbit P12=P3^7;
sbit clk=P2^6; //DAC0832 工作脉冲
/************************************************/
unsigned char j,k,m,n,i,a;
unsigned int b;
void delay(unsigned char t)
{ while(t--);
}
void display() //静态数码管的显示
{
j=0x01;
for(i=0;i<8;i++)
{ if((shu[m]&j)==0)
{ DS=0;}
else {DS=1;}
SHCP=1;
SHCP=0;
j<<=1;
}
P12=0;
P11=1;
STCP=0;
STCP=1;
delay(200);
j=0x01;
for(i=0;i<8;i++)
{ if((shu[n]&j)==0)
{ DS=0;}
else {DS=1;}
SHCP=1;
SHCP=0;
j<<=1;
}
P11=0;
P12=1;
STCP=0;
STCP=1;
delay(200);
}
void main()
{
P2=0X87;
/////////定时器1初始化////////////////
TMOD=0X20;
TH1=0X06;
TL1=0X06;
EA=1;
ET1=1;
TR1=1;
while(1)
{
//DAC0832地址锁存脉冲
ALE=1;
ALE=0;
//DAC0832 开始转换脉冲
START=1;
START=0;
while(EOC==0); //逗旅等待转换完毕
OE=1; //开始读
k=P1; //读数据
a=P1; //读数据
b=a*6;
m=b/1000; //取千位竖轮数
n=b%1000/100; //取百位数
dac0832=k;
display(); //数码管显示
}
}
void time() interrupt 3 //DAC0932脉冲
{
clk=!clk; //位取反
⑺ 基于单片机的可调直流电源设计
我给你一个0~10可调的吧。我刚做的 图貌似出不来了 北京交通大学 思源0702 设计要求及技术指标 数控直流稳压电源 (2)输出电压Vo=±12V,最大输出电流Iomax=1A (3)输出纹波电压ΔVop-p≤5mV 可控部分: • 1)输出电压:0~9.9V步进可调,调整步距0.1V。 • 2)输出电流:≤500mA。 • 3)精度:静态误差≤1%FSR,纹波≤10mV。 • 4)显示:输出电压用LED数码管显示。 • 5)电压调整:由“+”、“-”两键分别控制输出电压步进增减。 数显、控制部分: 查阅网上的数显可控直流稳压电源资料,得到以下电路图: 这种方案不仅对变压器要求高,而且使用了7块芯片,连接复杂,其中参数选择有多处错误。我们决定应用其原理,从新设计一套方案。 电路图如下: 此电路由6部分组成: (1) 正负12V直流稳压输出 (2) 数字电路供电电源 (3) 单片机控制系统 (4) D/A转换及其输出 (5) 数字显示 (6) 负反馈可控直流输出 一、正负12V直流稳压输出 电路图及仿真结果如下:(带1千欧负载) 交流信号: 二、数字电路供电电源 通过正12V直流稳压电源与两个大电阻分压,得到4V参考电压,在通过电压跟随器为数字电路供电。 其中所选电阻为 电压跟随器为LM324 三、单片机控制系统 包括最小系统及各引脚引线。单片机:STC12C4051AD,20引脚DIP封装,与AT89C2051通用。11.059MHz晶体振荡。 程序原理:设置电压初始值为5.1V,由P1口的低7位输出,连接到DAC0832的高8位地址,最低位接电源。然后连接DAC0832的选片线到单片机P3.7口,由P3.7口输出负跳变,实现DAC的数据锁存。由于单片机指令周期过短,小于DAC0832的最小负跳变时间间隔。加入de1延时,使芯片输出正确的模拟电压。 按加号键加0.1V,按减号键减0.1V,按键扫描时间间隔0.2秒。 完成DA转换后输出BCD码,输入数显部分。 程序原码: org 0000h st: mov r0,#33h ;初始电压为参考电压的一半 ljmp st1 ss: call de ;扫描,等待按键 jnb p3.4,i0 jnb p3.5,i1 sjmp ss i0:inc r0 ;r0加一,并调用st1 cjne r0,#100,st1 dec r0 ljmp st1 i1:cjne r0,#0,i11 ;r0减一,并调用st1 ljmp st1 i11: djnz r0,st1 ljmp ss st1:mov a,r0 ;输出的函数 mov p1,r0 clr p3.7 call de1 ;等待芯片接受数据 setb p3.7 mov b,#10 div ab mov r1,b rl a rl a rl a rl a add a,r1 mov p1,a ljmp ss de: mov r7,#200 a3: mov r1,#250 a2: mov r2,#2 a1: djnz r2,a1 djnz r1,a2