Мазмұны:

Толық Arduino айналмалы шешімі: 5 қадам
Толық Arduino айналмалы шешімі: 5 қадам

Бейне: Толық Arduino айналмалы шешімі: 5 қадам

Бейне: Толық Arduino айналмалы шешімі: 5 қадам
Бейне: Arduino көмегімен шунт резисторымен тұрақты токтың 500А шамасын өлшеңіз 2024, Шілде
Anonim
Толық Arduino айналмалы шешімі
Толық Arduino айналмалы шешімі

Айналмалы кодерлер - бұл электронды жобалар үшін бұрылатын басқару тұтқалары, көбінесе Arduino отбасының микроконтроллерлерінде қолданылады. Олар параметрлерді дәл баптауға, мәзірлерді шарлауға, объектілерді экранда жылжытуға, кез келген түрдегі мәндерді орнатуға болады. Олар потенциометрлерді жиі алмастырады, өйткені оларды дәл және шексіз бұруға болады, олар бір уақытта бір дискретті мәнді көбейтеді немесе азайтады, және көбінесе таңдау функциялары үшін итермелі қосқышпен біріктіріледі. Олар әр түрлі пішіндер мен өлшемдерде келеді, бірақ төменде түсіндірілгендей, ең төменгі баға диапазонын қолдану қиын.

Ротари -кодерлердің жұмысының егжей -тегжейлері мен пайдалану режимдері туралы көптеген мақалалар бар, және оларды пайдалану туралы көптеген үлгі кодтары мен кітапханалары бар. Жалғыз мәселе - олардың ешқайсысы қытайлық айналмалы модульдердің ең төменгі бағасымен 100% дәл жұмыс істемейді.

1 -қадам: Ішкі айналмалы кодерлер

Ішкі айналмалы кодерлер
Ішкі айналмалы кодерлер
Ішкі айналмалы кодерлер
Ішкі айналмалы кодерлер
Ішкі айналмалы кодерлер
Ішкі айналмалы кодерлер

Кодердің айналмалы бөлігінде үш түйреуіш бар (және қосқыштың қосымша бөлігі үшін тағы екі). Бірі - жалпыға ортақ жер (қара GND), екіншісі - тұтқа бұрылған кезде бағытты анықтауға арналған (олар көбінесе көк CLK және қызыл DT деп аталады). Бұл екеуі де микроконтроллердің PULLUP кіріс штырына бекітілген, бұл ЖОҒАРЫ деңгей олардың әдепкі көрсеткіші болып табылады. Тұтқаны алға (немесе сағат тілімен) бұрған кезде алдымен көк CLK төмен деңгейге түседі, содан кейін қызыл DT келеді. Әрі қарай бұрылғанда, көк CLK қайтадан жоғарыға көтеріледі, содан кейін GND ортақ патч қосылу түйреуішінің екеуінен де кететіндіктен, қызыл DT де жоғарыға көтеріледі. Осылайша FWD (немесе сағат тілімен) бір толық белгісін толтырыңыз. BWD басқа бағытта да (немесе сағат тіліне қарсы) жүреді, бірақ қазір қызыл түс бірінші болып түседі, ал көк түс сәйкесінше екі деңгейлі суретте көрсетілгендей артқа көтеріледі.

2 -қадам: Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық

Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық
Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық
Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық
Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық
Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық
Көптеген адамдар үшін нағыз ауыртпалық тудыратын бақытсыздық

Ардуино әуесқойлары үшін жиі кездесетін мәселе - арзан айналмалы кодтаушы модульдер шығыс деңгейіндегі қосымша өзгерістерді көтереді, бұл бағытты санаудың қосымша және қате көрсеткіштерін тудырады. Бұл ақаусыз санауды болдырмайды және бұл модульдерді дәл айналмалы жобаларға біріктіруді мүмкін етпейді. Бұл қосымша соққылар қосқыш түйреуіштердегі патчтардың механикалық қозғалыстарынан туындайды, тіпті қосымша конденсаторларды қолдану оларды толығымен жоя алмайды. Секіру толық кене циклінің кез келген жерінде пайда болуы мүмкін және суреттердегі нақты өмір сценарийлерімен бейнеленген.

3 -қадам: Ақырлы күй машинасы (FSM) шешімі

Ақырлы күй машинасы (FSM) шешімі
Ақырлы күй машинасы (FSM) шешімі

Кескін екі түйреуіштің (көк CLK және қызыл DT) ықтимал деңгейінің өзгеруінің толық күй кеңістігін көрсетеді. Осы мемлекеттік машинаның негізінде әрқашан 100% дәл жұмыс істейтін толық шешімді бағдарламалауға болады. Бұл шешімде сүзуді кешіктірудің қажеті жоқ болғандықтан, бұл ең жылдам. Түйреуіштердің күй кеңістігін жұмыс режимінен бөлудің тағы бір артықшылығы - сұрау немесе үзіліс режимін өз қалауы бойынша қолдануға болады. Дауыс беру немесе үзіліс түйреуіштердегі деңгейдің өзгеруін анықтай алады, ал жеке тәртіп жаңа күйді ағымдағы күйге және деңгей өзгерістерінің нақты оқиғаларына негізделген есептейді.

4 -қадам: Arduino коды

Arduino коды
Arduino коды

Төмендегі код сериялық монитордағы FWD және BWD белгілерін есептейді, сонымен қатар қосудың қосымша функциясын біріктіреді.

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

// Ардуино порттарына айналдырылған түйреуіштер

#анықта БҚ 21 #анықта CLK 22 #анықта ДТ 23

// Айналмалы реттегіштің ағымдағы және алдыңғы мәні

int curVal = 0; int prevVal = 0;

// FSM -дің жеті күйі (ақырлы күй машинасы)

#анықтау IDLE_11 0 #анықтау SCLK_01 1 #SCLK_00 анықтау #SCLK_10 3 #анықтау SDT_10 4 #анықтау SDT_00 5 #SDT_01 анықтау 6 int күй = IDLE_11;

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

Serial.begin (250000); Serial.println («Бастау …»); // HIGH деңгейі барлық түйреуіштер үшін әдепкі болады 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)); } // Есептегіш мәнінің кез келген өзгерісі, егер (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}

// CLK деңгейінің өзгеруіне арналған мемлекеттік машинаның ауысуы

void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (state == SCLK_10) state = SCLK_00; әйтпесе (күй == SDT_10) күй = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (state == SCLK_00) state = SCLK_10; әйтпесе (күй == SDT_00) күй = SDT_10; әйтпесе (күй == SDT_01) {күй = IDLE_11; curVal--; }}}

// DT деңгейінің өзгеруіне арналған мемлекеттік машинаның ауысуы

жарамсыз rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; әйтпесе (күй == SDT_01) күй = 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 шешімі әр түрлі кездейсоқ секіру әсерлері бар төмен диапазондағы айналмалы кодерлер болған жағдайда да дәл және жылдам жұмыс істейтінін тексере аласыз.

Ұсынылған: