Come costruire un driver per i motori DC con l’L298

Indipendentemente da quale applicazione di robotica siate interessati, quasi sicuramente vi ritroverete con la necessità di pilotare dei motori elettrici DC. Se per piccoli carichi, quali mini servomotori o motorini simili a quelli della vibrazione del telefonino, potrebbe essere sufficiente (anche se caldamente sconsigliato vista la natura induttiva del carico) collegarli direttamente al microcontrollore utilizzando l’alimentazione delle sue porte di uscita, per carichi più impegnativi sarà necessario avere una alimentazione esterna dei motori.

Per tale seconda evenienza ci vengono in aiuto degli integrati chiamati driver. Di driver ne esistono una infinità di tipologie, differenti a seconda della potenza erogabile, della tipologia di motori pilotabili (stepper, DC, ecc…) e dal tipo di pilotaggio. Uno dei driver maggiormente usati è l’L298, sia per la sua semplicità costruttiva (necessita di pochi altri componenti) che per la sua potenza erogabile.

Il circuito integrato L298 è un doppio driver per motori DC.

componenti

Il funzionamento di detto circuito è garantito a partire da tensioni di ingresso di 6V fino a tensioni di 30V e consente un pilotaggio di motorini fino aduna corrente di 4A.

Ma adesso veniamo a ciò che tutti voi aspettavate: che componenti mi servono? la risposta la trovate nella seguente “lista della spesa”:

Lista dei componenti

  • 1 x L298 motor driver chip
  • 1 x LM2937 regolatore di tensione
  • 1 x 22μF capacità
  • 1 x 0.1μF capacità
  • 2 x 47k Enable pull-up resistors (Yellow / Violet / Orange / Gold)
  • 2 x 2.2k LED current limit resistors – (Red / Red / Red / Gold)
  • 2 x Red LEDs
  • 2 x Green LEDs
  • 8 x 1N5818 Schottky EMF-protection Diodes
  • 1 – 3-position terminal block
  • 2 – 2-position terminal block
  • 2 – 3-position interface socket strips
schema_l298
Schema circuito driver

Nella configurazione che appresso vi presenteremo sono stati inseriti una serie di componenti opzionali che però rendono l’uso del driver, sia in fase di testing che di lavoro, molto più agevole. In particolare sono stati inseriti dei diodi di protezione (nello schema indicati con numerazione progressiva da D5 a D12) e 4 led (due per canale, quelli verdi D1 eD4 e quelli rossi D2 e D3) che ci segnaleranno il verso di rotazione dei motorini.

Sebbene l’inserimento dei led possa sembrare poco rilevante, devo ammettere che in fase di collaudo e durante i vari utilizzi ci ha permesso di riscontrare subito errori nei collegamenti (inversione dei poli).

Il driver presenta anche due pin di Current sensing (SEN_A e SEN_B), uno per canale, che ci consentono di misurare la corrente assorbita da ciascun canale ed eventualmente limitarla per evitare di bruciare il circuito.

Se non si vuole misurare la corrente (come abbiamo fatto al momento noi nel nostro prototipo) basta mettere a massa i due pin di sensing. Invece, se si vuole avere un controllo sull’assorbimento della corrente, bisogna inserire una resistenza di 0.1 – 1 Ohm (R5 e R6), avendo cura di scegliere una resistenza con il giusto valore di potenza dissipabile secondo la formula

[latex]P=I^2*R[/latex]

Sono state inserite due resistenze di pull-up (R1 e R4) che hanno il compito di inviare il segnale alto al canale dell’Enable così che, se non si vuole o non si può (per mancanza di uscite dal microcontrollore) pilotare i pin dell’Enable il circuito sarà sempre abilitato. I due pin di Enable hanno il compito di “abilitare”  o “disabilitare” i canali del driver.

Apt-get offline (o quasi)

In questo articolo vedremo come utilizzare apt-get in modo un pò particolare. Funziona particolarmente utile quando si vuole installare un’applicazione con una procedura alternativa a quella rapida del repository.

Scenario: abbiamo un pc, che chiameremo DESKTOP con una connessione lenta (o magari collegabile a internet tramite scheda sim con piano tariffario con Gigabytes limitati) ed abbiamo a disposizione una connessione veloce su un altro pc, che chiameremo PORTATILE.  Quando si vuole aggiornare o installare del software sul DESKTOP di solito si cerca di scaricare il pacchetto .deb sperando (o più spesso pregando) che le dipendenze vengano soddisfatte. Con questa guida risolveremo ogni nostro problema.

Il trucco stà nell’usare l’opzione –prin-uris di apt-get che, anzichè portare avanti l’esecuzione di apt-get, lo forza a stampare a video i link dei diversi pacchetti da installare. La cosa più importante è assicurarsi che, avendo eseguito apt-get sul pc DESKTOP, tra i link dei pacchetti da scaricare ci siano anche tutti i pacchetti necessari a soddisfare le dipendenze.

Cerchiamo di capire il tutto con un paio di esempi.

1- Aggiornamento del sistema

2- Installazione programmi

1- Aggiornamento del sistema

Cominciamo con il dare il comando

sudo apt-get update

che serve ad aggiornare l’elenco dei pacchetti  (questa operazione consumerà qualcosa del traffico dati della nostra connessione).

poi facciamo stampare a video l’elenco dei pacchetti necessari per aggiornare il pc:

sudo apt-get –print-uris –yes upgrade > upgrade.htm

L’opzione –yes serve ad evitare che apt-get si blocchi aspettando la conferma da parte dell’utente. Se andiamo ad aprire il file update.htm:

