日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STM32学习】(22)STM32实现360度旋转编码器

發布時間:2023/12/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STM32学习】(22)STM32实现360度旋转编码器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

360度 旋轉編碼器實物如下:

KY-040旋轉編碼器模塊

?工作電壓:5V

一圈脈沖數:20

旋轉編碼器可通過旋轉可以計數正方向和反方向轉動過程中輸出脈沖的次數,旋轉計數不像電位計,這種轉動計數是沒有限制的。配合旋轉編碼器上的按鍵,可以復位到初始狀態,即從0開始計數。

?工作原理:增量編碼器是一種將旋轉位移轉換為一連串數字脈沖信號的旋轉式傳感器。這些脈沖用來控制角位移。在Eltra編碼器中角位移的轉換采用了光電掃描原理。讀數系統以由交替的透光窗口和不透光窗口構成的徑向分度盤(碼盤)的旋轉為依據,同時被一個紅外光源垂直照射,光把碼盤的圖像投射到接收器表面上。接收器覆蓋著一層衍射光柵,它具有和碼盤相同的窗口寬度。接收器的工作是感受光盤轉動所產生的變化,然后將光變化轉換成相應的電變化。再使低電平信號上升到較高電平,并產生沒有任何干擾的方形脈沖,這就必須用電子電路來處理。讀數系統通常采用差分方式,即將兩個波形一樣但相位差為180°的不同信號進行比較,以便提高輸出信號的質量和穩定性。讀數是再兩個信號的差別基礎上形成的,從而消除了干擾。

增量編碼器給出兩相方波,它們的相位差90°,通常稱為A通道和B通道。其中一個通道給出與轉速相關的信息,與此同時,通過兩個通道信號進行順序對比,得到旋轉方向的信息。還有一個特殊信號稱為Z或零通道,該通道給出編碼器的絕對零位,此信號是一個方波與A通道方波的中心線重合。

?

現在實現檢測這個增量編碼器正轉還是反轉

我們這里用讀取IO的方式來讀取數據,來判斷是正轉還是反轉。

單片機型號:STM32L052K8*

接線:CLK? 接? PA0

? ? ? ? ? ? DT? ?接? PA1

? ? ? ? ? ? SW? 接? PA2

int main(void) {/* USER CODE BEGIN 1 */unsigned char dt;unsigned char clk,key;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf("\n\r****wantin****\n\r");/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("\n\**************\n\r");clk = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin);dt = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin);key = HAL_GPIO_ReadPin(SW_GPIO_Port,SW_Pin);if(1 == clk){printf("\n\clk == 1\n\r");}else{printf("\n\clk == 0\n\r");}if(1 == dt){printf("\n\dt == 1\n\r");}else{printf("\n\dt == 0\n\r");}if(1 == key){printf("\n\key == 1\n\r");}else{printf("\n\key == 0\n\r");}HAL_Delay(1000);}/* USER CODE END 3 */ }

?

實現效果來看,不理想:

不管你正轉還是反轉,CLK和DT這兩個引腳的電平,都是成0、1交替,而且兩個的電平一致,根本無法區分正轉還是反轉。

隨后,將其插上電源,用示波器測試了一下這兩個引腳產生的波形。效果如下:

采集中斷0口,接的clk信號

正轉的波形圖:黃色的線為clk,藍色的線為dt

下降沿觸發,采集到的電平? 都為低電平? clk = 0? ?dt = 0;

反轉的波形圖:黃色的線為clk,藍色的線為dt

下降沿觸發,采集到的電平??clk = 0? ?dt = 1;

通過波形可以看出,正反轉是有波形區別的,如何實現正反轉檢測,可以使用中斷的方式來實現。

采用下降沿觸發方式來采集波形的變化。

