Guido iubește Linux nu numai pentru că este distractiv să descoperi marile posibilități ale acestor sisteme, ci și pentru toți oamenii care sunt implicați în proiectarea acestuia.

Tradus în spaniolă de:
Miguel Magán C. "

Sursă de curent continuu pe bază de microcontroler

Acesta este al patrulea articol din Linux Focus al seriei de microcontrolere AT90S4433. Vă sugerez să citiți articolele anterioare despre programarea microcontrolerelor Atmel, în special:

  1. Cum se instalează și se utilizează mediul de dezvoltare Linux AVR și cum se construiește hardware-ul de programare:
    Martie 2002, Programarea microcontrolerului AVR cu GCC
  2. Cum să vă creați propria placă de circuite imprimate:
    Mai 2002, un panou de control LCD pentru serverul dvs. Linux
  3. Cum să construiți o cutie pentru sursa de alimentare:
    Septembrie 2002, Contor de frecvență 1Hz-100Mhz cu afișaj LCD și interfață RS232
Unul dintre cele mai importante dispozitive pentru laboratorul de acasă este o sursă de curent continuu bună și fiabilă. În acest articol vom construi unul. Acesta va fi controlat de un microcontroler. Are un ecran LCD și comenzile pot fi trimise de pe computerul dvs. Linux prin portul serial RS232. Are un design foarte robust.

Introducere

Microcontrolerul pe care se bazează sursa de alimentare nu este cel mai simplu circuit, dar vă pot asigura că nu vă va deranja timpul necesar pentru a-l construi. Este foarte robust și fiabil. De asemenea, foarte interesant din punct de vedere tehnic, deoarece puteți învăța cum să generați o tensiune analogică DC cu un microcontroler fără a utiliza un convertor digital-analog.

Veți avea nevoie de câteva componente pentru acest articol, dar sunt ieftine și standard. Această sursă de alimentare este ieftină.

De ce ai nevoie

Schema și placa

Am folosit Eagle pentru Linux pentru a proiecta schema și placa. Fișierele Eagle sunt, de asemenea, incluse în pachetul tar.gz împreună cu software-ul. Le puteți descărca la sfârșitul articolului.

Circuitul este împărțit în 2 părți. O parte principală și alta pentru tranzistoarele de putere. Mai jos aveți două scheme independente pentru cele două părți care sunt apoi conectate prin cabluri.

Schema principală (faceți clic pe imagine pentru ao mări):

alimentare

Schema pentru partea de putere (faceți clic pe imagine pentru a mări):

Cum se conectează butoanele într-o matrice (faceți clic pe imagine pentru ao mări):

Placa principală, văzută de sus (faceți clic pe imagine pentru a o mări):


Placa este special concepută pentru pasionații de electronice. Doar stratul albastru trebuie gravat pe o placă de circuite imprimate. Liniile roșii sunt cabluri. Este mult mai simplu și necesită mai puțină precizie pentru a construi o placă de circuite imprimate pe o singură față. Puteți lipi firele (în roșu), astfel încât acestea să aibă cea mai mică lungime. Nu am putut face asta pe vultur.

Cele câteva componente ale părții de înaltă tensiune a sursei pot fi montate pe o placă de prototipare standard (sunt acele plăci cu multe găuri). Placa principală și partea de alimentare sunt conectate cu cabluri (JP2 și JP3). Veți observa că firul de masă de la partea principală se conectează la ieșirea de curent continuu pozitiv (DC). Acest lucru este corect și este motivul pentru care avem nevoie de două transformatoare separate (unul pentru partea de putere și celălalt pentru partea logică cu microcontrolerul și amplificatorii op).

Cum functioneazã

Privind schema principală, puteți vedea că este alcătuită din 2 părți. Una este marcată pe schemă ca „control de curent”, iar cealaltă ca „control de tensiune”. Sunt două bucle de control independente. Una controlează ieșirea de tensiune, iar cealaltă căderea de tensiune (diferența de potențial) peste rezistorul de 0,275 ohmi de pe partea de alimentare. Căderea de tensiune este echivalentă cu curentul. Cele două părți de control sunt „combinate” cu diodele D2 și D3. Aceste diode formează o poartă SAU analogică. Adică, dacă curentul este prea mare, atunci partea de control a curentului scade tensiunea până când curentul revine în limite, pe de altă parte, dacă curentul nu este prea mare, partea de control al tensiunii se ocupă de reglarea ieșirii de tensiune.

