stm32中編碼器模式讀出「負數」的問題

2021-08-19 22:45:23 字數 925 閱讀 6601

最近在除錯平衡小車,在網上找到的關於直流電機編碼器的使用原始碼。檢視stm32使用手冊可以看到如下的配置,和。基本上程式也是這樣去設定的相關暫存器的。

如果ti1和ti2分別接電機的a相和b相的話,那麼,當電機正轉的時候,如下圖計數器回想上計數,反轉的時候會向下計數,注意了這個向下計數並不會出現負的值,依舊是從(0-arr)計數。

這種模式的好處:1.上公升沿和下降沿都會計數,所以被軟體4倍頻了。2.當某一相有毛刺的時候,計數器會在硬體上停止計數。

下面看網上找到的**。

int read_encoder(u8 timx)

return encoder_tim;

}

上面這樣傳進去要讀的定時器,返回的是相關編碼器的速度值。但是為什麼,會是乙個負數呢。計數器只能計數(0-arr)

注意看上面使用了強制型別裝換。把暫存器的值讀出來了之後,轉換成了short型(2位元組,32位系統下),範圍為(-32768-32767),此時當我們把計數器的初始值設定為0之後,如果出現反轉,它就會從0開始向下計數(0,65535,65534,...)但是經過強制型別轉換之後就變成了(0,-1,-2,...)。

為什麼65535會變成-1這是我不能理解的,此時我們回到short的表示範圍(-32768-32767),也就是說當讀出來的值為(32767,  32768, 32769,...,65535,65536,65537...)的時候會因為溢位而轉換為

(32767,-32768,-32767,...,   -1,      ,0,       , 1)就這樣不斷地迴圈下去。所以我們的電機反轉的時候讀出的數就是反方向的速度值。而不必用65535去減去讀出的值再加上負號才可以的到方便觀察的值。只需要乙個強制型別轉換就可以了。

STM32控制編碼器

編碼器是一種將角位移或者角速度轉換成一連串電數字脈衝的旋轉式感測器。可以用來測量位置,測量速度。四倍頻的方法是測量a相和b相的上公升沿和下降沿 stm32控制編碼器可以採用timer的編碼器模式,tim1 8的ch1和ch2分別對應a相和b相 選擇編碼器介面模式的方法是 如果計數器只在ti2的邊沿計...

STM32 編碼器模式 疑惑解讀

在參考手冊上有這樣的乙個圖,其中的相對訊號的電平很難理解。運用編碼器計數方向的圖來對照比較,終於找出了其中的規則。我們都知道編碼器轉動一圈輸出脈衝,而輸出的脈衝數量取決於編碼器的線數。如線數為500,則a b轉動一圈各輸出脈衝500,但是存在相位差,通常相位差為90。根據輸出訊號的相位差來對比,我們...

STM32正交編碼器介面

晶元型號 使用引腳及初始化程式原始碼 tim2埠重對映問題 與jtag介面衝突時的現象及解決方法 晶元型號 stm32f103ret6 使用定時器 tim2 tim3 tim4 tim5 使用引腳 tim2 pa15 pb3 remap tim3 pa6 pa7 tim4 pb6 pb7 tim5 ...