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