#include <Arduino.h>
#include <SimpleFOC.h>
// 编码器(pin_A, pin_B, PPR)
Encoder sensor = Encoder(2, 3, 4096);
//通道A和B回调
void doA(){sensor.handleA();}
void doB(){sensor.handleB();}
void setup() {
Serial.begin(115200);//WWQ
// 初始化编码器硬件
sensor.init();
//硬件中断启用
sensor.enableInterrupts(doA, doB);
Serial.println("Encoder ready");
_delay(1000);
}
void loop() {
Serial.print(sensor.getAngle());
Serial.print("\t");
Serial.println(sensor.getVelocity());
}
1. Encoder(int encA, int encB , float ppr, int index = 0);
编码器类构造函数:
参数encA编码器A引脚
参数encB编码器B引脚
每次旋转的参数ppr脉冲(cpr=ppr*4)
参数索引管脚编号(可选输入)
2.void enableInterrupts(void (*doA)() = nullptr, void(*doB)() = nullptr, void(*doIndex)() = nullptr);
编码器中断回调函数
3.传感器类实现的抽象函数
获取当前角度(rad)
float getAngle() override;
获取当前角速度(rad/s)
float getVelocity() override;
*如果需要搜索绝对零,则返回0
*0-无索引编码器
*1-带索引的ecoder
int needsSearch() override;
// 获取index方向引脚
// 返回 -1 if no index
int Encoder::needsSearch(){
return hasIndex() && !index_found;
}
//用于确定编码器是否具有索引的专用函数
int Encoder::hasIndex(){
return index_pin != 0;
}
上传代码到开发板,运行: