Archivi tag: GPIO

SW Dev1: motor.py

Questo e’ il primo post dedicato allo sviluppo software.Nella sezione Python si puo’  trovare le varie versioni dei software e la descrizione delle classi utilizzate.

Qui di seguito il link al file  motor.py  e al file qpi_test1.py  usato per “pilotare” il motore M0.

Il modulo qpi_test1.py e’ l’interfaccia operatore che mi permette di aumentare e ridurre la velocita’ angolare dei singoli motori.

Il modulo motor.py  implementa un oggetto “motor” in cui vado a gestire la velocita’ angolare del motore e l’interfaccia hardware fra raspberry pi  ed l’ESC.

Ho deciso di  indicare la velocita’ angolare in termini percentuali,anziche intermini assoluti:

  1. per rendere l’oggetto motor  indipendente dal motore montato
  2. per rendere l’oggetto motor  indipendente dalla batteria utilizzata (ricordo che la velocita’ angolare e’ funzione del voltaggio) e dal sul livello di carico.

I parametri del motore sono:

  • la velocita’ angolare attuale (RPM)
  • la velocita’ angolare massima e minima (RPMMax,RPMMin)
  • la velocita’ che  equilibra la gravita’  (RPMEquil).Questo dato puo dipendere da diversi fattori quali l’altitudine, la temperatura dell’aria, l’umidita’, il peso del quadricottero.Per cui  in termini teorici occorre far decollare il quadricottero aumentando  RPM  fino a raggiungere una condizione di  equilibrio. a quel punto va salvata tale RPM  per poi essere usata al bisogno (ad esempio dopo una virata , per rimettere il quadricottero orizzontale).
  • il pin a cui collego  l’ESC sul  GPIO del  raspberry. Si veda qui  per i collegamenti elettrici.
  • il fattore Kv del motore. Attualmente non eì utilizzato ma potrebbe servire in futuro per stimare la velocita’ angolare effettiva del motore e/o il consumo del motore stesso.
  • debug mode, booleana che abilita la scrittura di un messaggio su terminal
  • simulation mode,booleana che abilita/disabilita  l’uscita del segnale PWM (=TRUE di default)

Se si vuole pilotare davvero il motore usando questo oggetto , bisogna ricordarsi 2 cose:

  1. L’ESC utilizzato potrebbe necessitare di una procedura di inizializzazione. (La cosa e’ descritta nella pagina dedicata all’ESC)
  2. occorre settare la variabile myMotor.simulation=FALSE

Per quanto riguarda l’interfaccia con ESC , utilizzo la libreria RPIO.

Di default lavora a 50 HZ (un impulso ogni 20 ms ).

la lunghezza dell’impulso mi da il comando al motore.

Con un impulso di 1ms =1000us  , il motore sta fermo.

Con un impulso di 2ms =2000us  , il motore va alla massima velocita’.

il passo minimo di incremento e’ di 10us.Per cui:

PW=(1 + (self.__RPM / 100)) * 1000

self.__IO.set_servo(self.pin,PW)

(con  self.pin=18, cioe GPIO18=pin fisico 12)

Link:

http://pythonhosted.org/RPIO/pwm_py.html