В электромеханике одним из интересных моментов является то, что обычный двигатель постоянного тока может играть роль также генератора. Вы можете использовать электричество для вращения вала или использовать вращающийся вал для выработки электроэнергии. На основе этого принципа можно сделать немало полезных вещей. И в данном материале мы покажем, как использовать шаговый двигатель в качестве датчика.

Применение шагового мотора в качестве датчика имеет смысл. Если катушки в двигателе могут перемещать вал, то перемещение вала должно вызвать ток в катушках. Однако следует заметить, что при низких скоростях вы можете пропустить импульсы. Опять же, устройство не оптимизировано для этого типа операций.
В схеме используется дифференциальный усилитель на основе двух ОУ для считывания импульсов от катушки. Два операционных усилителя с двух катушек создают квадратурный сигнал, как обычный энкодер.

Когда вал поворачивается в одном направлении, один импульс будет следовать за другим. При вращении в другом направлении последовательность импульсов будет реверсирована.

Для проверки работоспособности концепции можно собрать схему из Arduino, двух двигателей и драйвера A4988.

А можно с одним двигателем и светодиодным кольцом AdaFruit NeoPixel в качестве индикатора, как на видео ниже.
В любом случае считывать импульсы с датчика/двигателя поможет следующий код:
#include <Encoder.h> // https://github.com/PaulStoffregen/Encoder
#define dir 12 // Stepping
#define stp 13 // Direction
Encoder myEnc(3, 2);
void setup() {
pinMode(dir, OUTPUT);
pinMode(stp, OUTPUT);
}
int newPosition=0;
int oldPosition = 0;
int diff=0;
void loop() {
oldPosition=newPosition;
newPosition = myEnc.read();
diff=newPosition-oldPosition;
if(diff!=0){
if(diff> 0){
digitalWrite(dir, HIGH);
}else{
digitalWrite(dir, LOW);
}
diff=abs(diff);
for(int i=0;i< diff;i++){
digitalWrite(stp,HIGH);
delay(50);
digitalWrite(stp,LOW);
}
}
}
© digitrode.ru