Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
In questo tutorial, ti spiegherò come
- controllare un motore DC con PWM
- comunicare tramite UART
- gestire gli interrupt del timer
Prima di tutto, useremo una scheda di sviluppo del sistema AVR Core che puoi trovare su Aliexpress a circa 4 USD. Il link della scheda di sviluppo è qui. Utilizzeremo anche Atmel ICE Debugger e Atmel Studio per programmare e eseguire il debug del nostro software.
Passaggio 1: approfondimento sulla scheda tecnica e sul codice sorgente - Velocità di clock
In 1. il proiettile definiamo la nostra frequenza di cristallo dove possiamo vedere sulla scheda di sviluppo
Passaggio 2: impostazione dei registri UART
Per comunicare con UART devi impostare i registri USART Baud Rate - UBRRnL e UBRRnH correttamente puoi calcolarlo tu stesso oppure puoi usare il calcolatore online per ottenere facilmente i valori corretti
Calcolatrice online
ruemohr.org/~ircjunk/avr/baudcalc/avrbaudca…
Quindi viene calcolato il valore MYUBBR, nel registro UCSR0B abilitiamo RXEN0 (abilitazione recv) TXEN0 (abilitazione trasmissione) e RXCIE0 (RX per interrupt). Nel registro UCSR0C selezioniamo la dimensione del carattere di 8 bit.
Dopo aver impostato il bit di interrupt RX, dovremmo aggiungere la funzione ISR per USART0_RX_vect
ISR(USART0_RX_vect){ char rcvChar = UDR0; if(rcvChar != '\n') { buffer[bufferIndex] = rcvChar; bufferIndex++; } }
Non dovresti eseguire alcuna logica aziendale nella routine del servizio di interruzione. Devi fare in modo che la funzione restituisca al più presto.
Passaggio 3: impostazioni PWM
Nella funzione initPWM impostiamo il nostro clock scaler della CPU, la modalità Timer/Counter come Fast PWM e impostiamo il suo comportamento con i bit COM
Dovremmo anche collegare il motore CC al pin OC2 che è specificato nella Tabella 66. Confronta la modalità di uscita, la modalità PWM veloce nel nostro foglio dati, vedrai anche che il pin OC2 è (OC2/OC1C) PB7
Passaggio 4: risultato
Quando carichi il codice sorgente nell'allegato.
È possibile inserire un nuovo valore PWM (0-255) da UART (è possibile utilizzare il terminale della porta seriale arduino) per impostare la velocità del motore CC.