blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
3
SLEDUJETE BLOG
PHP, Arduino programátor
deadawp



Počítadlo otáčok so zastavením motora
pridal deadawp 7.1. 2022 o 21:13



Od uverejnenia článku o IR otáčkomeri na Sector blogu uplynulo už 2 aj štvrť roka. Článok popisoval využitie IR senzora prekážok v úlohe otáčkomera pre meranie otáčok na remenici kľukovej hriadele najmä dieselových nízko-otáčkových motorov. Otáčkomer bolo samozrejme možné využiť aj pri elektromotoroch, ktoré však článok priamo nespomínal. Preto si dnes ukážeme programovú implementáciu pre mikrokontróler AVR ATmega328P na vývojovej doske Arduino Uno, ktorý bude snímať otáčky elektromotora a dokáže ho vypnúť pri dosiahnutí určitého počtu otáčok.

Cieľom implementácie bude obslúžiť tlačidlo (t.j. debouncing), ktoré bude spúšťať elektromotor. Spúšťacia rutina zároveň spustí prerušenie na digitálnom vstupe Arduina. Po spustení motora začne v prerušení Arduino načítavať otáčky motora. Pri presiahnutí určitého počtu otáčok (vzorovo 10) sa motor vypne, prerušenie sa zakáže a počítadlo sa vynuluje. Motor bude spínaný cez relé.

Implementácia sa od pôvodného otáčkomera bude líšiť tým, že dostupná implementácia bude obsahovať aj softvérový doboucing signálu pre rozlíšenie dvoch po sebe idúcich signálov bez započítania jedného signálu viac-krát, čo môže nastať najmä pri vysokorýchlostnom otáčaní. Deboucing nám umožní využitie otáčkomera pri motoroch s vyššími otáčkami, napr. aj 12-tisíc za minútu. Implementácia taktiež nebude prepočítavať počet zaznamenaných otáčok na otáčky za minútu a tiež nevyužíva displej.

Nebudem v článku opisovať funkčnosť IR senzora prekážok KY-032, spôsob merania, či deboucing, nakoľko boli tieto pojmy a technické špecifikácie vysvetlené v pôvodnom článku pre IR otáčkomer (viz. prvý odkaz hore). Programová implementácia počíta s využitím spínacieho (nie rozpínacieho) tlačidla zapojeného v režime INPUT_PULLUP, teda pri stlačení je spínané proti zemi. Relé je ovládané cez GPIO v režime HIGH pre zapnutie motora a v režime LOW pre vypnutie motora. V prípade, že využívate relé s invertovanou logikou, t.j. active-LOW, je nutné v programe zameniť vo funkcii digitalWrite() HIGH za LOW a opačne pre ovládanie relé.

IR senzor je pripojený k vývodu D2 Arduina, ktoré podporuje prerušenie (interrupt). Všetky premenné, ktoré bude obsluhovať interrupt rutina sú typu volatile, aby bolo garantované, že budú obslúžené. Využíva sa premenná int rev pre počet zaznamenaných otáčok (prechodov) a unsigned long cas_rutina, ktorá uchováva čas posledného pulzu. V podmienke, kde sa porovnáva millis() a cas_rutina sa využíva interval 15, čo je rozlíšenie 15 ms pri zázname následujúceho pulzu. Rutina prerušenia musí byť napísaná efektívne a dĺžkou čo najkratšia.

Pri debouncingu o veľkosti 15 ms môžeme detekovať otáčky spoľahlivo s minimálnou chybovosťou až do cca 4000/min. Pri využití aktuálneho programu s motorom s vyšším počtom otáčok by dochádzalo k nedetekcii otáčok (boli by ignorované). V prípade nižšieho debouncingu, napr 5 ms môžeme detegovať otáčky až do cca 12000/min.

Debounce využíva aj samotné tlačidlo pre spustenie motora. Využíva sa debounce o dĺžke 50 ms. Pri fyzickom kontakte, ktoré tlačidlo využíva nastáva výraznejší zákmit v porovnaní s IR. Samotná logika stlačenia tlačidla reaguje na stlačenie a pustenie tlačidla pre spustenie motora cez relé.

Programová implementácia je dostupná na Pastebin: https://pastebin.com/XyTsjdqu




Prístupov 1610
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDUJETE
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Ako spustiť neefektívny program efektívn...
[ 21.6.2022] (príspevkov 0)
Wokwi - simulátor pre Arduino projekty
[ 14.4.2022] (príspevkov 0)
Ovládanie DC motorov - NodeMCU V2 + moto...
[ 29.1.2022] (príspevkov 0)
Kde hľadať VIN - Zetor UR1
[ 12.1.2022] (príspevkov 0)
Počítadlo otáčok so zastavením motora
[ 7.1.2022] (príspevkov 0)
FreeRTOS v Arduino IDE - ESP32
[ 2.1.2022] (príspevkov 0)
WiFi termostat - Espressif Systems - ESP...
[ 24.12.2021] (príspevkov 0)
ULP aplikácie - ESP8266 / ESP32
[ 14.11.2021] (príspevkov 0)