| Both sides previous revisionPrevious revision | |
| en:examples:digi:amp_out [2015/03/26 17:34] – heikopikner | en:examples:digi:amp_out [2026/02/19 11:30] (current) – external edit 127.0.0.1 |
|---|
| ~~PB~~ | <pagebreak> |
| ====== The amplified digital output ====== | ====== Amplified digital output ====== |
| |
| <note>Needs translation</note> | //Required knowledge: |
| | [HW][[et:hardware:homelab:combo]], |
| //Necessary knowledge: | [AVR][[et:avr:io]], |
| [HW][[en:hardware:homelab:combo]], | [LIB][[et:software:homelab:library:bit]], [LIB][[et:software:homelab:library:pin]]// |
| [AVR][[en:avr:io]], | |
| [LIB][[en:software:homelab:library:bit]], [LIB][[et:software:homelab:library:pin]]// | |
| |
| ===== Theory ===== | ===== Theory ===== |
| Mikrokontrollerite viigud ei ole tavaliselt mõeldud suurte koormuste lülitamiseks. Atmeli mikrokontrollerite viigud lubavad läbi lasta vaid 30mA viigu kohta, kuid paljudel kontrolleritel on see number veel väiksem (ARM kontrolleritel vaid mõni mA). See tähendab seda, et mikrokontrolleri viiguga saab juhtida vaid madala voolutarbega seadmeid (nt LEDid, mikrokiibid). | Microcontroller pins are usually not intended to switch large loads. Atmel microcontroller pins allow only 30 mA per pin, and on many controllers the number is even smaller (ARM controllers only a few mA). This means that a microcontroller pin can control only low-current devices (e.g., LEDs, ICs). |
| |
| [{{ :examples:digi:dc_pwm.png?150|N-FET mootori lülitamiseks}}] | [{{ :examples:digi:dc_pwm.png?150|N-FET for switching a motor}}] |
| |
| Selleks, et juhtida suurema voolutarbega seadmeid on vaja väljundi signaali võimendada. Selleks kasutatakse tavaliselt mõnda transistori või integraalkiipi. Transistori lülitust kasutades tuleks jälgida, et võimendustegud oleks piisav ning ei ületataks maksimaalset viigu- ega transistori voolu. | To control higher-current devices, the output signal must be amplified. This is usually done with a transistor or an integrated circuit. When using a transistor circuit, ensure that the gain is sufficient and that maximum pin and transistor currents are not exceeded. |
| |
| Üks lihstamaid lahendusi on kasutada väljatransistori (Mosfet). Väljatransistoriks nimetatakse pooljuhtseadist, mille pooljuhist voolu juhtiva kanali juhtivust mõjutab elektriväli ja sellest tulenevalt on ta erinevalt bipolaartransistorist pingega tüüritav element. Väljatransistorid jagunevad ehituselt kaheks: P-siirdega ja N-siirdega (sarnaselt bipolaar-transistoridele PNP ja NPN), lühendatult P-FET ja N-FET. | One of the simplest solutions is to use a field-effect transistor (MOSFET). A field-effect transistor is a semiconductor device where the conductivity of the current channel is controlled by an electric field. Unlike a bipolar transistor, it is voltage-driven. FETs are divided into P-channel and N-channel types (similar to PNP and NPN), abbreviated P-FET and N-FET. |
| |
| MOSFETil on tavaliselt 3 viiku: //Drain//(D), //Source//(S), //Gate//(G). //Drain// viik jääb alati seadme poole, mida soovitakse lülitada, //source// viik P-FETi puhul + toite, N-FETi puhul GND poole ning //gate// viiku kasutatakse MOSFETi tüürimiseks. Selleks, et MOSFETi sisse-välja lülitada on vaja tekitada pinge G ja S viikude vahele. Sellest tulenevalt N-FET lülitub sisse, kui G viigul on loogiline 1 (olenevalt MOSFETist on minimaalne pinge 3-14V), ning P-FET lülitub sisse, kui G viigul on loogiline 0. Välja lülitamiseks on vaja MOSFETi G viik viia samale pingenivoole nagu S viik. Seega N-FETi puhul 0V ja P-FETi puhul toitepingeni. | A MOSFET typically has 3 pins: //Drain//(D), //Source//(S), //Gate//(G). The //Drain// pin is always on the side of the device being switched, the //Source// pin is on the supply side for a P-FET and on the GND side for an N-FET, and the //Gate// pin is used to control the MOSFET. To turn the MOSFET on or off, a voltage difference between G and S is needed. Thus an N-FET turns on when the gate is logic 1 (the minimum voltage depends on the MOSFET, typically 3-14 V), and a P-FET turns on when the gate is logic 0. To turn off, the MOSFET gate must be brought to the same potential as the source: 0 V for N-FET and supply voltage for P-FET. |
| |
| Sellest tulenevalt kui on soov lülitada seadmeid, mille tööpinge on kõrgem juhtelektroonika (nt mikrokontrolleri) tööpingest tuleb kasutada N-FETi, või panna lülitava skeemi ja P-FETi vahele veel üks lisa võimenduse aste,sest muidu ei ole võimalik MOSFETi välja lülitada. | Therefore, if you need to switch devices whose operating voltage is higher than the control electronics (e.g., the microcontroller) voltage, you should use an N-FET, or add another amplification stage between the switching circuit and the P-FET, otherwise the P-FET cannot be turned off properly. |
| |
| MOSFETi kasutamise eelised võrreldes bipolaartransistoridega on: | Advantages of MOSFETs compared to bipolar transistors: |
| * Kõrge sisendtakistus - lülituse vool on väga väike | * High input resistance - very low control current |
| * Madal töötakistus - e. takistus S ja D viikude vahel, MOSFETi soojenemine on võrdlemisi väike | * Low on-resistance - low heating between S and D |
| * Väike temperatuurimõju - lülitatav vool ei sõltu temperatuurist | * Low temperature dependence - switched current does not depend on temperature |
| * Kõrge lülitussagedus - lülitus on piisavalt kiire, et läbi lasta PWM signaali. | * High switching frequency - fast enough for PWM signals |
| |
| [{{ :examples:digi:flybackdiode.png?150|Vastudiood}}] | [{{ :examples:digi:flybackdiode.png?150|Flyback diode}}] |
| |
| Aegajalt on vaja lülitada seadmeid, mis peavad olema (või on tungivalt soovituslik, et oleks) elektriliselt täielikult eraldatud lülitavast sekeemist. Näiteks, kui on vaja lülitada vahelduvvoolu seadmeid või väga suure võimsusega seadmeid. Siis tuleks kasutada lülituseks releed. Olenevalt relee mähise lülitusvoolust on vaja mikrokontrolleri viiku ka relee mähise lülitamiseks võimendada kasutades kas bipolaar-transistori või MOSFETi. | Sometimes you need to switch devices that must (or should) be electrically fully isolated from the switching circuit. For example, when switching AC devices or very high-power devices. In such cases use a relay. Depending on the relay coil current, you must also amplify the microcontroller pin signal using a bipolar transistor or a MOSFET. |
| |
| Induktiivsete seadmete lülitamisel (nt alalisvoolumootor, relee mähis jne) tuleb kasutada ka kaitsedioodi, mis induktiivse seadme välja lülitamisel oleks võimeline kaitsma lülitusskeemi ja mikrokontrolleriviiku tagurpidi pinge eest. Nimelt tekib induktiivse seadme mähise magnetvälja tõttu negatiivne pinge, mis võib kahjustada kas lülitavat elementi (transistor, MOSFET) või mikrokontrolleri viiku. | When switching inductive devices (e.g., DC motors, relay coils, etc.), you must also use a protection diode that can protect the switching circuit and microcontroller pin from reverse voltage when the inductive load is switched off. The negative voltage generated by the inductive coil can damage the switching element (transistor, MOSFET) or the microcontroller pin. |
| |
| Lisaks üksikutele elementidele on aegajalt transistorid või MOSFETid pandud ka ühte integraallülitusse. Üheks näiteks on ULN2004, mis sisaldab endas 7 darlington paari kanalit. Sellise kiibid on ideaalsed juhul, kui on vaja juhtida mitut kanalit (nt unipolaarne samm-mootor), lihtsustades trükkplaadi tegemist ja vähendades üldist komponentide arvu. Tihti on nendesse integraalskeemidesse sisse ehitatud ka vastudioodid. | In addition to discrete components, transistors or MOSFETs are sometimes integrated into a single IC. One example is ULN2004, which contains 7 Darlington pair channels. Such chips are ideal when multiple channels must be controlled (e.g., a unipolar stepper motor), simplifying PCB design and reducing component count. These ICs often include flyback diodes. |
| |
| ===== Practice ===== | ===== Practice ===== |
| Järgmevalt on ära toodud lihtne koodijupp mootori sisse välja lülitamiseks, mis on ühendatud unipolaarse samm-mootori pistikusse. Mootori üks juhe on ühendatud toitega (Vbat) ning teine ULN kiibiga läbi viigu Stp1. | Below is a simple code snippet for switching a motor on and off. The motor is connected to a unipolar stepper motor connector. One motor wire is connected to supply (Vbat) and the other goes through an ULN chip via pin Stp1. |
| |
| <code c> | <code c> |
| // | // |
| // Võimendatud väljundi testkood | // Amplified output test code |
| // DC Mootor on ühendatud unipolaarse mootori pistikusse | // DC motor is connected to a unipolar motor connector |
| // Mootori üsimene viik Vbat | // Motor first pin Vbat |
| // Mootori teine viik Stp1 | // Motor second pin Stp1 |
| // | // |
| #include <homelab/pin.h> | #include <homelab/pin.h> |
| |
| // | // |
| // Põhiprogramm | // Main program |
| // | // |
| int main(void) | int main(void) |
| { | { |
| // LEDide ja mootori viigud väljunditeks | // Set LEDs and motor pins as outputs |
| pin_setup_output(motor); | pin_setup_output(motor); |
| pin_setup_output(led_green); | pin_setup_output(led_green); |
| pin_setup_output(led_red); | pin_setup_output(led_red); |
| | |
| // Roheline LED kustu, punane põlema | // Green LED off, red on |
| led_on(led_red); | led_on(led_red); |
| led_off(led_green); | led_off(led_green); |
| |
| // Lõputu tsükkel | // Infinite loop |
| while (true) | while (true) |
| { | { |
| // Kui S1 on vajutatud, mootor tööle | // If S1 is pressed, motor on |
| if(button_read(S1)) | if(button_read(S1)) |
| { | { |
| led_off(led_red); | led_off(led_red); |
| } | } |
| // Kui S3 on vajutatud, mootor kinni | // If S3 is pressed, motor off |
| if(button_read(S3)) | if(button_read(S3)) |
| { | { |
| } | } |
| </code> | </code> |
| | |