int main(void) {/* USER CODE BEGIN 1 */unsigned char dt;unsigned char clk,key;/* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */printf("\n\r****wantin****\n\r");/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */printf("\n\**************\n\r");if(10 == spped_counter){printf("\n\***正轉***\n\r");}else{printf("\n\***反轉***\n\r");} // clk = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin); // dt = HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin); // key = HAL_GPIO_ReadPin(SW_GPIO_Port,SW_Pin); // if(1 == clk) // { // printf("\n\clk == 1\n\r"); // } // else // { // printf("\n\clk == 0\n\r"); // } // if(1 == dt) // { // printf("\n\dt == 1\n\r"); // } // else // { // printf("\n\dt == 0\n\r"); // } // if(1 == key) // { // printf("\n\key == 1\n\r"); // } // else // { // printf("\n\key == 0\n\r"); // }HAL_Delay(1000);}/* USER CODE END 3 */ } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) //外部中斷 回調函數 {if(GPIO_Pin == CLK_Pin) //檢測到有變化就進來處理{if(HAL_GPIO_ReadPin(CLK_GPIO_Port,CLK_Pin) == HAL_GPIO_ReadPin(DT_GPIO_Port,DT_Pin)) //clk pb0 == dt pb1spped_counter=10; // 表示 正轉elsespped_counter=100; // 表示 反轉} }

?

?

效果如下:

?

?

?

總結

以上是生活随笔為你收集整理的【STM32学习】(22)STM32实现360度旋转编码器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91精品一区二区 | 青青草亚洲 | 污污的视频网站在线观看 | 黑人日批视频 | 国产成人精品免费在线观看 | av免费在线观看不卡 | 欧美xxxx视频 | 最新中文字幕在线观看 | 欧美成人吸奶水做爰 | 一区二区三区国产精品 | 法国空姐在线观看视频 | 香港三日本8a三级少妇三级99 | 精品国产99一区二区乱码综合 | 伊人情人综合 | 又大又长粗又爽又黄少妇视频 | 国产情侣露脸自拍 | 天天干天天爱天天射 | 成年人在线视频免费观看 | 国产精品一区二区免费在线观看 | 精品丰满少妇一区二区三区 | 爱爱一区 | 欧美色xxx | 中日韩男男gay无套 人人草人人干 | 四虎国产在线 | 色视屏| 一区二区三区波多野结衣 | 麻豆传谋在线观看免费mv | 亚洲成人av一区 | 久久久久久97 | 波多野结衣中文在线 | 日韩91在线 | 日本黄色片免费看 | 围产精品久久久久久久 | 超碰网站在线观看 | 亚洲小说区图片区都市 | www四虎影院| 邻居少妇张开双腿让我爽一夜 | 黄色免费在线网站 | 那里可以看毛片 | 国产毛片毛片毛片 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 91国语对白 | 亚洲天堂不卡 | 亚洲欧美制服丝袜 | 阿v视频在线免费观看 | 风间由美在线观看 | www.69视频 | 在线视频一区二区三区 | 欧美天天爽| 高清一区二区在线 | 神马午夜伦| 在线免费观看黄色网址 | 国产伦精品一区二区三区视频黑人 | 日韩av在线一区 | 日本成人在线一区 | cao死你 | 熟女熟妇伦久久影院毛片一区二区 | 熟女肥臀白浆大屁股一区二区 | 久久爱综合网 | 色综合久久精品亚洲国产 | av在线等| 爱情岛论坛永久入址测速 | 成人性做爰aaa片免费 | 国产精品69久久久久孕妇欧美 | 免费av在线网 | 国产视频一区二区三区在线 | 亚洲一区二区精品视频 | 奇米网久久 | 日韩精品人妻一区二区三区免费 | 二区三区偷拍浴室洗澡视频 | 99热偷拍| 丁香婷婷综合激情 | 91网站在线观看视频 | 美丽姑娘免费观看在线观看 | 国产又粗又猛又黄又爽的视频 | 日日爽视频 | 国产精品久久久久久久久动漫 | 99热日韩| 亚洲日本成人在线观看 | 国产精品国语自产拍在线观看 | 在线播放免费av | 好吊色这里只有精品 | 射进来av影视网 | 9.1在线观看免费 | 国产特级淫片免费看 | 日韩精品成人一区 | 成人久久久精品国产乱码一区二区 | av怡红院 | 亚洲大尺度视频 | 成人三级在线视频 | 久久久久久久久久久久久女国产乱 | 国产精品久久久久久久久久久久久久久久 | 色吧综合 | 在线中文字幕视频 | 黄色天堂 | 国产精品蜜臀av | 中文字幕不卡一区 | 精品免费视频 | 天天激情 |