Перейти к содержанию
Авторизация  
Avinsis

Эмулятор Валкодера на ардуино

Рекомендуемые сообщения

Прошу помощи с написанием скетча для данной приблуды.

Гравировальный станок MDX650. Сдох валкодер. Стоял 100 щелчков на оборот.(как я понял спец заказ производителя был, ибо максимум видел на 48).

Временно поставил на 24 щелчка, но работа стала просто адом, колесо приходится крутить как сумашедший.

Ничего проще не придумал, как купить на алике маховичек на 5 вольт.

Фотку прилагаю. На нем 4 пина. +5 GND A B

Вот такого плана стоит валкодер в гравере.

https://docs-europe....66b813ecceb.pdf

Помогите накидать скетч, что бы это все работало.

 

 

Подключил маховик к ардуинке, загрузил этот скетч:

int pin_DT = 2;	  // пин 2 подключаем к DT енкодера
int pin_CLK = 3;	 // пин 3 подключаем к CLK енкодера
int pos_encoder = 0; // Первоначальная позиция енкодера равна 0
int Last;			// Тут всегда будет лежать предыдущие значение положения енкодера
int DT;
boolean left;
void setup() {
  pinMode (pin_DT,INPUT);
  pinMode (pin_CLK,INPUT);
  Last = digitalRead(pin_DT); // Считываем значение на выходе DT и запоминаем его
  Serial.begin (9600);
}
void loop() {
  DT = digitalRead(pin_DT);
  if (DT != Last){ // Сравниваем фактическое положение с предыдущим, если они не равны то енкодер изменил положение
 if (digitalRead(pin_CLK) != DT) {  // Если значение с pin_CLK не равно значению с pin_DT, то значит вращение было НАПРАВО ->
   pos_encoder++;
   left = false;
 } else { // Если значение с pin_CLK  равно значению с pin_DT, то значит вращение было НАЛЕВО <-
   left = true;
   pos_encoder--;
 }
 Serial.print ("Napravlenie vrasheniya: ");
 if (!left){
   Serial.println("NAPRAVO ->");
 }else{
   Serial.println("NALEVO  <-");
 }
 Serial.print("Polozhenie: ");	
 Serial.println(pos_encoder);
  }
  Last = DT;
}

 

При счете врет в 2 раза, т.е. за один оборот насчитывает 200. Пробовал вращать очень быстро в обе стороны, не ошибается.

post-165811-012688900_1533663476_thumb.jpg

Изменено пользователем Avinsis

Поделиться сообщением


Ссылка на сообщение

Если ещё актуально - мне кажется, что ардуина считает вдвое больше импульсов из-за того, что обрабатывается событие и при изменении DT с 0 на 1 и при изменении DT с 1 на 0. Попробуйте изменить эту строку:

  if (DT != Last){ // Сравниваем фактическое положение с предыдущим, если они не равны то энкодер изменил положение

на строку

  if ((DT != Last) && (DT == 1)){ // Сравниваем фактическое положение с предыдущим, если они не равны то энкодер изменил положение

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу


×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.