<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 一種基于AT89C51低頻信號源的設計

          一種基于AT89C51低頻信號源的設計

          作者: 時間:2009-08-06 來源:網(wǎng)絡 收藏

          函數(shù)發(fā)生器是一種常用的,它廣泛地應用在電子技術實驗。目前常用的函數(shù)發(fā)生器,一般可靠性較差,準確度較低,難以滿足科研和高精度實驗的需要?,F(xiàn)用單片機和支持軟件及其外設電路構成的智能函數(shù)信號發(fā)生器,采用編程的方法來實現(xiàn)波形,將產(chǎn)生波形的程序用子程序的形式編寫,在需要波形時再調(diào)用相應子程序,經(jīng)過D/A轉(zhuǎn)換、運算放大器處理后,作為該輸出,其線路簡捷、功能強大、性價比較高。

          本文引用地址:http://www.ex-cimer.com/article/173649.htm

          1 主要芯片介紹

          1.1 單片機芯片

          1.1.1 引腳圖

          本文采用的單片機芯是,它是采用高速CMOS制造工藝,通用型為40腳雙列直插封裝方式,其引腳如圖1所示。只要將+5 V電源接到VCC和VSS兩端,將晶振接到XTAL1和XTAL2兩端,給EA端加高電平控制電壓,然后將機器碼固化到內(nèi)就可以使用了。

          1.1.2 單片機基本功能

          單片機基本系統(tǒng)即單片機正常工作不可缺少的部分,進行都要在此系統(tǒng)基礎上進行。

          (1)外接晶振引腳XTAL1與XTAL2

          單片機之所以要加振蕩器是因為單片機內(nèi)的CPU在執(zhí)行指定程序時,要經(jīng)過“取指”、“譯碼”,再定時給相關電路發(fā)出控制信號,以實現(xiàn)“機器碼指令”所要求的功能。這就要求內(nèi)部必須有一個基準時鐘??赏ㄟ^外接晶振或振蕩信號二種方式來實現(xiàn),一般采用外接晶振的方法較方便。

          XTAL1(19),XTAL2(18)為外接晶振的兩個引腳。接入晶振時,還要接入兩個20~30 pF的瓷片電容C1,C2,晶振頻率因單片機工作速度而異,Intel MCS-51系列為1.2~12 MHz,ATMEL89C系列為0~24 MHz,目前常采用6 MHz,11.059 MHz和12 MHz。石英晶振起振后,XTAL2(18)腳有一個3 V左右的正弦波。C1,C2短路、晶振不良,AT89C51(18),(19)腳內(nèi)部反相器會損壞。VCC電源未加上等故障可能造成晶振不起振,使單片機無法工作。當采用外部振蕩器時,信號接入(19)腳,(18)腳懸浮。振蕩器的12分頻為一個機器周期,當外接12 MHz晶振時,一個機器周期為1μs。MCS-51大多數(shù)指令為一個機器周期。

          (2)復位與復位電路

          單片機必須進行復位,是因為單片機內(nèi)的CPU“取指”過程即為CPU從PC指針所指定的程序存儲器ROM地址單元中讀取“機器碼”的過程。單片機加電后,PC指針應指向ROM中某個固定的單元,當然,程序開始的第一條指令也應放在ROM的這一地址單元內(nèi),這樣整個程序才能有序地執(zhí)行。這個單元就是 ROM的0000H單元。只有上電復位正常后,PC值才為0000H,即指向ROM的0000H單元。此外,專用寄存器SFR中的SP為07H,即指向片內(nèi)數(shù)據(jù)存儲器(片內(nèi)RAM)07H單元,P0~P3值為0FFH,其余的專用寄存器值大多為00H。

          復位的方法:當振蕩器正常工作時,RST(9)腳上出現(xiàn)的兩個機器周期的高電平將使單片機有效復位??紤]到振蕩器有一定的起振時間,該引腳必須保持 10 ms以上高電平,才能有效復位。復位電路有開機自動復位和手動復位。注意:復位信號為2個以上機器周期的高電平,單片機復位后正常工作時應該為低電平,如果未加復位電平或復位后復位電平仍未撤除,則單片機不能正常工作,此時,可檢查RST電壓及相關器件。

          在掉電期問RST/VPD引腳如接入備用電源VPD(5 V±0.5 V),則可保存片內(nèi)數(shù)據(jù)。當VCC下降到某一規(guī)定值時,VPD便向片內(nèi)RAM供電。

          (3)EA/VDD片內(nèi)程序存儲器選用端

          單片機復位后,PC指針可能指向片內(nèi)ROM0000H或片外ROM0000H單元,這取決于EA/VDD(31)腳外接高電平(指向片內(nèi) ROM0000H)還是低電平(指向片外ROM0000H)。AT89C51內(nèi)部有4 kB ROM,這時EA(31)腳需外接高電位VCC。

          在編程期間,此引腳作編程電壓VDD的輸入端。

          1.2 關于DAC0832

          DAC0832是具有20條引腳的雙列直插式COMS器件,它內(nèi)部具有兩級數(shù)據(jù)寄存器,完成8位電流D/A轉(zhuǎn)換。其結構框圖及信號引線如圖2所示。

          以下是其三種不同的工作方式:

          (1)直通方式

          將WR1,WR2,XFER,CS接地,ILE接高電平,就能使得兩個寄存器的輸出跟隨輸入的數(shù)字量變化,DAC0832的輸出也同時跟隨變化。直通方式常用于連續(xù)反饋控制的環(huán)路中。

          (2)單緩沖方式

          單緩沖方式就是將其中一個寄存器工作在直通狀態(tài),另一個處于受控的鎖存器狀態(tài)。在實際應用中,如果只有一路模擬量輸出,或雖有幾路模擬量但并不要求同步輸出,就可采用單緩沖方式。

          (3)雙緩沖方式

          所謂雙緩沖方式就是將兩個寄存器都處于受控的鎖存方式。為了實現(xiàn)兩個寄存器的可控,應當給它們各分配一個端口地址,以便能按照端口地址進行操作。 D/A轉(zhuǎn)換采用兩步寫操作來完成??稍贒AC0832轉(zhuǎn)換輸出前一個數(shù)據(jù)的同時,將下一個數(shù)據(jù)傳送到輸入寄存器,以提高D/A轉(zhuǎn)換速度。還可用于多路數(shù)模轉(zhuǎn)換系統(tǒng),以實現(xiàn)多路模擬信號同步輸出的目的。

          在所的電路中DAC0832采用的是單緩沖方式。

          2 原理概述

          單片機通過擴展D/A轉(zhuǎn)換接口,結合靈活的程序可以方便地產(chǎn)生各種信號。下面以正弦信號為例進行說明。

          2.1 正弦波信號的產(chǎn)生原理

          正弦波的產(chǎn)生比較特殊,它不能由單片機直接產(chǎn)生,它只能產(chǎn)生如圖3所示的階梯波來向正弦波逼近。

          很顯然,在一個周期內(nèi)階梯波的階梯數(shù)目越多,單片機輸出的波形也就越接近正弦波。

          先假定正弦波的振幅是2.56 V,則波谷對應的數(shù)字量為最小值00H,波峰對應的數(shù)字量為最大值FFH。將正弦波的第一個周期的波形按角度均分為若干等份,并計算出各點對應的電壓值,電壓值計算方法:Vx=2.5?(1+sinθ),因為00H~FFH對應的數(shù)字量為0~255,所以根據(jù)算出的電壓就可直接寫出各點所對應的數(shù)字量。單片機將一個周期的數(shù)字量存入一定的存儲區(qū)域中,然后依次循環(huán)取出這些數(shù)字量,并送D/A電路轉(zhuǎn)換成階梯波,即近似的正弦波輸出。所輸出的正弦波的幅值可以通過D/A轉(zhuǎn)換電路實現(xiàn)。2.2 變頻原理

          單片機產(chǎn)生的階梯逼近正弦波對應的程序中加入了軟件延時,最后再加入根據(jù)20H單元中的內(nèi)容進行延時的延時程序,那么20H單元中的內(nèi)容一變,則輸出正弦波的頻率也就發(fā)生了變化。即:就是把一個正弦信號(階梯逼近)取樣、量化、編碼,形成一個正弦函數(shù)表儲存在了ROM中。合成時改變相位增量,由于相位增量不同,則一個周期內(nèi)的取樣點數(shù)也不同,從而達到頻率合成的目的。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();