Costruzione del RinoBot: il software

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.

Fig_01

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_01

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 PLATINUM. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici PREMIUM e PLATINUM e potrai fare il download (PDF) di tutti gli EOS-Book, Firmware e degli speciali MONOTEMATICI. ABBONATI ORA con PAYPAL è semplice e sicuro.

Abbonati alle riviste di elettronica

Una risposta

  1. MaurizioPollini 7 aprile 2015

Scrivi un commento

ESPertino è la nuova scheda per IoT compatibile ARDUINO.
Scopri come averla GRATIS!