教你用最簡單的方法實現(xiàn)強(qiáng)大的多功能手持儀,提供完整軟硬件解決方案,不服來戰(zhàn)
一、項目概述
1.1 引言
愛特梅爾半導(dǎo)體是世界上高級半導(dǎo)體產(chǎn)品設(shè)計、制造和行銷的領(lǐng)先者,產(chǎn)品包括了微處理器、可編程邏輯器件、非易失性存儲器、安全芯片、混合信號及RF射頻集成電路。ATMEL主要應(yīng)用于高增長的電子設(shè)備市場,如通訊、計算、消費類產(chǎn)品、安全產(chǎn)品、汽車電子和工業(yè)應(yīng)用。
1.2 項目背景/選題動機(jī)
隨著電子技術(shù)的發(fā)展和電路結(jié)構(gòu)的不斷創(chuàng)新變化,對電路測量的要求也變得更高,在電子制作中會發(fā)現(xiàn)對很多參數(shù)的測量已經(jīng)不是一塊萬用表能勝任的了,比如單片機(jī) 某I/O口的輸出波形或制作放大器測其頻率響應(yīng)等等,所以示波器自然而然的和萬用表一樣變成了電子工程和愛好者的必備工具,但是,示波器又很昂貴,所以我 們就想發(fā)揮我們的聰明才智和所學(xué)的知識制作一臺使用的示波器,并且盡量使功能多樣,并且想著節(jié)能環(huán)保,將以往按鍵形式的改為觸屏的,還附加其他的功能。
二、需求分析
2.1 功能要求
1)雙通道示波器: 顯示輸入信號的波形、頻率、幅值。
2)萬用表:可測量參數(shù):
DCV:直流電壓;
ACV:交流電壓、
DCA:直流電流、
R:電阻、
UF:二極管的正向?qū)妷骸?/p>
hFE:三極管放大倍數(shù)。
3)信號發(fā)生器:產(chǎn)生方波、鋸齒波、正弦波、三角波等信號波形;信號的頻率和幅度可調(diào)。
2.2 性能要求
示波器:
通道數(shù):2
帶寬:60MHz
垂直靈敏度:不小于10mV-5V/div
最大輸入電壓:50Vpp
輸入阻抗:1MΩ
水平時基范圍:不小于500ns-50ms/div
顯示:彩色液晶
耦合方式:AC/DC
2)數(shù)字萬用表:
直流電壓量程:200mV ;2V;20V;200V ----精度:±0.5%
交流電壓量程:
200mV -----精度:±1.2%
2V;20V;200V----精度:±1.0%直流電流量程:
2mA;20 mA ------精度:±0.5%
200 mA ------精度:±1.5%
10A ------精度:±2.0%交流電流量程:
2mA;20 mA ------精度:±1.0%
200 mA ------精度:±2.0%
10A ------精度:±3.0%
電阻量程:
200Ω;2KΩ;20KΩ;200KΩ;2MΩ;------精度:±0.5%
3)函數(shù)信號發(fā)生器:
頻率范圍:1Hz~50MHz
頻率精確度:±0.5 Hz
信號諧波失真(50Ω匹配負(fù)載,1Vp-p輸出時):
- 小于20kHz:-60dBc
- 20kHz~1MHz:-50dBc
- 1MHz~10MHz:-40dBc
- 10MHz~50MHz:-30dBc
輸出幅度范圍:2mV~2Vrms(開路),或1 mV~1 Vrms(50Ω負(fù)載)
輸出阻抗: 50Ω
穩(wěn)幅特性(頻幅平坦度):10Hz~10MHz±0.5dB 1Hz~50MHz±1dB
三、方案設(shè)計
3.1示波器
3.1.1系統(tǒng)功能實現(xiàn)原理
數(shù)字示波器首先對模擬信號進(jìn)行高速采樣獲得相應(yīng)的數(shù)字?jǐn)?shù)據(jù)并存儲。用數(shù)字信號處理技術(shù)對采樣得到的數(shù)字信號進(jìn)行相關(guān)處理與運算,從而獲得所需的各種信號參 數(shù)。根據(jù)得到的信號參數(shù)繪制信號波形,并可對被測信號進(jìn)行實時的、瞬態(tài)的分析,以方便使用者了解信號質(zhì)量,快速準(zhǔn)確地進(jìn)行故障的診斷。測量開始時,操作者 可通過操作界面選定測量類型、測量參數(shù)及測量范圍;微處理器自動將測量設(shè)置解釋到采樣電路,并啟動數(shù)據(jù)采集;采集完成后,由微處理器對采樣數(shù)據(jù)按測量設(shè)置 進(jìn)行處理,提取所需要的測量參數(shù),并將結(jié)果送顯示部件。
系統(tǒng)硬件結(jié)構(gòu)框圖
3.1.2 電路設(shè)計
程控放大部分:
程控放大器的作用是對輸入信號進(jìn)行衰減或放大調(diào)整,使輸出信號電壓在 AD轉(zhuǎn)換器輸入電壓要求范圍內(nèi),達(dá)到最好的測量與觀察效果,所以程控放大器電路在規(guī)定帶寬內(nèi)的增益一定要平坦,故對運算放大器的要求比較高。
開關(guān)用繼電器控制,H代表吸合,L代表未吸合。
電壓靈敏度與 S1~S4 的關(guān)系表:
放大倍數(shù) 靈敏度 S1 S2 S3 S4
0.1 2V H L L L
0.2 1V H L H L
0.4 0.5V L H L L
1 0.2V L L L L
2 0.1V L L H L
4 50mV L H L H
10 20mV L L L H
20 10mV L L H H
高速A/D轉(zhuǎn)換和數(shù)據(jù)存儲:
由程控放大電路調(diào)整后的信號分成兩路,有一路進(jìn)入A/D轉(zhuǎn)換電路進(jìn)行采樣,采樣所得的數(shù)據(jù)由 74LVC574 鎖存緩沖后送入存儲器。
時鐘電路:
時鐘產(chǎn)生電路為 AD轉(zhuǎn)換器提供一系列的采樣時鐘信號,分別為 600Hz、 6kHz、 60kHz、600kHz、3MHz、6MHz、30MHz 和 60MHz,共 8種,分別對應(yīng)著不同的水平水平掃速。
基準(zhǔn)時鐘為60MHz,通過多路選擇器和分屏器實現(xiàn)。
主控MCU:
由一片AVR單片機(jī)作為主控芯片,進(jìn)行數(shù)據(jù)的處理并控制程控放大器和時鐘產(chǎn)生器,并將數(shù)據(jù)送屏幕顯示。
3.1.3 系統(tǒng)預(yù)計實現(xiàn)結(jié)果
采樣速率: 600Sa/s, 6kSa/s, 60kSa/s, 600kSa/s, 3MSa/s, 6MSa/s, 30MSa/s, 60MSa/s
水平水平掃速:500ns、1μs、5μs、10μs、50μs、500μs、5ms、50ms
垂 直電壓靈敏度: 10mV/div, 20mV/div, 50mV/div, 0.1V/div, 0.2V/div, 0.5V/div, 1V/div, 2V/div,5V/div
3.1.4系統(tǒng)軟件流程
3.2函數(shù)信號發(fā)生器
3.2.1函數(shù)信號發(fā)生器簡介
函數(shù)發(fā)生器又稱波形發(fā)生器。它能產(chǎn)生某些特定的周期性時間函數(shù)波形(主要是正弦波、方波、三角波、鋸齒波和脈沖波等)信號。頻率范圍可從幾毫赫甚至幾微赫的超低頻直到幾十兆赫。除供通信、儀表和自動控制系統(tǒng)測試用外,還廣泛用于其他非電測量領(lǐng)域。圖2為產(chǎn)生上述波形的方法之一,將積分電路與某種帶有回滯特性的閾值開關(guān)電路(如施米特觸 發(fā)器)相連成環(huán)路,積分器能將方波積分成三角波。施米特電路又能使三角波上升到某一閾值或下降到另一閾值時發(fā)生躍變而形成方波,頻率除能隨積分器中的RC 值的變化而改變外,還能用外加電壓控制兩個閾值而改變。將三角波另行加到由很多不同偏置二極管組成的整形網(wǎng)絡(luò),形成許多不同斜度的折線段,便可形成正弦 波。另一種構(gòu)成方式是用頻率合成器產(chǎn)生正弦波,再對它多次放大、削波而形成方波,再將方波積分成三角波和正、負(fù)斜率的鋸齒波等。對這些函數(shù)發(fā)生器的頻率都 可電控、程控、鎖定和掃頻,儀器除工作于連續(xù)波狀態(tài)外,還能按鍵控、門控或觸發(fā)等方式工作。
3.2.2方案設(shè)計與選擇
方案一:采用單片函數(shù)發(fā)生器(如8038),8038可同時產(chǎn)生正弦波、方波等,而且方法簡單易行,用D/A轉(zhuǎn)換器的輸出來改變調(diào)制電壓,也可以實現(xiàn)數(shù)控調(diào)整頻率,但產(chǎn)生信號的頻率穩(wěn)定度不高。
方案二:采用鎖相式頻率合成器,利用鎖相環(huán),將壓控振蕩器(VCO)的輸出頻率鎖定在所需頻率上,該方案性能良好,但難以達(dá)到輸出頻率覆蓋系數(shù)的要求,且電路復(fù)雜。
方案三:采用單片機(jī)編程的方法來實現(xiàn)。該方法可以通過編程的方法來控制信號波形的頻率和幅度,而且在硬件電路不變的情況下,通過改變程序來實現(xiàn)頻率的變換。此外,由于通過編程方法產(chǎn)生的是數(shù)字信號,所以信號的精度可以做的很高。
鑒于方案一的信號頻率不夠穩(wěn)定和方案二的電路復(fù)雜,頻率覆蓋系數(shù)難以達(dá)標(biāo)等缺點,所以決定采用方案三的設(shè)計方法。它不僅采用軟硬件結(jié)合,軟件控制硬件的方法 來實現(xiàn),使得信號頻率的穩(wěn)定性和精度的準(zhǔn)確性得以保證,而且它使用的幾種元器件都是常用的元器件,容易得到,且價格便宜,使得硬件的開銷達(dá)到最省。
3.2.3設(shè)計原理
我們做的信號發(fā)生器只需用到外部中斷和PWM脈寬調(diào)制波兩項技術(shù)便可以實現(xiàn),Atmel多數(shù)單片機(jī)都支持這兩項技術(shù),由于主控芯片還未定,故該信號發(fā)生器暫時假定采用的控制芯片為Atmega16。
數(shù)字信號可以通過數(shù)/模轉(zhuǎn)換器轉(zhuǎn)換成模擬信號,因此可通過產(chǎn)生數(shù)字信號再轉(zhuǎn)換成模擬信號的方法來獲得所需要的波形。Atmega16單片機(jī)本身就是一個完整 的微型計算機(jī),具有組成微型計算機(jī)的各部分部件:中央處理器CPU、隨機(jī)存取存儲器RAM、只讀存儲器ROM、I/O接口電路、定時器/計數(shù)器以及串行通 訊接口等,,只要將Atmega16再配置鍵盤及其接口、顯示器及其接口、數(shù)模轉(zhuǎn)換及波形輸出、指示燈及其接口等四部分,即可構(gòu)成所需的波形發(fā)生器,其信 號發(fā)生器構(gòu)成原理框圖如圖3.1所示:
信號發(fā)生器原理框圖
Atmega16是整個波形發(fā)生器的核心部分,通過程序的編寫和執(zhí)行,產(chǎn)生各種各樣的信號,并從鍵盤接收數(shù)據(jù),進(jìn)行各種功能的轉(zhuǎn)換和信號幅度的調(diào)節(jié)。當(dāng)數(shù)字信號經(jīng)過接口電路到達(dá)轉(zhuǎn)換電路,將其轉(zhuǎn)換成模擬信號也就是所需要的輸出波形。
3.2.4設(shè)計思想
1、利用單片機(jī)產(chǎn)生方波、鋸齒波、正弦波、三角波和鋸齒波等信號波形,信號的頻率和幅度可變。
2、將一個周期的信號分離成256個點(按X軸等分),每兩點之間的時間間隔為T,用單片機(jī)的定時器產(chǎn)生,其表示式為:T=T/256。
3、正弦波的模擬信號是D/A轉(zhuǎn)換器的模擬量輸出,其計算公式為:
Y=(A/2sint)+A/2 (其中A=VREF)
那么對應(yīng)著存放在計算機(jī)里的這一點的數(shù)據(jù)為:
4、一個周期被分離成256個點,對應(yīng)的四種波形的256個數(shù)據(jù)存放在以TAB1--TAB4為起始地址的存儲器中。
3.2.5設(shè)計功能
根據(jù)系統(tǒng)操作界面的菜單提示選擇信號發(fā)生器輸出的波形。分別有正弦波、方波、三角波。
在系統(tǒng)操作界面可以調(diào)節(jié)輸出波形的頻率和幅值。頻率范圍:10~1000Hz,輸出波形幅度為:0~5V。
3.2.6硬件設(shè)計
硬件原理框圖
3.2.7軟件設(shè)計
本文中子程序的調(diào)用是通過操作界面菜單選項的選擇來實現(xiàn),在取得按鍵相應(yīng)的鍵值后,啟動計時器和相應(yīng)的中斷服務(wù)程序,再直接查詢程序中預(yù)先設(shè)置的數(shù)據(jù)值,通過轉(zhuǎn)換輸出相應(yīng)的電壓,從而形成所需的各種波形。主程序的流程圖如下圖所示
主程序的流程圖
在程序開始運行之后,首先是對8155進(jìn)行初始化,之后判斷信號頻率值,如符合所需的頻率,則重置時間常數(shù),并通過顯示器顯示出來,不符則返回。在中斷結(jié) 束后,還要來判斷波形是否符合,如符合,則顯示其頻率,不符則返回,重新判斷。下圖為各波形子程序的流程圖。如圖所示,在中斷服務(wù)子程序開始后,通過判斷 來確定各種波形的輸出,當(dāng)判斷選擇的不是方波后,則轉(zhuǎn)向?qū)φ也ǖ呐袛?,如此反?fù)。如果選擇的是方波,則用查表的方法求出相應(yīng)的數(shù)據(jù),并通過D/A轉(zhuǎn)換器 將數(shù)據(jù)轉(zhuǎn)換成模擬信號,形成所需波形信號。
程序運行流程圖
3.3數(shù)字萬用表
3.3.1數(shù)字萬用表簡介
特點: 分辨力強(qiáng)、準(zhǔn)確度高(±0.5%~ ± 0.03%) 測試功能完善、測量速率快、顯示直觀、耗電省、過載能力強(qiáng)、便于攜帶。
測量參數(shù):DCV:直流電壓、ACV:交流電壓、DCA:直流電流、R:電阻、UF:二極管的正向?qū)妷骸FE:三極管放大倍數(shù)
3.3.2原理圖
3.3.3功能電路
1、功能量程的選擇:通過操作界面選擇萬用表模式,并選擇相應(yīng)的檔位和量程。
參數(shù)轉(zhuǎn)換電路:
ICL7106:三位半LCD/LED顯示A/D轉(zhuǎn)換器.
AD轉(zhuǎn)換原理
從上式可知:被測電壓只與基準(zhǔn)電壓及計數(shù)值有關(guān),而這兩者的準(zhǔn)確度都可以做得較高,所以數(shù)字萬用表的測量準(zhǔn)確度較高
測量 DCV、 ACV、 DCA、 hFE時UREF=100mV,測量二極管正向壓降時UREF=1V
測量R時,UREF不一定為100mV
5LCD顯示 在液晶屏幕上顯示出所測參數(shù)的物理量
6、直流電流轉(zhuǎn)換電路(I→〈200mV電壓)
以200mA檔為例
UIN = 1Ω ×100mA= = 100mV
7、直流電壓轉(zhuǎn)換電路
8、交流電壓轉(zhuǎn)換電路(以200V檔為例)
9、電阻轉(zhuǎn)換電路(以20k擋為例)
若RX= RREF則N2=1000,把小數(shù)點點在百位即可
10、二極管正負(fù)極測量電路
11、 三極管放大倍數(shù)測量
Ic=βIb ——> 200mV直流電壓——> A/D轉(zhuǎn)換
3.4 LCD觸摸屏
3.4.1 LCD觸摸屏參數(shù)
顯示屏幕尺寸 2.8inch
屏幕點陣 240 * 320
屏幕色彩 65K色
接口標(biāo)準(zhǔn) intel80(D0-D15,ADDR0,nWR,nRD,nCS,)接口,支持MCU51(74F373擴(kuò)展),ARM
驅(qū)動IC:HX8347
工作電壓2.5~3.6,背光電流80mA
可以支持2.8inch可視面積,3.0inch手寫觸摸膜
屏幕尺寸 50(W) * 69.2(H) * 4.0(T) 帶觸摸膜
3.4.2 觸摸屏實現(xiàn)功能
我們采用的液晶屏主要用于顯示功能,其次,該液晶屏還帶觸摸功能,還可以作為輸入,對系統(tǒng)進(jìn)行控制。
3.4.3 硬件實現(xiàn)
由于該液晶屏已經(jīng)自帶轉(zhuǎn)接線,只要從AVR主控芯片把引腳擴(kuò)展出來,另外再為液晶屏搭個驅(qū)動電路驅(qū)動液晶屏,便可以對液晶屏進(jìn)行控制了。(具體硬件電路需等官方提供了開發(fā)套件之后方好確定下來)
3.4.4 軟件部分
液晶屏主要是用來顯示示波器的輸出,同時作為輸入對示波器進(jìn)行各項功能的選擇,故我們把顯示屏軟體部分分成了兩個部分:一是輸出的顯示,二是輸入的檢測。
輸出的顯示:根據(jù)示波器所處的模式,顯示相應(yīng)的輸出,如果示波器處于波形檢測模式,則在輸出屏幕上顯示檢測到的波形;如果示波器處于萬用表工作模式下,則輸出屏幕上顯示測到的電壓,電流,電阻等物理量的數(shù)值。
輸入檢測:由于該液晶屏帶觸摸功能,故可以把輸入按鍵放到液晶屏上,實現(xiàn)觸摸按鍵功能。
下圖是多功能示波器的初步界面設(shè)計方案:(以下設(shè)計僅為初步設(shè)想,最終界面需根據(jù)具體功能進(jìn)一步改善)
(多功能示波器界面圖)
3.5太陽能充電器
為了綠色環(huán)保,我們將使用太陽能來提供所需的能源。
6V200MA 太陽能電池板
儀器使用2節(jié)5號充電電池供電。
充電器功能:
1、給充電電池充電;
2、給手機(jī)充電;
3、充電完成自動斷電,避免過沖。
充電器輸出電壓:5V或1.2V
充電器輸出電流:350mA
3.6 SD外部存儲
3.6.1 外部存儲簡介
由 于示波器是一種精密的測量儀器,數(shù)據(jù)量比較大,很多時候用戶不僅需要實時地觀測數(shù)據(jù),事后還需要對數(shù)據(jù)進(jìn)行處理和分析,這就要求要有一個較大的數(shù)據(jù)存儲空 間,由于單片機(jī)自帶的ROM一般不會太大,而且很不方便與PC機(jī)進(jìn)行數(shù)據(jù)傳輸,因而我們決定采用外部SD卡對數(shù)據(jù)進(jìn)行存儲。
3.6.2 SD外部存儲原理
SD 有兩種操作模式:SD 卡模式,SPI 模式。SD 卡模式不介紹。一般用SPI 模式操作。我們這里采用SPI模式對SD卡進(jìn)行存取數(shù)據(jù)。
在SPI模式下,用單片機(jī)的4個控制I/O口分別模擬MOSI、MISO、CS、CLK即可實現(xiàn)數(shù)據(jù)的存取,電路簡單,如下圖所示:
SD卡原理圖
3.6.3 SD卡驅(qū)動
通用驅(qū)動為:
(1)初始化SPI接口,使用低速模式
(2)延時至少74clock
(3)發(fā)送CMD0,需要返回0x01,進(jìn)入Idle 狀態(tài)
(4)循環(huán)發(fā)送CMD55+ACMD41,直到返回0x00,進(jìn)入Ready 狀態(tài)
(5)設(shè)置讀寫block 大小為512byte
(6)把SPI 設(shè)置為高速模式
3.6.4 軟件程序
下面為SD卡存取數(shù)據(jù)需要用到的主要幾個函數(shù)
void SPI_Init(void){…}
void SPI_Send_Byte(byte Data){…}
void SPI_Receive_Byte(byte Data){…}
評論