【嵌入式電機控制#8】編碼器測速實戰

一、編碼器測速重要參數

? ? ? ? 有刷電機編碼器參數(其他的后面會慢慢提及,也可以在某寶看)

? ? ? ? 1. 編碼器分辨率(PPR)

? ? ? ? 2. 編碼器工作電壓?

? ? ? ? 3. 電機減速比 例如 30:1 指的就是電機減速軸轉1圈,編碼器轉30圈。

????????注意明確一個關系,大部分直流減速電機的機械結構,是編碼器套在主軸,而電機軸是經過機械傳動減速后轉動的,所以我們把這類電機叫做減速電機。

? ? ? ? 參數1和3到底有什么用呢?

? ? ? ? 舉個栗子,我們的編碼器在VOFA上的測速結果為300RPM,而編碼器接口配置為100方式計數,即四倍頻,那么:

? ? ? ? 電機減速轉速??=? 主軸轉速? /? 減速比

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =? 編碼器轉速 / 減速比

? ? ? ? ? ? ? ? ? =? (計數器接收脈沖個數 / 四倍頻?/ PPR / 減速比)*? 測速中斷頻率??

? ? ? ? 實際代碼中,還需要考慮時間單位s->min的換算

二、Encoder的HAL庫函數

? ? ? ? (1)HAL_TIM_Encoder_Init()

????????初始化定時器基礎參數,以及編碼器接口,如果用的是Cube則不需要編寫。

? ? ? ? (2)HAL_TIM_Base_Start_IT()

????????定時器外設若需要使用中斷功能(比如編碼本身和編碼過程中斷回調處理),則必須提前使能定時器base中斷。

? ? ? ? (3)HAL_TIM_Encoder_Start()

? ? ? ? 開啟編碼器接口通道,與PWM_start有異曲同工之妙。

? ? ? ? (4)定時器更新中斷回調函數

? ? ? ? ?有兩種處理方式,一種是單定時器中斷,通過使用encoder本身的更新中斷,當計數值達到ARR時候,自動進入中斷處理測量的脈沖數。

? ? ? ? ?第二種是Encoder中斷+其他定時器中斷,通過其他定時器預設定的中斷頻率,來對速度采樣頻率進行自由的改動,不受編碼器采樣頻率的限制,但如果中斷頻率設置過高會造成嚴重誤差

? ? ? ? (5)__HAL_TIM_IS_COUNTING_DOWN()

? ? ? ? 在無CubeMX時,用于讀取DIR位,進而判斷計數方向。

? ? ? ? 有Cube時,直接判斷編碼器反饋數值的正負。

三、Encoder的定時器配置

? ? ? ? (1)配置編碼器模式

? ? ? ? ? ? ? ? TI1與TI2都檢測,也就是四倍頻

????????????????

? ? ? ? (2)配置Encoder雙輸入通道參數

? ? ? ? ? ? ? ? 理論上兩個通道參數應該一致。

????????????????因為是100法計數,根據功能表規則,我們的計算規則應該是上升沿有效,所以邊沿極性選擇為上升沿。

? ? ? ? ? ? ? ? IC采用直接選擇

? ? ? ? ? ? ? ? 分頻因子不分頻,如果分頻了,那我們何必用四倍頻呢?

? ? ? ? ? ? ? ? 接下來,輸入濾波器可以暫時先設置為10。它起到一個什么作用呢?

? ? ? ? ? ? ? ? 通俗的講,它把一個電平信號掃描十次,然后判斷是否有高低反轉的不穩定情況,如果信號不穩定,則丟棄這一幀。

????????????????

? ? ? ? ? ? ? ? 實際上,它是一個低通濾波器,對高頻干擾信號做衰減。你的參數設置的越大,它掃描次數越多,過濾高頻尖刺的能力也就更強,但芯片工作量也會隨之增加。(濾波過程可以近似參考模擬線路的0.1uF的RC濾波器。圖畫的可能不標準,具體內容請見隔壁DSP)

????????????????

? ? ? ? ? ? ? ? (3)中斷方法1:Encoder更新中斷

? ? ? ? ? ? ? ? 我的這款主控找不到Encoder更新中斷開啟,可能是因為Cube封裝了Encoder的更新中斷的總計數值更新過程,如果要找得去ISR文件看看,下面介紹另外一種方法。

? ? ? ? ? ? ? ? (4)中斷方法2:另開定時器進行中斷

? ? ? ? ? ? ? ? 為了節省資源,我選了基本定時器做定時器中斷。

? ? ? ? ? ? ? ? 這里設置中斷頻率為10Hz,也就是0.1s中斷一次,對于我自己的外設來說效果比較理想,實際工程中需要不斷調試?中斷頻率 和 PWM的ARR?去測試它的開環測量準確度。?? ? ? ? ?

?四、實戰例程

? (1)使能中斷功能并開啟編碼器

