關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 智能化多路串行數據采集/傳輸模塊的設計

        智能化多路串行數據采集/傳輸模塊的設計

        ——
        作者:廣州市光機電工程研究中心 行聯合 廣州市方統生物科技有限公司 關 強 時間:2007-01-26 來源:《世界電子元器件》 收藏

        引言

        隨著電子技術的不斷發展,目前對各種物理量的檢測和控制都可得以實現。微機檢測控制系統不僅運用到航天航空、機器人技術、紡織機械、食品加工等工業過程控制,而且已經成為日常各種家用電器當中的主要組成部分。其中,a/d(模擬數字轉換)設備起著十分重要的作用。這樣,一個系統中就會需要更多的a/d設備。一般是用擴展一塊或多塊a/d采集卡的方法去實現。當模擬量較少或是溫度、壓力等緩變信號場合,采用總線型a/d卡并不是最合適、最經濟的方案。這里介紹一種以at89c2051單片機為核心,采用tlc2543l 12位串行a/d轉換器構成的采樣,該的采樣數據由單片機串口經電平轉換后送到上位機(pc機)的串口com1或com2,形成一種串行數據采集串行數據傳輸的方式。

        本文引用地址:http://www.104case.com/article/20700.htm


        主要元件功能介紹

        at89c2051單片機

        at89c2051是atmel公司推出的一種性能價格比極高的 8位單片機,其指令系統與mcs-51系列完全兼容。引腳排列如圖1所示。

        tlc2543l串行a/d轉換器

        tlc2543l 采用spi串行接口總線,spi串行接口總線由motorola公司提出,它是一種三線同步接口,分別為同步信號、輸入信號和輸出信號。另外芯片還有一根片選線,單片機通過片選線選通tlc2543l。其中,clk為同步時鐘脈沖,cs為片選線,din為單片機的數據輸出和tlc2543l的數據輸入線,dout為單片機的數據輸入線和tlc2543l的數據輸出線。圖2為tlc2543l時序圖。tlc2543l 是全雙工的,即數據的發送和接收可同時進行。如果只是對tlc2543l寫數據,單片機可以丟棄同時讀入的數據;反之,如果只讀數據,可以在命令字節后,寫入任意數據。數據傳送以字節為單位,并采用高位在前的格式。

        采用ti公司的tlc2543l 12位串行a/d轉換器,使用開關電容逐次逼近法完成a/d轉換過程。串行輸入結構,能夠大大節省51系列單片機i/o資源,且價格適中。其特點有:

        (1) 11個模擬輸入通道;

        (2) 轉換時間10 s;

        (3) 12位分辨率a/d轉換器;

        (4) 3路內置自測試方式;

        (5) 采樣率為66kbps;

        (6) 線性誤差+1lsb(max)

        (7) 有轉換結束(eoc)輸出;

        (8) 具有單、雙極性輸出;

        (9) 可編程的msb或lsb前導;

        (10)可編程的輸出數據長度。 tlc2543l的引腳排列如圖3所示。圖3中ain0~ain10為模擬輸入端; 為片選端;din 為串行數據輸入端;dout為a/d轉換結果的三態串行輸出端;eoc為轉換結束端;clk為i/o時鐘;ref+為正基準電壓端;ref-為負基準電壓端;vcc為電源;gnd為地。

        電平轉換器max232c

        max232c為rs-232收發器,簡單易用,單+5v電源供電,僅需外接幾個電容即可完成從ttl電平到rs-232電平的轉換,引腳排列如圖4所示。

        硬件設計

        硬件電路如圖5所示。

        單片機at89c2051是整個系統的核心,tlc2543l對輸入的模擬信號進行采集,轉換結果由單片機通過p3.5(9腳)接收,ad芯片的通道選擇和方式數據通過p3.4(8腳)輸入到其內部的一個8位地址和控制寄存器,單片機采集的數據通過串口(3、2腳)經max232c轉換成rs232電平向上位機傳輸。


        單片機軟件設計

        單片機程序主要包括串行數據采集/傳輸模塊的系統信息、通道數、采集周期和通訊協議定義,以及數據采集和傳輸的標準子程序。

        tlc2543l的通道選擇和方式數據為8位,其功能為:d7、d6、d5和d4用來選擇要求轉換的通道,d7d6d5d4=0000時選擇0通道,d7d6d5d4=0001時選擇1通道,依次類推;d3和d2用來選擇輸出數據長度,本程序選擇輸出數據長度為12位,即d3d2=00或d3d2=10;d1,d0選擇輸入數據的導前位,d1d0=00選擇高位導前。

        tlc2543l在每次i/o周期讀取的數據都是上次轉換的結果,當前的轉換結果在下一個i/o周期中被串行移出。第一次讀數由于內部調整,讀取的轉換結果可能不準確,應丟棄。

        數據采集程序如下:
        sbit datain=p1^1;
        sbit clock=p1^0;
        sbit dataout=p1^2;
        sbit cs=p1^3;
        bit datain_a_bit0()
        { bit m=0;
        dataout=1;
        m=dataout;
        datain=0;
        nop();
        clock=1;
        nop();
        clock=0;
        return(m);
        }
        bit datain_a_bit1()
        { bit m=0;
        dataout=1;
        m=dataout;
        datain=1;
        nop();
        clock=1;
        nop();
        clock=0;
        return(m);
        }

        單片機通過編程產生串行時鐘,并按時序發送與接收數據位,完成通道方式/通道數據的寫入和轉換結果的讀出,程序如下:

        unsigned int tlc2543l(unsigned char ch)
        {unsigned char i,chch=0;
        unsigned int xdata xxx=0;
        unsigned int xdata y=0;
        cs=0;
        chch=ch<<4;
        y=chch;
        y<<=8;
        i=0;
        while(i<12)
        {if((y&0x8000)==0)
        {if(datain_a_bit0()==0) xxx&=0xfffe;
        else xxx|=0x0001;
        if(i!=11) xxx<<=1;
        }
        else
        {if(datain_a_bit1()==0) xxx&=0xfffe;
        else xxx|=0x0001;
        if(i!=11) xxx<<=1;
        }
        y<<=1;
        i+=1;
        }
        cs=1;
        return(xxx);
        }

        串行數據傳輸模塊包括串行口初始化子程序和數據傳輸子程序,各子程序分別如下。其中數據傳輸采用查詢方式,也可以方便地改為中斷方式。

        void rs232init()
        {tmod=0x20;
        th1=0xfd;
        tr1=1;
        scon=0x50;
        }
        void receandtran()
        {unsigned char da;
        while(!ri)
        ri=0;
        da=sbuf;
        sbuf==da;
        while(!ti);
        ti=0;
        }
        上位機接收數據所用c語言程序包括初始化子程序和接收子程序。各子程序分別如下:
        void cominit(void)
        {
        outportb(0x3fb,0x80);
        outportb(0x3f8,0x18); /與單片機波特率一致為9600bps*/
        outportb(0x3f9,0x00);
        outportb(0x3fb,0x03); /8位數據位,1位停止位,無奇偶校驗*/
        outportb(0x3fc,0x03); /*modem控制寄存器設置,使dtr和rts輸出有效*/
        outportb(0x3f9,0x00); /*設置中斷允許寄存器,禁止一切中斷*/
        }
        void data_rece(void) /*查詢方式接收數據子程序*/
        {
        while(!kbhit())
        {
        while(!(inportb(0x3fd)&0x01));/*若接收寄存器為空,則等待*/
        printf("%x ",inportb(0x3f8)); /*讀取結果并顯示*/
        }
        getch();
        }


        智能化串行采集/傳輸模塊在pcr儀中的應用

        在pcr儀的電路設計中,因需要檢測的信號很多,包括熱蓋的溫度檢測,散熱器的溫度檢測,腔體內部的溫度檢測,氣流的溫度檢測,光信號的檢測等等,為了簡化電路,節約成本,減小體積,在選擇a/d轉換電路時選用了spi總線的tlc2543,該芯片有多達11路的模擬信號輸入端,完全滿足pcr儀電路設計的需要,一個芯片既能完成檢測多個信號的功能,又能節約單片機的資源,圖6是其硬件原理圖。

        結論

        本文所述的智能化串行數據模塊,可直接用于任何微機控制和檢測系統中以取代原來的模數轉換設計。經過實踐檢驗,該模塊功耗低、采樣精度高、可靠性好、接口簡便,有很高的實用價值。該智能模塊的軟件和硬件成功應用于生命科學儀器“熱循環儀”的設計和實踐中,使用方便,簡單可行,節約成本,能夠滿足大多數數據采樣的應用場合。



        關鍵詞: 模塊

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 旬阳县| 阜新| 高密市| 喀喇沁旗| 胶州市| 宽城| 桑植县| 乐都县| 财经| 青浦区| 全南县| 闽清县| 察雅县| 玛曲县| 时尚| 喀喇沁旗| 定兴县| 闽清县| 涞水县| 融水| 开江县| 玛纳斯县| 河西区| 独山县| 赫章县| 治县。| 连城县| 阿城市| 绥滨县| 孟村| 霞浦县| 民勤县| 原平市| 乌鲁木齐县| 南和县| 防城港市| 英超| 依兰县| 阿拉善右旗| 江陵县| 天柱县|