基于51单片机数控恒流源

2020-02-15来源: 51hei关键字:51单片机  数控恒流源  TLC5615

电路原理图如下:
0.png

该项设计的主要目的是设计一种数控稳压电源。它利用单片机STC89C51作为主控芯片,控制数字/模拟转换器(TLC5615)的输出电压的大小,经过运算放大器LM358与IRF9Z24N构成负反馈系统,从而输出恒定电压。最后通过电位器分压将输出信号反馈到运算放大器LM358上,使输出准确度可以调节。此设计通过键盘电路与单片机连接,读入控制数据,利用软件进行判断,从而起到控制电源输出的作用。通过LCD1602(或LED数码管)显示数控电源的输出电压,实现简单的人机对话。该项设计具有设计简单,控制灵活,调节方便,携带方便、成本低等优势,具有较强的实用性。


下图是为了了解整个电路如何工作的,把整个电路拆开。

二、原理讲解:

供电部分:

P2为接线柱,是整个系统的输入电压端口,整个数控电源有此输入能量。D1、D2、D3、D4为四个二极管(in4007),起整流的作用,C6为滤波电容。整流滤波电路是使供电可以为交流,同时也可以用直流供电(交流供电不要超过20V,直流不要超过35V)。受电压限制的主要是后级运放耐压、TL431耐压以及7812的耐压值。7812主要为保护7805,7805稳出5V电压共单片机供电使用。但是7805耐压值是15V,所以前级要加7812保护7805。

晶振部分:

C2、C3、Y1(12MHZ)与单片机端口构成震荡电路,为51单片机提供时钟。

复位电路:

RST连接单片机复位管脚,此电路及有上电复位功能,又有手动复位功能。C1、R2构成上电复位电路,上电瞬间C1导通,则RST为高电平,单片机将复位,电压稳定后C1储存的电能通过R2对地释放掉,单片机将正常运行。同样K2按下时RST为高电平,单片机复位,弹起来时RST为低电平,单片机正常运行.

单片机部分:

单片机默认选用STC89C51,同时兼容STC89C52、AT89S52、AT89S51、AT89C51等51单片机。

按键部分:

按键选用独立按键,扫描时间短,使程序更简单且扫描时间更短,从而提高稳定性。按键弹起时P20、P21、P22、P23为弱上拉状态,所以为高电平。按键按下时对应的I/O口为低电平,可以被程序中的扫描函数检测到。


数码管显示部分:

数码管显示采用四位一体共阳数码管,这样使电路更为简单,只需四个9012三极管就可以将其驱动。P24、P25、P26、P27分别作为数码管的位选端,控制是否选通哪一位数码管。采用PNP型三极管,低电平导通,高电平截止。R20、R30、R40、R50为三极管基极限流电阻,此电阻及能保护三极管又能保证三极管导通时处于完全导通状态。R51为限流电阻,此电阻的大小直接决定数码管的亮暗成都,在此选择220欧姆、1/4色环电阻。数码管的阴极端直接接单片机的P0口,而不需上拉电阻。STC89C51的单片机P0口为漏极开路,所以作为输出时必须接上拉电路,而作为输入时相当于数码管作为上拉,所以不再需要上拉电阻,及简化了电路又节省了成本。

数模转换部分:(此为数控电压数控调压关键所在)

数模转换采用德州仪器的TLC5615,此为一片10位串行单5V电源DAC,直接电压输出。单片机P33、P32、P34分别连接TLC5615的时钟端、片选端、数据端即可控制它输出想要的电压。此时TLC5615的6脚及参考电压输入端需接入2.5V的参考电压。根据公式可知,当参考电压为2.5V时,TLC5615将最大输出5V电压。

TL5615(DAC)电压计算公式


Vout为7脚输出电压,Vrefin为6脚参考电压输入端,N为单片机通过1、2、3管脚向TLC5615写入的数据,1024是根据这是一片10位数模转换而计算出来的(210=1024),最后乘以二是因为TLC5615内部有2倍的增益放大器。

在给TLC输入2.5V参考电压的时候,我们用了TL431芯片。TL431是可控精密稳压源。它的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替稳压二极管。

同时用LM358作为跟随器,减小2.5V基准电源的阻抗,再送入TLC5615 参考电压端。

(写论文时,可以在此讲解TL41技术参数LM358技术参数和原理和跟随器电路原理)

TLC5615内部原理图:

                         TLC5615逻辑时序图:




在给TLC输入2.5V参考电压的时候,我们用了TL431芯片。TL431是可控精密稳压源。它的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替稳压二极管。

同时用OPA2107作为跟随器,减小2.5V基准电源的阻抗,再送入TLC5615 参考电压端。

(写论文时,可以在此讲解TL41技术参数OPA2107技术参数和原理和跟随器电路原理)


MOS放大部分:

将上述TLC5615输出的可调电压送到运放LM358的反相端,通过MOS管(F9Z24N)放大。同时在F9Z24N的输出端用RW1(10K)电位器分压,取一定比例的输出电压反馈到比较器正相端,构成一个反馈系统。此时MOS管输出的PWM波的占空比将根据负载和输入电压而变化以保证输出电压的稳定。C5作为输出滤波电容,滤掉输出电压纹波。

根据反馈系统的稳定原理计算出输出电压的公式,如下:

设:Vo为输出电压,Vin为LM358的2脚输入电压,RWH为电位器上部分电阻,RWL为电位器下部分电阻,RW为电位器阻值。

Vo=Vin×(RW/RWL);

(写论文时,可以在此讲解F9Z24N技术参数)

报警电路:

此电路可以由单片机控制三极管(8550/9012)的通断来控制蜂鸣器的报警。当P36为高时,三极管不高通,为低时三极管导通蜂鸣器响。当过流或短路时,单片机切断输出,同时蜂鸣器报名。