? ? ? ? ? ? ? ? 雖然我們沒手寫編碼器的ISR,但是我們還是需要它的中斷測量總計數值,它沒有被禁用只是在后臺默默的為我們計數。

		HAL_TIM_Base_Start_IT(&htim6);HAL_TIM_Base_Start_IT(&htim2);  HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);	

?????????????????我們使用GetCounter函數來一段時間內的獲取編碼值,獲取完立刻清零,不能放在其他位置,否則會因為其他輪詢代碼的運行造成結果偏小的誤差(我們下一次中斷還要用!)

? ? ? ? ? ? ? ? 至于轉速查看的方法,我不建議用串口打印,因為它背后調用了stdio庫,運行速度肯定沒有VOFA+的float協議來的快。

? ? ? ? ? ? ? ? VOFA+的標準用法,我會在補充章節分享。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){if(htim==&htim6){printf("entered");int16_t val = (int16_t)__HAL_TIM_GetCounter(&htim2);__HAL_TIM_SET_COUNTER(&htim2, 0);float RPM =(float)((val/7.0/50.0/4.0)*600);Vofa_data(RPM);
//			printf("RPM: %.3f \r \n",RPM);
//    __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1,BINMotor_SpeedtoPulse(BACK,L_AddPID.pwm_add));dc_motor_pwmset(RPM,&spdPID);}}

? ? ? ? ? ? ? ??

????????????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87884.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87884.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87884.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在C#中,可以不實例化一個類而直接調用其靜態字段

這是因為靜態成員(static members)屬于類本身,而不是類的實例。這是靜態成員的核心特性1. 靜態成員屬于類,而非實例當用static關鍵字修飾字段、方法或屬性時,這些成員會綁定到類級別,而不是實例級別。它們在…

Win11 安裝 Visual Studio(保姆教程 - 更新至2025.07)

Visual Studio 安裝(保姆教程 - 更新至2025.07) 前言安裝須知安裝過程1. 下載安裝包2. 安裝3. 注冊4. 創建桌面快捷方式 前言 本教程針對 非計算機相關專業的小白用戶 ,手把手教你如何基于 win11 操作系統 安裝 Visual Studio 2022。安裝搭載…

工商銀行杭州軟開校招面經分享

近年來,央國企成為了很多求職者的首選,無論是校招還是社招。不過,在選擇央國企的時候,還是盡量要選擇壟斷性或者盈利多的。 昨天看到一份 2024 年中國企業 500 強榜單中提到的最賺錢的十家央國企的名單,給大家分享一下。 排名企業名稱成立時間主要業務描述2024年營收(萬…

李宏毅genai筆記:推理

0 思考越多效果越好 可以把算力投入在training的時候,也可以投入在testing上面 連起來的線表示表現是差不多的,越高分(越右上方)越好 同樣-1000分,可以訓練時候用力較少,test的時候多用點算力 但是training…

使用SSH隧道連接遠程主機

概述 SSH(Secure Shell 的縮寫)是一種網絡協議,通過使用身份驗證機制,是兩臺計算機進行加密通信。 SSH 主要用途是登錄服務器,還可以作為加密通信的中介,充當兩臺服務器之間的通信加密跳板,這個功能稱為端口轉發(port forwarding),又稱 SSH 隧道(tunnel)。 端口…

數據結構---鏈表理解(二)

文章目錄 二、鏈表2.1 鏈表初始化2.2 單鏈表2.2.1 單鏈表---頭插法2.2.2 單鏈表---單鏈表遍歷2.2.3 單鏈表---尾插法2.2.4 單鏈表---在指定位置插入數據2.2.5 單鏈表---刪除指定位置節點2.2.6 單鏈表---獲取鏈表長度2.2.7 單鏈表---釋放鏈表 二、鏈表 暫時到這一步你就理解為&a…

Playnite使用指北 —— 一個優秀的本地化游戲管理工具

為何我們使用 Playnite? 首先我們需要知道 Playnite 是什么,如果你有過用 emby 等管理過電影影視的經驗,你可能會對這種工具感到熟悉: Playnite 是一個開源的本地化的游戲管理軟件,可以實現多平臺的管理(S…

時間與空間復雜度詳解:算法效率的度量衡

一、為什么需要復雜度分析&#xff1f; 想象你正在開發一個手機通訊錄應用&#xff0c;需要實現聯系人搜索功能。你有兩種算法可以選擇&#xff1a; // 算法A&#xff1a;線性搜索 public Contact linearSearch(List<Contact> contacts, String name) {for (Contact c …

408第三季part2 - 計算機網絡 - 交換機

理解 題目 如果你這么做 那你完了&#xff0c;因為這種叫存儲轉發 直通只轉目的地址 b 再次理解 A發數據到交換機里想給B 然后交換表會記錄A的MAC地址和端口 然后因為交換表找不到B&#xff0c;所以A會把BCD全部肘一遍&#xff08;廣播&#xff09;&#xff0c;最終只有B會…

從零開始開發純血鴻蒙應用之探析倉頡語言與ArkTS的差異

探析倉頡語言與ArkTS的差異 〇、前言一、IDE 的支持程度不同二、內置組件的使用方式不同三、頁面路由實現方式的不同四、總結 〇、前言 截止到本文發布的日期為止&#xff0c;鴻蒙官方所推薦的開發原生鴻蒙應用的語言&#xff0c;有兩種&#xff0c;分別是擴展自 Typescript 的…

Cursor/VScode ,點擊運行按鈕,就打開新的終端,如何設置為在當前終端運行文件而不是重新打開終端----一招搞定篇

我發現就是&#xff0c;我運行.py&#xff0c;點擊完運行按鈕&#xff0c;就給我重新打開一個終端&#xff0c;然后新的終端是在base環境中的&#xff0c;就跟麻煩 還得在當前終端輸入python3 test.py 來運行文件。能不能修改。1、打開cursor或者vscode 。 同時按下 ctrlshiftp…

【STM32實踐篇】:I2C驅動編寫

文章目錄I2C 物理層I2C 協議層1. 數據有效性2. 起始和停止信號3. 應答響應4. 總線的尋址方式5. 數據傳輸5.1 主機向從機發送數據5.2 主機由從機中讀數據5.3 I2C通信復合格式I2C 驅動編寫1. 配置 SCL 和 SDA2. I2C起始信號和停止信號3. 等待從設備應答4. 主機發送ACK和NACK信號5…

ragflow本地部署教程linux Ubuntu系統

以下是一份在 Ubuntu 系統上本地部署 RAGFlow 的詳細教程。 一、基礎環境準備 1.硬件要求 –CPU ≥ 4核 –RAM ≥ 16 GB –磁盤空間 ≥ 50 GB&#xff08;建議 SSD&#xff09; 2.系統配置 更新系統 sudo apt update && sudo apt upgrade -y 設置內核參數&#xff…

[netty5: WebSocketClientHandshaker WebSocketClientHandshakerFactory]-源碼分析

在閱讀這篇文章前&#xff0c;推薦先閱讀以下內容&#xff1a; [netty5: WebSocketFrame]-源碼分析[netty5: WebSocketFrameEncoder & WebSocketFrameDecoder]-源碼解析 WebSocketClientHandshakerFactory WebSocketClientHandshakerFactory 是用于根據 URI 和協議版本創…

4.2 如何訓練?個 LLM

?般??&#xff0c;訓練?個完整的 LLM 需要經過圖1中的三個階段——Pretrain、SFT 和 RLHF。 4.2.1 Pretrain 預訓練任務與架構 任務類型&#xff1a;采用因果語言模型&#xff08;CLM&#xff09;&#xff0c;通過預測下一個 token 進行訓練&#xff0c;與傳統預訓練模型…

Qt中的QObject::moveToThread方法詳解

一、QObject::moveToThread方法QObject::moveToThread()是Qt框架中一個非常重要的功能&#xff0c;它允許改變QObject及其子對象的線程關聯性。這個功能在多線程編程中特別有用&#xff0c;可以將耗時操作移到工作線程執行&#xff0c;避免阻塞主線程/GUI線程。基本用法void QO…

【9】用戶接入與認證配置

本文旨在幫助網絡管理員在 SD-WAN 環境中實現安全、穩定的用戶接入與認證策略,涵蓋本地/遠程認證、權限管理、密碼策略、SSH、會話控制等關鍵配置要素。 1.密碼策略與賬戶安全 從 IOS XE SD-WAN 17.3.1 起,Cisco 引入密碼強化功能,用于統一用戶密碼的復雜度與有效性要求。密…

第十六節:第三部分:多線程:線程安全問題、取錢問題的模擬

線程安全問題介紹&#xff1a;取錢的線程安全問題 取錢的線程安全問題 取錢案例需求分析 線程安全問題出現的原因 代碼&#xff1a;模擬線程安全問題&#xff08;上述取錢案例&#xff09; Account類&#xff08;賬戶類&#xff09; package com.itheima.day3_thread_safe;pu…

APE:大語言模型具有人類水平的提示工程能力

摘要 通過以自然語言指令作為條件輸入&#xff0c;大型語言模型&#xff08;LLMs&#xff09;展現出令人印象深刻的通用計算能力。然而&#xff0c;任務表現嚴重依賴于用于引導模型的提示&#xff08;prompt&#xff09;質量&#xff0c;而最有效的提示通常是由人類手工設計的…

X86 CPU 工作模式

1.概述 1.實模式 實模式又稱實地址模式&#xff0c;實&#xff0c;即真實&#xff0c;這個真實分為兩個方面&#xff0c;一個方面是運行真實的指令&#xff0c;對指令的動作不作區分&#xff0c;直接執行指令的真實功能&#xff0c;另一方面是發往內存的地址是真實的&#xff…