單片機典型案例開發(fā)(四)
?。?) void ip_send(UCHAR xdata*outbuf,ULONG ipaddr, UCHAR proto_ id,DINT len)//發(fā)送IP 數(shù)據(jù);該子程序用來創(chuàng)建一個發(fā)送數(shù)據(jù)報。
?。?) void ip_rcve(UCHAR xdata *inbuf) //接收IP 數(shù)據(jù);該子程序檢測一個外來數(shù)據(jù)包,并對數(shù)據(jù)包作相應的處理。
3.3.3 TCP 協(xié)議的實現(xiàn)
1.使用TCP 狀態(tài)機:TCP 協(xié)議是整個TCP/IP 協(xié)議的核心,也是傳輸層中最復雜的協(xié)議。TCP 協(xié)議在兩個端點之間建立了等效于物理連接的邏輯連接。數(shù)據(jù)沿著這個連接雙向傳輸。連接的雙方必須對發(fā)送和接收的數(shù)據(jù)保持跟蹤,以便能夠檢測出數(shù)據(jù)流中的遺漏和重復。
2.使用簡單的確認機制:序列號和確認號這兩個字段用于協(xié)同完成TCP 協(xié)議中的確認工作。對于每個接收到的數(shù)據(jù)包進行確認號的計算,需要從接收到的數(shù)據(jù)包中提取TCP 報文的數(shù)據(jù)部分長度,并進行計算,這增加了處理器的運算量。但如果每次只對單個TCP 報文進行確認的話,并沒有太大的難度。TCP 協(xié)議主要包含的程序如下:
?。?) init_tcp(void) //初始化TCP 協(xié)議
(1) Tcp_send(UINT flags, DINT hdr_len, UCHAR nr) //發(fā)送TCP
?。?) Tcp_retransmit(void) //重發(fā)TCP 數(shù)據(jù)
(3) Tcp_inactivity(void) //停止TCP
?。?) Tcp_rcve(UCHAR xdata * inbuf, UINT len) //接收TCP 數(shù)據(jù)
3.3.4 HTTP 協(xié)議簡介
HTTP 協(xié)議是TCP 協(xié)議的高層協(xié)議,HTTP 的請求和應答都是一行或多行文本,它的結(jié)束標志是一個換行符[5]。如果請求成功,數(shù)據(jù)就沿著該連接發(fā)送,直到發(fā)送完為止。HTTP的端口號為80.HTTP 中的命令稱呼為方法(method),其中GET 語句用來獲取文檔,POST語句用來粘貼文檔。通過判斷GET 和POST 語句后面的文件名來判斷所需要傳遞的文件的位置。
請求:
GET / HTTP/1.1
響應:
HTTP/1.1 200 OK
Content-type: text/html
……
《html》
《body》
……
《/body》
《/html》
4.應用部分
本 WEB 服務器系統(tǒng)幾乎可以應用于所有對實時性要求不是很高的場合,只要對本系統(tǒng)的相關(guān)部分做些修改或改進,例如:客戶端的訪問權(quán)限、IP 地址的過濾等,就可應用于諸如遠程抄表、信息家電的遠程控制等場合。下面圖7 為ping 命令測試網(wǎng)絡不通到通的連接狀態(tài),圖8 實現(xiàn)了局域網(wǎng)內(nèi)任意主機通過ip 地址形式訪問單片機內(nèi)部存諸的網(wǎng)頁,從而實現(xiàn)對單片機系統(tǒng)的遠程監(jiān)控。
圖7 網(wǎng)絡連接測試
圖8 遠程監(jiān)控溫度
5.結(jié)束語
實現(xiàn)了基于單片機的 TCP/IP 協(xié)議棧,使單片機控制的系統(tǒng)具有了WebServer 的功能,這樣可以使用PC 機通過因特網(wǎng)遠程訪問單片機系統(tǒng),也可以使用單片機系統(tǒng)將有用的信息通過因特網(wǎng)發(fā)送到遠端的PC 或其它終端上。為嵌入式設備實現(xiàn)遠程數(shù)據(jù)采集、遠程監(jiān)控、遠程診斷、遠程幫助、遠程升級、遠程重構(gòu)等功能提供了可能,這是嵌入式系統(tǒng)發(fā)展的趨勢。
三、基于89C52單片機的微電壓信號源設計
1 設計原理
被測設備要求提供0.5~50mV的可調(diào)直流模擬電壓,分辨率達10微伏,精度達±0.01mV,溫度跟隨性要好,即要求提供高精度的微電壓信號。
如果采用單片機通過D/A轉(zhuǎn)換器輸出所需電壓,輸出范圍0~5V,LSB=0.01mV,則D/A轉(zhuǎn)換器的位數(shù):
X=lg2(5000/0.01)≈19(Bit)
考慮D/A轉(zhuǎn)換器的量化誤差、溫漂、噪聲和其他各種誤差的影響,至少選擇21Bit以上的D/A轉(zhuǎn)換器,但目前尚無適合本系統(tǒng)設計的D/A轉(zhuǎn)換器。因此,在考慮系統(tǒng)分辨率和輸出電壓范圍的前提下,采用如下方案:先將小于50 mV的電壓數(shù)值擴大100倍,再用 16Bit D/A轉(zhuǎn)換器輸出,然后通過200倍的高精密分壓器和超低漂移的運算放大器緩沖輸出。與此同時,采用高位A/D轉(zhuǎn)換器組成電壓反饋回路,對輸出進行差值補償,進一步提高信號精度和穩(wěn)定性。 其原理結(jié)構(gòu)如圖1所示。
2 硬件設計
2.1 電壓輸出電路
在單片機(89C52)、D/A轉(zhuǎn)換器、分壓、運放組成的微電壓輸出電路中,設計的要點是如何用單片機控制D/A轉(zhuǎn)換器的輸出。本設計采用美國BB公司生產(chǎn)的16位高精度數(shù)/模轉(zhuǎn)換器DAC714(單通道、串行通訊方式,工作電壓±12V或±15V,能實現(xiàn)±10V、±5V和0~10V的模擬電壓輸出)。圖 2是D/A轉(zhuǎn)換器與單片機的連接電路。DAC714采用 ±15V工作電壓,通過外部連接的增益(OFFS)和雙極性偏移(GADJ)電位計調(diào)整,實現(xiàn)對輸出電壓的精度要求。在調(diào)節(jié)這兩個參數(shù)時,為了避免零點對比例調(diào)節(jié)的影響,應注意先調(diào)整比例系數(shù),后調(diào)零點。其中,A0為輸入寄存器控制信號,A1為D/A鎖存控制信號,SDI為串行數(shù)據(jù)輸入。數(shù)據(jù)控制均為低電平有效,當A0=0時,當前數(shù)據(jù)進入移位寄存器;當A1=0時,數(shù)據(jù)進入D/A鎖存。
5V滿刻度的16位DAC714轉(zhuǎn)換器,1LSB對應76μV。如果輸出端的負載電流為5mA,則60mΩ的線路和接觸電阻,就會產(chǎn)生300μV的壓降;此外,還有印刷電路板產(chǎn)生的壓降。因此,將模擬地和數(shù)字地分開,采用單點連接,盡量減小接地回路。模擬插釘互相靠近,有利于模擬與數(shù)字信號的隔離,而模擬信號應該盡量遠離數(shù)字信號。為了將D/A轉(zhuǎn)換器與開關(guān)電流隔離,模擬地設在D/A周圍或者在其下方的模擬信號和電源的附近,最好在DAC714轉(zhuǎn)換器的下面將DCOM與ACOM直接接地。
2.2 電壓反饋電路
DAC714轉(zhuǎn)換器的輸出電壓經(jīng)精密分壓電路和OPA111BM運放組成的緩沖電路輸出后,理論上完全可達22位分辨率。但是由于溫漂和其他誤差影響,實際輸出時為19位分辨率,精度不能滿足要求,為此,設計了反饋補償電路。用22位A/D轉(zhuǎn)換器測量實際輸出電壓,在單片機中將實際輸出電壓與理論輸出值比較,其差值信號作為DAC714的補償電壓輸出,確保了電壓輸出精度。
圖3是由ADS1212組成的電壓反饋電路。 ADS1212是美國BB公司生產(chǎn)的高精度、寬動態(tài)特性的22位單通道Δ-Σ模擬/數(shù)字轉(zhuǎn)換器。其差動輸入端直接與微小的電壓信號相連。由于采用了低噪聲的輸入放大器,在轉(zhuǎn)換速度為10Hz時仍可獲得20位的有效分辨率。它有一個靈活的同步串行接口,單一+5V供電,有內(nèi)/外參考電壓和內(nèi)部自校準系統(tǒng)。與外部器件接口的形式有雙線制、三線制、四線制和多線制,此處采用三線制來實現(xiàn)與單片機的接口,接口信號是數(shù)據(jù)準備就緒線(DRDY)、數(shù)據(jù)輸入輸出線 (SDIO)、時鐘信號線(SCLK)。
2.3 溫控電路
為了進一步降低溫漂的影響,必須保證系統(tǒng)工作溫度變化在一個較小的范圍內(nèi),為此,設計了自動恒溫控制電路。該電路由TMP01溫度控制芯片(AD公司)和加溫、降溫電路等組成。
TMP01通過外接電阻值來設定高、低溫度控制點。當系統(tǒng)溫度高于或低于設定值時,輸出電壓控制信號,啟動加溫或降溫電路的工作。TMP01溫度控制精度達±1℃,負載能力達20mA,可直接驅(qū)動繼電器。
3 軟件流程
本電壓信號源采用液晶顯示屏顯示漢字和數(shù)字,可通過按鍵直接控制輸出電壓的大小。用匯編語言編程,實現(xiàn)電壓的自動輸出。軟件流程如圖4所示。
4 結(jié)束語
本文介紹的數(shù)字式微電壓信號源,利用精密分壓和反饋補償原理,實現(xiàn)了用16位D/A數(shù)模轉(zhuǎn)換器輸出19位分辨率的直流電壓的目標。部隊實際使用表明,采用單片機控制的數(shù)字式微電壓信號源不僅電壓精度穩(wěn)定,而且成本低,體積小,提高了測試自動化的程度。
四、一款自制簡易示波器設計
這款簡易示波器的性能如下:
1.電壓擋位:200mV、500mV、1V、2V、5V、12.5V、25V、50V。
2.頻率擋位:12MHz、6MHz、4MHz、3MHz、2MHz、1MHz、500kHz、250kHz、100 kHz、50kHz、25kHz、10kHz。
3.能較好地測量300 kHz的波形。
這次DIY的示波器性能雖然較弱,僅僅能用來測試音頻等300kHz以下頻率的周期波形。不過它還有一個實用的功能,可以用來測試+/-50V的電壓(量程是自動切換的)。
主要零件
編號 零件名稱 數(shù)量
1 ATMEGA8單片機 1
9 24MHz有源晶振 1
8 128x64液晶屏
[ST7565控制器] 1
2 5532運放 2
3 AD603壓控放大器 1
4 TLV5618[DA] 1
5 ADS830E[AD] 1
6 IDT7205 1
7 ILC7660 2
10 1117-5.0 2
11 1117-3.3 1
12 79L05 1
13 繼電器 2
14 電容、電阻、二極管 若干
15 三極管 2
16 洞洞板 1
17 按鈕 2
電路分析
這個版本示波器的電路原理如圖1所示。電路制作時,我用了1塊16cm×10cm的萬用板,電路中僅僅使用2個按鈕來操作示波器,因為我只使用了一片M8單片機作為控制器,1個按鈕用于循環(huán)改變采樣頻率,另一個按鈕用來選擇信號的耦合方式,直流或者交流耦合。
大家要問了,如何用一片 M8 單片機產(chǎn)生12MHz的采樣時鐘呢?呵呵,其實我對M8單片機進行了超頻,使用24MHz的有源晶振作為它的時鐘頻率。然后,通過定時器2的比較匹配翻轉(zhuǎn)電平,以產(chǎn)生不同的時鐘。當OCR2=0時,單片機的OC2引腳就能產(chǎn)生12MHz的方波了。當然,如果大家不想超頻,那么最高的采樣頻率就是16MHz的一半,8MHz了。因為,M8的技術(shù)手冊上建議最高為16MHz的時鐘,而比較匹配的最高頻率為系統(tǒng)時鐘的2分頻,即8MHz。本次制作的源代碼使用WinAVR編譯。如果使用16MHz的晶振,請自行修改源代碼。
電路中,被測量的信號,經(jīng)過500kΩ、480 kΩ、20 kΩ電阻串聯(lián)回路,通過繼電器進入第1個運放,運放起到阻抗匹配的作用,因為AD603的輸入電阻僅為100Ω。單片機通過繼電器選擇合適的衰減倍數(shù),在默認情況下,為1/2倍的衰減。在測量較大的電壓時,單片機會選擇1/50 的衰減。選擇衰減的目的是為了方便后期的2次放大。后期放大使用了一片AD603,它是壓控放大器。通過改變GPOS(第1腳)與GNEG(第2腳)之間的電壓差,即可控制它的放大倍數(shù)。AD603的GPOS(第1腳)的電壓通過一片DA5618控制,它是12位串口DA,它的參考電壓為1.25V,由2個電阻分壓而得。整個電路的運放可以使用NE5532、AD8066、LM6172等,它們的引腳都是兼容的。由于采樣的速度比較快,遠大于M8單片機的讀取及處理速度,所以通過IDT7205來緩沖高速采樣的電平數(shù)據(jù)。最后,單片機讀取采樣的數(shù)據(jù),并在128×64的液晶上顯示。
手機電池相關(guān)文章:手機電池修復
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
晶振相關(guān)文章:晶振原理
評論