单片机源程序如下:


#include "reg52.h"                        //包含头文件


//宏定义

#define uchar unsigned char

#define uint  unsigned int


//按键定义

sbit KEY1= P2^0;

sbit KEY2= P2^1;

sbit KEY3= P2^2;

sbit KEY4= P2^3;


//数码管位选端定义

sbit W1= P2^4;

sbit W2= P2^5;

sbit W3= P2^6;

sbit W4= P2^7;


//DAC定义

sbit  CS_5615=P1^5;                 //定义片选信号IO口 

sbit CLK_5615=P1^6;                 //定义时钟信号IO口 

sbit DAT_5615=P1^7;                 //定义数据输入IO口 


//ADC定义

sbit  CS=P3^5;                       //定义片选信号IO口 

sbit CLK=P3^3;                       //定义时钟信号IO口 

sbit DIO=P3^4;                       //定义数据输入IO口 


uint  U; 

uchar GETU=0;

bit flag=0;


uchar code table[]=

{

        0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7

};        //共阳数码管段码表        没有小数点 0~9

uchar code table1[]=

{

        0x7F,0x64,0xBD,0xF5,0xE6,0xF3,0xFB,0x67,0xFF,0xF7,0x5e

};//带小数点的编码            0~9



void delay_ms(uint z)                      //延时函数

{

  uint a,b;

  for(a=z;a>0;a--)

   for(b=5;b>0;b--);

}


void  shuma(uint buf)                      //数码管显示程序

{

        uchar a,b,c,d;                     //定义变量

        a=buf/1000;                        //将数据除以1000得到千位数据

        b=buf%1000/100;                    //取余1000除以100得到百位数据

        c=buf%100/10;                      //得到十位数据

        d=buf%10;                          //得到个位数据


        W1=0;W2=1;W3=1;W4=1;               //选中第一个位

        P0=~table[a];                      //输入该位要显示的数据

        delay_ms(60);                      //延时


        W1=1;W2=0;W3=1;W4=1;               //选中第二个位

        P0=~table1[b];                     //注释同上

        delay_ms(60);


        W1=1;W2=1;W3=0;W4=1;

        P0=~table[c];

        delay_ms(60);


        W1=1;W2=1;W3=1;W4=0;

        P0=~table1[10];

        delay_ms(60);

        W1=1;W2=1;W3=1;W4=1;

}


void tlc_5615(uint buf)                //DA输出

{

        uint a,c;                      //定义变量

c=buf; //要输

[1] [2] [3]
关键字:51单片机  数控恒流源  TLC5615 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488346.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机LED点阵上移程序!(汇编)
下一篇:基于LCD12864和51单片机的简单小游戏Proteus仿真程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

单片机步进电机转速控制程序(速度LED显示)
单片机源程序如下://数码管位 高位-----低位//四个按键控制步进电机:正转,反转,加1,减1//上电时电机启动,数码管上显示速度最小档1,加减档位均能通过数码管显示出来,电机采用单双八拍方式//电机转速一共10档,通过按键调节转速 //电机正转时最高位数码管显示0,反转时显示1  #include<reg51.h>#define uchar unsigned char#define uint unsigned int#define led P0//数码管段选#define haha P2sbit s1 = P1^0;sbit s2 = P1^1;sbit s3 = P3^0;sbit
发表于 2020-02-08
单片机步进电机转速控制程序(速度LED显示)
基于51单片机的数字电容测量仪设计
本设计详细介绍了一种基于单片机的数字式电容测量仪设计方案及实现方法。设计的主要方法是采用555芯片构成单稳态触发器,将电容容量转换为脉冲宽度。通过单片机的计时器测量脉宽, 根据已知的R值,通过单片机的运算功能,计算出电容容量,最后,再通过单片机的普通I/O口控制液晶屏显示出电容容量的计算结果。系统的测量范围为10pF~ 500uF, 具有多个量程,可根据用户需要由用户选择,与用户的交互是通过键盘实现,不同量程的实现是通过单片机的I/O口控制继电器的吸合与断开来选择不同的R值,从而实现不同的量程。同时,本设计注重设计方法及流程,首先根据原理设计电路,再通过protues仿真,利用keil编程,进而借助altium designer
发表于 2020-02-08
基于51单片机的数字电容测量仪设计
基于51单片机的pwm直流电机调速
仿真原理图如下单片机源程序如下:#include <reg52.h>/********************************************** 定时器初值*********************************************/#define T0HIGH        0xec#define T0LOWW        0x8a
发表于 2020-02-08
基于51单片机的pwm直流电机调速
手把手教你单片机串口通信-基础篇
1的个数之和应为偶数。接收字符时,对1的个数进行校验,若字符不一致,则说明传输数据过程中出现错误。代码和校验发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据时,同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,一致则无差。循环冗余校验通过某种数学预算实现有效信息与校验位之间的循环校验,常用语对磁盘信息的传输、存储区的完整性校验。串口的基本结构SBUF:51单片机中的特殊寄存器,串行数据缓冲器(一个接收一个发送),两个其实是共用的一个地址99H,但是两个在物理上面是分开的。当发送使用时,就采用SBUF=XXX;  
发表于 2020-02-08
手把手教你单片机串口通信-基础篇
PIC单片机振荡电路中怎样选择晶体?
什么是中断程序呢?形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。中断事件什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如 你是经理
发表于 2020-02-08
AVR单片机熔丝位的配置
(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态, “Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是 “配置熔丝位成为未编程状态“1”或成为已编程状态“0””。(2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。(3)使用CVAVR中的编程下载程序时应特别注意,由于CVAVR编程下载界面初始打开时,大部分熔丝位的初始状态定义为“1”,因此不要使用其编程菜单选项中的“all
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved