stm32f103单片机—编码器测速
一、涉及資源
stm32f103ZET6開發板(非指定)
MG513P3012V型號電機(帶霍爾編碼器)(非指定)
二、涉及概念
1、單片機資源要求
此種測速方法要求單片機的定時器具有編碼器模式,對于stm32f1系列,具備編碼器模式的定時器有TIM1/2/3/4/5/8,定時器使用通道1、2來實現編碼器功能,接線時注意把A/B相接到定時器通道1/2的引腳。
2、減速比
電機結構
減速結構
減速比為1:30通俗地講就是當電機外伸軸轉1圈時實際軸轉30圈,外伸軸我們一般接上輪胎等實際作用物體,而實際軸是電機自身的轉子,霍爾編碼器的檢測對象是實際軸
3、測速原理
霍爾編碼器工作方式
霍爾編碼器是一種通過磁電轉換將輸出軸上的機械幾何位移量轉換成脈沖或數字量的傳感器。霍爾編碼器是由霍爾碼盤和霍爾元件組成。霍爾碼盤是在一 定直徑的圓板上等分地布置有不同的磁極。電機旋轉一圈霍爾元件發出特定數目的脈沖信號。,用時間間隔內接收的總的脈沖數目除以轉一圈發出的脈沖數目即可得到轉軸轉的圈數,再除以時間間隔就能得到轉速。 為判斷轉向,一般輸出兩組存在一定相位差的方波信號。
定時器判斷電機正反轉的依據
定時器通道1、通道2接收A相和B相的脈沖信號,轉一圈A相和B相發出的脈沖數目是一樣的,但是發送有先后之分。
定時器針對正反轉的兩種計數方式
定時器在編碼器模式下有兩種計數方式,正轉時是從重載值開始向下減數,反轉時是從零開始向上加數(正反是相對而言的)。例如,如果我設定定時器的重載值為0x7fff,那么當定時器接收到10個正轉的脈沖時,計數值變為0x7ff3,當定時器接收到的是反轉的脈沖時,定時器的計數值變為0x000A。
定時器編碼器模式1、2、3
TI1和TI2分別為定時器的通道1和通道2
編碼器模式3即為四倍頻模式,這個模式下對于A和B相發過來的一組脈沖會有四次計數(四個跳變沿),這樣就能將檢測精度提到四倍。
4、M法測速
三、編碼器與單片機的接線
注:這里以stm32f1系列的定時器4為例,若使用其他定時器進行測速需要更換對應的引腳資源,編碼器A/B相需接到定時器的通道1和通道2
1、霍爾編碼器實物圖
接線
編碼器A相和B相接PB6和PB7引腳(無對應要求)
四、單片機引腳和定時器的初始化
1、代碼示例
引腳選擇PB6和PB7
定時器選擇TIM4,使用編碼器模式3
五、讀定時器的計數值
定時器的計數值即為編碼器發出的脈沖數目*4(定時器的編碼器模式3)
/***************************************************** *@Func: 讀取定時器計數值 ****** *@para: ****** *@desc: ******************************************************/ void Read_EncoderA(void) {if(TIM4->CNT > 0x7fff){EncoderA = TIM4->CNT - 0xffff; // 反轉}else{EncoderA = TIM4->CNT; // 正轉}TIM4->CNT = 0xffff; }六、由定時器計數值得到轉速
1、計算公式
使用M法測速,計算公式為:
轉速n = 總脈沖數/四倍頻/單圈脈沖數/減速比/時間間隔
2、代碼示例
電機轉一圈本款霍爾編碼器發出13個脈沖,本款電機的減速比為1:30
/***************************************************** *@Func: 獲取電機A的速度 ****** *@para: ****** *@desc: 返回的是電機的轉速 n圈/s ****** 轉速n = 總脈沖數/四倍頻/單圈脈沖數/減速比/時間 ******************************************************/ void Get_MotorA_Speed(void) {Read_EncoderA(); // 獲取編碼器產生的脈沖數MotorASpeed = (float)EncoderA / 4 / PulseNum / ReRate / DecodeGapTime * 1000; }總結
以上是生活随笔為你收集整理的stm32f103单片机—编码器测速的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机内外存储器论文,计算机组成原理探讨
- 下一篇: ccs船用计算机检验标准,CCS 船用铸