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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Cortex-M3學(xué)習(xí)日志(五)-- -- DAC實驗

          Cortex-M3學(xué)習(xí)日志(五)-- -- DAC實驗

          作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
          終于逮了個忙里偷閑的機(jī)會,就再學(xué)一下LPC1768的外圍功能吧,循序漸進(jìn)是學(xué)習(xí)的基本規(guī)則,也許LPC1768的DAC與8位單片機(jī)16位單片機(jī)里面集成的DAC操作類似,但是既然這是懶貓的學(xué)習(xí)日志,就順便把DAC再好好復(fù)習(xí)一下了,或許能品出個什么味來^_^DAC是Digital to Analog Converter的縮寫,中文名就是數(shù)模轉(zhuǎn)換器,D/A轉(zhuǎn)換器一般由數(shù)碼寄存器、模擬電子開關(guān)電路、解碼網(wǎng)絡(luò)、求和電路及基準(zhǔn)電壓等幾部分組成。如下圖所示:

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

          圖1-1 DAC原理框圖

          數(shù)字量以串行或并行方式輸入,存儲于數(shù)碼寄存器中,數(shù)碼寄存器輸出的名位數(shù)碼分別控制對應(yīng)的模擬開關(guān),使數(shù)碼為1的位在位權(quán)網(wǎng)絡(luò)上產(chǎn)生與其值成正比的電流值或電壓值,再由求和電路將各權(quán)值相加,即得到數(shù)字量對應(yīng)的模擬量。按解碼網(wǎng)絡(luò)結(jié)構(gòu)不同可以將DAC轉(zhuǎn)換器分成T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器、倒T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器、權(quán)電流D/A轉(zhuǎn)換器、權(quán)電阻網(wǎng)絡(luò)轉(zhuǎn)換器。

          1、T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器,其簡單模型如下圖所示:

          圖1-2 T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器模型

          2、倒T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器簡易模型

          圖1-3倒T型電阻網(wǎng)絡(luò)D/A轉(zhuǎn)換器

          3、權(quán)電流D/A轉(zhuǎn)換器簡易模型如下圖所示:

          圖1-4權(quán)電流D/A轉(zhuǎn)換器簡易模型

          4、權(quán)電阻網(wǎng)絡(luò)轉(zhuǎn)換器簡易模型如下圖所示:

          1-5權(quán)電阻網(wǎng)絡(luò)轉(zhuǎn)換器簡易模型

          按模擬電子開關(guān)的電路的不同,也可以將D/A轉(zhuǎn)換器分為CMOS開關(guān)型D/A轉(zhuǎn)換器(速度要求不高),雙極型D/A轉(zhuǎn)換器。而雙極型D/A轉(zhuǎn)換器雙可以劃分為電流開關(guān)型(速度要求較高)與ECL電流開關(guān)型(轉(zhuǎn)換速度更高)兩種。如果對歐姆定律不陌生的話,我想上面各個模型是如何輸出電壓的應(yīng)該就可以理解了,在這里就不總結(jié)公式了,因為這只是模型,對應(yīng),實際電路與模型是有所出入的,在實際應(yīng)用中要著重關(guān)注一下以下幾個參數(shù):

          1、分辨率

          D/A轉(zhuǎn)換器的分辨率用最小分辨電壓VLSB與滿量程輸出電壓VFSV的比值來表示:


          從上式可以看出D/A轉(zhuǎn)換器的分辨率只與輸入二進(jìn)制數(shù)的位數(shù)n有關(guān),因此大部分情況下我們直接把n做為分辨率如8位,10位,12位等,由此我們也可以知道分辨率值越小,分辨能力越高。

          2、轉(zhuǎn)換精度

          在D/A轉(zhuǎn)換器中,一般用轉(zhuǎn)換誤差來描述轉(zhuǎn)換精度。DAC轉(zhuǎn)換誤差是指實際輸出模擬電壓值與理想值的最大偏差。轉(zhuǎn)換誤差是一個綜合性的靜態(tài)指標(biāo),主要由三部分構(gòu)成:

          1)非線性誤差:一般是由于模擬電子開關(guān)的導(dǎo)通電阻和導(dǎo)通壓降及R、2R電阻值的偏差引起。

          2)漂移誤差:一般是由于運(yùn)算放大器的零點(diǎn)漂移引起。

          3)增益誤差:一般是由于參考電壓偏離標(biāo)準(zhǔn)值、運(yùn)放增益不穩(wěn)定引起。

          3、轉(zhuǎn)換速度

          轉(zhuǎn)換速度一般由建立時間決定,從輸入由全0突變?nèi)?起,到輸出電壓穩(wěn)定(最大輸出電壓正負(fù)二分之一最小輸出電壓)止,稱為DAC轉(zhuǎn)換時間。它是DAC最大響應(yīng)時間。例如,DAC 5G7520響應(yīng)時間不大于500ns。

          除了以上三個常見的指標(biāo)D/A轉(zhuǎn)換器的指標(biāo)還包括電源抑制比、功率消耗、溫度系數(shù)以及輸入高、低邏輯電平的數(shù)值等技術(shù)指標(biāo)。關(guān)于D/A的應(yīng)用,應(yīng)該說在電子系統(tǒng)中應(yīng)用相當(dāng)廣泛,除了在微機(jī)系統(tǒng)中將數(shù)字量轉(zhuǎn)換為模擬量典型應(yīng)用之外,還常用于波形生成,名種數(shù)字式的或編程應(yīng)用等。

          好了,關(guān)于D/A轉(zhuǎn)換器的知識暫時總結(jié)到這,更深入的知道還需要翻一下模電,信號與線性系統(tǒng)(好像里面有奈奎斯特定理,與采樣有關(guān)),微電子,放大器等方面的書籍。下面簡單總結(jié)一下LPC1768內(nèi)部集成的D/A轉(zhuǎn)換器。LPC1768內(nèi)部集成的是10位模數(shù)轉(zhuǎn)換器,它是電阻串聯(lián)結(jié)構(gòu)的,并且?guī)в芯彌_輸出,最大輸出頻率為1MHz。電阻串聯(lián)結(jié)構(gòu)模型如下圖所示:

          1-6電阻串聯(lián)結(jié)構(gòu)

          涉及到D/A的引腳主要有DAC輸出腳P0.26,參考電壓引腳,用來給D/A轉(zhuǎn)換器提供參考電壓,模擬電源與數(shù)字電源VDD/VSS,這個兩個電源要分開提供,再不使用DAC時也要將這兩個引腳連接到電源,不能懸空,不然系統(tǒng)會不穩(wěn)定。

          DAC的配置也很簡單,首先就是將P0.26設(shè)置為DAC模式,再一個就是配置DAC控制寄存器DACDR。DAC的控制寄存器DACDR的6-15位是DAC的輸出電壓數(shù)字值,這個數(shù)字決定了要輸出的電壓大小,DAC輸出電壓的計算方法是:


          公式中VDAC即指AC的控制寄存器DACDR的6-15位的值,VREF指的是參考電壓,在這次實驗電路中用的是3.3V。LPC1768的DAC功能還有DAM中斷和定時控制功能,它采用又緩沖方式輸出。在這里簡單總結(jié)一下DAM模式,所謂的DAM模式也就是Direct Memory Access,漢語的意思就是直接內(nèi)存訪問,是一種不經(jīng)過CPU而直接從內(nèi)存存取數(shù)據(jù)的數(shù)據(jù)交換模式。在DMA模式下,CPU只須向DMA控制器下達(dá)指令,讓DMA控制器來處理數(shù)據(jù)的傳送,數(shù)據(jù)傳送完畢再把信息反饋給CPU,這樣就很大程度上減輕了CPU資源占有率,可以大大節(jié)省系統(tǒng)資源。DMA模式又可以分為Single-Word DMA(單字節(jié)DMA)和Multi-Word DMA(多字節(jié)DMA)兩種,其中所能達(dá)到的最大傳輸速率也只有16.6MB/s。DMA有兩個技術(shù)特征,首先是直接傳送,其次是塊傳送。

          DMA工作過程

          當(dāng)進(jìn)程要求設(shè)備輸入數(shù)據(jù)時,CPU把準(zhǔn)備存放輸入數(shù)據(jù)的內(nèi)存起始地址以及要傳送的字節(jié)數(shù)分別送入DMA控制器中的內(nèi)存地址寄存器和傳送字節(jié)計數(shù)器。

          發(fā)出數(shù)據(jù)傳輸要求的進(jìn)行進(jìn)入等待狀態(tài)。此時正在執(zhí)行的CPU指令被暫時掛起。進(jìn)程調(diào)度程序調(diào)度其他進(jìn)程占據(jù)CPU。

          輸入設(shè)備不斷地竊取CPU工作周期,將數(shù)據(jù)緩沖寄存器中的數(shù)據(jù)源源不斷地寫入內(nèi)存,直到所要求的字節(jié)全部傳送完畢。

          DMA控制器在傳送完所有字節(jié)時,通過中斷請求線發(fā)出中斷信號。CPU在接收到中斷信號后,轉(zhuǎn)入中斷處理程序進(jìn)行后續(xù)處理。

          中斷處理結(jié)束后,CPU返回到被中斷的進(jìn)程中,或切換到新的進(jìn)程上下文環(huán)境中,繼續(xù)執(zhí)行。

          DMA與中斷的區(qū)別

          中斷方式是在數(shù)據(jù)緩沖寄存器滿之后發(fā)出中斷,要求CPU進(jìn)行中斷處理,而DMA方式則是在所要求傳送的數(shù)據(jù)塊全部傳送結(jié)束時要求CPU進(jìn)行中斷處理。這就大大減少了CPU進(jìn)行中斷處理的次數(shù)。

          中斷方式的數(shù)據(jù)傳送是在中斷處理時由CPU控制完成的,而DMA方式則是在DMA控制器的控制下,不經(jīng)過CPU控制完成的。這就排除了CPU因并行設(shè)備過多而來不及處理以及因速度不匹配而造成數(shù)據(jù)丟失等現(xiàn)象。

          在DMA方式中,由于I/O設(shè)備直接同內(nèi)存發(fā)生成塊的數(shù)據(jù)交換,因此I/O效率比較高。由于DMA技術(shù)可以提高I/O效率,因此在現(xiàn)代計算機(jī)系統(tǒng)中,得到了廣泛的應(yīng)用。許多輸入輸出設(shè)備的控制器,特別是塊設(shè)備的控制器,都支持DMA方式。

          通過上述分析可以看出,DMA控制器功能的強(qiáng)弱,是決定DMA效率的關(guān)鍵因素。DMA控制器需要為每次數(shù)據(jù)的傳送做大量的工作,數(shù)據(jù)傳送單位的增大意味著傳送次數(shù)的減少。另外,DMA方式竊取了時鐘周期,CPU處理效率降低了,要想盡量少地竊取時鐘周期,就要設(shè)法提高DMA控制器的性能,這樣可以較少地影響CPU出理效率。

          好了,關(guān)于DAM的知識先總結(jié)到這,要想使用LPC1768的DAM功能,需要配置D/A轉(zhuǎn)換控制寄存器DACCTRL與DAC轉(zhuǎn)換計數(shù)寄存器DACCNTVAL。這次實驗只是簡單的學(xué)習(xí)怎樣使用DAC,所以沒有用到DAM。下面說一下實驗電路,就是把DAC轉(zhuǎn)換的電壓通過放大器輸出到Speaker,電壓值不同,則Speaker的響度就不一樣,如下圖所示:

          1-7 DAC實驗電路圖

          關(guān)于LM386M已經(jīng)是爛大街的芯片,關(guān)于它的應(yīng)用網(wǎng)上有成大堆的資料可供參考,這里就不總結(jié)它的用法了,下面貼上這次實驗的程序:

          關(guān)于LM386M已經(jīng)是爛大街的芯片,關(guān)于它的應(yīng)用網(wǎng)上有成大堆的資料可供參考,這里就不總結(jié)它的用法了,下面貼上這次實驗的程序:

          一、dac.c程序源代碼

          #include"includes.h"

          void DACInit( void )

          {

          PINCON -> PINSEL1 = 0x00200000;

          }

          void DacOut(unsigned int val)

          {

          DAC -> DACR = ((val << 16)/3300) | DAC_BIAS;

          }

          二、main.c程序部分源代碼

          void DacConver(unsigned int val)

          {

          unsigned int hi = 0;

          unsigned int low = 0;

          hi= val/1000;

          low = val00/100;

          DacVal[16]= (unsigned char)hi + 0x30;

          DacVal[18]= (unsigned char)low + 0x30;

          DacOut(val);

          UARTSend(0,DacVal,25);

          }

          int main(void)

          {

          unsigned int i = 0;

          SystemInit();

          SysTick_Config(SystemFrequency/1000 - 1);

          PortInit();

          DACInit();

          UARTInit(0,19200);

          for(i=0;i<7;i++)

          {

          UARTSend(0,OpenString[i],50);

          }

          DacConver(2000);// 2.0v

          DacConver(2500);// 2.5v

          DacConver(3000);// 3.0v

          DacConver(3300);// 3.0v

          //LedOnMeg[4] = 4+0x30;

          //UART0_SendString (KeyMeg);

          while(1)

          {

          KeyScan();//按鍵掃描

          KeyHandle(); //按鍵處理

          LedHandle(); // Led處理程序

          }

          }

          程序很簡單,就是簡單的測試,能從Speaker聽到響聲,同時我也把結(jié)果發(fā)送到了串口顯示,下面是實驗的結(jié)果:


          1-8實驗執(zhí)行結(jié)果



          關(guān)鍵詞: Cortex-M3DAC實

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();