Съдържание:
Видео: Прост ротационен декодер: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Тази инструкция описва прост метод за декодиране на последователен въртящ се енкодер, използващ Arduino Uno R3.
Компактните софтуерни процедури се използват за преброяване на броя на преходите, премахване на скачането на контактите и определяне на посоката на въртене. Не се изискват допълнителни компоненти и справочни таблици.
Предоставят се версии на кода с непрекъсване и непрекъсване.
Версията на прекъсване на кода изисква само един щифт за прекъсване.
Изображения:
- Първата снимка показва сглобения енкодер.
- Снимката на екрана показва кода за версията на прекъсване и броя, когато валът на енкодера се завърти по посока на часовниковата стрелка и обратно на часовниковата стрелка.
- Видеото показва броя при бързо въртене.
Стъпка 1: Електрическа схема
Схемата на свързване на енкодера е показана на фиг.1.
Проводниците на джъмпера са запоени директно към щифтовете на енкодера.
Разменете двата сини проводника, ако посоката на броене е обърната.
Стъпка 2: Списък на частите
Следните части са получени от
- 1 само Arduino UNO R3 с USB кабел.
- 1 само последователен въртящ се енкодер (EC11 или еквивалентен) с превключвател.
- 1 само копче, за да отговаря на вала.
- 3 само джъмперни проводници от мъжки към мъжки Arduino.
Стъпка 3: Теория
Последователните въртящи се енкодери генерират две квадратни вълни, всяка от които е изместена с 90 градуса, както е показано на фиг.1.
Логическите модели при контакт А и контакт В са различни, когато валът се завърта по посока на часовниковата стрелка (CW) и обратно на часовниковата стрелка (CCW) през позиции 1 до 6.
Общите методи за определяне на посоката на въртене включват:
- хардуер
- близнаци прекъсва
- таблици за търсене на шаблони
Този проект използва софтуерен метод, който не изисква справочни таблици. [1]
Посока
Вместо да разглеждаме изходните модели от контакт А и контакт В, нека се съсредоточим върху контакт А.
Ако изпробваме контакт B след всеки преход на контакт A, отбелязваме, че:
- Контакт А и контакт В имат противоположни логически състояния, когато енкодерът се завърти CW
- Контакт А и контакт В имат едно и също логическо състояние, когато енкодерът е завъртян CCW
Действителен код:
// ----- Брой преходи
CurrentStateA = stateContactA (); if (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); if (CurrentStateA == CurrentStateB) Count ++; if (CurrentStateA! = CurrentStateB) Брой-; LastStateA = CurrentStateA; }
Този метод предлага следните предимства:
- таблици за търсене не са необходими
- е необходим само един ред за прекъсване
Дебаунс
Всички механични енкодери страдат от „отскачане на контакт“.
Ако контактът на превключвателя не направи/прекъсне чисто, логическото му състояние ще се колебае бързо от ВИСОКО до НИСКО, докато контактът на превключвателя не се установи. Това води до фалшиво преброяване.
Един метод за потискане на отскачането на контакти е добавянето на малък кондензатор към всеки контакт на превключвателя. Кондензаторът и свързаният с него резистор за издърпване образуват интегратор, който ефективно къси високи честоти и позволява на напрежението на превключвателя да се покачва/пада грациозно.
Недостатъкът на този подход е, че може да се пропуснат преходи, ако валът на енкодера се завърти бързо.
Деблокиране на софтуер
Този метод използва два брояча (отворен, затворен), които са настроени на нула. [2]
След като бъде открит преход в контакт А:
- Постоянно анкетиране Контакт А.
- Увеличете отворения брояч и нулирайте затворения брояч, винаги когато контакт А е ВИСОК.
- Увеличете затворения брояч и нулирайте отворения брояч, винаги когато контакт А е НИСКИ.
- Излезте от цикъла, когато един от броячите достигне предварително определен брой. Ние ефективно търсим стационарен период след всяко отскачане на контакт.
Действителен код:
// ----- Дебаунс контакт А
while (1) {if (digitalRead (ContactA)) {// ----- ContactA е отворен затворен = 0; // Празен противоположен интегратор Open ++; // Интегрирайте if (Open> MaxCount) return HIGH; } else {// ----- ContactA е затворен Open = 0; // Празен противоположен интегратор Затворен ++; // Интегриране if (Затворено> MaxCount) връщане LOW; }}
Няма нужда да се отказвате от контакт B, тъй като преходите контакт A и контакт B не съвпадат.
Преброяване
Механичното „задържане“ефективно удвоява вашия брой, тъй като между броя се регистрират два броя (виж фиг. 1).
Броят на „задържащите“може да се определи, като се използва аритметика по модул 2, както е показано по -долу.
Действителен код:
// ----- Брой "детенти"
if (Брой % 2 == 0) {Serial.print ("Брой:"); Serial.println (Брой / 2); }
Препратки
Допълнителна информация може да бъде намерена на:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Стъпка 4: Софтуер
Този проект изисква нова версия на Ardino Uno R3 IDE (интегрирана среда за разработка), която е достъпна от
Изтеглете всяка от следните две скици на Arduino (приложено)
- rotary_encoder_1.ino (версия за допитване)
- rotary_encoder_2.no (версия за прекъсване)
Щракнете двукратно върху предпочитаната от вас версия и следвайте инструкциите на екрана.
Наслади се …
Щракнете тук, за да видите другите ми инструкции.
Препоръчано:
Ротационен плоттер за бутилки с ЦПУ: 9 стъпки (със снимки)
Ротационен плоттер за бутилки с ЦПУ: Взех някои ролки, които вероятно се използват в принтера. Хрумна ми идеята да ги превърна в оста на въртене на CNC плотер за бутилки. Днес бих искал да споделя как да се изгради плотер за бутилки с ЦПУ от тези ролки и други отпадъци
Друг ротационен превключвател с предимно 3D печат: 7 стъпки (със снимки)
Друг ротационен превключвател с предимно 3D печат: Преди малко създадох Ротационен превключвател с предимно 3D печат специално за моя проект Minivac 601 Replica. За новия си проект Think-a-Tron 2020 се нуждая от още един ротационен превключвател. Търся превключвател за монтаж на панел SP5T. Добавка
Линеен и ротационен задвижващ механизъм: 11 стъпки
Линеен и ротационен задвижващ механизъм: Тази инструкция е за това как да направите линеен задвижващ механизъм с въртящ се вал. Това означава, че можете да премествате обект напред и назад и да го завъртате едновременно. Възможно е да преместите обект 45 мм (1,8 инча) напред -назад и да го завъртите
Превърнете ротационен телефон в радио и пътувайте във времето: 5 стъпки (със снимки)
Превърнете ротационен телефон в радио и пътувайте във времето: Хакнах ротационен телефон в радио! Вземете телефона, изберете държава и десетилетие и слушайте страхотна музика! Как работи Този ротационен телефон има вграден микрокомпютър (Raspberry Pi), който комуникира с radiooooo.com, уеб радио
Как да направите прост DTMF (тон) декодер на телефонна линия: 3 стъпки
Как да направите прост DTMF (тон) декодер на телефонна линия: Това е прост проект, който ви позволява да декодирате DTMF сигнали на почти всяка телефонна линия. В този урок използваме декодера MT8870D. Използваме предварително вграден тон декодер, защото, повярвайте ми, отзад е болка да се опитате да го направите с