Подключите энкодер двигателя к порту энкодера этой платы и просмотрите значения счетчика, используя фнкцию 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 | полярность |
---|---|
0 или больше, чем 0 | нормальное (по умолчанию) |
меньше, чем 0 | назад |
※ Примечание : Направление счетчика энкодера зависит от направления вращения двигателя.
направление счетчика энкодера | направление вращения двигателя | значение счетчика |
---|---|---|
нормальное | по часовой стрелке | увеличение (increase) |
нормальное | против часовой стрелки | снижение (decrease) |
назад | против часовой стрелки | увеличеник (increase) |
назад | по часовой стрелке | снижение (decrease) |
Установите или инициализируйте значения счетчика с помощью функции setEncoderPosition().
dcmotor.setEncoderPosition(pos);
pos - значение счетчика энкодера
Вы можете установить значения счетчика от -1000000000 (-1 миллиарда) до +1000000000 (1 миллиарда).
Вы можете установить расчет выборки энкодера при помощи функции setEncoderPSR().
dcmotor.setEncoderPSR(psr);
Счетчик выборки энкодера представляет собой количество импульсов, используемых для измерения периода выходного импульса энкодера. Чем больше количество выборки, тем меньше ошибка. Счетчик выборки энкодера может быть установлен в диапазоне от 1 до 64.