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

          新聞中心

          EEPW首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 利用雙通道示波器展示傳輸線行為的方法

          利用雙通道示波器展示傳輸線行為的方法

          ——
          作者:BobHaas 時(shí)間:2014-06-26 來源:電子產(chǎn)品世界 收藏
          編者按:摘要:本文采用創(chuàng)新方法,通過雙通道示波器測(cè)量出傳輸線上的駐波,從而利用受控的移動(dòng)圖像展現(xiàn)信號(hào)在傳輸線中的真實(shí)情況。

            2 直接數(shù)字合成

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

            為獲得穩(wěn)定的顯示,就必須產(chǎn)生準(zhǔn)確的頻率。這里的“穩(wěn)定”表示節(jié)點(diǎn)的水平位置或者圖案的最大或最小位置在屏幕上不移動(dòng)。一種實(shí)現(xiàn)辦法,采用具有數(shù)控振蕩器(NCO)2的DDS。NCO采用一個(gè)16位計(jì)數(shù)器,稱之為相位累加器,來實(shí)現(xiàn)。FCLOCK(圖5)為一個(gè)固定的時(shí)鐘頻率遞增量,F(xiàn)cw為調(diào)制量或頻率控制量。FCLOCK遠(yuǎn)遠(yuǎn)高于波形頻率。

            將相位累加器的高8位的值和正弦查找表(LUT)對(duì)應(yīng),然后將查找值發(fā)送至DAC。相位累加器中的值可認(rèn)為對(duì)應(yīng)的是一個(gè)圓上的某一個(gè)點(diǎn);調(diào)制量定義為繞圓周的“步長(zhǎng)”。調(diào)制量越大,繞圓周旋轉(zhuǎn)的越快,因此輸出的頻率也越高。產(chǎn)生的頻率由下式給出:

            FOUT = FCW × FCLOCK/216

            輸出頻率與FCW成正比。本例中,F(xiàn)CLOCK為31.25kHz。FCW值采用841、839和837,計(jì)算得到三個(gè)頻率為:

            F1=841×31250/65536= 401.02Hz
            F2=839×31250/65536= 400.06Hz
            F3=837×31250/65536= 399.11Hz

            這里的頻率表示采用保留兩位小數(shù),但實(shí)際上(F1 – F2和(F2 – F3)是完全相等的。頻率差精確到9位小數(shù)時(shí)為0.953674316Hz。

            3 實(shí)現(xiàn)

            本演示使用® MAX5715 4通道12位數(shù)/模轉(zhuǎn)換器(DAC)的三個(gè)通道來實(shí)現(xiàn),由® Uno板上的Atmel® 處理器驅(qū)動(dòng)。是一個(gè)開放的軟硬件平臺(tái),對(duì)于基于系統(tǒng)開發(fā)環(huán)境,非常方便。 DAC通過SPI(串行外設(shè)接口)很容易和相連,硬件支持SPI接口,Arduino軟件庫(kù)自帶SPI驅(qū)動(dòng)。運(yùn)行Arduino 庫(kù)中的SPI程序初始化AVR SPI硬件。也提供現(xiàn)存的SPI數(shù)據(jù)傳輸?shù)某绦?,但速度太慢,未使用?/p>

            三個(gè)相位累加器采用16的位計(jì)數(shù)器,計(jì)數(shù)器遞增是通過一個(gè)中斷程序來實(shí)現(xiàn),中斷程序由處理器中的一個(gè)定時(shí)器來觸發(fā)。每32µs (1/31.25kHz)中斷一次。利用LUT將兩個(gè)相位累加器值(生成F1和F3)轉(zhuǎn)換為正弦值并然后送給DAC的兩個(gè)通道。將第三個(gè)相位累加器(生成F2)的兩個(gè)最高有效位發(fā)送至第三個(gè)DAC通道,產(chǎn)生一個(gè)4節(jié)拍的觸發(fā)信號(hào)。通過改變觸發(fā)電平,可選擇想要的相位去進(jìn)行開路或短路端接仿真。

            Arduino SPI庫(kù)中的數(shù)據(jù)傳輸程序太慢,導(dǎo)致中斷程序的運(yùn)行時(shí)間超過了中斷周期。因此,改用直接寫至AVR SPI硬件的代碼。

            中斷程序代碼:

            //******************************************************************
            // Timer2 Interrupt Service at 31372.550 Hz = 32uSec
            // this is the timebase REFCLOCK for the DDS generator
            // FOUT = (M (REFCLK)) / (2 exp 32)
            ISR(TIMER2_OVF_vect) {
            // set the SS line low
            PORTB &= (0xFF ^ 4);
            // send in the address and value via SPI:
            SPDR = CODEA;
            // update phase accumulators while waiting
            phaccu_a += tword_a;
            phaccu_b += tword_b;
            phaccu_c += tword_c;
            while (!(SPSR & _BV(SPIF)))
            ;
            // do the table lookup based on accum 'a' high-order byte
            SPDR = pgm_read_byte_near(sine256 + highByte(phaccu_a));
            while (!(SPSR & _BV(SPIF)))
            ;
            SPDR = 0;
            while (!(SPSR & _BV(SPIF)))
            ;
            // set the SS line high
            PORTB |= 4;
            // set the sS line low for the second SPI transfer
            PORTB &= (0xFF ^ 4);
            // do the second SPI transfer
            //SPDR = CODEB_LOADALL;
            SPDR = CODEB;
            while (!(SPSR & _BV(SPIF)))
            ;
            // do table lookup based on accum 'b'
            SPDR = pgm_read_byte_near(sine256 + highByte(phaccu_b));
            while (!(SPSR & _BV(SPIF)))
            ;
            SPDR = 0;
            while (!(SPSR & _BV(SPIF)))
            ;



          關(guān)鍵詞: 示波器 駐波 Maxim Arduino AVR 201407

          評(píng)論


          相關(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); })();