- Cos'è un servomotore?
- Interfacciamento di servomotori con microcontrollori:
- Programmazione del servomotore con microcontrollore PIC PICF877A:
- Schema elettrico:
- Simulazione e configurazione hardware:
Questo è il nostro undicesimo tutorial sull'apprendimento dei microcontrollori PIC utilizzando MPLAB e XC8. In questo tutorial impareremo come controllare il servomotore con il microcontrollore PIC. Se hai già lavorato con i servomotori, puoi saltare la prima metà di questo tutorial, ma se sei nuovo nel servomotore stesso, continua a leggere.
Fino ad ora, abbiamo coperto molti tutorial di base come LED lampeggiante con PIC, Timer in PIC, interfaccia LCD, interfacciamento a 7 segmenti, ADC utilizzando PIC ecc. Se sei un principiante assoluto, visita l'elenco completo dei tutorial PIC qui e inizia a imparare.
Nel nostro precedente tutorial abbiamo appreso come generare segnali PWM utilizzando PIC Microcontroller, i segnali sono stati generati in base al valore letto dal potenziometro. Se hai capito tutti i programmi allora, Congratulazioni hai già codificato anche per un servomotore. SÌ, i servomotori rispondono ai segnali PWM (che creiamo utilizzando i timer qui) impareremo perché e come in questo tutorial. Simuleremo e costruiremo la configurazione hardware per questo progetto e puoi trovare il video dettagliato alla fine di questo tutorial.
Cos'è un servomotore?
Un servomotore è un tipo di attuatore (principalmente circolare) che consente il controllo angolare. Sono disponibili molti tipi di servomotori, ma in questo tutorial concentriamoci sui servomotori per hobby mostrati di seguito.
I servi per hobby sono popolari perché sono il metodo economico di controllo del movimento. Forniscono una soluzione pronta all'uso per la maggior parte delle esigenze degli hobbisti R / C e robotici. Inoltre eliminano la necessità di progettare su misura un sistema di controllo per ciascuna applicazione.
La maggior parte dei servomotori per hobby ha un angolo di rotazione di 0-180 ° ma puoi anche ottenere un servomotore a 360 ° se sei interessato. Questo tutorial utilizza un servomotore 0-180 °. Esistono due tipi di servomotori basati sull'ingranaggio, uno è il servomotore con ingranaggi in plastica e l'altro è il servomotore con ingranaggi in metallo. Gli ingranaggi in metallo vengono utilizzati in luoghi in cui il motore è soggetto a maggiore usura, ma ha un prezzo elevato.
I servomotori sono valutati in kg / cm (chilogrammo per centimetro) la maggior parte dei servomotori per hobby sono valutati a 3 kg / cm o 6 kg / cm o 12 kg / cm. Questo kg / cm ti dice quanto peso può sollevare il tuo servomotore a una determinata distanza. Ad esempio: un servomotore da 6 kg / cm dovrebbe essere in grado di sollevare 6 kg se il carico è sospeso a 1 cm dall'albero del motore, maggiore è la distanza minore è la capacità di carico del peso. Impara qui le basi del servomotore.
Interfacciamento di servomotori con microcontrollori:
L'interfacciamento dei servomotori per hobby con l'MCU è molto semplice. I servo hanno tre fili che escono da loro. Di cui due verranno utilizzati per l'alimentazione (positivo e negativo) e uno verrà utilizzato per il segnale che deve essere inviato dall'MCU. In questo tutorial utilizzeremo un servomotore Metal Gear MG995 che è più comunemente usato per robot umanoidi di auto RC ecc. L'immagine di MG995 è mostrata di seguito:
La codifica a colori del tuo servomotore potrebbe differire, quindi controlla la rispettiva scheda tecnica.
Tutti i servomotori funzionano direttamente con i tuoi binari di alimentazione + 5V, ma dobbiamo stare attenti alla quantità di corrente che il motore consumerebbe, se si prevede di utilizzare più di due servomotori è necessario progettare un servo scudo adeguato. In questo tutorial useremo semplicemente un servomotore per mostrare come programmare la nostra MCU PIC per controllare il motore. Controllare i collegamenti seguenti per l'interfacciamento del servomotore con altri microcontrollori:
- Interfacciamento servomotore con microcontrollore 8051
- Controllo del servomotore tramite Arduino
- Tutorial sul servomotore Raspberry Pi
- Servomotore con microcontrollore AVR
Programmazione del servomotore con microcontrollore PIC PICF877A:
Prima di poter iniziare la programmazione per il servomotore, dovremmo sapere quale tipo di segnale deve essere inviato per il controllo del servomotore. Dovremmo programmare l'MCU per inviare segnali PWM al filo di segnale del servomotore. All'interno del servomotore è presente un circuito di controllo che legge il ciclo di lavoro del segnale PWM e posiziona l'albero dei servomotori nella rispettiva posizione come mostrato nella figura sotto
Ogni servomotore funziona su una diversa frequenza PWM (la frequenza più comune è 50 HZ che viene utilizzata in questo tutorial) quindi procurati la scheda tecnica del tuo motore per controllare il periodo PWM in cui funziona il tuo servomotore.
Di seguito sono riportati i dettagli sul segnale PWM per il nostro Tower pro MG995.
Da ciò possiamo concludere che il nostro motore funziona con un periodo PWM di 20 ms (50 Hz). Quindi la frequenza del nostro segnale PWM dovrebbe essere impostata su 50Hz. La frequenza del PWM che avevamo impostato nel nostro precedente tutorial era di 5 KHz, usare lo stesso non ci aiuterà qui.
Ma qui abbiamo un problema. Il PIC16F877A non può generare segnali PWM a bassa frequenza utilizzando il modulo CCP. Secondo la scheda tecnica il valore più basso possibile che può essere impostato per la frequenza PWM è 1,2 KHz. Quindi dobbiamo abbandonare l'idea di utilizzare il modulo CCP e trovare un modo per creare i nostri segnali PWM.
Quindi, in questo tutorial useremo il modulo timer per generare i segnali PWM con una frequenza di 50Hz e variare il loro ciclo di lavoro per controllare l'angelo del servomotore. Se sei nuovo ai timer o all'ADC con PIC, torna a questo tutorial, perché salterò la maggior parte delle cose poiché le abbiamo già trattate lì.
Inizializziamo il nostro modulo Timer con un prescaler di 32 e lo facciamo overflow per ogni 1us. Secondo la nostra scheda tecnica, il PWM dovrebbe avere un periodo di soli 20 ms. Quindi il nostro tempo di accensione e di pausa insieme dovrebbe essere esattamente uguale a 20 ms.
OPTION_REG = 0b00000100; // Timer0 con freq esterna e 32 come prescaler TMR0 = 251; // Carica il valore del tempo per 1us delayValue può essere compreso tra 0-256 solo TMR0IE = 1; // Abilita il bit di interrupt del timer nel registro PIE1 GIE = 1; // Abilita interrupt globale PEIE = 1; // Abilita l'interrupt periferico
Quindi all'interno della nostra funzione di routine di interrupt, accendiamo il pin RB0 per il tempo specificato e lo spegniamo per il tempo di alesatura (20ms - on_time). Il valore del tempo di attivazione può essere specificato utilizzando il potenziometro e il modulo ADC. L'interrupt è mostrato di seguito.
oid interrupt timer_isr () {if (TMR0IF == 1) // Il timer ha superato il limite {TMR0 = 252; / * Carica il valore del timer, (Nota: Timervalue è 101 instaed di 100 poiché TImer0 necessita di due cicli di istruzione per iniziare a incrementare TMR0 * / TMR0IF = 0; // Clear timer interrupt flag count ++;} if (count> = on_time) { RB0 = 1; // completa il valore per il lampeggiamento dei LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
All'interno del nostro ciclo while leggiamo semplicemente il valore del potenziometro utilizzando il modulo ADC e aggiorniamo il tempo di attivazione del PWM utilizzando il valore letto.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
In questo modo abbiamo creato un segnale PWM il cui periodo è di 20 ms e ha un duty cycle variabile che può essere impostato utilizzando un potenziometro. Il codice completo è stato fornito di seguito nella sezione del codice.
Ora, verifichiamo l'output utilizzando la simulazione di proteo e procediamo al nostro hardware.
Schema elettrico:
Se ti sei già imbattuto nel tutorial PWM, lo schema di questo tutorial sarà lo stesso tranne per il quale aggiungeremo un servomotore al posto della luce LED.
Simulazione e configurazione hardware:
Con l'aiuto della simulazione Proteus possiamo verificare il segnale PWM utilizzando un oscilloscopio e controllare anche l'angelo rotante del Servomotore. Di seguito sono mostrate alcune istantanee della simulazione, in cui è possibile notare l'angelo rotante del servomotore e il duty cycle PWM per essere modificati in base al potenziometro. Controlla ulteriormente il video completo, di rotazione a PWM diverso, alla fine.
Come possiamo vedere, l'angolo di rotazione del servo viene modificato in base al valore del potenziometro. Ora passiamo alla nostra configurazione hardware.
Nella configurazione hardware abbiamo appena rimosso la scheda LED e aggiunto il servomotore come mostrato negli schemi sopra.
L'hardware è mostrato nella foto sotto:
Il video sotto mostra come reagisce il servomotore alle varie posizioni del potenziometro.
Questo è tutto !! Abbiamo interfacciato un servomotore con un microcontrollore PIC, ora puoi usare la tua creatività e scoprire le applicazioni per questo. Ci sono molti progetti là fuori che utilizzano un servomotore.