全志R128應用開發案例-中斷方式驅動旋轉編碼器_第1頁
全志R128應用開發案例-中斷方式驅動旋轉編碼器_第2頁
全志R128應用開發案例-中斷方式驅動旋轉編碼器_第3頁
全志R128應用開發案例-中斷方式驅動旋轉編碼器_第4頁
全志R128應用開發案例-中斷方式驅動旋轉編碼器_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第第頁全志R128應用開發案例—中斷方式驅動旋轉編碼器

中斷方式驅動旋轉(編碼器)

旋轉編碼器是一種位置(傳感器),可將旋鈕的角位置(旋轉)轉換為用于確定旋鈕旋轉方向的輸出(信號)。

由于其堅固性和良好的數字控制;它們被用于許多應用中,包括(機器人)技術,CNC機器和打印機。

旋轉編碼器有兩種類型-絕對式和增量式。絕對編碼器為我們提供旋鈕的精確位置(以度為單位),而增量編碼器報告軸已移動了多少增量。

編碼器內部是一個槽形磁盤,該磁盤連接到公共接地引腳C以及兩個接觸針A和B。旋轉旋鈕時,A和B根據旋轉旋鈕的方向以特定順序與公共接地引腳C接觸。

當它們接觸公共接地時,它們會產生信號。當一個引腳先于另一引腳接觸時,這些信號就會彼此錯開90°。這稱為正交編碼。

順時針旋轉旋鈕時,首先連接A引腳,然后連接B引腳。逆時針旋轉旋鈕時,首先連接B引腳,然后連接A引腳。

通過跟蹤每個引腳何時與地面連接或與地面斷開,我們可以使用這些信號變化來確定旋鈕的旋轉方向。您可以通過在A更改狀態時觀察B的狀態來做到這一點。

我們搭建電路,如下:

載入方案

我們使用的開發板是R128-Devkit,需要開發C906核心的應用程序,所以載入方案選擇r128s2_module_c906

$sourceenvsetup.sh$lunch_(rtos)1

勾選GPIO驅動

mrtos_menuconfig找到下列驅動

DriversOp(ti)ons>socrelateddevicedrivers>GPIOdevices>[*]enableG(PI)Odriver[*]enbaleGPIOhalAPIs(Te)stcommand

編寫程序

打開你喜歡的編輯器,修改文件:lichee/rtos/projects/r128s2/module_c906/src/main.c

引入頭文件

#include

使用GPIO配置引腳

配置GPIO的上下拉狀態使用hal_gpio_set_pull(gpio_pin_tpin,gpio_pull_status_tpull);來設置。這里我們設置PA25引腳為默認上拉狀態。

hal_gpio_set_pull(GPIOA(25),GPIO_PULL_UP);配置GPIO輸入輸出模式使用hal_gpio_set_direction(gpio_pin_tpin,gpio_direction_tdirection);來設置GPIO的輸入輸出模式,這里配置為輸入模式。

hal_gpio_set_direction(GPIOA(25),GPIO_DIRECTION_INPUT);配置GPIO的MUX功能GPIO通常有多種功能,需要配置MUX選擇需要的功能,使用hal_gpio_pinmux_set_function(gpio_pin_tpin,gpio_muxsel_tfunction_index);來設置GPIO的復用功能,這里配置為GPIO輸入模式(GPIO_MUXSEL_IN)

hal_gpio_pinmux_set_function(GPIOA(25),GPIO_MUXSEL_IN);獲取GPIO的電平使用inthal_gpio_get_data(gpio_pin_tpin,gpio_data_t*data);來獲取GPIO的電平

gpio_data_tgpio_data;hal_gpio_get_data(GPIOA(25),申請配置中斷使用hal_gpio_to_irq方法來申請中斷號。hal_gpio_irq_request綁定中斷服務,hal_gpio_irq_enable啟用中斷。這里配置一個

//存放中斷號uint32_tirq_clk;//申請中斷號ret=hal_gpio_to_irq(ENC_CLK,if(ret完整代碼

#include#include#include#include#include"interrupt.h"#include#include#include#include#include#include"(FreeRTOS).h"#include"task.h"#include"tinatest.h"externintamp_init(void);//定義旋轉編碼器的引腳#defineENC_CLKGPIOA(24)#defineENC_DTGPIOA(25)#defineENC_SWGPIOA(29)//相關全局變量存儲intencode_counter=0;intencode_current_clk;intencode_lask_clk;intcurrent_dir=0;//編碼器中斷處理函數stat(ic)hal_irqreturn_tgpio_irq_encode(void*data){//獲取引腳的高低電平狀態gpio_data_tclk_value=GPIO_DATA_LOW;gpio_data_tdt_value=GPIO_DATA_LOW;hal_gpio_get_data(ENC_DT,hal_gpio_get_data(ENC_CLK,//判斷當前數據狀態encode_current_clk=clk_value;if(encode_current_clk!=encode_lask_clkcurrent_dir=1;}else{//反轉encode_counter--;current_dir=-1;}printf("Direction=%d,Counter=%dn",current_dir,encode_counter);}//刷新當前狀態encode_lask_clk=encode_current_clk;return0;}void(cpu)0_app_entry(void*pa(ram)){intret=0;//初始化系統資源amp_init();//A24->CLK,A25->DT.A29->SWhal_gpio_set_pull(ENC_CLK,GPIO_PULL_DOWN_DISABLED);hal_gpio_set_direction(ENC_CLK,GPIO_DIRECTION_INPUT);hal_gpio_pinmux_set_function(ENC_CLK,GPIO_MUXSEL_IN);//獲取初始編碼器CLK狀態gpio_data_tclk_data;hal_gpio_get_data(ENC_CLK,encode_lask_clk=clk_data;hal_gpio_set_pull(ENC_DT,GPIO_PULL_DOWN_DISABLED);hal_gpio_set_direction(ENC_DT,GPIO_DIRECTION_INPUT);hal_gpio_pinmux_set_function(ENC_DT,GPIO_MUXSEL_IN);//存放CLK,DT中斷號uint32_t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論