機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應(yīng)用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
數(shù)控直流恒流源的設(shè)計與制作
數(shù)控直流恒流源的設(shè)計與制作
 更新時間:2010-1-15 13:03:23  點擊數(shù):0
【字體: 字體顏色

摘 要:本系統(tǒng)以直流電流源為核心,AT89S52單片機為主控制器,通過鍵盤來設(shè)置直流電源的輸出電流,設(shè)置步進等級可達1mA,并可由數(shù)碼管顯示電流設(shè)定 值和實際輸出電流值。本系統(tǒng)由單片機程控設(shè)定數(shù)字信號,經(jīng)過D/A轉(zhuǎn)換器(AD7543)輸出模擬量,再經(jīng)過運算放大器隔離放大,控制輸出功率管的基極,隨著功率管基極電壓的變化而輸出不同的電流。單片機系統(tǒng)還兼顧對恒流源進行實時監(jiān)控,輸出電流經(jīng)過電流/電壓轉(zhuǎn)換后,通過A/D轉(zhuǎn)換芯片,實時把模擬量轉(zhuǎn) 化為數(shù)據(jù)量,再經(jīng)單片機分析處理,通過數(shù)字量形式的反饋環(huán)節(jié),使電流更加穩(wěn)定,這樣構(gòu)成穩(wěn)定的壓控電流源。實際測試結(jié)果表明,本系統(tǒng)能有效應(yīng)用于需要高穩(wěn)定度的小功率恒流源的領(lǐng)域。
關(guān)鍵詞:壓控恒流源  智能化電源 閉環(huán)控制

The Digital Controlled Direct Current Source
Abstract: In this system the DC source is center and 89S52 version single chip microcomputer (SCM) is main controller, output current of DC power can be set by a keyboard which step level reaches 1mA, while the set value and the real output current can be displayed by LED. In the system, the digitally programmable signal from SCM is converted to analog value by DAC (AD7543), then the analog value which is isolated and amplified by operational amplifiers, is sent to the base electrode of power transistor, so an adjustable output current can be available with the base electrode voltage of power transistor. On the other hand, The constant current source can be monitored by the SCM system real-timely, its work process is that output current is converted voltage, then its analog value is converted to digital value by ADC, finally the digital value as a feedback loop is processed by SCM so that output current is more stable, so a stable voltage-controlled constant current power is designed. The test results have showed that it can be applied in need areas of constant current source with high stability and low power.

Keywords: voltage-controlled constant current source, intelligent power,closed loop control 
                                  
前言
    
隨著電子技術(shù)的發(fā)展、數(shù)字電路應(yīng)用領(lǐng)域的擴展,現(xiàn)今社會,產(chǎn)品智能化、數(shù)字化已成為人們追求的一種趨勢,設(shè)備的性能、價格、發(fā)展空間等備受人們的關(guān)注,尤其對電子設(shè)備的精密度和穩(wěn)定度最為關(guān)注。性能好的電子設(shè)備,首先離不開穩(wěn)定的電源,電源穩(wěn)定度越高,設(shè)備和外圍條件越優(yōu)越,那么設(shè)備的壽命更長;诖, 人們對數(shù)控恒定電流器件的需求越來越迫切.當今社會,數(shù)控恒壓技術(shù)已經(jīng)很成熟,但是恒流方面特別是數(shù)控恒流的技術(shù)才剛剛起步且有待發(fā)展,高性能的數(shù)控恒流器件的開發(fā)和應(yīng)用存在巨大的發(fā)展空間。本文正是應(yīng)社會發(fā)展的需求,研制出一種基于單片機的高性能的數(shù)控直流恒流源。本數(shù)控直流恒流源系統(tǒng)輸出電流穩(wěn)定,輸 出電流可在20mA~2000mA范圍內(nèi)任意設(shè)定,不隨負載和環(huán)境溫度變化,并具有很高的精度,輸出電流誤差范圍±4mA,因而可實際應(yīng)用于需要高穩(wěn)定度 小功率直流恒流源的領(lǐng)域。
                                                              
1
系統(tǒng)原理及理論分析

1.1單片機最小系統(tǒng)組成
      
單片機系統(tǒng)是整個數(shù)控 系統(tǒng)的核心部分,它主要用于鍵盤按鍵管理、數(shù)據(jù)處理、實時采樣分析系統(tǒng)參數(shù)及對各部分反饋環(huán)節(jié)進行整體調(diào)整。主要包括AT89S52單片機、模數(shù)轉(zhuǎn)換芯片 ADC0809、12位數(shù)模轉(zhuǎn)換芯片AD7543、數(shù)碼管顯示譯碼芯片74LS4774LS138等器件。

