Мазмуну:

Толук Arduino Rotary Solution: 5 кадам
Толук Arduino Rotary Solution: 5 кадам

Video: Толук Arduino Rotary Solution: 5 кадам

Video: Толук Arduino Rotary Solution: 5 кадам
Video: Драм-секвенсор Arduino: 8 дорожек, 16 шагов на такт, 8 тактов на паттерн 2024, Ноябрь
Anonim
Толук Arduino Rotary Solution
Толук Arduino Rotary Solution

Ротари коддогучтар - бул электрондук долбоорлордун айлануучу башкаруу баскычтары, көбүнчө Arduino үй -бүлөлүк микроконтроллери менен колдонулат. Алар параметрлерди тууралоодо, менюларда чабыттоодо, экранда объекттерди жылдырууда, ар кандай маанилерди коюуда колдонулушу мүмкүн. Алар потенциометрлердин жалпы алмаштыруучулары болуп саналат, анткени аларды так жана чексиз бурууга болот, алар бир убакта бир дискреттик маанини көбөйтүшөт же азайтышат, жана көбүнчө тандоо функциялары үчүн түртүүчү коммутатор менен бириктирилет. Алар ар кандай формада жана өлчөмдө болот, бирок эң төмөн баа диапазону төмөндө түшүндүрүлгөндөй интерфейске кирүү кыйын.

Ротари коддогучтардын иштөө деталдары жана колдонуу режимдери жана аларды кантип колдонуу боюнча көптөгөн үлгүлүү коддор жана китепканалар жөнүндө сансыз макалалар бар. Бир гана көйгөй, алардын эч кимиси эң төмөнкү баа диапазонунда Кытайдын айлануучу модулдары менен 100% так иштебейт.

1 -кадам: Ротари Encoders Inside

Ротари Encoders ичинде
Ротари Encoders ичинде
Ротари Encoders ичинде
Ротари Encoders ичинде
Ротари Encoders ичинде
Ротари Encoders ичинде

Коддогучтун айлануучу бөлүгүндө үч төөнөгүч бар (жана кошумча экөө үчүн дагы экөө). Бири жалпы жер (кара GND), калган экөө баскыч бурулганда багытты аныктоо үчүн (алар көбүнчө көк CLK жана кызыл DT деп аталат). Бул экөө тең микроконтроллердин PULLUP кирүү пинине тиркелет, бул ЖОГОРКУ деңгээлди алардын демейки окуусу. Баскыч алдыга (же саат жебеси боюнча) бурулганда, адегенде көк CLK LOW деңгээлине түшөт, андан кийин кызыл DT келет. Андан ары бурулуп, көк CLK кайра ЖОГОРУГА көтөрүлөт, андан кийин кадимки GND жамаачы эки туташтыргычтан чыкканда, кызыл DT дагы кайра жогору көтөрүлөт. Ошентип, бир толук белгини толтуруу FWD (же саат жебеси боюнча). BWD башка багытта (же сааттын жебесине каршы) барат, бирок азыр кызыл биринчи түшөт, көк болсо тиешелүү түрдө эки деңгээлдеги сүрөттөрдө көрсөтүлгөндөй акыркы жолу кайра көтөрүлөт.

2 -кадам: Көптөр үчүн чыныгы ооруну жараткан азап

Көптөр үчүн чыныгы ооруну жараткан азап
Көптөр үчүн чыныгы ооруну жараткан азап
Көптөр үчүн чыныгы ооруну пайда кылган азап
Көптөр үчүн чыныгы ооруну пайда кылган азап
Көптөр үчүн чыныгы ооруну жараткан азап
Көптөр үчүн чыныгы ооруну жараткан азап

