Sommario:

Misuratore di giri con STM32: 8 passaggi
Misuratore di giri con STM32: 8 passaggi

Video: Misuratore di giri con STM32: 8 passaggi

Video: Misuratore di giri con STM32: 8 passaggi
Video: STM32 TACHOMETER | MEASURE RPM | #33 2024, Dicembre
Anonim
Misuratore di giri con STM32
Misuratore di giri con STM32

Sebbene sia un po' una seccatura da acquistare (perché non è disponibile in molti negozi online), trovo necessario discutere di STM32 L432KC. Questo chip merita un affetto speciale, in quanto è ULTRA LOW POWER. Tuttavia, per chi non possiede l'STM32, può essere sostituito in questo progetto dall'Arduino Uno. Per fare ciò, è sufficiente modificare il pin dell'ingresso Interrupt.

Creiamo quindi un misuratore di giri utilizzando l'STM32 L432KC e un sensore a infrarossi. Questo stesso programma può essere utilizzato anche per misurare la velocità del vento. La caratteristica di basso consumo di questo microcontrollore è perfetta per IOT.

Passaggio 1: moduli

Moduli
Moduli
Moduli
Moduli

Per il nostro progetto di oggi, utilizziamo il MAX7219CWG a 8 cifre e il modulo a infrarossi.

Passaggio 2: STM32 NUCLEO-L432KC

STM32 NUCLEO-L432KC
STM32 NUCLEO-L432KC

Passaggio 3: dimostrazione

Dimostrazione
Dimostrazione

Nel nostro assemblaggio, abbiamo l'STM32, il display a 8 cifre e l'ingresso a impulsi. La scheda a infrarossi ha un fototransistor e un LED che cattura la luce facendo rimbalzare un nastro bianco. Questo nastro è attaccato ad una ruota e, ad ogni giro, genererà un impulso, che sarà catturato dall'interrupt STM32.

Abbiamo un diodo e un condensatore nell'assieme che sono stati utilizzati per impedire al rumore del segnale di lettura del nastro di raggiungere l'STM32, il che gli farebbe interpretare l'accensione e lo spegnimento.

La dimostrazione mostra il nostro progetto, così come il misuratore Minipa (entrambi in funzione).

Passaggio 4: assemblaggio

Assemblea
Assemblea

Passaggio 5: programma

Faremo un programma in cui il modulo a infrarossi attiverà un interrupt nell'STM32 L432KC ogni "giro" e faremo i calcoli per visualizzare gli RPM sul display.

Passaggio 6: biblioteche

Biblioteche
Biblioteche

Aggiungi la seguente libreria "DigitLedDisplay".

Accedi semplicemente a "Schizzo >> Includi librerie >> Gestisci librerie …"

Passaggio 7: codice sorgente

Librerie e variabili

Iniziamo il codice sorgente inclusa la libreria DigitLedDisplay. Mostreremo l'oggetto di visualizzazione. Ho impostato il pin di interruzione, che sarà 12. Inoltre, inserisco un operatore volatile sia per il contatore RPM che per il tempo per evitare problemi di collisione.

/* Include DigitLedDisplay Library */#include "DigitLedDisplay.h" /* Arduino Pin to Display Pin 7 to DIN, 6 to CS, 5 to CLK */ //DigitLedDisplay ld = DigitLedDisplay(7, 6, 5); //arduino DigitLedDisplay ld = DigitLedDisplay(4, 2, 3); //STM32 L432KC int pin = 12; //pino de interrupção (modulo IR) volatile unsigned int rpm; //contatore di rpm volatile unsigned long timeold; //tempo

Impostare

Nel Setup, configuriamo il funzionamento del display, così come configuriamo l'interruzione come Rising.

void setup() {Serial.begin(115200); /* Imposta la luminosità min:1, max:15 */ ld.setBright(10); /* Imposta il conteggio delle cifre */ ld.setDigitLimit(8); ld.printDigit(0); attachInterrupt(digitalPinToInterrupt(pin), interruptPin, RISING); giri/min = 0; timeold = millis(); }

Ciclo continuo

Infine, determiniamo l'intervallo di 1 in 1 minuto per aggiornare il display. Dopo aver pulito lo schermo, stampiamo l'RPM. Eseguiamo la funzione che l'interrupt chiamerà. Calcoliamo RPM e tempo di aggiornamento.

void loop() { ritardo(1000); ld.clear(); ld.printDigit(rpm); } void interruptPin() { rpm = 60*1000/(millis() - timeold); timeold = millis(); }

Passaggio 8: file

Scarica i file:

PDF

IO NO

Consigliato: