3. Controlul unui motor din LabVIEW


În acest capitol, vom scrie primul nostru VI (program LabVIEW) de la zero. Ca exemplu, vom controla un motor DC conectat la placa Arduino. Vom construi VI-ul de la zero și apoi vom controla direcția și viteza direct din interfața grafică LabVIEW.

Cerințe hardware și software

Pe partea de hardware, va trebui mai întâi un board Arduino Uno.

Pentru motor, am ales un mic motor 5V DC de la Amazon. Puteți alege orice marcă pe care o doriți pentru motor; cel mai important lucru este că trebuie să funcționeze la 5V, astfel încât să poată fi alimentat direct de la Arduino. Dar, puteți obține un motor care utilizează tensiuni sau curenți mai mari, dar va trebui să modificați puțin configurația hardware.

Veți avea nevoie și de driver-ul de motor L293D pentru a controla motorul de la Arduino. Acesta este un cip dedicat pe care îl vom folosi pentru a controla cu ușurință motorul din LabVIEW. De asemenea, puteți utiliza o alternativă la acest cip; de exemplu, puteți utiliza un Arduino shield care deja integrează cip-uri similare pe placă. Acesta este, de exemplu, cazul lui Arduino motor shield oficial, care integrează cipul L298D. Dar, va trebui să modificați ușor codul dacă utilizați un scut (shield) în loc de cipul singur.

În cele din urmă, veți avea nevoie de o placă de testare și jumper wires pentru a face toate conexiunile.

