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