Измерение оборотов в минуту с помощью квадратурного энкодера
Я пытаюсь создать контроллер оборотов в минуту для своего проекта. Для этой цели я использую квадратурный кодер (ppr=400) и Arduino Uno. Я использую приведенный ниже код для расчета оборотов двигателя постоянного тока. Я получаю показания на своем серийном мониторе. Однако этот ОБ / мин не совпадает с моим ручным расчетом (то есть когда я вычисляю об / мин Вручную с помощью секундомера - для более низких скоростей).
EDIT-> Eg - Вручную я получаю около 10 оборотов в минуту, но моя программа показывает 60 и более.>
Я использовал один вывод прерывания на своем Arduino UNO.
#define encoder0PinA 2
#define encoder0PinB 3
int power=6; // to power up the encoder
int gnd=4; // to provide ground to the encoder
int motor=11; //motor PWM pin
int dir=10;
volatile unsigned int encoder0Pos = 0;
void setup() {
pinMode(encoder0PinA, INPUT);
digitalWrite(encoder0PinA, HIGH); // turn on pull-up resistor
pinMode(encoder0PinB, INPUT);
digitalWrite(encoder0PinB, HIGH); // turn on pull-up resistor
pinMode(power,OUTPUT);
pinMode(gnd,OUTPUT);
digitalWrite(power,HIGH);
digitalWrite(gnd,LOW);
pinMode(motor,OUTPUT);
pinMode(dir,OUTPUT);
digitalWrite(dir,LOW);
attachInterrupt(0, doEncoder, RISING); // encoder pin on interrupt 0 - pin 2
Serial.begin (9600);
Serial.println("start"); // a personal quirk
analogWrite(motor,120); // to set a particular test RPM to the motor.
}
void loop() {
encoder0Pos=0;
delay(1000);
float rpm=encoder0Pos/(400);
Serial.println(rpm);
}
void doEncoder() {
encoder0Pos++;
}
Также я попробовал самый первый код по следующей ссылке "https://playground.arduino.cc/Main/RotaryEncoders".. В этом случае Arduino полностью прекращает передачу. Я попробовал тот же код на одной из установок моего друга ... удивительно, что он там работает. Не могу понять, где я ошибаюсь... Является ли мой подход к кодированию правильным?? Пожалуйста, просветите меня... Спасибо.
@CR7, 👍0
Обсуждение1 ответ
Убедитесь, что кодер выдает 400 импульсов на каждой фазе. Это может быть 200 на каждой фазе за один оборот
Вместо того, чтобы сбрасывать счетчик импульсов, подсчитайте время, необходимое для выполнения одного оборота (как можно ближе, насколько вы можете судить), и включите двигатель только на это время, а затем снова выключите. Это позволит вам в более управляемой среде протестировать свой код, и он будет одинаковым(почти) каждый раз.
Вы вычисляете обороты в секунду с помощью своего кода, а не за минимальное количество импульсов/400(если это правильное число)=Обороты, которые вы очищаете каждые 1000 мс
Обеспечьте хорошие соединения на вашей проводке, так как не требуется много времени, чтобы прерывание сработало дважды, когда оно должно было сработать только один раз.
Использовать второй фазы энкодера, это то, что дает возможность для расшифровки сигналов и изменение dirrection, т. е. - несколько импульсов подряд(без каких-либо импульсов б) не равны движения, это значит либо мотор висит прямо на фазы линией, или что-то вызывает прерывание стрелять чаще, чем следует.
Почему код с игровой площадки Arduino не работает?, @CR7
Получение направления для меня не проблема... Получение оборотов в минуту или оборотов в минуту-моя главная забота.., @CR7
- Использование millis() и micros() внутри процедуры прерывания
- Подсчет импульсов с прерыванием
- Устранение дребезга кнопки с помощью прерывания
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Почему необходимо использовать ключевое слово volatile для глобальных переменных при обработке прерываний в ардуино?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Использование поворотных энкодеров с прерываниями смены контактов
- Arduino непрерывно считывает значение АЦП с помощью прерывания
Когда вы говорите, что ваши расчеты не совпадают, пожалуйста, опишите значения, которые производит каждый из них. Есть много способов, при которых что-то может "не сработать", @jose can u c
конечно, сэр, я отредактирую его как можно скорее., @CR7
Ваш квадратурный энкодер оптический или механический?, @jose can u c
Это оптический квадратурный кодер, @CR7
Кодирующее звено - https://m.aliexpress.com/item/32816515228.html, @CR7