Aceasta este o listă a tuturor componentelor necesare pentru acest capitol, împreună cu link-urile unde se găsesc pe Web:

    • ArduinoUno (https://www.adafruit.com/products/50)

    • L293D (https://www.adafruit.com/product/807)

    • DC motor (http://www.amazon.com/Motor-5V-80mA-200mA-torque/dp/B001DAYVA6)

    • Jumper wires (https://www.adafruit.com/products/1957)

    • Breadboard (placa de testare) (https://www.adafruit.com/products/64)

Pe partea de software, va trebui să aveți LabVIEW și LINX pachage instalat. Dacă nu ați făcut încă acest lucru, consultați Capitolul 2, Interfața LabVIEW pentru Arduino, pentru a urma pașii necesari.

Configurația hardware

Haideți acum să vedem modul de asamblare a diferitelor componente ale proiectului. Această schemă vă va ajuta să vizualizați conexiunile dintre diferitele componente:

Hardware configuration

Pentru a asambla componentele urmați pașii:

  1. Mai întâi, puneți cipul L293D în mijlocul plăcii de testare.

  2. Apoi, aveți grijă de alimentarea cu tensiune; conectați pinul din stânga sus și pinul din dreapta-jos al cipului L293D la pinul 5V al lui Arduino.

  3. Apoi, conectați un pin de la centrul inferior al cipului la pinul GND al lui Arduino.

  4. După aceasta, conectați semnalele de comandă provenind de la Arduino, care vor fi pe pinii 4, 5 și 6 pe placa Arduino Uno.

  5. În cele din urmă, conectați motorul DC la cipul L293D, așa cum se arată în schemă.

Pentru ajutor, aici este un link către configurația pinilor din cipul L293D: http://users.ece.utexas.edu/~valvano/Datasheets/L293d.pdf

Așa ar trebui să arate la sfârșit:

Hardware configuration

Când acest lucru este făcut, puteți trece la pasul următor; construirea VI-ului în LabVIEW pentru a controla motorul DC.

Scrierea programului LabVIEW

Noi vom scrieți acum un nou program LabVIEW de la zero pentru a vedea cum funcționează interfața LINX pentru Arduino. Pentru a porni procesul, deschideți LabVIEW și creați un nou VI gol.

Am văzut deja în capitolul anterior că există două ferestre principale în LabVIEW: Panoul frontal și Diagrama bloc. În noul dvs. VI gol, aceste două ferestre vor fi goale. Mai întâi vom avea grijă de Diagrama bloc , în care vom adăuga elementele pentru controlul plăcii Arduino.

Rețineți că vom învăța direct despre LabVIEW și Arduino prin construirea primului nostru proiect. Dacă doriți mai întâi să aflați mai multe despre software-ul LabVIEW, puteți vizita acest link: http://www.ni.com/getting-started/labview-basics/

Pentru a afla elementele de bază ale lui Arduino, cea mai bună opțiune este să explorezi site-ul oficial Arduino: http://arduino.cc

Primul lucru pe care îl vom plasa pe VI-ul gol este o buclă While Loop pe care o puteți glisa (drag-and-drop) din meniul Functions (pe care o puteți apela în orice moment cu un clic dreapta). While Loop se găsește în submeniul Structures. Această buclă este necesară pentru orice placă Arduino pe care doriți să o controlați prin LINX, iar toate comenzile Arduino vor trebui să fie plasate în interiorul acestei bucle.

Acesta este modul în care va arăta VI-ul:

Writing the LabVIEW program

Sfat

Descărcarea codului exemplu

Puteți descărca fișiere de cod exemplu pentru cărțile Packt pe care le-ați achiziționat, din contul dvs. la http://www.packtpub.com. Dacă ați achiziționat această carte în altă parte, puteți vizita http://www.packtpub.com/support și vă puteți înregistra pentru a vă trimite direct fișierele prin e-mail.

După aceasta, vom plasa primele elemente din pachetul LINX. Primele elemente pe care trebuie să le punem sunt elementele LINX de inițializare și stop, care sunt necesare pentru a spune software-ului unde să pornească și unde să se oprească. Puteți găsi ambele casete în panoul de funcții accesând submeniul LabVIEW Hacker.

Din același submeniu, plasați două blocuri Digital Write (care vor fi utilizate pentru a controla direcția motorului) și un bloc PWM (care va fi utilizat pentru a controla viteza motorului). Rețineți că puteți găsi aceste blocuri în meniul Peripherals. Acesta este rezultatul:

Writing the LabVIEW program

Avem nevoie de un bloc PWM aici pentru a controla viteza motorului. PWM înseamnă Pulse Width Modulation (modularea lățimii impulsului) și se utilizează pentru a controla viteza motorului sau pentru a diminua lumina LED-urilor, de exemplu. Pe placa Arduino, este o ieșire a plăcii care poate fi setată de la 0 la 255 pe unii pini ai plăcii Uno. Pentru a afla mai multe despre PWM, puteți vizita următorul link: http://en.wikipedia.org/wiki/Pulse-width_modulation

Acum avem nevoie de un mod de a spune lui LabVIEW în ce ordine vrem să fie executată schița. Aici se află în joc resursele de eroare și LINX. Pur și simplu porniți din blocul de inițializare din partea stângă și găsiți pinul error de pe bloc.

Apoi, conectați pinul error-out al acestui bloc la pinul error-in al primului bloc digital și așa mai departe până la blocul de capăt. După aceea, faceți același lucru cu pinii de resurse LINX. Am adăugat, de asemenea, un simplu error handler la sfârșitul VI-ului, imediat după blocul stop. Acest handler poate fi găsit sub meniul Dialog & User Interface.

Writing the LabVIEW program

Acum că avem coloana vertebrală a proiectului nostru, vom alimenta blocurile cu câteva intrări. Mai întâi, adăugați un port serial în blocul de inițializare accesând pinul serial port al blocului și făcând click dreapta pe el.

Apoi, mergeți la Create | Control pentru a adăuga automat o intrare port serial. Veți observa că controlul corespunzător este adăugat automat și pe Panoul frontal. Redenumiți acest control Serial Port astfel încât să îl putem identifica în Panoul frontal.

Vom crea același tip de comenzi pentru acei pini ai blocurilor pe care le-am plasat mai devreme. Pentru fiecare bloc, trebuie doar să adăugați intrări făcând click dreapta pe intrarea pinului și apoi mergând la Create | Control. De asemenea, redenumiți toate aceste controale, astfel încât să știm ce înseamnă mai târziu în Panoul frontal.

Writing the LabVIEW program

Trebuie, de asemenea, să adăugăm o condiție finală pentru While Loop. Pentru a face acest lucru, trebuie să conectăm micuțul cerc roșu situat în colțul din dreapta-jos al buclei While. În acest capitol, pur și simplu vom conecta error wire direct la acest cerc roșu. Pentru a face acest lucru, trebuie doar să selectați pinul de intrare al cercului roșu și să îl conectați la firul de eroare inferior din interiorul VI-lui.

Writing the LabVIEW program

Acum vom introduce valorile diferitelor blocuri pe care le vom schimba de pe Panoul frontal pentru a controla motorul. În acest stadiu, îl vom păstra simplu: vom avea un control on/off pentru direcție și o casetă de text simplă pentru viteza motorului.

Mai întâi, să stabilim direcția pe care trebuie să o introducem pe primele două blocuri LINX din VI. Cipul L293D necesită alimentare cu semnale opuse pe cei doi pini de direcție pentru ca motorul să se rotească într-o anumită direcție. De exemplu, atunci când primul bloc Digital Write este activat, dorim ca al doilea să fie oprit și invers.

Pentru a face acest lucru, vom crea mai întâi un bloc de control pe primul bloc Digital Write, din nou făcând clic dreapta pe pinul de intrare și apoi mergând la Create | Control. Apoi, vom merge în meniul Functions, în Booleans, vom alege un element Not și îl vom folosi pentru a conecta controlul nostru la al doilea canal Digital Write. În acest fel, suntem siguri că aceste două vor fi întotdeauna în stări opuse.

În cele din urmă, faceți același lucru și pentru blocul PWM, creând un control pentru valoarea PWM. Acesta va fi pur și simplu afișat ca o intrare de text în interiorul Panoului frontal. Vom redenumi, de asemenea, acest PIN ca Motor Speed ca să știm ce înseamnă în Panoul frontal.

Writing the LabVIEW program

Puteți reveni acum la Panoul frontal și aruncați o privire asupra tuturor elementelor care au fost adăugate automat pentru dvs. Organizați-le puțin, astfel încât să fie mai ușor să controlați motorul.

Am aranjat pur și simplu Panoul frontal, astfel încât toate comenzile statice, cum ar fi portul serial și pinii, sunt pe partea stângă (le vom modifica o singură dată) și comenzile dinamice ale motorului sunt pe partea dreaptă:

Writing the LabVIEW program

Este acum timpul pentru a testa VI-ul. Mai întâi, setați toți pinii corecți și portul serial, așa cum se arată în imaginea precedentă. Apoi, faceți clic pe săgeata mică din bara de instrumente pentru a porni VI-ul.

Acum puteți introduce o valoare între 0 și 255 în intrarea Motor Speed; veți vedea că motorul începe să se rotească imediat. Rețineți că trebuie să folosim o valoare între 0 și 255, deoarece valoarea de ieșire PWM Arduino Uno este codificată în 8 biți, deci are 256 valori. De asemenea, puteți folosi butonul verde pentru a schimba direcția motorului.

Actualizarea interfeței

Acum avem un control de bază pentru motorul nostru DC, dar o putem face mai bine. Într-adevăr, nu este atât de convenabil să tastați viteza motorului în Panoul frontal de fiecare dată când doriți să modificați ceva. Acesta este motivul pentru care vom introduce un alt tip de control numit Knob control.

Pentru a adăuga un astfel de control, porniți din Panoul frontal și faceți clic dreapta pentru a deschide paleta Controls. Apoi, mergeți la Numeric și selectați comanda Knob din meniu.

Upgrading the interface

Acum Knob este introdus în Panoul frontal; puteți reveni la Diagrama bloc unde puteți să eliminați vechiul control de text din blocul PWM și să îl conectați pe cel nou. Puteți să redenumiți Motor Speed la fel de bine.

Upgrading the interface

Acum, trebuie să setați Knob astfel încât valoarea sa de ieșire să corespundă intrării acceptate a blocului PWM. Amintiți-vă că blocul PWM din LINX acceptă valori între 0 și 255.

Pentru a face acest lucru, pur și simplu faceți clic dreapta pe blocul Knob și faceți clic pe Properties. În acest meniu, faceți clic pe Scale și modificați valorile minime și maxime, după cum se arată în următoarea imagine de ecran:

Upgrading the interface

Puteți reveni acum la Panoul frontal. Veți vedea că Knob afișează acum valorile corecte, variind de la 0 la 255. De asemenea, puteți redimensiona Knob în acest moment, astfel încât să fie mai ușor de utilizat.

Upgrading the interface

Este acum timpul pentru a testa interfața modificată. După cum ați făcut mai devreme, faceți clic pe săgeata mică din interiorul barei de instrumente. Acum puteți roti pur și simplu Knob pentru a schimba instantaneu viteza de rotație a motorului.