1.2系統(tǒng)性能
      
本系統(tǒng)的性能指標主要由兩大關(guān)系所決定,設(shè)定值與A/D采樣顯示值(系統(tǒng)內(nèi)部測量值)的關(guān)系。內(nèi)部測量值與實際測量值的關(guān)系,而后者是所有儀表所存在的誤差。
      
在沒有采用數(shù)字閉環(huán)之前,設(shè)定值與內(nèi)部測量值的關(guān)系只能通過反復測量來得出它們的關(guān)系(要送多大的數(shù)才能使D/A輸出與設(shè)定電流值相對應(yīng)的電壓值),再通 過單片機乘除法再實現(xiàn)這個關(guān)系,基本實現(xiàn)設(shè)定值與內(nèi)部測量值相一致。但由于周圍環(huán)境等因素的影響,使設(shè)定值與內(nèi)部測量值的關(guān)系改變,使得設(shè)定值與內(nèi)部測量值不一致,有時會相差上百毫安,只能重新測量設(shè)定值與A/D采樣顯示值的關(guān)系改變D/A入口數(shù)值的大小才能重新達到設(shè)定值與內(nèi)部測量值相一致,也就是說還 不穩(wěn)定。
     
在采用數(shù)字閉環(huán)后。通過比較設(shè)定值與A/D采樣顯示值,得出它們的差值,再調(diào)整D/A的入口數(shù)值,從而使A/D采樣顯示值逐步逼近設(shè)定值最終達到一致。而 我們無須關(guān)心D/A入口數(shù)值的大小,從而省去了原程序中雙字節(jié)乘除的部分,使程序簡單而不受周圍環(huán)境等因素的影響。
內(nèi)部測量值與實際測量值的誤差是由于取樣電阻與負載電阻和晶體管的放大倍數(shù)受溫度的影響和測量儀表的誤差所造成的,為了減少這種誤差,一定要選用溫度系數(shù)低的電阻來作采樣電阻,因此本系統(tǒng)選用錳銅電阻絲來做采樣電阻。
1.3
恒流原理
    
數(shù)模轉(zhuǎn)換芯片AD754312位電流輸出型,其中OUT1OUT2是電流的輸出端。電流的輸出級別可這樣計算

;****************************************************************

更詳細請下載下面的文檔:


temp_08012710577011.rar

;****************************************************************

數(shù)控恒流源程序

#include <reg52.h>
#include <absacc.h>
#include<string.h>
#include<intrins.h>
#define unit unsigned int
#define uchar unsigned char
#define DELAY_TIME 60
#define TRUE 1
#define FALSE 0

uchar keyup;
uchar keydown;
uchar keyupstate;
uchar keydownstate;

static unsigned int s=0;
static unsigned int b=1;
static unsigned int q=0;
static unsigned int c=0;
static unsigned int a;

code unsigned char table[19]=
{11,17,23,28,34,39,45,51,56,62,68,73,79,84,90,96,101,107,113};
code unsigned char Seg7Code[11]=                //
用十六進數(shù)作為數(shù)組下標,可直接取得對應(yīng)的七段編碼字節(jié)
{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xBF};

sbit SCL=P1^4;
sbit SDA=P1^5;

void DELAY(unsigned int t) /*延時函數(shù)*/
    {
        while(t!=0)
            t--;
    }

void I2C_Start(void)
    {
        /*
啟動I2C總線的函數(shù),當SCL為高電平時使SDA產(chǎn)生一個負跳變*/
        SDA=1;
        SCL=1;
        DELAY(DELAY_TIME);
        SDA=0;
        DELAY(DELAY_TIME);
        SCL=0;
        DELAY(DELAY_TIME);
    }

void I2C_Stop(void)
    {
        /*
終止I2C總線,當SCL為高電平時使SDA產(chǎn)生一個正跳變*/
        SDA=0;
        SCL=1;
        DELAY(DELAY_TIME);
        SDA=1;
        DELAY(DELAY_TIME);
        SCL=0;
        DELAY(DELAY_TIME);
    }

void SEND_0(void)   /* SEND ACK */
    {
        /*
發(fā)送0,在SCL為高電平時使SDA信號為低*/
        SDA=0;
        SCL=1;
        DELAY(DELAY_TIME);
        SCL=0;
        DELAY(DELAY_TIME);
    }

void SEND_1(void)
    {
        /*
發(fā)送1,在SCL為高電平時使SDA信號為高*/
        SDA=1;
        SCL=1;
        DELAY(DELAY_TIME);
        SCL=0;
        DELAY(DELAY_TIME);
    }

