学习记录--编码器测速
一,編碼器原理詳解:
參考:[野火]《電機應用開發實戰指南》第13章
1,基本參數
(本次實驗所用的增量式編碼器查參數得為13ppr)
2,增量式編碼器基本原理:
3,編碼器的倍頻
?4,M法測速:
5,STM32的編碼器接口實現原理(輸入捕獲定時器)
2倍頻實現為例,其他的原理類同(一個通道的上升和下降沿都計數)
?二,CUBEMX配置
1,定時器配置
需要注意的是:有些編碼器輸出是不帶上拉電阻的,此時就需要將A,B通道的IO口成設置成上拉,本實驗用的編碼器查參數得知是帶上拉輸出(默認上拉到供電VCC引腳),故可用單片機直接采集。
關于幾個成員的理解:
2,打開一個串口傳數據
3,設置兩個輸出IO驅動電機
三,keil中代碼
1,開啟一系列
/* USER CODE BEGIN 2 *///開啟PWM輸出HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);//清零計數器 __HAL_TIM_SET_COUNTER(&htim3, 0);//清零中斷標志位 __HAL_TIM_CLEAR_IT(&htim3,TIM_IT_UPDATE);// 使能定時器的更新事件中斷 __HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);//設置更新事件請求源為:計數器溢出(也就是只有計數溢出時觸發更新中斷)__HAL_TIM_URS_ENABLE(&htim3); //使能編碼器接口(TIM_CHANNEL_ALL: TIM Channel 1 and TIM Channel 2 are selected)HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);/* USER CODE END 2 */2, 寫更新中斷回調函數(計在T0內有多少次溢出,用來計算T0內的總計數次數)
定義變量(關于__IO, 參考博客:(12條消息) 關于"__IO uint32_t" 中的__IO 表達的意思_znmdwahaha的專欄-CSDN博客)
// 定時器溢出次數?
 __IO int16_t Encoder_Overflow_Count = 0;
?// 轉向
 __IO int8_t Motor_Direction = 0;
 // 當前時刻總計數值?
 __IO int32_t Capture_Count = 0;
 // 上一時刻總計數值
 __IO int32_t Last_Count = 0;
 // 轉軸轉速?
 __IO float Shaft_Speed = 0.0f;
由上述STM32的編碼器接口實現原理:每次捕獲到輸入沿(即編碼器每產生一個脈沖)計數器就計數一次,因此可以通過T0內計數次數和編碼器線數等算出轉速(這里應該是忽略了在一個裝載值內轉向改變帶來的影響)
3,計算轉速,直接在void HAL_SYSTICK_Callback()里寫了(1ms調用一次)
void HAL_SYSTICK_Callback(void) {static uint16_t i = 0;i++;if(i == 1000) //1s計算一次{//電機旋轉方向 = 當前計數器計數方向 Motor_Direction = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);// 當前計數值 = 當前裝載內計數器值 + 計數溢出次數 * 定時器裝載值 Capture_Count =__HAL_TIM_GET_COUNTER(&htim3) + (Encoder_Overflow_Count * 65535);// 轉軸轉速 = 單位時間內的計數值(當前計數值-上一次計數值) / 編碼器總分辨率(ppr*倍頻)*時間系數(進行單位轉化的)Shaft_Speed = (float)(Capture_Count - Last_Count) / (13*4) * 1;printf("電機方向:%d\r\n", Motor_Direction);printf("電機轉軸處轉速:%.2f 轉/秒 \r\n", Shaft_Speed);//注意輸出的和轉軸處轉速不一樣,還要除一個電機減速比printf("電機輸出軸轉速:%.2f 轉/秒 \r\n", Shaft_Speed/30);// 記錄當前總計數值,供下一時刻計算使用 Last_Count = Capture_Count;i = 0;} }由于手頭的硬件無法進行實驗,先挖個坑之后再調看是不是通的
總結
以上是生活随笔為你收集整理的学习记录--编码器测速的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: elasticsearch(ES)日志迁
- 下一篇: HTML开发技术【2】
