在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 函數(shù)信號發(fā)生器和示波器二合一儀器設(shè)計,提供源碼

            函數(shù)信號發(fā)生器和示波器二合一儀器設(shè)計,提供源碼

            作者: 時間:2017-06-04 來源:網(wǎng)絡(luò) 收藏

            本文引用地址:http://www.biyoush.com/article/201706/348715.htm

            1.總體設(shè)計方案

            1.1 主控制模塊

            方案一:采用單片機。單片機的應(yīng)用較為廣泛,但是單片機的處理頻率達不到我們的要求。所以我們只能夠使用處理速度較快的處理器。

            方案二:采用Xilinx的來實現(xiàn)主控制器。Xilinx的的內(nèi)部IP核可以方便的產(chǎn)生DDS波形,這樣就方便我們能夠更好的產(chǎn)生想要的波形。

            所以采用方案二。

            1.2顯示模塊

            方案一:使用TFT觸摸屏。彩屏有這樣明顯的優(yōu)點:微功耗,尺寸小,超薄輕巧,顯示信息量大,字跡美觀,視覺舒適,但是對于來說,其實現(xiàn)對觸摸屏的控制不能夠較好的完成控制要求。

            方案二:使用VGA顯示。FPGA可以實現(xiàn)對VGA的控制。VGA的使用較為廣泛,且價格在接收的范圍之內(nèi)。而且,對于FPGA來說,實現(xiàn)對VGA接口的控制比控制其他的顯示器更加的方便和快捷。這就節(jié)省了我們的設(shè)計麻煩。

            所以采用方案二。

            1.3 輸入模塊

            方案一:使用矩陣鍵盤。矩陣鍵盤的編碼較為簡答,且可以實現(xiàn)較為復(fù)雜的控制。但是矩陣鍵盤的按鍵過少,不能夠?qū)崿F(xiàn)更多數(shù)據(jù)的輸入。

            方案二:使用PS2鍵盤。PS2鍵盤的控制更為簡單,我們可以通過兩根數(shù)據(jù)線精心數(shù)據(jù)的讀取,且PS2鍵盤的設(shè)計更加符合我們設(shè)計要求,這就決定了PS2在本設(shè)計中的優(yōu)勢。

            故采用方案二。

            1.4 AD輸出模塊

            ADS7822是一種單片高速12位逐次比較型A/D轉(zhuǎn)換器, ADS7822內(nèi)置雙極性電路構(gòu)成的混合集成轉(zhuǎn)換顯片,具有外接元件少,功耗低,精度高等特點,并且具有自動校零和自動極性轉(zhuǎn)換功能,只需外接少量的阻容件即可構(gòu)成一個完整的A/D轉(zhuǎn)換器。所以該方案采用ADS7822作為AD輸入的元器件。

            1.5 DA輸出模塊

            DAC7513是8分辨率的D/A轉(zhuǎn)換集成芯片。與微處理器完全兼容。這個DA芯片以其價格低廉、接口簡單、轉(zhuǎn)換控制容易等優(yōu)點,在單片機應(yīng)用系統(tǒng)中得到廣泛的應(yīng)用。D/A轉(zhuǎn)換器由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路構(gòu)成。

            2.程序設(shè)計

            2.1 AD輸出

            --**********************分頻進程*************************

            process(clk)

            variable cnt1 : integer range 0 to 100;

            variable cnt2 : integer range 0 to 20;

            begin

            if clkevent and clk=1 then

            if cnt1=100 then

            cnt1:=0;

            if cnt2=20 then

            cnt2:=0;

            clock=not clock;

            if(cnt=3)then

            cnt=0;

            else

            cnt=cnt+1;

            end if;

            else

            cnt2:=cnt2+1;

            end if;

            else

            cnt1:=cnt1+1;

            end if;

            end if;

            end process;

            --**************狀態(tài)驅(qū)動進程**********************

            sync :process(clock,reset)

            begin

            if(reset = 0) then

            current_state = start;

            elsif(clockevent and clock=1) then

            current_state = next_state;

            end if;

            end process sync;

            --***************adc驅(qū)動進程*******************

            comb :process(current_state, intr)

            begin

            case current_state is

            when start => --啟動狀態(tài)

            next_state = convert;

            cs = 0;

            wr = 0;

            rd = 1;

            read_data = 0;

            when convert =>--初始化

            if(intr = 0) then

            next_state = read1;

            else

            next_state = convert;

            end if;

            cs = 1;

            wr = 1;

            rd = 1;

            read_data = 0;

            when read1 =>--讀狀態(tài)1

            next_state = read2;

            cs = 0;

            wr = 1;

            rd = 0;

            read_data = 1;

            when read2 =>--讀狀態(tài)2

            next_state = start;

            cs = 1;

            wr = 1;

            rd = 1;

            read_data = 0;

            when others =>--其他狀態(tài)

            next_state = start;

            end case;

            end process comb;

            --****************讀取AD數(shù)據(jù)********************

            get_data: process(clock,reset)

            begin

            if(reset = 0) then

            p=0;

            elsif(clockevent and clock=1) then

            if(read_data = 1) then

            p=conv_integer(data_i);

            end if;

            end if;

            end process;

            2.2 DA輸出

            --*********************65536Hz分頻進程************************

            process(clk)

            variable cnt1 : integer range 0 to 762;

            begin

            if clkevent and clk=1 then

            case cnt1 IS

            WHEN 381 =>

            cp_65k=1;

            cnt1:=cnt1+1;

            WHEN 762=>

            cnt1:=0;

            cp_65k=0;

            cp_wr=0;

            WHEN 20=>

            cp_wr=1;

            cnt1:=cnt1+1;

            WHEN OTHERS=>

            cnt1:=cnt1+1;

            end case;

            end if;

            end process;

            --*********************1kHz分頻進程************************

            process(cp_65k)

            variable cnt1 : integer range 0 to 64;

            begin

            if cp_65kevent and cp_65k=1 then

            case cnt1 is

            when 32=>cp_1k=1;

            cnt1:=cnt1+1;

            when 64=>cnt1:=0;

            cp_1k=0;

            when others=>cnt1:=cnt1+1;

            end case;

            end if;

            end process;

            --**************DDS地址累加器進程**********************

            PROCESS(cp_65k)

            BEGIN

            IF(cp_65kEVENT AND cp_65k=1) THEN

            --DDS累加器循環(huán)累加dds_m

            IF dds_add65535 THEN

            dds_add=dds_add+dds_m;

            ELSE

            dds_add=dds_add+dds_m-65536;

            END IF;

            END IF;

            END PROCESS;

            --***********************頻率加減控制進程***************************

            process(cp_1k)

            VARIABLE keys:INTEGER RANGE 0 TO 127 :=0; --消抖累加器

            begin

            if cp_1k=1 then

            case key is

            when 10=> --頻率加

            if keys=127 then

            keys:=0;

            bell=1;

            if dds_m=1000 then

            dds_m=1;

            else

            dds_m=dds_m+1;

            end if;

            else

            keys:=keys+1;

            end if;

            when 01=> --頻率減

            if keys=127 then

            keys:=0;

            bell=1;

            if dds_m=1000 then

            dds_m=1;

            else

            dds_m=dds_m-1;

            end if;

            else

            keys:=keys+1;

            end if;

            when others=>bell=0;

            end case;

            end if;

            end process;

            end dac;

            2.3 VGA顯示

            3.性能指標

            DA輸出的波形

            4.總結(jié)

            經(jīng)過了多日的努力,我們在本設(shè)計中基本實現(xiàn)了上述要求,并在有些功能方面提出了改進,使系統(tǒng)設(shè)計更加完善。在該設(shè)計中我們使用了FPGA作為主控器,但由于時間及器材條件的限制,本設(shè)計也存在不足,例如,測量范圍不能達到更高的要求,測量精度也存在很大的提升空間。我們會在以后的學(xué)習(xí)中不斷地彌補這些不足,完善測量系統(tǒng)設(shè)計。



            評論


            相關(guān)推薦

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

            關(guān)閉