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