bit Check_Acknowledge(void)
    {
        /*
發(fā)送完一個字節(jié)后檢驗設(shè)備的應(yīng)答信號*/
        SDA=1;
        SCL=1;
        DELAY(DELAY_TIME/2);
        F0=SDA;
        DELAY(DELAY_TIME/2);
        SCL=0;
        DELAY(DELAY_TIME);
        if(F0==1)
            return FALSE;
        return TRUE;
    }

void WriteI2CByte(char b)reentrant
    {
        /*
I2C總線寫一個字節(jié)*/
        char i;
        for(i=0;i<8;i++)
            if((b<<i)&0x80)
                SEND_1();
            else
                SEND_0();
    }

 

char ReadI2CByte(void)reentrant
    {
        /*
I2C總線讀一個字節(jié)*/
        char b=0,i;
        for(i=0;i<8;i++)
        {
            SDA=1;    /*
釋放總線*/
            SCL=1;    /*
接受數(shù)據(jù)*/
            DELAY(10);
            F0=SDA;
            DELAY(10);
            SCL=0;
            if(F0==1)
                {
                    b=b<<1;
                    b=b|0x01;
                }
            else
                b=b<<1;
        }
        return b;
    }


/**********
以下為讀寫24c02的函數(shù)**********/
void Write_One_Byte(char addr,char thedata)
{
          bit acktemp=1;
          /*write a byte to mem*/
          I2C_Start();
          WriteI2CByte(0xa0);
          acktemp=Check_Acknowledge();
          WriteI2CByte(addr);/*address*/
          acktemp=Check_Acknowledge();
          WriteI2CByte(thedata);/*thedata*/
          acktemp=Check_Acknowledge();
          I2C_Stop();

}

char Read_One_Byte(char addr)
{         bit acktemp=1;
          char mydata;
           /*read a byte from mem*/
          I2C_Start();
          WriteI2CByte(0xa0);
          acktemp=Check_Acknowledge();
          WriteI2CByte(addr);/*address*/
          acktemp=Check_Acknowledge();
          I2C_Start();
          WriteI2CByte(0xa1);
          acktemp=Check_Acknowledge();

          mydata=ReadI2CByte();
          acktemp=Check_Acknowledge();

          return mydata;
          I2C_Stop();
}

void DisplayBrush( void )          //顯示輸出函數(shù)
{
unit m;
 P0=0xff;
 P0 = Seg7Code[ 10 ];   
 P1=0xfe; 
    for(m=0;m<1000;m++);
 
 P0 = Seg7Code[ s ];
 P1=0xfd;
 for(m=0;m<1000;m++);

 P0 = Seg7Code[ b ];
 P1=0xfb;
 for(m=0;m<1000;m++);

 P0 = Seg7Code[ q ];
 P1=0xf7;
 for(m=0;m<1000;m++);
}

void jisuan (void)
{ s=a/100;
 b=(a/10)%10;
 q=a%10;
 }

void delays(void)                        //按鍵去斗延時函數(shù)
{  uchar i;
   for(i=300;i>0;i--);
}

void main( void )
{ c=Read_One_Byte(0x10);
 a=Read_One_Byte(0x20);
 if (c>18||a>100)
 {c=0;a=10;}
 P2=table[c];
  jisuan();
 DisplayBrush();
 EA=1;IT0=1;IT1=1;EX0=1;EX1=1;

while (1)
 {
 if (keyupstate!=keyup)
  { delays();
  if (c<=18)
   {if (a==100)
    goto L1;
       else a+=5;
     c++;}
 L1: keyupstate=keyup;
  P2=table[c];
   jisuan();
  DisplayBrush();
  Write_One_Byte(0x10,c);
  Write_One_Byte(0x20,a);
  }
///////////////////////////////////////////////////////
 if (keydownstate!=keydown)
  { delays();
  if (a==10)
     goto L2;
     else a-=5;
  c--;
 L2: keydownstate=keydown;
  P2=table[c];
   jisuan();
  DisplayBrush();
  Write_One_Byte(0x10,c);
  Write_One_Byte(0x20,a);
  }
  DisplayBrush();

 }
}
 

void intsvr0(void)  interrupt 0 using 1
{  
 keyup=!keyup;
}


void intsur0(void)  interrupt 2 using 1

 keydown=!keydown;
}

  • 上一篇: 單片機直流電機控制器(附電路圖和部分程序)
  • 下一篇: 沒有了
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1