Această poartă SA funcționează deoarece tranzistorul T3 este conectat prin rezistorul R19 la + 5V. Dacă nu ar exista amplificatori op conectați în spatele D2 și D3, veți obține puterea maximă de ieșire. Amplificatorul op din bucla de control controlează ieșirea eliminând + 5V din T3 (preluând cât de mult teren este necesar).

Bucla de control al tensiunii controlează ieșirea de tensiune în funcție de nivelul de tensiune pe care îl obține de la pinul 5 al IC6B. Cu alte cuvinte, tensiunea la pinul 5 este echivalentă cu ieșirea înmulțită cu factorul de amplificare care este determinat de rezistențele R15, R10 și R16. La fel pentru curent, cu excepția faptului că tensiunea pe rezistorul R30 este echivalentă cu curentul maxim de ieșire.

Pentru a selecta curentul maxim sau pentru a regla ieșirea sursei de alimentare, va trebui doar să furnizăm tensiunile corespunzătoare în cele două puncte (pinul 5 al IC6B și rezistorul R30). Așa face microcontrolerul. Dar cum poate un microcontroler să genereze și să regleze o tensiune de referință DC? Aruncați o privire la următoarea imagine:


Ceea ce vedeți în această imagine este cum un semnal pulsatoriu (trenul de impulsuri) poate fi transformat într-un semnal continuu. Tot ce aveți nevoie este să îl treceți printr-un filtru de trecere jos cu o frecvență de tăiere de aproximativ 100 (sau mai multe) ori sub frecvența semnalului. Deoarece microcontrolerul nostru rulează la 4 MHz, nu este prea dificil să proiectăm un astfel de filtru. Chiar dacă am genera semnalul cu software, am obține câțiva kHz, iar filtrul ar fi totuși foarte mic.

Diferența de imagine între diagramele superioară și inferioară se numește modulația lățimii impulsurilor. Prin modificarea lungimii impulsurilor putem modifica tensiunea continuă după filtrare.

!Super, putem genera o tensiune de curent continuu exactă cu un semnal digital!

Microcontrolerul AT90S4433 are două contoare interne, unul de 16 biți și celălalt de 8. Contorul de 16 biți are posibilitatea de a utiliza modulația lățimii impulsului (PWM - Pulse Width Modulation - în engleză), implementată în hardware în micro cu un rezoluție de 10 biți. Contorul de 8 biți nu are această capacitate, dar îl putem implementa prin software. Este încă suficient de rapid. Vom folosi contorul de 16 biți pentru reglarea tensiunii, care ne oferă 10 biți = 1023 pași de rezoluție pentru controlul tensiunii. Ieșirea curentă este controlată cu contorul de 8 biți care ne oferă 255 de pași pentru a controla intervalul 1-3000mA. Aceasta înseamnă că vom avea o precizie de 12 mA (sau mai puțin). Este suficient pentru controlul curent.

Toate celelalte componente din circuit sunt pentru sursa de alimentare și referință de tensiune (7805 este reperul nostru) și pentru a ne asigura că sursa de alimentare nu se comportă instabil atunci când este conectată sau deconectată.

Software-ul

Software-ul pentru microcontroler folosește multe aspecte pe care le cunoașteți deja din articolele anterioare (uart pentru rs232, afișaj LCD, contoare în modul întrerupere). Puteți arunca o privire la:
linuxdcp.c.

Cel mai interesant este probabil software-ul PWM (Pulse Width Modulation). Variabila ipwm_phase implementează împreună cu ipwm_h PWM pentru curent. Vom rula contorul de 8 biți în modul de întrerupere și de fiecare dată când este generată o întrerupere din cauza depășirii, va fi apelată funcția "SIGNAL (SIG_OVERFLOW0)". Aici vom verifica ipwm_phase pentru a vedea dacă trebuie să generăm un „1” sau un „0” în ieșire și să resetăm contorul. Uşor!.

Deși software-ul nu este prea complicat, pentru a-l înțelege pe deplin vă recomand să citiți fișele de date 4433 (consultați referințele).

4433 este un microcontroler pe 8 biți, iar capacitățile sale matematice sunt limitate. Funcțiile divXbyY și multiXbyY implementează matematică pe 24 de biți pe care va trebui să o calculăm lățimea impulsului de la o tensiune dată de utilizator.

Sursa noastră de alimentare are 7 butoane. Șase dintre ele sunt pentru selectarea nivelurilor de tensiune și curent, iar cealaltă este pentru modul „standby”. Utilizând acest mod puteți deconecta temporar ieșirea și puteți schimba în continuare limitele de tensiune și curent. Starea butoanelor este interogată în bucla principală a programului. Variabila ignorebutton este utilizată pentru saltarea butoanelor. Când apăsați un buton cu degetele, îl mutați puțin în sus și în jos. Ca om, nu veți observa acest lucru, dar microcontrolerul este atât de rapid încât se va vedea pornit, oprit, pornit, oprit. Contorul cu butoane de ignorare așteaptă puțin după ce butonul a fost apăsat pentru a evita aceste ricoșări.

