信號(hào)發(fā)生器的設(shè)計(jì).ppt
《信號(hào)發(fā)生器的設(shè)計(jì).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《信號(hào)發(fā)生器的設(shè)計(jì).ppt(77頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
電子工業(yè)出版社,單片機(jī)控制技術(shù) 項(xiàng)目式教程 (C語(yǔ)言版),電子工業(yè)出版社,項(xiàng)目9 信號(hào)發(fā)生 器的設(shè)計(jì),能了解D/A轉(zhuǎn)換器的相關(guān)技術(shù)指標(biāo); 能理解DAC0832的工作原理與應(yīng)用方法; 能掌握DAC0832與51單片機(jī)的接口方法; 能掌握信號(hào)發(fā)生器的硬件電路的分析與設(shè)計(jì)方法; 能熟練編寫(xiě)信號(hào)發(fā)生器產(chǎn)生各種波形信號(hào)的單片機(jī)控制程序。,學(xué)習(xí)目標(biāo),敘述D/A轉(zhuǎn)換器的技術(shù)指標(biāo)要求; 敘述DAC0832的工作原理; 設(shè)計(jì)單片機(jī)控制的信號(hào)發(fā)生器的工作電路; 編寫(xiě)信號(hào)發(fā)生器產(chǎn)生各種波形信號(hào)的單片機(jī)控制程序。,工作任務(wù),任務(wù)9.1 燈光亮度調(diào)節(jié)器的設(shè)計(jì) 任務(wù)9.2 信號(hào)發(fā)生器的設(shè)計(jì) 項(xiàng)目拓展 串行D/A轉(zhuǎn)換芯片PCF8591在實(shí)驗(yàn)板 上的應(yīng)用 項(xiàng)目小結(jié) 思考與訓(xùn)練,項(xiàng)目9 信號(hào)發(fā)生器的設(shè)計(jì),任務(wù)9.1 燈光亮度調(diào)節(jié)器的設(shè)計(jì),D/A轉(zhuǎn)換的功能就是將數(shù)字量轉(zhuǎn)換成模擬量。 基本的D/A轉(zhuǎn)換器由電壓基準(zhǔn)或電流基準(zhǔn)、精密電阻網(wǎng)絡(luò)、電子開(kāi)關(guān)及全電流求和電路構(gòu)成。,9.1.1 D/A轉(zhuǎn)換器的基本原理,1.D/A 轉(zhuǎn)換器的分類(lèi) 按工作方式分:并行D/A轉(zhuǎn)換器(權(quán)電阻D/A轉(zhuǎn)換器、 R- 2R T型D/A轉(zhuǎn)換器) 串行D/A轉(zhuǎn)換器 間接D/A轉(zhuǎn)換器,按D/A轉(zhuǎn)換的分辨率分:低分辨率D/A轉(zhuǎn)換器 中分辨率D/A轉(zhuǎn)換器 高分辨率D/A轉(zhuǎn)換器,按模擬量輸出方式分:電流輸出D/A轉(zhuǎn)換器 電壓輸出D/A轉(zhuǎn)換器,按模擬電子開(kāi)關(guān)電路的不同分: CMOS開(kāi)關(guān)型D/A轉(zhuǎn)換器(速度要求不高) 雙極型開(kāi)關(guān)D/A轉(zhuǎn)換器 電流開(kāi)關(guān)型(速度要求較高) ECL電流開(kāi)關(guān)型(轉(zhuǎn)換速度更高),,2.D/A 轉(zhuǎn)換器的組成,D/A轉(zhuǎn)換器由數(shù)碼寄存器、模擬電子開(kāi)關(guān)電路、解碼網(wǎng)絡(luò)、求和電路及基準(zhǔn)電壓等幾部分組成。 以R-2R T型D/A轉(zhuǎn)換器為例,其由基準(zhǔn)電壓Vref、T型(R-2R)電阻網(wǎng)絡(luò)、位切換開(kāi)關(guān)和運(yùn)算放大器組成。,3.D/A 轉(zhuǎn)換器的工作原理,數(shù)字量是用代碼按數(shù)位組合起來(lái)表示的,對(duì)于有權(quán)碼,每位代碼都有一定的位權(quán)。為了將數(shù)字量轉(zhuǎn)換成模擬量,必須將每1位的代碼按其位權(quán)的大小轉(zhuǎn)換成相應(yīng)的模擬量,然后將這些模擬量相加,即可得到與數(shù)字量成正比的總模擬量,實(shí)現(xiàn)數(shù)字—模擬轉(zhuǎn)換。,R-2R T型D/A轉(zhuǎn)換器工作原理:,圖9.1 R-2R T型D/A轉(zhuǎn)換器原理電路,,圖示的電路是一個(gè)3位二進(jìn)制數(shù)的D/A轉(zhuǎn)換電路,每位二進(jìn)制數(shù)控制一個(gè)開(kāi)關(guān)S。當(dāng)?shù)趇位的數(shù)碼為“0”時(shí),開(kāi)關(guān)Si打在左邊;當(dāng)?shù)趇位的數(shù)碼為“1”時(shí),開(kāi)關(guān)Si打在右邊。當(dāng)S0接通時(shí), I0′= I0〞= I0 , I1′= I0′+ I0〞= 2I0 同理 I1′= I1〞= I1 , I2′= 2I1 I2′= I2〞= I2 , I = 2I2 推出 I0 = I/8 ,I1 = I/4 ,I2 = I/2 ∑I = I0 + I1 + I2 =(1/8 + 1/4 + 1/2)I = - Uref(1/8 + 1/4 + 1/2)/R,,將上式推廣到n位二進(jìn)制數(shù)的轉(zhuǎn)換,可得一般表達(dá)式 ∑I=- Uref(a0/2n + a1/2n-1 + … + an-1/21 +an/20)/R 則輸出電壓為 Uo=(∑I)Rf=-Uref(a0/2n+ a1/2n-1+…+an-1/21+an/20)Rf/R,輸出電壓會(huì)因器件誤差、集成運(yùn)放的非理想特性而產(chǎn)生一定的轉(zhuǎn)換誤差。,,一般D/A轉(zhuǎn)換器:,UOUT = BUr 其中:Ur為常量,由參考Uref決定。 B為輸入數(shù)字量,為二進(jìn)制數(shù)。B可為8位、12位、16 位等,由DAC芯片型號(hào)決定。 當(dāng)B為n位時(shí): B=bn-1bn-2…b1b0=bn-12n-1+ bn-22n-2+…+ b121+b020 式中,bn-1為最高位;b0為最低位。,,1.分辨率 分辨率是D/A轉(zhuǎn)換器對(duì)輸入量變化敏感程度的描述,與輸入數(shù)字量的位數(shù)有關(guān)。如果數(shù)字量的位數(shù)為n,則D/A轉(zhuǎn)換器的分辨率為1/2n。即數(shù)/模轉(zhuǎn)換器能對(duì)滿刻度的1/2n輸入量作出反應(yīng)。,9.1.2 D/A轉(zhuǎn)換器的技術(shù)性能指標(biāo),分辨率=輸出模擬量的滿量程值/2n,如:8位數(shù)的分辨率為1/256,10位數(shù)分辨率為1/1024,通常用D/A轉(zhuǎn)換器輸入數(shù)字量的位數(shù)來(lái)表示分辨率。,D/A轉(zhuǎn)換器??煞譃?位、10位、12位三種。,,2.精度,如果不考慮D/A的轉(zhuǎn)換誤差,D/A轉(zhuǎn)換的精度為其分辨率的大小。因此,要獲得一定精度的D/A轉(zhuǎn)換結(jié)果,首要條件是選擇有足夠分辨率的D/A轉(zhuǎn)換器。,轉(zhuǎn)換速度是DAC每秒可以轉(zhuǎn)換的次數(shù),其倒數(shù)為轉(zhuǎn)換時(shí)間。轉(zhuǎn)換時(shí)間是指從輸入數(shù)字量到轉(zhuǎn)換為模擬量輸出所需的時(shí)間。當(dāng)D/A轉(zhuǎn)換器的輸出形式為電流時(shí),轉(zhuǎn)換時(shí)間較短;當(dāng)D/A轉(zhuǎn)換器的輸出形式為電壓時(shí),轉(zhuǎn)換時(shí)間要加上運(yùn)算放大器的延遲時(shí)間而長(zhǎng)一點(diǎn),一般在幾十微秒內(nèi)。,3.轉(zhuǎn)換速度,,4.建立時(shí)間,建立時(shí)間是指從輸入數(shù)字量變化到輸出達(dá)到終值誤差(1/2)LSB(最低有效位)時(shí)所需的時(shí)間,即輸入的數(shù)字量變化后,輸出模擬量穩(wěn)定到相應(yīng)的數(shù)字范圍內(nèi)所需的時(shí)間。 通常以建立時(shí)間來(lái)表示轉(zhuǎn)換速度。,輸入編碼形式是指D/A轉(zhuǎn)換電路輸入的數(shù)字量的形式。如二進(jìn)制碼、BCD碼等。,5.輸入編碼形式,,6.線性度,線性度是指D/A轉(zhuǎn)換器的實(shí)際轉(zhuǎn)移特性與理想直線之間的最大誤差,或最大偏移。通常給出在一定溫度下的最大非線性度,一般為0.01%~0.03%。,大部分D/A轉(zhuǎn)換芯片是電壓型輸出,一般為5~10V;也有高壓輸出型的,為24~30V。有一些是電流型的輸出,低者為20mA左右,高者可達(dá)3A。,7.輸出電平,8.尖峰,尖峰是輸入的數(shù)字量發(fā)生變化時(shí)產(chǎn)生的瞬時(shí)誤差。通常尖峰的轉(zhuǎn)換時(shí)間很短,但幅度很大。在許多場(chǎng)合是不允許有尖峰存在的,應(yīng)采取措施予以消除。,,正確了解D/A轉(zhuǎn)換器件的技術(shù)性能參數(shù),對(duì)于合理選用轉(zhuǎn)換芯片、正確設(shè)計(jì)接口電路十分重要。,D/A轉(zhuǎn)換器的性能指標(biāo)很多,但在選用合適的芯片型號(hào)時(shí)主要考慮的是它的分辨率、精度和轉(zhuǎn)換速度。,,目前單片機(jī)系統(tǒng)常用的D/A轉(zhuǎn)換器的轉(zhuǎn)換精度有8位、10位、12位等,與單片機(jī)的接口方式有并行接口、串行接口。,9.1.3 DAC0832芯片及其與單片機(jī)接口電路,1.DAC0832芯片介紹,(1)DAC0832的性能 8位D/A轉(zhuǎn)換器,單電源供電,在+5~+15 V范圍均可正常工作?;鶞?zhǔn)電壓的范圍為10V;電流建立時(shí)間為1μs;CMOS工藝,低功耗(僅為20 mW)。,DAC0832主要特性: 輸出電流線性度可在滿量程下調(diào)節(jié); 轉(zhuǎn)換時(shí)間(電流建立時(shí)間)為1μs; 數(shù)據(jù)輸入可采用雙緩沖、單緩沖或直通方式; 增益溫度補(bǔ)償為0.02%FS/℃; 每次輸入數(shù)字為8位二進(jìn)制數(shù); 低功耗,20mW; 邏輯電平輸入與TTL兼容; 基準(zhǔn)電壓的范圍為10V; 單電源供電,可在+5~+15V 內(nèi)正常工作。,(2)DAC0832的內(nèi)部結(jié)構(gòu),該轉(zhuǎn)換器由輸入寄存器和DAC寄存器構(gòu)成兩級(jí)數(shù)據(jù)輸入鎖存。使用時(shí)數(shù)據(jù)輸入可以采用兩級(jí)鎖存(雙鎖存)形式,或單級(jí)鎖存(一級(jí)鎖存,一級(jí)直通)形式,或直接輸入(兩級(jí)直通)形式。 此外,由3個(gè)與門(mén)電路可組成寄存器輸出控制邏輯電路,該邏輯電路的功能是進(jìn)行數(shù)據(jù)鎖存控制。當(dāng) =0時(shí),輸入數(shù)據(jù)被鎖存;當(dāng) =1時(shí),鎖存器的輸出跟隨輸入的數(shù)據(jù)。 D/A轉(zhuǎn)換電路是一個(gè)R-2R T型電阻網(wǎng)絡(luò),可實(shí)現(xiàn)8位數(shù)據(jù)的轉(zhuǎn)換。,(3)DAC0832的引腳 DAC0832為20引腳、雙列直插式封裝。,Vcc:電源線。DAC0832的電源可以在+5~+15V內(nèi)變化。典型使用時(shí)用+15V電源。 AGND和DGND:AGND為模擬量地線,DGND為數(shù)字量地線。使用時(shí),這兩個(gè)接地端應(yīng)始終連在一起。,CS:片選輸入信號(hào),低電平有效。只有當(dāng)CS=0時(shí),這片DAC0832才被選中。 DI0~DI7:8位數(shù)字量輸入端。應(yīng)用時(shí),如果數(shù)據(jù)不足8位,則不用的位一般接地。,,ILE:輸入鎖存允許信號(hào),高電平有效。只有當(dāng)ILE=1時(shí),輸入數(shù)字量才可能進(jìn)入8位輸入寄存器。 WR1:寫(xiě)信號(hào)1,低電平有效,控制輸入寄存器的寫(xiě)入。ILE和WR1信號(hào)控制輸入寄存器是數(shù)據(jù)直通方式還是數(shù)據(jù)鎖存方式:當(dāng)ILE=1且WR1=0時(shí),為輸入寄存器直通方式;當(dāng)ILE=1且WR1=1時(shí),為輸入寄存器鎖存方式。 WR2:寫(xiě)信號(hào)2,低電平有效,控制DAC寄存器的寫(xiě)入。 XFER:數(shù)據(jù)傳送控制輸入信號(hào),低電平有效,控制數(shù)據(jù)從輸入寄存器到DAC寄存器的傳送。WR2和XFER信號(hào)控制DAC寄存器是數(shù)據(jù)直通方式還是數(shù)據(jù)鎖存方式:當(dāng)WR2=0且XFER =0時(shí),為DAC寄存器直通方式;當(dāng)WR2=1或XFER =1時(shí),為DAC寄存器鎖存方式。,,,,,,,,,,,,Vref:參考電壓線。Vref接外部的標(biāo)準(zhǔn)電源,與芯片內(nèi)的電阻網(wǎng)絡(luò)相連接,該電壓可正可負(fù),范圍為-10~+10V。 Iout1和Iout2:電流輸出端。Iout1為DAC電流輸出1,當(dāng)DAC寄存器中的數(shù)據(jù)為0xFF時(shí),輸出電流最大,當(dāng)DAC寄存器中的數(shù)據(jù)為0x00時(shí),輸出電流為0。Iout2為DAC電流輸出2。DAC轉(zhuǎn)換器的特性之一是Iout1+I(xiàn)out2=常數(shù)。在實(shí)際使用時(shí),總是將電流轉(zhuǎn)為電壓來(lái)使用,即將Iout1和Iout2加到一個(gè)運(yùn)算放大器的輸入端。,Rfb:運(yùn)算放大器的反饋電阻端,電阻(15kΩ)已固化在芯片中。因?yàn)镈AC0832是電流輸出型D/A轉(zhuǎn)換器,為得到電壓的轉(zhuǎn)換輸出,使用時(shí)需在兩個(gè)電流輸出端接運(yùn)算放大器,Rfb即為運(yùn)算放大器的反饋電阻。,圖9.5 運(yùn)算放大器的接法,(4)DAC0832的工作原理,將數(shù)字量的每一位按權(quán)值分別轉(zhuǎn)換成模擬量,再通過(guò)運(yùn)算放大器求和相加,D/A轉(zhuǎn)換器內(nèi)部有一個(gè)解碼網(wǎng)絡(luò),以實(shí)現(xiàn)按權(quán)值分別進(jìn)行D/A轉(zhuǎn)換。,(5)DAC0832的輸出,DAC0832是電流輸出型D/A轉(zhuǎn)換器。,圖9.6 DAC0832單極性電壓輸出電路,單極性輸出運(yùn)放: Vout=-Iout1Rfb =-BVref/256,雙極性輸出運(yùn)放: Vout = -( Vout1/R +Vref/2R )2R = -2Vout1-Vref = 2BVref/256-Vref = BVref/128-Vref = Vref(B-128)/128,圖9.7 DAC0832雙極性電壓輸出電路,當(dāng)Vref為正,數(shù)字量在0x01~0x7F之間變化時(shí),Vout為負(fù)值;當(dāng)數(shù)字量在0x80~0xFF之間變化時(shí),Vout為正值。,(1)直通方式下的接口電路 直通方式是數(shù)據(jù)直接輸入(兩級(jí)直通)的形式。 兩個(gè)8位數(shù)據(jù)寄存器都處于數(shù)據(jù)接收狀態(tài),LE1=1,LE2=1,ILE=1,而WR1、WR2、CS和XFER均為0。輸入數(shù)據(jù)直接送到內(nèi)部D/A轉(zhuǎn)換器去轉(zhuǎn)換。,2.DAC0832與51單片機(jī)的接口電路,DAC0832的工作方式:直通方式、單緩沖方式和雙緩沖方式,圖9.8 直通方式下89C51與DAC0832的連接圖,(2)單緩沖方式下的接口電路 單緩沖方式是單級(jí)鎖存(一級(jí)鎖存,一級(jí)直通)形式, 就是使DAC0832的兩個(gè)8位數(shù)據(jù)寄存器中有一個(gè)處于直通方式,而另一個(gè)處于受控的鎖存方式,或者兩個(gè)8位數(shù)據(jù)寄存器處于同時(shí)受控的方式,即同時(shí)送數(shù),同時(shí)鎖存。,① 在單緩沖工作方式下,可以將8位DAC寄存器置于直通方式。為此,應(yīng)將WR2和XFER接地,而輸入寄存器的工作狀態(tài)受單片機(jī)的控制。,WR=0,P2.7=0, DAC0832的地址為 0x7FFF, 將數(shù)字量0x08轉(zhuǎn)換為模擬量的程序: #define DAC0832 XBYTE[0x7FFF] DAC0832=0x08; 或 output(0x7FFF,0x08);,②兩個(gè)輸入寄存器同時(shí)受控的連接方法,WR1和WR2一起接89C51的WR,CS和XFER共同接89C51的P2.7,因此兩個(gè)寄存器的地址相同。,(3)雙緩沖方式下的接口電路 雙緩沖方式的數(shù)據(jù)輸入可以采用兩級(jí)鎖存(雙鎖存)的形式,就是把DAC0832的兩個(gè)鎖存器都接成受控鎖存方式。DAC0832的WR1、WR2、CS和XFER都受單片機(jī)送來(lái)的信號(hào)的控制。,當(dāng) WR=0,P2.7=0,P2.6=1,8位輸入寄存器處于送數(shù)狀態(tài), 8位DAC寄存器處于鎖存狀態(tài),不能進(jìn)行D/A轉(zhuǎn)換。,雙緩沖方式下89C51與兩片DAC0832的連接圖,如DAC0832的8位輸入寄存器地址為0x7FFF, WR=0,P2.7=1,P2.6=0,8位DAC寄存器處于送數(shù)據(jù)狀態(tài),開(kāi)始進(jìn)行D/A轉(zhuǎn)換。DAC0832的8位DAC寄存器的地址為0xBFFF,將一個(gè)數(shù)字量轉(zhuǎn)換為模擬量的程序:,#define DAC0832_1 XBYTE[0xBFFF] #define DAC0832_2 XBYTE[0x7FFF] DAC0832_1=0x08; DAC0832_2=0x08; 或 output(0xBFFF, 0x08) ; output(0x7FFF, 0x08) ;,1.任務(wù)要求,9.1.4 燈光亮度調(diào)節(jié)器的設(shè)計(jì),用AT89C51單片機(jī)和DAC0832控制一個(gè)發(fā)光二極管,使發(fā)光二極管的亮度逐漸變暗,再逐漸變亮,不斷循環(huán)。,2.任務(wù)分析,改變發(fā)光二極管的亮度,就要改變通過(guò)發(fā)光二極管的電流。方法很多,利用AT89C51控制DAC0832數(shù)模轉(zhuǎn)換芯片,DAC0832的輸出轉(zhuǎn)換成電壓去驅(qū)動(dòng)發(fā)光二極管。當(dāng)DAC0832的輸入數(shù)字量變化時(shí),輸出電壓改變,通過(guò)發(fā)光二極管的電流變化,發(fā)光二極管的亮度就改變。,3.任務(wù)設(shè)計(jì),(1)器件選擇,(2)硬件原理圖設(shè)計(jì) DAC0832單緩沖方式, P2和P0決定地址,片選信號(hào)CS低電平有效,P2.7為0,DAC0832的地址為0x7FFF。,(3)軟件程序設(shè)計(jì): #include #include #define uint unsigned int #define uchar unsigned char #define DAC0832 XBYTE[0x7FFF] //延時(shí)子程序 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t120;t++); },//主程序控制燈光亮度變化 void main() { uchar i; while(1) {for(i=256;i0;i--) {AC0832=i; DelayMS(1); } for(i=0;i256;i++) {AC0832=i; DelayMS(1); } } },(4)軟硬件聯(lián)合調(diào)試 在Protus環(huán)境下,將編譯好的軟件下載到AT89C51中運(yùn)行,可以看到LED燈如任務(wù)要求的一樣先由亮逐漸變暗,再由暗逐漸變亮。,1.任務(wù)要求,任務(wù)9.2 信號(hào)發(fā)生器的設(shè)計(jì),用單片機(jī)AT89C51和D/A轉(zhuǎn)換芯片DAC0832組成的信號(hào)發(fā)生器生成要求周期和幅度(0V~+5V)的鋸齒波、三角波、方波或正弦波。,2.任務(wù)分析,鋸齒波:向DAC0832反復(fù)送入0x00~0xFF數(shù)據(jù),就會(huì)生成 幅度為0V~+5V的鋸齒波 三角波:向DAC0832反復(fù)送入0x00~0xFF和0xFF ~0x00數(shù) 據(jù),就會(huì)生成幅度為0V~+5V的三角波,方波:向DAC0832送入一定時(shí)長(zhǎng)的0x00和一定時(shí)長(zhǎng)的0xFF, 就會(huì)生成幅度為0V~+5V的方波,波形的周期與單片機(jī)的機(jī)器周期和程序中的延時(shí)長(zhǎng)短相關(guān)。,正弦波:等時(shí)間間隔分割正弦信號(hào),計(jì)算出分割時(shí)刻的信 號(hào)幅值,將幅值對(duì)應(yīng)的數(shù)字量存儲(chǔ)到ROM中,然后 用查表的方法取出這些取樣值,送到DAC0832轉(zhuǎn)換 后輸出,那么輸出信號(hào)就是正弦波形。,如:波形頻率為50Hz的正弦波信號(hào), 正弦波信號(hào)以5作為1個(gè)階梯, 則分成 360/5=72份, 時(shí)間間隔為 20ms/72=0.278ms。 當(dāng)參考電壓為-5V時(shí),72個(gè)采樣值、輸 出電壓值、正弦值、角度如表9.2所示。,表9.2 正弦波數(shù)據(jù)表,3.任務(wù)設(shè)計(jì),(1)器件選擇,(2)硬件原理圖設(shè)計(jì) DAC0832工作于單緩沖方式,地址為0x7FFF。Vref接-5V電壓,輸出的單極性電壓在0~+5V之間變化。,(3)軟件程序設(shè)計(jì): ①產(chǎn)生鋸齒波的源程序如下: #include #include #define uint unsigned int #define uchar unsigned char #define DAC0832 XBYTE[0x7FFF] //延時(shí)子程序 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t120;t++); },// 主程序生成鋸齒波 void main() { uchar i; while(1) {for(i=0;i256;i++) DAC0832=i; DelayMS(1); } },②產(chǎn)生三角波的源程序如下: #include #include #define uint unsigned int #define uchar unsigned char #define DAC0832 XBYTE[0x7FFF] //延時(shí)子程序 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t120;t++); },// 主程序生成三角波 void main() { uchar i; while(1) {for(i=0;i0;i--) DAC0832=i; DelayMS(1); } },③產(chǎn)生正弦波的源程序如下: #include #include #define uint unsigned int #define uchar unsigned char #define DAC0832 XBYTE[0x7FFF],//初始化正弦波波形數(shù)據(jù)數(shù)組 uchar code data[ ]={0x7F,0x8A,0x95,0xA0,0xAB,0XB5, 0xBF,0xC8,0xD1,0xD9,0xE1,0xE7,0xED,0xF3, 0xF7,0xFA,0xFD,0xFE,0xFF,0xFE,0xFD,0xFA, 0xBF,0xF3,0xED,0xE7,0xE1,0xD9,0xD1,0xC8, 0xBF,0xB5,0xAB,0xA0,0x95,0x8A,0x7F,0x75, 0x6A,0x5F,0x54,0x4A,0x40,0x36,0x2D,0x25, 0x1E,0x17,0x11,0x0C,0x07,0x04,0x02,0x01, 0x00,0x01,0x02,0x04,0x07,0x0C,0x11,0x17, 0x1E,0x25,0x2D,0x36,0x40,0x4A,0x54,0x5F, 0x6A,0x75};,//延時(shí)子程序 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t120;t++); } //主程序生成正弦波 void main() { uchar i; while(1) {for(i=0;i72;i++) DAC0832= data[i]; DelayMS(1); } },(4)軟硬件聯(lián)合調(diào)試 將上面相應(yīng)波形的程序編譯為*.hex文件后,在Proteus繪制的原理圖中,將*.hex文件加載到單片機(jī)AT89C51中運(yùn)行,在虛擬示波器上可以看到對(duì)應(yīng)的波形圖。在Proteus仿真運(yùn)行過(guò)程中可能會(huì)提示CPU過(guò)載,這時(shí)虛擬示波器可能會(huì)無(wú)法實(shí)時(shí)顯示波形,可將虛擬示波器通道A中指向1的黃色旋鈕從1開(kāi)始先正向旋轉(zhuǎn)一圈,再反向旋轉(zhuǎn)一圈,這樣會(huì)使虛擬示波器盡快刷新顯示波形。,1.PCF8591簡(jiǎn)介,項(xiàng)目拓展 串行D/A轉(zhuǎn)換芯片PCF8591在實(shí)驗(yàn)板上的應(yīng)用,PCF8591是一個(gè)單片集成的具有I2C總線接口的8位A/D及D/A轉(zhuǎn)換器,有4路A/D輸入,1路D/A輸出。PCF8591的輸入輸出地址、控制和數(shù)據(jù)信號(hào)都是通過(guò)I2C總線以串行的方式進(jìn)行傳輸。,PCF8591的主要特性: 單獨(dú)供電 PCF8591的操作電壓范圍+2.5V~+6V 低待機(jī)電流 通過(guò)IC總線串行輸入/輸出 PCF8591通過(guò)3個(gè)硬件地址引腳尋址 PCF8591的采樣率由IC總線速率決定 4個(gè)模擬輸入可編程為單端型或差分輸入 自動(dòng)增量頻道選擇 PCF8591的模擬電壓范圍從VSS到VDD PCF8591內(nèi)置跟蹤保持電路 8-bit逐次逼近A/D轉(zhuǎn)換器 通過(guò)1路模擬輸出實(shí)現(xiàn)DAC增益,2.PCF8591內(nèi)部結(jié)構(gòu)框圖,3.PCF8591引腳功能,4.PCF8591工作原理,PCF8591采用典型的I2C總線接口器件尋址方法,即總線地址由器件地址(1001)、引腳地址(由A0~A2接地或+5V來(lái)確定,接地代表0,接+5V代表1)、方向位(即R/W)組成。在I2C總線系統(tǒng)中最多可接8個(gè)這樣的器件。,表9.5 PCF8591總線地址,R/W=1表示讀操作,R/W=0表示寫(xiě)操作。如果將A0~A2接地,則讀地址為91H;寫(xiě)地址為90H。 地址字節(jié):由器件地址、引腳地址、方向位組成,它是通信時(shí)主機(jī)發(fā)送的第一字節(jié)數(shù)據(jù)。 控制字節(jié):用于控制PCF8951的輸入方式、輸入通道、D/A轉(zhuǎn)換等,是通信時(shí)主機(jī)發(fā)送的第二字節(jié)數(shù)據(jù),其格式如下表。,,,,,,,,,,,,,,,,,D/A轉(zhuǎn)換的數(shù)據(jù)輸入和A/D轉(zhuǎn)換的數(shù)據(jù)輸出都是通過(guò)I2C總線串行輸入和輸出的。因此PCF8951中I2C總線的通信格式包括寫(xiě)數(shù)據(jù)格式和讀數(shù)據(jù)格式。,,,,,,,,,,,,,,,,,PCF8591的I2C總線寫(xiě)數(shù)據(jù)格式:,PCF8591的I2C總線讀數(shù)據(jù)格式:,5.I2C總線,(1)I2C總線數(shù)據(jù)位的傳輸,I2C總線上每傳輸一個(gè)數(shù)據(jù)位必須產(chǎn)生一個(gè)時(shí)鐘脈沖,I2C總線上數(shù)據(jù)傳輸?shù)挠行砸骃DA線上的數(shù)據(jù)必須在時(shí)鐘線SCL的高電平期間保存穩(wěn)定,數(shù)據(jù)線的改變只能在時(shí)鐘線為低電平期間。,I2C總線由2根線:串行數(shù)據(jù)線(SDA)和串行時(shí)鐘線(SCL)。,總線上的每一個(gè)器件都有一個(gè)唯一的地址。,(2)I2C總線數(shù)據(jù)的傳輸,數(shù)據(jù)傳輸中的應(yīng)答:相應(yīng)的應(yīng)答位由接收方(從機(jī))產(chǎn)生,在應(yīng)答的時(shí)鐘脈沖期間,發(fā)送方(主機(jī))應(yīng)釋放SDA線(使其為高電平)。在應(yīng)答過(guò)程中,接收方(從機(jī))必須將數(shù)據(jù)線SDA拉低,使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平。,數(shù)據(jù)傳輸?shù)淖止?jié)格式:發(fā)送到SDA線上的每一個(gè)字節(jié)必須為8位,每次發(fā)送的字節(jié)數(shù)量不受限制,從機(jī)在接收完一個(gè)字節(jié)后向主機(jī)發(fā)送一個(gè)應(yīng)答位,主機(jī)在收到從機(jī)應(yīng)答后才會(huì)發(fā)送第二字節(jié)數(shù)據(jù),發(fā)送數(shù)據(jù)時(shí)先發(fā)數(shù)據(jù)的最高位。,(3) I2C總線的傳輸協(xié)議,主機(jī)寫(xiě)數(shù)據(jù)到從機(jī)的通信格式:,主機(jī)從從機(jī)中讀數(shù)據(jù)的通信格式:,6. 實(shí)驗(yàn)板上鋸齒波信號(hào)的輸出,(1)STC89C52控制PCF8591生成鋸齒波信號(hào)的電路設(shè)計(jì),將U15的J23的19和20腳用杜邦線與J8的SDA和SCL腳連接。,(2)生成鋸齒波的軟件設(shè)計(jì),① 主程序main.c: // PCF8591 的DA轉(zhuǎn)換程序 #include #include “i2c.h“ #define AddWr 0x90 //寫(xiě)數(shù)據(jù)地址 #define AddRd 0x91 //讀數(shù)據(jù)地址 //鋸齒波數(shù)據(jù)表,表格數(shù)值越多,波形越平滑 unsigned char code tab[] = { 0,10,20,30,40,50,60,70,80,90, 100, 110,120,130,140,150,160,170,180, 190,200, 210,220,230,240,250 }; //定義全局變量 extern bit ack;,//寫(xiě)入DA轉(zhuǎn)換數(shù)值,dat表示需要輸入轉(zhuǎn)換的DA數(shù)值,從0-255 bit WriteDAC(unsigned char dat,unsigned char num) { unsigned char i; Start_I2c(); //啟動(dòng)總線 SendByte(AddWr); //發(fā)送器件地址 if(ack==0) return(0); SendByte(0x40); //發(fā)送器件子地址 if(ack==0) return(0); for(i=0;inum;i++) { SendByte(dat); //發(fā)送數(shù)據(jù) if(ack==0) return(0); } Stop_I2c(); },//主程序 main() { unsigned char i; while (1) { for(i=0;i26;i++) WriteDAC(tab1[i],1); } },②I2C頭文件i2c.h: #ifndef __I2C_H__ #define __I2C_H__ #include //頭文件的包含 #include #define _Nop() _nop_() //定義空指令 //啟動(dòng)總線 void Start_I2c(); //結(jié)束總線 void Stop_I2c(); //字節(jié)數(shù)據(jù)傳送函數(shù) void SendByte(unsigned char c); #endif,③I2C程序i2c.c: //函數(shù)是采用軟件延時(shí)的方法產(chǎn)生SCL脈沖, 晶振頻率是12MHz,即機(jī)器周期為1us #include “i2c.h“ #define _Nop() _nop_() //定義空指令 bit ack; //應(yīng)答標(biāo)志位 sbit SDA=P2^1; sbit SCL=P2^0;、 //啟動(dòng)總線 void Start_I2c() { SDA=1; //發(fā)送起始條件的數(shù)據(jù)信號(hào) _Nop(); SCL=1; _Nop(); //起始條件建立時(shí)間大于4.7us,延時(shí) _Nop(); _Nop(); _Nop(); _Nop();,SDA=0; //發(fā)送起始信號(hào) _Nop(); //起始條件鎖定時(shí)間大于4μ _Nop(); _Nop(); _Nop(); _Nop(); SCL=0; //鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) _Nop(); _Nop(); } //結(jié)束總線 void Stop_I2c() { SDA=0; //發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào) _Nop(); //發(fā)送結(jié)束條件的時(shí)鐘信號(hào) SCL=1; //結(jié)束條件建立時(shí)間大于4μ _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); SDA=1; //發(fā)送I2C總線結(jié)束信號(hào) _Nop(); _Nop(); _Nop(); _Nop(); },//字節(jié)數(shù)據(jù)傳送函數(shù) void SendByte(unsigned char c) { unsigned char BitCnt; for(BitCnt=0;BitCnt8;BitCnt++) //要傳送的數(shù)據(jù)長(zhǎng)度為8位 { if((cBitCnt) },_Nop(); _Nop(); SDA=1; //8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位 _Nop(); _Nop(); SCL=1; _Nop(); _Nop(); _Nop(); if(SDA==1) ack=0; else ack=1; //判斷是否接收到應(yīng)答信號(hào) SCL=0; _Nop(); _Nop(); },將上面的幾個(gè)程序放入Kiel C51的一個(gè)工程文件中進(jìn)行編譯,生成*.hex文件后,通過(guò)USB口下載到實(shí)驗(yàn)板中。程序運(yùn)行之后,用示波器測(cè)量J33的上面一個(gè)OUT腳,調(diào)節(jié)示波器,可以清晰地看到鋸齒波波形。,注意:在使用PCF8591進(jìn)行D/A轉(zhuǎn)換時(shí),硬件電路連接非常簡(jiǎn)單,軟件相對(duì)比較復(fù)雜,單片機(jī)通過(guò)I2C總線發(fā)送數(shù)字信號(hào),所以一定要嚴(yán)格按照I2C總線的通信格式要求發(fā)送數(shù)據(jù)。,項(xiàng)目小結(jié),本項(xiàng)目介紹了單片機(jī)常用的外接8位并行D/A轉(zhuǎn)換芯片DAC0832的原理和應(yīng)用。通過(guò)兩個(gè)任務(wù)學(xué)習(xí)了采用單片機(jī)和DAC0832實(shí)現(xiàn)各種信號(hào)發(fā)生器的設(shè)計(jì)方法。 DAC0832完成數(shù)字信號(hào)到模擬信號(hào)的轉(zhuǎn)換后是以電流形式輸出,必須外接運(yùn)算放大器把電流轉(zhuǎn)換成電壓信號(hào)。DAC0832 與單片機(jī)根據(jù)接口方式不同有三種工作方式:直通方式、單緩沖方式和雙緩沖方式。實(shí)際應(yīng)用中根據(jù)實(shí)際情況選擇合適的工作方式。 在介紹并行D/A轉(zhuǎn)換芯片的應(yīng)用之后,以PCF8591為例介紹了串行D/A轉(zhuǎn)換芯片的特點(diǎn)、工作原理以及在實(shí)驗(yàn)板上的應(yīng)用方法。,思考與訓(xùn)練,(一)知識(shí)思考: 在單片機(jī)應(yīng)用系統(tǒng)中為什么要進(jìn)行A/D和D/A轉(zhuǎn)換,它們的作用是什么? DAC0832與8051單片機(jī)接口時(shí)有哪些控制信號(hào)?作用分別是什么? 使用DAC0832時(shí),單緩沖方式如何工作?雙緩沖方式如何工作?它們各占用8051外部RAM的哪幾個(gè)單元?軟件編程有什么區(qū)別? 怎樣用DAC0832得到電壓輸出信號(hào)?有哪幾種方法? 多片D/A轉(zhuǎn)換器為什么必須采用雙緩沖接口方式? PCF8591的主要特點(diǎn)是什么?簡(jiǎn)述其工作原理。 PCF8591輸入和輸出數(shù)字信號(hào)的格式各是怎樣的? I2C總線的特點(diǎn)和通信格式是怎樣的?,(二)項(xiàng)目訓(xùn)練: 1. 試用DAC0832芯片設(shè)計(jì)單緩沖方式的D/A轉(zhuǎn)換器接口電路,并編寫(xiě)2個(gè)程序,分別使DAC0832輸出負(fù)向鋸齒波和15個(gè)正向階梯波。 2. 根據(jù)圖9.17的電路接法,判斷DAC0832是工作在直通方式、單緩沖方式還是雙緩沖方式?欲用DAC0832產(chǎn)生如圖9.18所示波形,則如何編程?(設(shè)滿量程電壓5V,周期為2s)。 3. 參照任務(wù)2,將圖9.18的硬件電路作修改,設(shè)計(jì)成一個(gè)完整的信號(hào)發(fā)生器,通過(guò)按鍵控制輸出鋸齒波、三角波、方波或正弦波,并寫(xiě)出完整的程序。,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 信號(hào)發(fā)生器 設(shè)計(jì)
鏈接地址:http://m.jqnhouse.com/p-2479104.html