Počítadlo otáčok so zastavením motora

08.07.2022

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é.


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.

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.

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.


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

© 2024-2025 Arduino Blog - Všetky práva vyhradené.
Vytvorené službou Webnode Cookies
Vytvorte si webové stránky zdarma! Táto stránka bola vytvorená pomocou služby Webnode. Vytvorte si vlastný web zdarma ešte dnes! Vytvoriť stránky