支持附加传感器 v2.1
为了能够使用一种新型传感器,该传感器采用Arduino SimpleFOClibrary实现的FOC算法,需要将其封装在一个扩展Sensor
的类中。它只需要实现几个通用函数。
class Sensor{
public:
// 获得当前角度(rad)
virtual float getAngle() = 0;
// 获得当前角速度(rad/s)
// 已实现
virtual float getVelocity();
// 如果需要搜索绝对零,则返回0
// 1 - 编码器与引脚 (没找到引脚)
// 0 - 每一个传感器
// 默认返回0
virtual int needsSearch();
}
步骤1 头文件MySensor.h
让我们制作一个新传感器实现的模型示例。我们从MySensor.h
文件开始:
#include <SimpleFOC.h>
class MySensor: public Sensor{
public:
MySensor(...);
// 初始化传感器硬件
void init();
// 实现 Sensor 抽象函数
// 获得当前角度(rad)
float getAngle();
};
步骤2 类实现文件 MySensor.cpp
现在让我们实现MySensor.cpp
文件:
#include "MySensor.h"
MySensor::MySensor(...){
// 定义所有必要的传感器变量
// 如果没有必要,也可以空着
}
MySensor::init(){
// 安装所有需要的传感器硬件
// 例如
sensor.hardwareInit();
}
// 实现 Sensor 抽象函数
// 获得当前角度(rad)
MySensor::getAngle(){
// 直接从传感器获取位置值
// 例如
return sensor.read() ;
}
步骤3 Arduino项目
最后,我们将能够在Arduino代码中使用它:
#include <SimpleFOC.h>
#include "MySensor.h"
// 实例化 MySensor
MySensor my_sensor = MySensor(...);
// 实例化运动
BLDCMotor motor = BLDCMotor(...)
// 驱动器
BLDCDriver3PWM driver = BLDCDriver3PWM(...)
void setup(){
// init MySensor 位置跟踪
my_sensor.init();
// 连接 MySensor 与电机
motor.linkSensor(&my_sensor);
// 驱动程序配置
driver.init();
motor.linkDriver(&driver);
// 准备 FOC
motor.init();
motor.initFOC();
}
void loop(){
// do FOC
motor.loopFOC();
motor.move(target);
}