将电机的编辑器端口连接在板子上通过 getEncoderPosition() 函数监控编辑器的计量值。
dcmotor.getEncoderPosition();
#include <PhpocExpansion.h>
#include <Phpoc.h>
byte spcId = 1;
ExpansionDCMotor dcmotor(spcId, 1);
void setup() {
Serial.begin(9600);
while(!Serial)
;
Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
Expansion.begin();
Serial.println(dcmotor.getPID());
Serial.println(dcmotor.getName());
dcmotor.setPeriod(10000);
dcmotor.setWidth(3000);
}
void loop() {
// get the counter value of an encoder
Serial.println(dcmotor.getEncoderPosition());
delay(100);
}
请通过利用 getEncoderPeriod() 函数进行编辑器脉冲周期监控。
period = dcmotor.getEncoderPeriod();
此周期单位是微秒(us)。 为了减少编辑器输出脉冲周期监控错误,建议编辑器样品计量设置为高值。
#include <PhpocExpansion.h>
#include <Phpoc.h>
byte spcId = 1;
ExpansionDCMotor dcmotor(spcId, 1);
int width = 3000;
void setup() {
Serial.begin(9600);
while(!Serial)
;
Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
Expansion.begin();
Serial.println(dcmotor.getPID());
Serial.println(dcmotor.getName());
dcmotor.setEncoderPSR(64);
dcmotor.setPeriod(10000);
dcmotor.setWidth(width);
}
void loop() {
if(width > 1000) {
width -= 100;
dcmotor.setWidth(width);
delay(500);
Serial.print(width);
Serial.print("=>");
// get the period of an encoder's output
Serial.println(dcmotor.getEncoderPeriod());
}
else
dcmotor.setWidth(0);
}
利用 setEncoderPolarity() 函数可设定编辑器计量方向。
dcmotor.setEncoderPolarity(pol);
pol - 技术方向
pol | polarity |
---|---|
0 or greater than 0 | normal(default) |
less than 0 | reverse |
※ 参考 : 实际编辑器计数值,受电机的旋转方向影响。
设定编辑器计量方向 | 电机的旋转方向 | 计数值 |
---|---|---|
normal | clockwise | increase |
normal | counterclockwise | decrease |
reverse | counterclockwise | increase |
reverse | clockwise | decrease |
利用 setEncoderPosition() 函数可初始化或者变更编辑器计量值。
dcmotor.setEncoderPosition(pos);
pos - 编辑器计数值
计量值可设定范围为-1000000000 (-1 亿) 至+1000000000 (1 亿)。
通过 setEncoderPSR() 函数可设定编辑器样品计量。
dcmotor.setEncoderPSR(psr);
编辑器采样计量是在测量编辑器输出脉冲周期时使用的脉冲个数。 采样计量数越多误差将减少。 编辑器的样品计数可设定为1至64。