
Proseguiamo il tutorial sulla realizzazione del RinoBOT, iniziata con l'articolo precedente: Costruzione del RinoBot: scheda navigazione e controllo. In questo articolo si descrive la fase di sviluppo del software per il progetto. In particolare il PID (Proportional Integral Derivative, per il controllo motori e la navigazione) e l'Odometria.
Nella prima parte di questa serie di articoli, ho descritto come costruire una piattaforma robotica con i controllori Microchip Technology dsPIC. Ora mi limiterò a descrivere il software caricato sulla scheda che gestisce la velocità delle ruote, il controllo a circuito chiuso con un algoritmo PID, il dead-reckoning tramite odometria (sia per quello che riguarda la teoria che la pratica), la mappatura del terreno, la navigazione, il controllo del motore e altro ancora. Il software è modulare, in modo che tutti i pezzi possano essere esaminati come scatole nere stand-alone. Mi concentrerò in particolare sulla scheda Microchip dsPIC30F in modo da far capire meglio ogni blocco. All’interno del codice ci sono commenti dettagliati per ogni funzione.
FIRMWARE
La filosofia dei programmi di supervisione e controllo motori sono simili. Logicamente sono divisi come dsPID (controllo motori e navigazione) e dsODO (supervisore).
Il codice sorgente, il progetto MPLAB e i diagrammi di flusso dettagliati sono disponibili in allegato. Entrambi i programmi (dsPID e dsODO) sono completamente interrupt-driven. All'accensione, dopo l'inizializzazione di Supervisore e Motor Controller, i programmi entrano in un semplice main loop, che agisce come una macchina a stati. Nel ciclo principale, il programma verifica i flag abilitati da eventi esterni ed entra nello stato relativo (vedi Figura 1). Dal momento che è una sorta di semplice sistema operativo in tempo reale cooperativo (RTOS), ogni routine deve essere eseguita nel più breve tempo possibile per liberare il sistema in modo tale da poter gestire operazioni frequenti. Non ci devono essere delay software. Gli Interrupt sono utilizzati dovunque sia possibile, in particolare per operazioni lente come la trasmissione o la ricezione di stringhe di caratteri.
Figura 1- Il ciclo principale del dsPID è semplice perché la maggior parte del programma è interrupt-driven.
dsPID usa la biblioteca PID del C30 per controllare la velocità e la posizione delle ruote tramite Il feedback dagli encoder sugli assi dei motori [vedere la Tabella 1].
Utilizzo |
Nome del Pin |
Numero del Pin |
Numero del Pin |
Nome del Pin |
Utilizzo |
MCLR |
1 |
15 |
INT1 |
TX enable |
|
ADC reference |
VREF+ |
2 |
16 |
INT0 |
Timer 1ms from Supervisor |
Motor current reading |
AN1 |
3 |
17 |
PGD/EMUD |
|
4 |
18 |
PGC/EMUC |
|||
Chip select from Supervisor |
CN5 |
5 |
19 |
VSS |
|
Quadrature encoder |
QEA |
6 |
20 |
VDD |
|
Quadrature encoder |
QEB |
7 |
21 |
||
VSS |
8 |
22 |
RE4 |
Led 2 |
|
OSC1 |
9 |
23 |
RE3 |
Led 1 |
|
10 |
24 |
RE2 |
H-bridge enable |
||
Serial TX |
U1ATX |
11 |
25 |
PWM1H |
PWM |
Serial RX |
U1ARX |
12 |
26 |
PWM1L |
PWM |
VDD |
13 |
27 |
AVSS |
||
Velocity measurement |
IC2 |
14 |
28 |
AVDD |
Tabella 1 - Questi sono i piedini utilizzati sul Microchip Technology dsPIC30F4012.
Le periferiche usate dalla scheda Motor Controller sono: QEI (Quadrature Encoder Interface) per calcolare lo spazio percorso, IC2 (Input Capture) per calcolare la velocità, un Analog to Digital Converter (ADC) per leggere la corrente del motore, PWM avanzato per azionare i motori e una UART per comunicare con il supervisore.
dsPID
Lo stesso programma (dsPID) viene caricato in entrambe le schede Motor Controller (MC) e il Supervisore assegna loro un ID diverso durante l’inizializzazione (per indirizzarli separatamente in seguito). Le misurazioni di velocità e posizione sono eseguite contemporaneamente dalle due MC quando si verifica un interrupt esterno tramite il segnale di temporizzazione generale fornito dal supervisore.
Un modulo QEI determina la distanza percorsa e la direzione delle ruote. Questo valore è algebricamente cumulato in una variabile ogni 1 ms e inviato al supervisore su sua richiesta. Dopo che il valore è inviato, la variabile viene azzerata.
La velocità è misurata ad ogni impulso dell’encoder. Ogni 1 ms, si calcola la velocità media facendo la media dei campioni, si esegue un algoritmo PID e si corregge la velocità del motore in base al suo risultato, modificando il duty cycle PWM (vedi foto 1). Per una descrizione dettagliata dell’applicazione della libreria C30 PID, fare riferimento al seguente codice d’esempio Microchip: "CE019: Proportional Integral Derivative (PID) Controllers & Closed-Loop Control". [1] Un link è fornito nella sezione riferimenti a alla fine di questo articolo.
Foto 1 - Questo set test è per verificare gli H-bridge e i parametri PID. Il motore in prova è unito meccanicamente con un motore simile. Questo è caricato su una resistenza di potenza variabile per simulare facilmente una variazione nel carico meccanico per il primo motore.
Variazioni di velocità dei motori vengono eseguite senza problemi, l’accelerazione o la decelerazione sono eseguite con una rampa per evitare eccessive sollecitazioni meccaniche e slittamento delle ruote che potrebbe causare [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3721 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Fantastico progetto!!! In questo periodo non ho tempo ma questa estate mi cimenterò di sicuro nella realizzazione di un ROBOT. Una vacanza rilassante con software, saldatore e tenagliette :—)