[code]Lettura elenco dei pacchetti…
Generazione albero delle dipendenze…
Lettura informazioni sullo stato…
I seguenti pacchetti sono stati mantenuti alla versione attuale: linux-image-generic
I seguenti pacchetti saranno aggiornati: account-plugin-facebook account-plugin-flickr account-plugin-google
account-plugin-icons account-plugin-identica account-plugin-twitter account-plugin-windows-live accountsservice
alsa-utils apparmor apport apport-gtk bamfdaemon cups cups-bsd cups-client cups-common cups-ppdc dbus dbus-x11
firefox firefox-globalmenu firefox-gnome-support firefox-locale-en firefox-locale-it iptables isc-dhcp-client
isc-dhcp-common libaccountsservice0 libasound2 libbamf3-0 libcups2 libcupscgi1 libcupsimage2 libcupsmime1
libcupsppdc1 libcurl3 libcurl3-gnutls libcurl3-nss libdbus-1-3 libdbus-1-3:i386 libdrm-intel1 libdrm-nouveau1a
libdrm-nouveau2 libdrm-radeon1 libdrm2 libfs6 libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgnutls26 libkms1
libpulse-mainloop-glib0 libpulse0 libpulsedsp libpython2.7 libpython3.2 libraw5 libssl1.0.0 libtiff5
libufe-xidgetter0 libx11-6 libx11-data libx11-xcb1 libxatracker1 libxcb-composite0 libxcb-dri2-0 libxcb-glx0
libxcb-randr0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-xv0 libxcb1 libxcursor1 libxext6 libxfixes3
libxi6 libxinerama1 libxp6 libxrandr2 libxrender1 libxres1 libxt6 libxtst6 libxv1 libxvmc1 libxxf86dga1
libxxf86vm1 linux-libc-dev openssl pulseaudio pulseaudio-module-bluetooth pulseaudio-module-gconf
pulseaudio-module-x11 pulseaudio-utils python python-apport python-apt python-apt-common python-minimal
python-problem-report python2.7 python2.7-minimal python3 python3-apport python3-apt python3-distupgrade
python3-minimal python3-problem-report python3.2 python3.2-minimal rsyslog signon-plugin-oauth2
telepathy-gabble telepathy-idle thunderbird thunderbird-globalmenu thunderbird-gnome-support
thunderbird-locale-it ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk unity-scope-video-remote
xdiagnose xserver-xorg-video-intel xserver-xorg-video-openchrome xul-ext-unity
127 aggiornati, 0 installati, 0 da rimuovere e 1 non aggiornati. E’ necessario scaricare 82,8 MB di archivi.
Dopo quest’operazione, verranno occupati 3587 kB di spazio su disco.
‘http://it.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.0.0_1.0.1c-3ubuntu2.5_amd64.deb’ libssl1.0.0_1.0.1c-3ubuntu2.5_amd64.deb 1053332 MD5Sum:d4205880337e0858b73f3c0ea727ea7c
‘http://it.archive.ubuntu.com/ubuntu/pool/main/d/dbus/libdbus-1-3_1.6.4-1ubuntu4.1_i386.deb’ libdbus-1-3_1.6.4-1ubuntu4.1_i386.deb 153900 MD5Sum:91bf92799165dbe92e4b7cd30d739e5c
‘http://it.archive.ubuntu.com/ubuntu/pool/main/d/dbus/libdbus-1-3_1.6.4-1ubuntu4.1_amd64.deb’ libdbus-1-3_1.6.4-1ubuntu4.1_amd64.deb 150424 MD5Sum:09c146199695f90dc975a1430fb62263
‘http://it.archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm2_2.4.43-0ubuntu0.2_amd64.deb’ libdrm2_2.4.43-0ubuntu0.2_amd64.deb 26438 MD5Sum:be8bedc9e8d10e4b873caee9b32ad4c4
‘http://it.archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm-nouveau1a_2.4.43-0ubuntu0.2_amd64.deb’ libdrm-nouveau1a_2.4.43-0ubuntu0.2_amd64.deb 14186 MD5Sum:025133f66464198b00d2ae5a39397ebb
‘http://it.archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm-radeon1_2.4.43-0ubuntu0.2_amd64.deb’ libdrm-radeon1_2.4.43-0ubuntu0.2_amd64.deb 24168 MD5Sum:e3b58dd8acb2e258d37ceeb361e581c9 [/code]

Ecc…

Vediamo subito che c’è un bel pò di roba…. Per sistemare il tutto, ed ottenere in uscita solo i link che ci interessano basta modificare il comando precedente in:

sudo apt-get –ptint-uris –yes upgrade | grep ^’ | cut -d’ -f2 > upgrade.htm

In questo modo avremo un file contenente i soli link, “purgato” da tutte le altre informazioni come MD5 e messaggi di sistema.

Adesso basta prendere questo file, copiarlo sul nostro PORTATILE e scaricare i pacchetti con il comando:

wget –input-file upgrade.htm

Scaricati i pacchetti, li portiamo sul DESKTOP e li installiamo tutti insieme con il comando

apt-get -o dir::cache::archives=”/disc” upgrade

Dove /disc è la cartella in cui abbiamo salvato i pacchetti scaricati (percorso assoluto).
Se tutto è andato bene il sistema ci risponderà con qualcosa del tipo:

[bash]127 aggiornati, 0 installati, 0 da rimuovere e 1 non aggiornati.
È necessario scaricare 0 B/82,8 MB di archivi.
Dopo quest’operazione, verranno occupati 3587 kB di spazio su disco.
Continuare [S/n]?[/bash]

Da notare la seconda riga (0 B / 82,8 Mb) che sta a indicare che non è necesario scaricare alcun pacchetto. Per completare l’aggiornamento basta dare “S” e il sistema sarà aggiornato.