編碼器去除誤差

2021-09-10 07:04:17 字數 2481 閱讀 8187

並且,就算中間發生抖的,有誤差丟失狀態,恢復正常時的狀態依然會保持繼續下去。而共有4個狀態,在方向一定並且考慮反向的情況下,可以允許兩個狀態誤差。例如:目前在00狀態,下乙個狀態在01狀態,認為是反轉+1;而下乙個狀態是10狀態則正轉+1;11狀態則正轉+2。

我們可以在兩路中斷中檢測狀態,這裡必須要求是上下沿中斷。arduino有change方式的中斷,即電平變化就產生中斷,正好可以滿足四個狀態的需求。而如果沒有change方式的中斷的微控制器,想想辦法用高低電平中斷也可以搞定的。

這個和之前的ros底盤驅動可以直接對接,將原編碼器檔案替換成如此即可

#ifdef use_base

#include "motor_driver.h"//

#include "commands.h";//

/* wrap the encoder reset function */

#include "digitalwritefast.h"

// right encoder

#define c_rightencoderinterrupta 5

#define c_rightencoderinterruptb 4

#define c_rightencoderpina 18

#define c_rightencoderpinb 19

// left encoder

#define c_leftencoderinterrupta 1

#define c_leftencoderinterruptb 0

#define c_leftencoderpina 3

#define c_leftencoderpinb 2

//#define leftencoderisreversed

//#define rightencoderisreversed

volatile bool _rightencoderbset;

volatile long _rightencoderticks = 0;

volatile long last_rightencoderticks = 0;

volatile bool _leftencoderbset;

volatile long _leftencoderticks = 0;

volatile long last_leftencoderticks = 0;

volatile double left_speed = 0;

volatile double right_speed = 0;

volatile float left_speed_cal = 0;

volatile float right_speed_cal = 0;

#define rising_ 1

#define falling_ 0

volatile long rightencoderstatus;

volatile long last_rightencoderstatus;

volatile long leftencoderstatus;

volatile long last_leftencoderstatus;

volatile long right_count = 0;

volatile long left_count = 0;

void initencoders();

void handlerightmotorinterruptb()

last_rightencoderstatus = rightencoderstatus;

}void handlerightmotorinterrupta()

last_rightencoderstatus = rightencoderstatus;}/

void handleleftmotorinterruptb()

last_leftencoderstatus = leftencoderstatus;

}void handleleftmotorinterrupta()

last_leftencoderstatus = leftencoderstatus;

}void initencoders()

long readencoder(int i)

else

return encval;

}/* wrap the encoder reset function */

void resetencoder(int i) else

}/* wrap the encoder reset function */

void resetencoders()

#endif

index編碼器 編碼器測量工具 主軸編碼器

德國vs sensorik編碼器為index車銑復合工具機標配編碼器 並可完全相容西門子 l b 海德漢等編碼器。dcmu 24p cnbo box 應用於工具機主軸編碼器訊號診斷 資料記錄及訊號校準的測量工具 僅使用一台膝上型電腦連線我們的編碼器測量工具裝置 dcmu box 就可以輕鬆對編碼器訊...

連線編碼器 編碼器原理及測量

編碼器及其應用概述 編碼器 encoder 是將訊號 如位元流 或資料進行編制 轉換為可用以通訊 傳輸和儲存的訊號形式的裝置。編碼器把角位移或直線位移轉換成電訊號,前者成為碼盤,後者稱碼尺。按照讀出方式編碼器可以分為接觸式和非接觸式兩種。接觸式採用電刷輸出,一電刷接觸導電區或絕緣區來表示 的狀態是 ...

正交編碼器

正交編碼器通過兩個脈衝訊號進行位置測量。該訊號可稱為訊號a 通道a 和訊號b 通道b 訊號a和訊號b的偏移量為90 用於確定編碼器移動的方向。例如,在角度正交編碼器中,如訊號a位於訊號b之前,則編碼器按順時針方向旋轉。反之,編碼器按逆時針方向旋轉。m系列 c系列和ni tio裝置上的計數器支援對x1...