Cuprins:

Contor RPM cu STM32: 8 pași
Contor RPM cu STM32: 8 pași

Video: Contor RPM cu STM32: 8 pași

Video: Contor RPM cu STM32: 8 pași
Video: Using encoder to measure RPM in STM32F4 2024, Noiembrie
Anonim
Contor RPM cu STM32
Contor RPM cu STM32

Deși este oarecum deranjant de cumpărat (deoarece nu este disponibil în multe magazine de internet), consider că este necesar să discutăm despre STM32 L432KC. Acest cip merită o afecțiune specială, deoarece este ULTRA LOW POWER. Cu toate acestea, pentru cei care nu dețin STM32, acesta poate fi înlocuit în acest proiect de Arduino Uno. Pentru a face acest lucru, pur și simplu schimbați pinul intrării de întrerupere.

Să creăm apoi un contor RPM folosind STM32 L432KC și un senzor infraroșu. Același program poate fi folosit și pentru măsurarea vitezei vântului. Caracteristica de consum redus a acestui microcontroler este perfectă pentru IOT.

Pasul 1: Module

Module
Module
Module
Module

Pentru proiectul nostru de astăzi, folosim MAX7219CWG din 8 cifre, precum și modulul cu infraroșu.

Pasul 2: STM32 NUCLEO-L432KC

STM32 NUCLEO-L432KC
STM32 NUCLEO-L432KC

Pasul 3: demonstrație

Demonstrație
Demonstrație

În ansamblul nostru, avem STM32, afișajul de 8 cifre și intrarea de impuls. Cardul cu infraroșu are un fototranzistor și un LED care prinde lumina prin ricoșarea unei panglici albe. Această bandă este atașată la o roată și, la fiecare viraj, va genera un impuls, care va fi capturat de întreruperea STM32.

Avem o diodă și un condensator în ansamblu, care au fost folosite pentru a împiedica zgomotul semnalului de citire a benzii să ajungă la STM32, ceea ce l-ar face să interpreteze pornirea și oprirea.

Demonstrația arată proiectul nostru, precum și contorul Minipa (ambele în funcțiune).

Pasul 4: Asamblare

Asamblare
Asamblare

Pasul 5: Program

Vom face un program în care modulul cu infraroșu va declanșa o întrerupere în STM32 L432KC la fiecare „viraj” și vom face calculele pentru a afișa RPM pe afișaj.

Pasul 6: Biblioteci

Biblioteci
Biblioteci

Adăugați următoarea bibliotecă „DigitLedDisplay”.

Pur și simplu accesați „Schiță >> Includeți biblioteci >> Gestionați bibliotecile …”

Pasul 7: Cod sursă

Biblioteci și variabile

Să începem codul sursă, inclusiv biblioteca DigitLedDisplay. Vom arăta obiectul afișat. Am setat pinul de întrerupere, care va fi 12. De asemenea, introduc un operator volatil atât pentru contorul RPM cât și pentru timp, pentru a evita orice probleme de coliziune.

/ * Include DigitLedDisplay Library * / # include "DigitLedDisplay.h" / * Pin Arduino pentru a afișa pinul 7 la DIN, 6 la CS, 5 la CLK * / // DigitLedDisplay ld = DigitLedDisplay (7, 6, 5); // arduino DigitLedDisplay ld = DigitLedDisplay (4, 2, 3); // STM32 L432KC int pin = 12; // pino de interrupção (módulo IR) volatile unsigned int rpm; // contador de rpm volatile unsigned long timeold; //tempo

Înființat

În Setup, configurăm operația de afișare, precum și configurăm întreruperea ca Rising.

void setup () {Serial.begin (115200); / * Setați luminozitatea min: 1, max: 15 * / ld.setBright (10); / * Setați numărul de cifre * / ld.setDigitLimit (8); ld.printDigit (0); attachInterrupt (digitalPinToInterrupt (pin), interruptPin, RISING); rpm = 0; timeold = milis (); }

Buclă

În cele din urmă, determinăm intervalul de 1 în 1 minut pentru a actualiza afișajul. După curățarea ecranului, imprimăm RPM. Efectuăm funcția pe care o va apela întreruperea. Calculăm RPM și actualizăm timpul.

bucla void () {delay (1000); ld.clear (); ld.printDigit (rpm); } void interruptPin () {rpm = 60 * 1000 / (milis () - timeold); timeold = milis (); }

Pasul 8: Fișiere

Descărcați fișierele:

PDF

EU NU

Recomandat: