-

hey viewer, we're moving!

We are currently transitioning to a new web system, so we are not updating this wikisite anymore.

The public part of the new web system is available at http://www.ira.disco.unimib.it


Motor control board: Manuale utente

From Irawiki

Jump to: navigation, search

Contents

Manuale utente

In questa pagina descriviamo brevemente i passi necessari ad utilizzare la scheda progettata per il corso di informatica industriale 2011/12 INFIND2011/12 Motor control board

Collegamenti hardware

Image:MotorcontrolboardHwConn.jpg 0J2224.600.jpg

Schematico della Schedina

Lista Comandi

Define Carattere Parametri Descrizione
CMD_WHOIS w - Restituisce una stringa di descrizione del firmware (terminata da dal carattere \0)
CMD_SET S mask + vals Scrive i valori vals nelle variabili determinate dalla maschera mask
CMD_READ R mask Legge le variabili indicate da mask
CMD_READ_SINGLE_VARIABLE r position Restituisce il valore della variabile indicata da position
CMD_SET_SINGLE_VARIABLE s position + val Scrive il valore val nella variabile indicata da position
CMD_STATE_START x - Serve per passare da Init a Running
CMD_STATE_GORUNNING a - Serve per passare da Calib a Running
CMD_STATE_COAST j - Serve per passare in modalità coasting
CMD_STATE_UNCOAST u - Serve per uscire dalla modalità coasting e ritornare nella modalità controllata
CMD_STATE_GOCALIB c - Serve per passare in modalità calibrazione e far partire la stessa
CMD_STATE_RESET r - Serve per resettare la schedina

Lista Parametri

Define Position Type Access Description Default value
MASK_STATE 0 int r Lo stato in cui ci si trova Init
MASK_STATE_SETPOINT 1 float rw Il set point 0
MASK_STATE_BOARD_ID 2 char rw Id della board (non utilizzato) 0
MASK_STATE_ERROR 3 char rw Errore verificatosi. Scrivere qualsiasi valore per resettare. La variabile è composta da tre bit. I due meno significativi rappresentano i due fault del pololu, mentre il rimanente indica se l'adc abbia rilevato una corrente maggiore della soglia. 0
MASK_STATE_ERROR_REACTION 4 char rw Politica di gestione dell'errore 0
MASK_ADC_DATA 5 float r Contiene l'ultimo valore calcolato dall'adc, come media degli ultimi campioni Random values
MASK_ADC_WATCHDOG_LOW 6 short rw Soglia inferiore del watchdog sul sensore di corrente 0
MASK_ADC_WATCHDOG_HIGH 7 short rw Soglia superiore del watchdog sul sensore di corrente 4095
MASK_ADC_SAMPLE_TIME 8 int rw Adc sample time 7
MASK_ADC_EXP_SAMPLES_TO_AVERAGE 9 char rw Numero di campioni rilevati dall-adc con cui fare la media 10
MASK_CALIB_ANGLE 10 float rw Angolo misurato esternamente durante la calibrazione. Questo valore può essere settato solo nello stato di calibrazione. 0
MASK_STEP_TO_ANGLE 11 float rw Rapporto di conversione tra step dell'encoder e angolo percorso 1
MASK_CTRL_TYPE 12 char rw Tipologia di controllo, 0 posizione 1 velocità 2 corrente 0
MASK_CTRL_FREQUENCY 13 float rw Frequenza operativa del controllore in Hertz 50
MASK_CTRL_KP 14 float rw Costante proporzionale del controllore PID 1.0
MASK_CTRL_KI 15 float rw Costante integrativa del controllore PID 0
MASK_CTRL_KD 16 float rw Costante derivativa del controllore PID 0
MASK_CTRL_MIN_ERR 17 float rw Errore minimo, valori minori di errore non genereranno azioni di controllo 1.0
MASK_CTRL_INIT_POSE 18 float rw Offset per lo stato del controllore 0
MASK_CTRL_BOUND_STATE 19 char rw Limitazioni sullo stato, se 1 vengono abilitati maxState e minState 0
MASK_CTRL_MAX_STATE 20 float rw Se lo stato supera questo valore il controllore inverte l'azione di controllo fino a valori inferiori 0
MASK_CTRL_MIN_STATE 21 float rw come maxState ma limita inferiorimente 0
MASK_HBRIDGE_CTRL2PWM 22 int rw Trasforma il controllo nel duty cycle del pwm 1
MASK_HBRIDGE_FREQUENCY 23 int rw Frequenza del segnale pwm 20000
MASK_CTRL_ERR 24 float r Errore residuo dell'azione di controllo 0
MASK_CTRL_CONTR 25 float r Valore di intensità dell'azione di controllo 0
MASK_CTRL_STATE 26 float r Stato attuale del sistema ricostruito tramite letture encoder/sensore di corrente 0
MASK_CTRL_DELTAT 27 float r Periodo del ciclo di controllo, derivato da ctrl_fequency 1.0

Procedura di accensione

