<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于旋轉編碼器的調節系統設計

基于旋轉編碼器的調節系統設計

作者: 時(shí)間:2023-12-11 來(lái)源:電子森林 收藏

實(shí)驗任務(wù)

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

實(shí)驗目的

在基礎數字電路實(shí)驗部分我們已經(jīng)掌握了驅動(dòng)獨立顯示數碼管的原理及方法,本實(shí)驗主要學(xué)習的驅動(dòng)原理,最后完成旋轉調節系統總體設計。

本文引用地址:http://dyxdggzs.com/article/202312/453766.htm
  • 熟悉獨立顯示數碼管驅動(dòng)模塊的應用
  • 掌握旋轉編碼器的工作原理及驅動(dòng)方法
  • 完成旋轉調節系統總體設計

設計框圖

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

  • Encoder:通過(guò)驅動(dòng)旋轉編碼器獲取操作信息數據。
  • Decoder:根據旋轉編碼器操作信息控制變量在0~99范圍內加減變化。
  • Segment_led:通過(guò)驅動(dòng)核心板獨立數碼管將變量數據顯示在數碼管上。

頂層模塊Amp_Adjust通過(guò)實(shí)例化三個(gè)子模塊并將對應的信號連接,最終實(shí)現旋轉調節系統的總體設計。

Top-Down層次設計

模塊結構設計

實(shí)驗原理

旋轉編碼器介紹

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

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

底板上集成的旋轉編碼器就是機械增量式的。

旋轉編碼器連接

底板上旋轉編碼器的電路圖如下:

旋轉編碼器電路

我們使用的旋轉編碼器為EC11系列的,支持按動(dòng)開(kāi)關(guān),共有5個(gè)管腳,

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

編碼器原理示意

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

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

編碼器順時(shí)針旋轉時(shí)序

編碼器逆時(shí)針旋轉時(shí)序

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

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

以上就是我們旋轉編碼器驅動(dòng)設計的總體思路,下面我們就通過(guò)編程來(lái)實(shí)現它。

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

對A信號采樣程序實(shí)現如下(對B信號一樣):

reg	key_a_r,key_a_r1,key_a_r2;//消除亞穩態(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

然后簡(jiǎn)單去抖處理程序實(shí)現如下(對B信號一樣):

reg	A_state;//簡(jiǎn)單去抖動(dòng)處理
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信號的邊沿程序實(shí)現如下:

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);

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

逆時(shí)針旋轉脈沖輸出程序實(shí)現如下:

//當A的上升沿伴隨B的高電平或當A的下降沿伴隨B的低電平 為向左旋轉
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  //當A的上升沿伴隨B的低電平或當A的下降沿伴隨B的高電平 為向右旋轉
	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

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

系統總體實(shí)現

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

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

脈沖控制變量在0~99范圍變化,左旋減,右旋加,程序實(shí)現如下

//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

綜合后的設計框圖如下:

rtl設計框圖

實(shí)驗步驟

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

實(shí)驗現象

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



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>