Ардуино хоббисттери үчүн жалпы көйгөй, арзан Ротари коддогуч модулдары өндүрүштүн деңгээлиндеги кошумча өзгөрүүлөрдү секиртип, кошумча жана туура эмес багыттарды окууну жаратат. Бул кемчиликсиз эсептөөнүн алдын алат жана бул модулдарды так айлануучу долбоорлорго интеграциялоону мүмкүн кылбайт. Бул кошумча секирүүлөр туташтыргычтардын үстүндөгү тактардын механикалык кыймылынан улам пайда болот, ал тургай кошумча конденсаторлорду колдонуу аларды толугу менен жок кыла албайт. Чачтар толук кене циклинин каалаган жеринде пайда болушу мүмкүн жана сүрөттөрдөгү чыныгы жашоо сценарийлери менен сүрөттөлөт.

3 -кадам: Чектүү мамлекеттик машина (FSM) Чечими

Чектүү мамлекеттик машина (FSM) чечими
Чектүү мамлекеттик машина (FSM) чечими

Сүрөт туура жана жалган секирүү үчүн эки казыктын (көк CLK жана кызыл DT) мүмкүн болгон деңгээлинин толук мамлекеттик мейкиндигин көрсөтөт. Бул мамлекеттик машинанын негизинде толук чечимди программалоого болот, ал дайыма 100% так иштейт. Бул чечимде чыпкалоо кечигүүлөрү керек болбогондуктан, бул дагы эң ылдам. Кадрлардын мамлекеттик мейкиндигин иштөө режиминен бөлүүнүн дагы бир пайдасы - бул өз каалоосуна жараша сурамжылоо же үзгүлтүккө учуратуу режимдерин колдонсо болот. Сурамжылоо же үзгүлтүктөр казыктардагы деңгээлдеги өзгөрүүлөрдү аныктай алат жана өзүнчө күнүмдүк абалдын деңгээлине жана деңгээлдеги өзгөрүүлөрдүн чыныгы окуяларына негизделген жаңы абалды эсептеп чыгат.

4 -кадам: Arduino коду

Arduino коду
Arduino коду

Төмөндөгү код сериялык монитордо FWD жана BWD кенелерин эсептейт жана кошумча которуштуруу функциясын да бириктирет.

// Питер Цургай 2019-04-10

// Ардуино портторуна айландырылган казыктар

#define SW 21 #define CLK 22 #define DT 23

// Ротари менен жөндөлгөн эсептегичтин учурдагы жана мурунку мааниси

int curVal = 0; int prevVal = 0;

// FSMдин жети абалы (чектүү мамлекеттик машина)

#аныктоо IDLE_11 0 #аныктоо SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #deffine SDT_01 6 int state = IDLE_11;

жараксыз орнотуу () {

Serial.begin (250000); Serial.println ("Баштоо…"); // Жогорку деңгээл бардык пиндер үчүн демейки болот pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // CLK да, DT да бардык деңгээлдеги өзгөрүүлөр үчүн үзгүлтүктөрдү кошот attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }

void loop () {

// Кошумча которгучту иштетүү, эгерде (digitalRead (SW) == LOW) {Serial.println ("Басылган"); while (! digitalRead (SW)); } // Эсептегичтин маанисиндеги ар кандай өзгөрүү Serial Monitorдо көрсөтүлөт, эгерде (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// CLK деңгээлинин өзгөрүшүнө мамлекеттик машина өтүүлөрү

жараксыз rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (state == SCLK_10) state = SCLK_00; else if (state == SDT_10) state = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (state == SCLK_00) state = SCLK_10; else if (state == SDT_00) state = SDT_10; else if (state == SDT_01) {state = IDLE_11; curVal--; }}}

// Мамлекеттик машина DT деңгээлинин өзгөрүшүнө өтөт

жараксыз rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (state == SDT_01) state = SDT_00; else if (state == SCLK_01) state = SCLK_00; } else {if (state == SDT_10) state = IDLE_11; else if (state == SDT_00) state = SDT_01; else if (state == SCLK_00) state = SCLK_01; else if (state == SCLK_10) {state = IDLE_11; curVal ++; }}}

5 -кадам: Кемчиликсиз интеграция

Тиркелген видеодон FSM чечими ар кандай секирүү эффекттери бар диапазондогу айлануучу коддогучтар болгон учурда да так жана тез иштээрин текшере аласыз.

Сунушталууда: