在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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è)計(jì)應(yīng)用 > 基于旋轉(zhuǎn)編碼器的調(diào)節(jié)系統(tǒng)設(shè)計(jì)

            基于旋轉(zhuǎn)編碼器的調(diào)節(jié)系統(tǒng)設(shè)計(jì)

            作者: 時間:2023-12-11 來源:電子森林 收藏

            實(shí)驗(yàn)任務(wù)

            • 任務(wù):基于核心板 和 底板 完成旋轉(zhuǎn)調(diào)節(jié)系統(tǒng)設(shè)計(jì)并觀察調(diào)試結(jié)果
            • 要求:轉(zhuǎn)動底板上的,調(diào)整核心板數(shù)碼管數(shù)值在0~99之間變化,右旋增加,左旋減小。
            • 解析:通過編程驅(qū)動獲取操作信息,根據(jù)操作信息控制變量增加或減小,最后驅(qū)動獨(dú)立式數(shù)碼管將變量顯示出來。

            實(shí)驗(yàn)?zāi)康?/h4>

            在基礎(chǔ)數(shù)字電路實(shí)驗(yàn)部分我們已經(jīng)掌握了驅(qū)動獨(dú)立顯示數(shù)碼管的原理及方法,本實(shí)驗(yàn)主要學(xué)習(xí)的驅(qū)動原理,最后完成旋轉(zhuǎn)調(diào)節(jié)系統(tǒng)總體設(shè)計(jì)。

            本文引用地址:http://www.biyoush.com/article/202312/453766.htm
            • 熟悉獨(dú)立顯示數(shù)碼管驅(qū)動模塊的應(yīng)用
            • 掌握旋轉(zhuǎn)編碼器的工作原理及驅(qū)動方法
            • 完成旋轉(zhuǎn)調(diào)節(jié)系統(tǒng)總體設(shè)計(jì)

            設(shè)計(jì)框圖

            根據(jù)前面的實(shí)驗(yàn)解析我們可以得知,該設(shè)計(jì)可以拆分成三個功能模塊實(shí)現(xiàn),

            • Encoder:通過驅(qū)動旋轉(zhuǎn)編碼器獲取操作信息數(shù)據(jù)。
            • Decoder:根據(jù)旋轉(zhuǎn)編碼器操作信息控制變量在0~99范圍內(nèi)加減變化。
            • Segment_led:通過驅(qū)動核心板獨(dú)立數(shù)碼管將變量數(shù)據(jù)顯示在數(shù)碼管上。

            頂層模塊Amp_Adjust通過實(shí)例化三個子模塊并將對應(yīng)的信號連接,最終實(shí)現(xiàn)旋轉(zhuǎn)調(diào)節(jié)系統(tǒng)的總體設(shè)計(jì)。

            Top-Down層次設(shè)計(jì)

            模塊結(jié)構(gòu)設(shè)計(jì)

            實(shí)驗(yàn)原理

            旋轉(zhuǎn)編碼器介紹

            旋轉(zhuǎn)編碼器(rotary encoder)也稱為軸編碼器,是將旋轉(zhuǎn)位置或旋轉(zhuǎn)量轉(zhuǎn)換成模擬或數(shù)字信號的機(jī)電設(shè)備。旋轉(zhuǎn)編碼器用在許多需要精確旋轉(zhuǎn)位置及速度的場合,如工業(yè)控制、機(jī)器人技術(shù)、專用鏡頭、電腦輸入設(shè)備(如鼠標(biāo)及軌跡球)等。 旋轉(zhuǎn)編碼器以碼盤刻孔方式不同分為:絕對式和增量式兩類。

            • 絕對式編碼器:具有多個不同二進(jìn)制權(quán)重的代碼環(huán),每個不同角度產(chǎn)生一個獨(dú)特的數(shù)字代碼,表示編碼器的絕對位置
            • 增量式編碼器:旋轉(zhuǎn)過程中提供周期性輸出,不能定位絕對位置,只能用于感知運(yùn)動方向和增量

            底板上集成的旋轉(zhuǎn)編碼器就是機(jī)械增量式的。

            旋轉(zhuǎn)編碼器連接

            底板上旋轉(zhuǎn)編碼器的電路圖如下:

            旋轉(zhuǎn)編碼器電路

            我們使用的旋轉(zhuǎn)編碼器為EC11系列的,支持按動開關(guān),共有5個管腳,

            • 1、2管腳支持按動開關(guān),就像我們之前用到的獨(dú)立按鍵連接方式,
            • 3、4、5管腳支持旋轉(zhuǎn)編碼,4腳為公共端,3、5管腳分別為旋轉(zhuǎn)編碼器的A、B相輸出,如上圖所示,我們給4腳接地,3、5管腳則需要接上拉電阻,同時為了降低輸出脈沖信號的抖動干擾,我們有增加了電容到地做硬件去抖。
            旋轉(zhuǎn)編碼器驅(qū)動設(shè)計(jì)

            編碼器原理示意

            上圖是機(jī)械增量式旋轉(zhuǎn)編碼器的原理示意圖,中間圓形齒輪連接到旋轉(zhuǎn)編碼器的公共端4管腳,STEP BaseBoard V3.0底板上我們將之接地處理,A、B兩個觸點(diǎn)連接到旋轉(zhuǎn)編碼器的A、B相輸出端3、5管腳,當(dāng)進(jìn)行旋轉(zhuǎn)操作時,A、B觸點(diǎn)會先后接觸和錯開圓形齒輪,從而導(dǎo)致A、B相輸出信號產(chǎn)生相位不同的脈沖信號:

            • 順時針旋轉(zhuǎn)時,A觸點(diǎn)超前于B觸點(diǎn)接觸和錯開圓形齒輪,A信號脈沖相位超前
            • 逆時針旋轉(zhuǎn)時,B觸點(diǎn)超前于A觸點(diǎn)接觸和錯開圓形齒輪,B信號脈沖相位超前

            編碼器順時針旋轉(zhuǎn)時序

            編碼器逆時針旋轉(zhuǎn)時序

            根據(jù)時序圖可以看出旋轉(zhuǎn)編碼器順時針或逆時針旋轉(zhuǎn)時,A相信號超前或滯后B相信號,接收到旋轉(zhuǎn)編碼器的A、B信號時,可以根據(jù)A、B的狀態(tài)組合判定編碼器的旋轉(zhuǎn)方向。 程序設(shè)計(jì)中我們可以對A、B信號檢測,檢測A信號的邊沿及B信號的狀態(tài),

            • 當(dāng)A信號上升沿時B信號為低電平,或當(dāng)A信號下降沿時B信號為高電平,證明當(dāng)前編碼器為順時針轉(zhuǎn)動
            • 當(dāng)A信號上升沿時B信號為高電平,或當(dāng)A信號下降沿時B信號為低電平,證明當(dāng)前編碼器為逆時針轉(zhuǎn)動

            以上就是我們旋轉(zhuǎn)編碼器驅(qū)動設(shè)計(jì)的總體思路,下面我們就通過編程來實(shí)現(xiàn)它。

            前面電路連接部分我們使用了兩個電容對A、B信號作去抖處理,可以起到一定的效果,為了驅(qū)動更加穩(wěn)定,我們在程序中再簡單處理一下,先對系統(tǒng)時鐘分頻得到2KHz的時鐘,然后在2KHz時鐘的節(jié)拍下對A、B信號采樣,三級鎖存消除亞穩(wěn)態(tài)

            對A信號采樣程序?qū)崿F(xiàn)如下(對B信號一樣):

            reg	key_a_r,key_a_r1,key_a_r2;//消除亞穩(wěn)態(tài)always@(posedge clk_500us) begin
            	key_a_r		<=	key_a;
            	key_a_r1	<=	key_a_r;
            	key_a_r2	<=	key_a_r1;end

            然后簡單去抖處理程序?qū)崿F(xiàn)如下(對B信號一樣):

            reg	A_state;//簡單去抖動處理
            always@(key_a_r1 or key_a_r2) begin
            	case({key_a_r1,key_a_r2})
            		2'b11:	A_state <= 1'b1;
            		2'b00:	A_state <= 1'b0;
            		default: A_state <= A_state;
            	endcaseend

            檢測A信號的邊沿程序?qū)崿F(xiàn)如下:

            reg A_state_r,A_state_r1;//對A_state信號進(jìn)行邊沿檢測
            always@(posedge clk) begin
            	A_state_r <= A_state; 
            	A_state_r1 <= A_state_r;
            	end
            	wire	A_pos	= (!A_state_r1) && A_state_r;
            	wire	A_neg	= A_state_r1 && (!A_state_r);

            最后根據(jù)A信號邊沿與B信號的狀態(tài)組合判定旋轉(zhuǎn)的信息,

            逆時針旋轉(zhuǎn)脈沖輸出程序?qū)崿F(xiàn)如下:

            //當(dāng)A的上升沿伴隨B的高電平或當(dāng)A的下降沿伴隨B的低電平 為向左旋轉(zhuǎn)
            always@(posedge clk or negedge rst_n) begin
            	if(!rst_n) L_pulse <= 1'b0;
            	else if((A_pos&&B_state)||(A_neg&&(!B_state))) L_pulse <= 1'b1;
            	else L_pulse <= 1'b0;
            	end  //當(dāng)A的上升沿伴隨B的低電平或當(dāng)A的下降沿伴隨B的高電平 為向右旋轉(zhuǎn)
            	always@(posedge clk or negedge rst_n) begin
            	if(!rst_n) R_pulse <= 1'b0;
            	else if((A_pos&&(!B_state))||(A_neg&&B_state)) R_pulse <= 1'b1;
            	else R_pulse <= 1'b0;
            	end

            所以通過上面程序最終實(shí)現(xiàn)了左旋右旋的脈沖輸出,脈沖的脈寬等于系統(tǒng)時鐘的周期。

            系統(tǒng)總體實(shí)現(xiàn)

            回顧旋轉(zhuǎn)調(diào)節(jié)系統(tǒng)設(shè)計(jì)框架,剛剛我們已經(jīng)學(xué)習(xí)完成了旋轉(zhuǎn)編碼器的驅(qū)動設(shè)計(jì),在基礎(chǔ)數(shù)字電路實(shí)驗(yàn)部分我們已經(jīng)掌握了FPGA驅(qū)動獨(dú)立顯示數(shù)碼管的原理及方法, 模塊通過一個4位的輸入傳遞要顯示的數(shù)值,通過9位的輸出控制數(shù)碼管顯示該數(shù)值,這里我們不再重復(fù),還需要設(shè)計(jì)一個模塊,通過旋轉(zhuǎn)編碼器模塊脈沖輸出控制變量在0~99范圍內(nèi)加減變化。

            關(guān)于BCD碼在基礎(chǔ)數(shù)字電路實(shí)驗(yàn)部分已經(jīng)接觸過,BCD碼(Binarycoded Decimal),是用4位二進(jìn)制碼的組合代表十進(jìn)制數(shù)的碼制方法,這樣顯示更符合人的閱讀習(xí)慣,所以BCD數(shù)值變化要求滿9進(jìn)1。

            脈沖控制變量在0~99范圍變化,左旋減,右旋加,程序?qū)崿F(xiàn)如下

            //key_pulse transfer to seg_dataalways@(posedge clk or negedge rst_n) begin
            	if(!rst_n) begin
            		seg_data <= 8'h50;
            	end else begin
            		if(L_pulse) begin
            			if(seg_data[3:0]==4'd0) begin
            				seg_data[3:0] <= 4'd9;
            				if(seg_data[7:4]==4'd0) seg_data[7:4] <= 4'd9;
            				else seg_data[7:4] <= seg_data[7:4] - 1'b1;
            			end else seg_data[3:0] <= seg_data[3:0] - 1'b1;
            		end else if(R_pulse) begin
            			if(seg_data[3:0]==4'd9) begin
            				seg_data[3:0] <= 4'd0;
            				if(seg_data[7:4]==4'd9) seg_data[7:4] <= 4'd0;
            				else seg_data[7:4] <= seg_data[7:4] + 1'b1;
            			end else seg_data[3:0] <= seg_data[3:0] + 1'b1;
            		end else begin
            			seg_data <= seg_data;
            		end
            	end
            	end

            綜合后的設(shè)計(jì)框圖如下:

            rtl設(shè)計(jì)框圖

            實(shí)驗(yàn)步驟

            1. 雙擊打開Quartus Prime工具軟件;
            2. 新建工程:File → New Project Wizard(工程命名,工程目錄選擇,設(shè)備型號選擇,EDA工具選擇);
            3. 新建文件:File → New → Verilog HDL File,鍵入設(shè)計(jì)代碼并保存;
            4. 設(shè)計(jì)綜合:雙擊Tasks窗口頁面下的Analysis & Synthesis對代碼進(jìn)行綜合;
            5. 管腳約束:Assignments → Assignment Editor,根據(jù)項(xiàng)目需求分配管腳;
            6. 設(shè)計(jì)編譯:雙擊Tasks窗口頁面下的Compile Design對設(shè)計(jì)進(jìn)行整體編譯并生成配置文件;
            7. 程序燒錄:點(diǎn)擊Tools → Programmer打開配置工具,Program進(jìn)行下載;
            8. 觀察設(shè)計(jì)運(yùn)行結(jié)果。

            實(shí)驗(yàn)現(xiàn)象

            將程序下載到實(shí)驗(yàn)平臺,核心板數(shù)碼管顯示50,旋轉(zhuǎn)編碼器左旋(逆時針)數(shù)值減小,旋轉(zhuǎn)編碼器右旋(順時針)數(shù)值增加,旋轉(zhuǎn)編碼器旋轉(zhuǎn)時有頓挫感,每次頓挫數(shù)值變化1。



            評論


            相關(guān)推薦

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

            關(guān)閉