Realizarea plăcii cu circuite imprimate

Placa principală:
Cutia pentru fântână. Lemn pe laturi și metal pentru partea de jos, de sus și de față:
Panoul frontal:
Pachetul software conține un fișier postscript (linuxDCpower.ps) pentru placa de circuit imprimat. Personal, constat că tampoanele sunt întotdeauna puțin mici. De aceea, vă recomand să le măriți puțin cu un marker înainte de a insola placa. Procesul de realizare a plăcii la domiciliu este descris în: mai 2002, un panou de control LCD pentru serverul dvs. Linux ".
Cum să construiți o cutie ieftină, dar drăguță pentru sursa dvs. de alimentare, este descris în articolul „Septembrie 2002, Contor de frecvență 1Hz-100Mhz cu ecran LCD și interfață RS232”. Puteți vedea cutia și panoul frontal pe care le-am realizat în dreapta. Faceți clic pe imagini pentru a le mări.

Verificări

Iată-l: propria noastră sursă de alimentare

Ați văzut mai sus că există 3 opțiuni disponibile în funcție de transformatorul pe care îl utilizați. Software-ul implicit este pentru ieșire de 16V, 2.2A. Pentru a modifica acest lucru, editați fișierul linuxdcp.c și căutați:
MAX_U, IMINSTEP, MAX_I, va trebui, de asemenea, să modificați calibrarea în funcția set_i dacă aveți ieșirea maximă de 3A. Codul este bine comentat și veți vedea ce trebuie să schimbați.

În cele din urmă, iată câțiva magneți ai sursei de alimentare pe care am construit-o. Este un pic de muncă, dar este foarte bun și robust. Timpul a fost bine petrecut, deoarece o sursă de alimentare de laborator este într-adevăr unul dintre cele mai utilizate lucruri.

Utilizarea sursei de alimentare

u = X selectează tensiunea (de exemplu, u = 105 selectează tensiunea la 10,5V)
i = Xmax selectează curentul maxim (de ex. i = 500 selectează limita de curent la 500mA)
s = 1 sau s = 0 selectează modul de așteptare
u =? sau i =? sau s =? tipărește parametrii selectați în prezent. Aceasta va produce o ieșire pe ecran astfel, de exemplu:
u: 50 s: 0 i: 100 l: 0
u: înseamnă tensiune = 50 = 5V, s: 0 înseamnă standby oprit, i: 100 este 100mA, iar l: 0 înseamnă că limita de curent nu a fost atinsă.

Folosind acest limbaj de comandă ascii, puteți scrie, de asemenea, o interfață grafică de utilizator pentru sursa de alimentare. Pentru a utiliza linia rs232 trebuie să o inițializați mai întâi cu comanda ttydevinit. ttydevinit este inclus în pachetul software. Acest lucru este descris și în articolul: septembrie 2002, Contor de frecvență.

Securitate

Setări

Referințe

  • Software-ul programatorului Uisp AVR: www.amelek.gda.pl/avr/
    copie locală: uisp-20011025.tar.gz
  • Cum se construiește hardware-ul programatorului și se instalează compilatorul AVR:
    Martie 2002, Programarea microcontrolerului AVR cu GCC
  • Codul sursă pentru acest articol linuxdcpower-0.1.tar.gz, 1201K. De asemenea, sunt incluse schema de circuite, fișierele Eagle și capturile de ecran.
  • Toate software-urile (actualizările vor fi listate aici) și documentele: software/fișe tehnice
  • Fișă tehnică pentru bd379 bd379.pdf 44K
  • Fișă tehnică pentru TL082 TL082.pdf 110K
  • Foaie de date pentru TL071 TL071.pdf 268K
  • Foaie de date pentru 2n3055 2n3055.pdf 64K
  • Foaie de date pentru MAX232 MAX220-MAX249.pdf 448K
  • Foaie de date pentru ST232, o variantă ieftină, vândută frecvent în locul MAX232 realst232.pdf 100K
  • Foaie de date pentru Atmel AT90S4433 avr4433.pdf 2356K
  • Site-ul atmel: www.atmel.com/
  • Eagle pentru Linux cadsoftusa.com

Formular „Talkback” pentru acest articol

20.02.2004, generat de lfparser versiunea 2.43