All'accensione il firmware si trova nello stato "Init". Qui è possibile settare tutte le variabili tramite i comandi CMD_SET e CMD_SET_SINGLE_VARIABLE. Per passare allo stato "Running", cioè avviare il controllore e far partire il motore, usare il comando CMD_START. Una volta fatto ciò sarà possibile settare solamente il set point. Per tornare nello stato di Init usare il comando CMD_GOINIT (è consigliabile farlo a motore fermo, dato che frena bruscamente il motore).

Eventuale procedura di calibrazione

La procedura di calibrazione permette di calcolare automaticamente il rapporto tra step encoder e angolo percorso dall'asse del motore. Questo può essere utile nel caso in cui ad esempio non si conosca il rapporto di riduzione esatto della trasmissione.

La procedura di calibrazione ha inizio con il comando GOCALIB. Si consiglia di effettuare questa operazione a motore fermo. Il passaggio allo stato di calibrazione deve essere fatto dopo aver dato almeno una volta il comando di start, altrimenti le periferiche e i moduli non sono ancora stati inizializzati.

Nello stato di calibrazione è possibile sia dare un setpoint al motore in modo da farlo muovere automaticamente, ma va tenuto presente che il controllo non è attivo. Alternativamente è possibile inviare il comando di coast per il motore, in modo da poterlo muovere a mano.

Una volta passati nello stato di calibrazione bisogna far effettuare al motore un angolo di cui si conosce la misura. Per minimizzarne l'errore è consigliabile far effettuare più giri al motore stesso.

La calibrazione termina quando si scrive il valore misurato nella locazione calib_angle. Il valore può essere in gradi, radianti o altra misura. È però fondamentale che questa sia la stessa dei comandi che verranno impartiti durante il normale funzionamento del motore.

Una volta terminata la calibrazione si può passare nello stato di init o running a seconda della situazione. È tuttavia consigliato visualizzare il nuovo valore di stepToAngle calcolato in modo da verificare la corretta esecuzione della calibrazione e per salvarlo nella procedura di inizializzazione della scheda, in modo da poterlo utilizzare nelle esecuzioni successive.

Di seguito uno schema riassuntivo della procedura di calibrazione

pub?id=1kDGhrvztzj2YrqO2MI2wO2xgkj71PgwIqUEoeuCVLc0&w=450&.png

Esempio di utilizzo

Un esempio di comandi impartiti per un uso "comune", al fine di dimostrare la funzionalita' del progetto.

Per effettuare un rapido test delle funzionalità della scheda è possibile usare il software di esempio predisposto durante lo sviluppo del progetto.

Per fare questo è necessario installare ruby 1.9 (si consiglia di utilizzare rvm) e rubygems

Poi bisogna installare la gemma motorcontrolboard, sviluppata appositamente.

gem install motorcontrolboard

Prima di procedere bisogna avere un file init.yaml con la descrizione dei parametri della scheda. È possibile usare quello fornito tra gli allegati. Oltre a questo è consigliabile usare un file yaml anche per l'inizializzazione dei parametri.

Infine è possibile controllare la scheda dalla console interattiva ruby.

/test$ irb
1.9.3-p194 :001 > require "motorcontrolboard"
 => true 
1.9.3-p194 :002 > initParams = {  'port' => "/dev/ttyUSB1", 'baud_rate' => 57600, 'vidpid' => '10c4:ea60'}
 => {"port"=>"/dev/ttyUSB1", "baud_rate"=>57600, "vidpid"=>"10c4:ea60"} 
1.9.3-p194 :003 > m = MotorControlBoard.new(initParams)
 => #<MotorControlBoard:0x000000010806a0 @port="/dev/ttyUSB1", @baud_rate=57600, @vidpid="10c4:ea60"> 
1.9.3-p194 :004 > m.initData('init.yaml') 
1.9.3-p194 :005 > m.connect
 => true
1.9.3-p194 :006 > m.loadDataFromFile('inits.yaml')
1.9.3-p194 :007 > m.setByValid
1.9.3-p194 :008 > m.cmd_start
1.9.3-p194 :009 > m.setByName(:state_setpoint,10)

Si faccia riferimento alla documentazione della gemma motorcontrolboard per un elenco esaustivo dei comandi disponibili: https://rubygems.org/gems/motorcontrolboard

Esempio di pacchetto inviato

Si supponga di voler impostare il setpoint.

Abbiamo due possibilità:

  • Il comando set single variable
  • Il comando set

Con il primo approccio il pacchetto da inviare è il seguente

  • 0x55 : lo start byte
  • 0x73 : il comando 's'
  • 0x01 : la posizione in cui scrivere
  • 0x00 0x00 0x20 0x41 : il setpoint (10) come float

Con il secondo comando bisogna inviare la maschera, quindi invieremo

  • 0x55 : lo start byte
  • 0x53 : il comando 'S'
  • "\x02\x00\x00\x00" : la maschera che seleziona la posizione in cui scrivere (0b10)
  • 0x00 0x00 0x20 0x41 : il setpoint (10) come float
Personal tools