Sommario:
- Passaggio 1: requisiti hardware e software
- Passaggio 2: configurazione STM32CubeMX
- Passaggio 3: codifica Keil UVision
- Passaggio 4: il risultato:)
Video: Controllo del servomotore con MCU ARM STM32F4: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Ciao di nuovo amici:) Quindi, in questo progetto controlleremo un servomotore con STM32F4 ARM MCU. Nel mio caso, userò la discovery board, ma se cogli l'essenza del problema, puoi applicarla per ogni MCU. Così. Iniziamo:)
Passaggio 1: requisiti hardware e software
In termini di hardware avremo bisogno di:
- Un MCU che è nel mio caso la scheda Discovery STM32f4
- Un servomotore comune, come SG90 o qualsiasi altro
In termini di software avremo bisogno di:
- STM32CubeMX
- Keil uVision
Se hai tutti questi, passa al passaggio successivo:)
Passaggio 2: configurazione STM32CubeMX
Come sai, per controllare un servomotore abbiamo bisogno del segnale PWM. I requisiti in termini di segnale PWM sono così:
- Il periodo PWM deve essere 20 mS
- Il tempo di attivazione deve essere compreso tra 0,5 mS e 2,5 mS. Quando il tempo è di 0,5 mS, il servo ruoterà di 0 gradi, 1,5 mS per 90 gradi e 2,5 mS per 180 gradi.
Quindi, abbiamo bisogno di configurare PWM e per quello scopo useremo Timer1.
- Per prima cosa, seleziona TIM1 dalla sezione Timer. questo passaggio
-
Quindi, dalla sezione Modalità
- Scegli l'orologio interno in questo passaggio
- Generazione PWM CH1 Questo passaggio
-
Quindi, dalla sezione Configurazione
- Imposta il prescaler a 160 Questo passaggio
- Imposta il periodo del contatore su 2000 Questo passaggio
- Imposta Pulse a 50 Questo passaggio
- Inoltre, dalla configurazione dell'orologio, impostare gli orologi del timer APB1 su 16 MHz. questo passaggio
Ora parliamo un po' di questo passaggio:
La frequenza dell'orologio del nostro timer APB1 è 16MHz. Quindi, significa che sono necessari 16, 000, 000 tick per ottenere 1 secondo. Tuttavia, impostiamo il nostro prescaler su 160. Significa che dividiamo la nostra frequenza per quel numero e diminuiamo il numero di tick fino a 100.000. Quindi, per 1 secondo abbiamo bisogno di 100.000 tick. Tuttavia, abbiamo bisogno di 20 ms di periodo PWM come abbiamo affermato prima. Quindi, in base a semplici calcoli, abbiamo bisogno di 2000 tick per 20 ms. Quindi, impostando Counter Period su 2000 determiniamo il periodo del segnale PWM che è 20mS. Ora dobbiamo determinare il numero di tick per ottenere i tempi di attivazione da 0,5 mS a 2,5 mS. Possiamo ottenere questa equazione da semplici calcoli ed è:
On_Time = (Tick_Number / 100). Tieni presente che questo è l'on_time che cambia l'angolo del servomotore. Quindi, sotto l'immagine riassumo questo passaggio. Se hai qualche domanda scrivi nei commenti e ti risponderò il prima possibile.
Immagine dei calcoli
Dopo aver eseguito tutte queste operazioni, genera codice:)
Passaggio 3: codifica Keil UVision
Quindi, prima determiniamo cosa vogliamo fare? Vogliamo scrivere una funzione che accetti il grado e scriverlo sul servo. Allora, come lo faremo? Come abbiamo detto prima, per cambiare angolo dobbiamo cambiare il tempo di accensione. I nostri angoli cambiano tra [0, 180] e il nostro numero di tick che determina i cambiamenti di tempo tra [50, 250]. Quindi, abbiamo bisogno di una funzione di mappatura che mappi l'angolo dato nell'intervallo del numero di tick. Ad esempio, per 0 gradi 50 tick, per 180 gradi 250 tick e così via… Quindi scriviamo la nostra funzione di mappatura:
int map(int st1, int fn1, int st2, int fn2, int valore){ return (1.0*(value-st1))/((fn1-st1)*1.0) * (fn2-st2)+st2; }
Questa è la nostra funzione di mappatura. Ti interessa come viene derivato? Allora leggilo. Quindi, prendiamo i nostri intervalli e il valore che vogliamo mappare.
Ora, scriviamo una funzione che accetti l'angolo e la mappi nell'intervallo di tick:
void servo_write(int angle){ htim1. Instance->CCR1 = map(0, 180, 50, 250, angle); }
Come puoi vedere, questo codice accetta l'angolo e lo associa all'intervallo del numero di tick. Quindi, il numero di tick è dato al registro CCR1 che controlla il tempo di accensione e quindi l'angolo.
Tuttavia, affinché tutti questi funzionino, avviamo prima il pwm che può essere eseguito solo con una riga di codice:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
Quindi, abbiamo una funzione che accetta l'angolo e lo scrive sul servo. Proviamolo e scriviamo la nostra funzione di scansione che è molto semplice:
void servo_sweep(void){ for(int i = 0; i <= 180; i++) { servo_write(i); HAL_Delay(10); } for(int i = 180; i>= 0; i--) { servo_write(i); HAL_Delay(10); } }
Quindi, conta fino a 180 e poi fino a 0 e scrivi questi valori sul servo:) Quindi, vediamo il risultato!
Passaggio 4: il risultato:)
Quindi, questa è la fine. Se hai qualche domanda chiedi pure. Sarò felice di rispondere loro. Grazie mille per aver letto e spero di vederti nel prossimo progetto:)
Consigliato:
CONTROLLO DEL SERVOMOTORE UTILIZZANDO WIFI E BLYNK: 5 passaggi
CONTROLLO DEL SERVO MOTORE UTILIZZANDO WIFI E BLYNK: Ciao ragazzi, in questo tutorial, impariamo come controllare il movimento di un servomotore tramite WiFi utilizzando Node MCU e l'app Blynk
Tutorial Arduino - Controllo del servomotore con joystick: 4 passaggi
Tutorial Arduino - Controllo del servomotore con joystick: in questo tutorial impareremo come usare il servo con il joystick. Controlleremo 1 servomotore con 1 joystick. Puoi implementare i tuoi progetti di braccio robotico facendo riferimento a questo tutorial. Ovviamente useremo la batteria / alimentazione esterna quando facciamo
Tutorial Arduino - Controllo del servomotore con potenziometro: 5 passaggi
Tutorial Arduino - Controllo del servomotore con potenziometro: questa istruzione è la versione scritta del mio "Arduino: come controllare il servomotore con potenziometro" Video di YouTube che ho caricato di recente. Ti consiglio vivamente di dare un'occhiata. Visita il canale YouTube
Tutorial Arduino - Controllo del servomotore con Arduino: 5 passaggi
Tutorial Arduino - Controllo del servomotore con Arduino: questa istruzione è la versione scritta del mio "Arduino: come controllare il servomotore con Arduino" Video di YouTube che ho caricato di recente. Ti consiglio vivamente di dare un'occhiata. Visita il canale YouTube
Incapsulamento del servomotore passo-passo con controllo seriale tramite Arduino utilizzando una stampante 3D - Pt4: 8 passaggi
Incapsulamento del servomotore passo passo con controllo seriale tramite Arduino utilizzando una stampante 3D - Pt4: in questo quarto video della serie Motor Step, utilizzeremo ciò che abbiamo imparato in precedenza per costruire un servomotore passo passo con controllo tramite comunicazione seriale e reale feedback di posizione utilizzando un encoder resistivo monitorato da un Arduino. In