Kahe kanaliga PWM regulaator mikrokontrolleril. PWM-kontrolleri projekti väljatöötamine AVR-seeria mikrokontrolleritel elektriseadmete koormuse juhtimiseks. Seadme skemaatiline diagramm

23.07.2023 Drenaažisüsteem

Esitame teie tähelepanu diagrammi, mis võimaldab teil heledust reguleerida LED riba abiga Sh irotno- JA pulss M odulatsioon (PWM, inglise PWM). Seda tehnikat kasutatakse laialdaselt võimsates kontrollerites, kuna erinevalt pinge reguleerimisest ei põhjusta see üksikutes segmentides heleduse tasakaalustamatust ja on palju säästlikum.

Iseärasused:

  • 2 sõltumatut PWM kanalit (faaside eraldusvõimega 180°);
  • Toitepinge: 8 - 20 V;
  • Töökoormusvool: 3,4 A/kanal (12 V toiteallikaga, mis vastab 40 W-le);
  • Toitelüliti madalad kaod (avatud kanali takistus 45 mΩ);
  • Valikuline gammakorrektsioon võimaldab heledust ühtlaselt reguleerida;
  • Sisendliigpingekaitse (analoog- ja tarkvarafiltreerimine);
  • Sisemine voolutarve alla 10 mA (0,12 W @ 12 V);
  • Kõrge sagedus PWM (~18,75 kHz) ei põhjusta LED-riba juhtimisel stroboskoopilist efekti ja silmade väsimust.

Seade põhineb mikrokontrolleril ATtiny13A, mis analüüsib tihvtide PB3 ja PB4 sisendpingeid, arvutab need ümber ning väljastab vastava täidisega PWM signaalid kontaktidele PB0 ja PB1. Need signaalid saadetakse aadressile väljatransistorid T1 ja T2, mis omakorda vahetavad võimsaid koormusi (in selles näites- LED-riba).

Jumper J1 määrab seadme töörežiimi: kui see on seatud alumisse (vastavalt skeemile) asendisse, sõltub PWM täitmine lineaarselt vastava sisendi pingest. Kui hüppaja on seatudülemises asendis, arvutab mikrokontroller väärtuste tabeli abil uuesti vajaliku PWM-täidise väärtuse. Tulemuseks on gammakõver, st heledustase on kohandatud vastavalt inimsilma tundlikkusele. Väljundi täitmise ja sisendpinge graafik on näidatud allpool:

Roheline graafik - hüppaja J1 alumises asendis, sinine - ülemises asendis

PWM-generaatori omadused

Erinevalt "klassikalisest" kiirest PWM-ist kasutab see skeem faasikorrektse PWM-i, mille kanalid on üksteise suhtes 180 kraadi nihutatud. Allpool on kirjeldatud, kuidas mõlemad algoritmid töötavad.

Komponendid

Vooluahel ei ole nõudlik komponentide täpse valiku osas, enamikku osi saab asendada sarnase nimiväärtusega. Näiteks kui teil pole 100 kOhm muutuvaid takisteid, võite paigaldada 50 kOhm või 500 kOhm ja vooluahel jätkab korralikult töötamist. Peaaegu iga IRLML-seeria transistorit saab paigaldada kui T1 ja T2 (võttes arvesse lülitatud voolu)
Kui te teist kanalit ei vaja, saate eemaldada R2, R4, C2 ja T2 ning maandada mikrokontrolleri PB4 viigu (jättes PB1 ühendamata)

Näiduks kasutatakse 3 LED-i (3mm rohelist) 1 kOhm takistitega, mis on ühendatud anoodidega 12V toitesisendiga ja katoodidega transistoride äravooludesse ja toiteallika miinusesse. Lisaks on ühendatud paralleelselt keraamilise kondensaatoriga C3 elektrolüütkondensaator 100 µF, mis aitab võrgu pulsatsiooni tasandada. Selle paigaldamine pole vajalik, kuid soovitatav.

Kaitsme konfiguratsioon on näidatud allpool:

Ekraanipildil tähendab linnuke 0 - programmeeritud kaitse. Teie mugavuse huvides on kaitsmeid kirjeldatud main.asm faili kommentaarides.

Seadistamine taandub hüppaja J1 seadmisega soovitud asendisse. Pärast seda on seade kasutamiseks valmis.

Kokkuvõtteks paar fotot (muutuvate takistite käepidemed pole veel peal):

Radioelementide loetelu

Määramine Tüüp Denominatsioon Kogus MärkusPoodMinu märkmik
U1 MK AVR 8-bitine

ATtiny13A

1 SOIC-8 Märkmikusse
VR1 Lineaarne regulaator

LM78L05

1 TO-92 Märkmikusse
T1, T2 MOSFET transistor

IRLML2502

2 SOT-23 Märkmikusse
C1-C4 Kondensaator100 nF (0,1 µF)4 Keraamika 0402 Märkmikusse
R1, R2 Muutuv takisti

100 kOhm

2 Lineaarne Märkmikusse
R3, R4 Takisti

1 kOhm

2 0603 Märkmikusse
R5 Takisti

10 kOhm

1 0603 Märkmikusse
R6, R7 Takisti

Joon.1 Võimsusregulaatori skemaatiline diagramm

Joonisel 1 on kujutatud mikrokontrolleri ATtiny2313(V) lihtsa võimsusregulaatori skeem. Regulaator on ette nähtud töötama 220 V võrku ühendatud aktiivse koormusega Pinge antakse sisendisse X1, koormus on ühendatud väljundiga X2. DD1 taktsageduse allikaks on valitud sisemine valvegeneraator, mis töötab sagedusel ≈128 kHz. Tänu sellele on seadme voolutarve väga madal. Koguvool ei ületa 15 mA, mis võimaldab hõlpsasti rakendada trafodeta toiteallikat.

Koormusvõimsust reguleeritakse impulsside töötsükli muutmisega PWM-viigu OC0B DD1 juures. Impulsid jõuavad äravoolutransistorile VT1. See sisaldub VD5...VD8 silla diagonaalis ja võib töötada ilma radiaatorita voolukollektoritega kuni 400 W. Võrgus tekkiva liiga kõrge mürataseme tõttu pole PWM-modulatsioon just kõige suurem parim viis suuremate energiatarbijate kontroll.

PWM-impulsside genereerimiseks kontaktil OC0B töötab taimer-loendur 0 kiires PWM-režiimis. FOC0B impulsi sagedus on valitud konstantseks. See sõltub loendusmoodulist, mille määrab OCR0A registri sisu:

F OC0B = F clk / (OCR0A*N),

kus F clk on kella generaatori sagedus, N on taimerloenduri 2 sageduse eelskaalaja jaotustegur.

Impulsi töötsükkel αOC0B ja seega ka koormusele antav võimsus on võrdeline OCR0B vasteregistri sisuga:

α OC0B = OCR0B/OCR0A.

Antud näites on mikrokontrolleri seadistustes valitud N=1 (eelskaalaja keelatud), OCR0A=100, st. FOC0B = 1280 Hz ja α OC0B = OCR0B/100. Programmiliselt muutes OCR0B väärtusi vahemikus 0 kuni 100, saame võimsuse reguleerimise vahemiku 0…100%.

Koormusvõimsuse väärtust kuvatakse pidevalt 3-kohalisel indikaatoril ühise anoodiga HG1. Tähemärkide tsükliline muutmine, samuti SB1...SB3 nuppude pollimine toimub katkestuse ajal, kui register OCR1AH:OCR1AL langeb kokku taimer-loenduri 1 loendusregistriga. Taimer-loendur 1 töötab CTC-režiimis (lähtestamine). juhuste kokkulangemisel). Katkestuste sagedus F OCR1A:

F OCR1A = F clk /((OCR1AH:OCR1AL+1)*N),

kus N on taimer-loenduri 1 sageduse eelskaalaja jaotustegur.

Programmis F OCR1A = 200 Hz (N=1, OCR1AH:OCR1AL=639). Seega toimub iga kolme märgi muutmine ja nuppude pollimine iga 20 ms järel (st sagedusega 200/4 = 50 Hz).

Joon.2 Võimsusregulaatori tööalgoritm

Võimsusregulaatori tööalgoritm on näidatud joonisel 2. Põhitsüklis reageerib programm nuppude vajutustele ja teostab koormuse võimsuse väärtuse binaarse kümnendsüsteemi teisenduse indikaatoril kuvamiseks 3-kohaliseks numbriks (0...100).

Iga SB1 vajutus põhjustab väljundi oleku muutumise vastupidiseks: koormus on ühendatud määratud võimsusega või on pingevaba. Aktiveeritud väljundi märk on helendav koma indikaatori madalat järku numbris. Nupud SB2 ja SB3 vastavalt vähendavad ja suurendavad koormuse võimsust. Pika vajutusega toimub parameetrite muutmine kiiremini (≈10% sekundis). Kui nuppu ei vajutata, siis 5 s pärast viimane muudatus, võimsuse väärtus ja väljundi olek (sisse/väljas) salvestatakse EEPROM-i mällu. Külmumise eest kaitsmiseks on kaasas valvekoera taimer, mille lähtestusperiood on 125 ms.

Tere kõigile Muska lugejatele!
Tänu sellele imelisele saidile omandasin palju kasulikke asju ja teadmisi ning vastuseks otsustasin kirjutada äsja arendatud seadme kohta esimese aruande. Seadme arendamise käigus puutusin kokku mitmete probleemidega ja lahendasin need edukalt. Võib-olla aitab mõne lahenduse kirjeldus mõnda minu algajast kolleegi loomingulisuses.
Valmistamiseks trükkplaadid Sain mikropuuri ja sellele aluse, mis teeb puurist mikropuurmasina. Vajadus selle järele tekkis pärast seda, kui kruvikeerajas ja Hiina Dremelis kasutati hunnikut katkiseid 0,5-1 mm puure. Kuid nagu selgus, on ilma kiirusregulaatorita sellist tööriista võimatu kasutada. Reguleerija otsustas seda ise teha, omandades sellel teel uusi teadmisi.

Mul on vähe raadioamatöörkogemusi. Lapsena koostasin Borisovi raamatut kasutades multivibraatorite abil mitu vastuvõtjat ja vilkurit. Siis järgnesid muud hobid ja tegevused.
Ja siis märkasin juhuslikult Arduinot, kuulsaks kujundatud ilmajaamade ja robotite mudeleid, ning tahtsin mikrokontrollerite abil automatiseerida kõike, mis minu kätte sattus. Kontrollerite suurused läksid suuruse ja integreerimise lihtsuse kahanevas järjekorras - Arduino UNO, Arduino Pro Mini, seejärel hunnik ATMega328P ja kõige väiksemate ja lihtsamate seadmete jaoks ostsin ATtiny85.
Ostsin Tinkies rohkem kui aasta tagasi ja nad istusid ja ootasid oma korda.

Telli ekraanipilt


(tellimuses oli ka termokahanemine, seega hind kokku on kõrgem)


MK saabusid nagu ikka beebipunniga kotis, ise hunnikus eraldi kilekotis. Parem oleks olnud muidugi kõvas karbis või vahus, aga sellegipoolest ei paindunud midagi ja kõik töötas.

Algul jootsin vooluringid leivaplaatidele, kuid LUT-i kohta lugedes sain aru, et täiesti võimalik ja palju mugavam on kõike tavalistele trükkplaatidele kokku panna.
Hakkasin tasapisi koguma ka kasulikke tööriistu, mille hulgas oli MD-3 tsangpadruniga mikropuur ja masin väikeste aukude puurimiseks. Muidugi oleks võinud osta ainult tang ja mootor kuskilt välja valida, aga otsustasin, et ostan kohalikust poest juba valmis.

Prindime kujunduse laserprintimiseks läikivale Lomondi fotopaberile tindiprinteriks. Aga panna uhiuude printerisse paberit, mis polnud selleks ette nähtud, oli hirmus. Leidsin Internetist hoiatusi, et tindiprinteri paberi läikiv kate võib sulada, kleepuda pliidi külge ja rikkuda printeri. Kindluse mõttes tegin katse - rullisin 200C-ni kuumutatud jootekolvi üle selle paberi pinna (täpset pliidi temperatuuri ei leidnud ma kunagi, aga umbes nii), paber kõverdus veidi, aga midagi ei sulanud ega kinni jäänud. - mis tähendab, et seda saab printeris kasutada.

Triikisin joonise tahvlile ja pesin paberi maha. Tahvlile jäi väga kvaliteetne juhtmete muster ja kleepunud läikiv paberikiht. Tehnoloogia autor soovitas eemaldada kergelt kleepuva elektriteibiga, aga kuidas ma ka ei üritasin, siis kas jäi läige üldse eemaldamata või tulid koos sellega juhtmed maha. Ka pealdised kanti kohe elektrilindile. Kannatanud, võttis ta täpi ja rebis juhtide vahelt kraapides peaaegu kogu läike maha. Asi on õrn ja tüütu, midagi tuleb välja mõelda. Seejärel otsisin teist ja kolmandat tahvlit tehes, kuidas neetud läigest lahti saada, aga ei ajakirjalehele ega isekleepuva paberi alusel trükkimine ei andnud sellist joonistuskvaliteeti, jäljed hägused või kukkus maha. Aga sain aru, et fotopaberi läiget pole vaja nullini puhastada - piisab, kui kriimustada vähemalt veidi jälgede vahel, et lahusele vasele ligi pääseda ja mõnes kohas söövitati see kriimudeta, läbi läige.

Otsustasin söövitada vaske vesinikperoksiidi lahusega ja sidrunhape kui kõige kättesaadavam kompositsioon. Võimalikud valikud keemia söövitamiseks koos arvutustega leiad siit

Võtsin peroksiidi esmaabikomplektist, ostsin 3 aastat tagasi, kõlblikkusaeg oli umbes 2 aastat vana, arvasin, et see on juba ammendunud ja ei tööta üldse. Küll aga eksisin, tahvel söövitati väga kiiresti – umbes kolme minutiga. Siin on tulemus:

Üks rada kannatas täpiga kriimustada, see taastati takisti juhtme ärahammustamise teel. Lisaks väikesed augud elektrilindi kasutamisest. Pean hankima endale sobiva markeri, aga seniks pange lakki kõikjale, kuhu saan.

Tahvli tinatasin jootekolbiga kasutades patsi. Jootnud osad.




Kõrged messingist alused, mis on plaadi mõlemal küljel kinnitusavade kaudu üksteise sisse kruvitud, on mugav asi, mille saate paigaldamise ja silumise ajal lauale asetada ilma ümbriseta, kartmata millegi mõlkimist või lühistamist.

Kõige töömahukam oli juhtmepoolsete väljundi LED-ide üles roomamine ja jootmine. Otsustasin kasutada esiküljena jootepoolt, kuna... sellel on osade kõrgus palju väiksem ja muutuva takisti võlli läbimine plaadist vähendab selle pikkust vajaliku pikkuseni.

Ma ei jootnud Resetiga ühendatud skeemil kondensaatorit C2, kuna Kuigi see suurendab seadme käivitamise töökindlust, võib see segada MK vilkumist.

Mikrokontroller sai joodetud viimasena, pärast plaadi ühendamist toiteplokiga ja veendumist, et midagi kohe läbi ei põleks ja stabilisaator väljastaks tavalist 5V. Miski ei hakanud suitsetama, nii et ühendame programmeerija ICSP tihvtidega ja laadime üles testi püsivara.

Seadme püsivara kirjutame paljudele tuttavasse Arduino programmeerimiskeskkonda peale ATtiny mikrokontrollerite toe lisamist sellele, nende allalaadimist ja lahtipakkimist Arduino/riistvara kausta.

Testvisand (ma ei näe mõtet seda esitada) luges lihtsalt sisendsignaalide olekuid ja kuvas need koos ühendatud LED-idega olemasolevatele väljunditele. Sest Meil on 4 sisendkanalit, aga ainult 2 väljundkanalit, seega pidime seda mitmes etapis kontrollima.

Kõik töötas ootuspäraselt, välja arvatud üks asi - rohelise LED-iga sama kanaliga ühendatud nupp ei olnud loetav ja LED oli märgatavalt heledam kui punane. Testeri mõõtmised näitasid, et PB0 olekus voolab LED-i väljundina läbi üle 20mA ja üle selle langeb vaid 2,1V. Ja sisend olekus koos sisemise tõmbega jalale on nupu vabastamisel ainult 1,74 V ja vajutamisel 0,6 V. Pole üllatav, et pidevalt loetakse 0 Madalpinge roheline LED, ilma isegi hõõgumata, tühjendas jalast pinget, kui voolas mikroampervool. Nüüd on selge, miks algses artiklis ühendati 2 LED-i järjestikku.

Kuid teise LED-i panemine kasti sees rumalalt liiteseadisena särama (ja ka esipaneelil pole 2 ühesugust vaja) tundus kuidagi vildakas lahendus. Mõtlesin, kuidas muidu saaksin LED-ahelas pinget tõsta ja tuli meelde zeneri dioodi voolu-pinge karakteristik. Kui ühendame 2 V zeneri dioodi jadamisi selle vastas oleva LED-iga (et see töötaks normaalselt, voolu-pinge karakteristiku vastupidises harus), siis saame täpselt selle, mida vajame. Kui LED süttib 10 mA vooluga, murrab zeneri diood läbi ega sega voolu voolu, vaid ainult stabiliseerib sellel langevat pinget antud tasemel. Peate lihtsalt voolu piirava takisti välja vahetama, tuginedes asjaolule, et peate pinget Ures = 5V-2,1V-2,0V = 0,9V alla suruma 10mA võrra, st. R = 90 oomi. Ja kui jalg tõmbega sisendisse lülitatakse - I-V iseloomuliku haru järsuse tõttu kuni ristmiku purunemiseni on zeneri diood samaväärne suure takistusega takistiga ja jälle langeb sellele umbes 2 V. , tõstes nupu vabastamisel MK jala pinget 4 V peale, mis loetakse juba TÕENE. Nupule vajutades tõmbab jala 5V-le sisetakisti, mille takistus on umbes 40KOhm (minu arvutuste järgi) ja maapinnale 5KOhm takisti (mis läheb LED-ahelast mööda), st. sellel on sama 0,6 V ja seda peetakse VALEKS.
Zener dioodi jootsin takistiga järjestikku ja nupp töötas nagu peab.

Nüüd oli kord PWM-i tööd kontrollida ja ka siin tekkisid probleemid. Tavaline Arduino käsk AnalogWrite(leg, fill) ei tahtnud töötada. See tähendab, et teismeliste raamatukogus on midagi valesti. Kasulik on vaadata läbi MK andmeleht ja Internet.

See osutus huvitavaks:
- 2 PWM kanalit (OC0A, OC0B) saab väljastada viigudele 5, 6 (PB0, PB1), millest igaüks töötab oma täiteseadega (kuid sama sagedusega) alates Timer 0;
- kolmandat taimerilt 1 töötavat PWM-kanalit saab väljastada kontaktidele 2, 3 (PB3, PB4) ja otsest PWM-signaali (OC1B) saab väljastada jalale 3 ning selle pöördversiooni (/OC1B) saab väljastada jalg 2. Kuid väljund läheb kas ainult 3. jalale või mõlemale korraga. Kuid me vajame PWM-i jalal 2, vähemalt pöördvõrdeliselt (me inverteerime selle tarkvaras tagasi), nii et peame konfigureerima jalgade 2 ja 3 väljundi ning signaal ei liigu 3. jalasse ainult seetõttu, et see on deklareeritud sisend.

Niipalju kui ma aru saan, saab Arduino tugipaketis ATtiny PWM-kanalit Timer 1-st väljastada ainult jalale 3. Ilmselt peeti selle pöördversiooni väljundit mittevajalikuks. Taimeri ja PWM-i peate ise konfigureerima (vt koodi, funktsiooni PWM3_init), selle asemel, et kasutada AnalogWrite'i.

Samuti märkasin, et Timer 1 lähtestamisel on funktsiooni millis() töö häiritud - selgub, et sisemise kella jaoks kasutatakse vaikimisi Timer 1. Kuid saate aja lähtestada Timer 0-le, kasutades makro definitsiooni Arduino\hardware\tiny\cores\tiny\core_build_options fail h
/* Erinevatel põhjustel on Timer 1 parem valik "85" protsessori millistaimeri jaoks. */ #define TIMER_TO_USE_FOR_MILLIS 0
Seda me kasutame, kuna selle projekti Timer 0 on täiesti tasuta.

Samuti tekkis küsimus muutuva takistilt loetud kiiruse seadistuse ulatuse kohta. Algse skeemi autor lisas 10K muutujaga järjestikku 36K konstanttakisti, ilmselt selleks, et ADC kood mahuks vahemikku 0-255. Tegelikkuses osutus 0-230 ja maksimum oli ujuv. Kuid ma tahaksin, et 8-bitise PWM-iga vastaks sätte täisskaalale täpselt 0-255. Selleks eemaldasin konstantse pinge ja asendasin selle +5V hüppajaga, ADC hakkas lugema kogu vahemikku ja 4 kõige vähem olulist bitti visati programmiliselt ära. Ja miks oli vaja täiendavaid detaile?

Peale sisend/väljundkanalite testimist laadime mikrokontrollerisse lahingu püsivara, mis on kirjutatud C-keeles Arduino keskkonnas algse skeemi autori BASIC lähtekoodi alusel.

Programmi tekst

// Attiny85 sagedusel 1MHz // Ärge unustage seada taimerit 0 millidele jne! // Arduino\hardware\tiny\cores\tiny\core_build_options.h -> TIMER_TO_USE_FOR_MILLIS 0 #include // Ühendused #define MODE_LED_PIN PIN_B0 #define MODE_BUT_PIN MODE_LED_PIN #define PWM_LED_PIN PIN_B3 #define AM_PIN PIN_B1 #define SP_PIN A1 #define CUR_PIN A2 // Olekud #define MODE_ITING_MANDEUAL define MODE_SETUP_MAX 3 #define MODE_START 4 #define MODE_DRILLING 5 #define MODE_STOP 6 // Muutujad bait Mode = MODE_MANUAL; bait ModeLedVal = LOW; bait SetPoint = 0; int CurrentFiltered = 0; bait CurrentU8 = 0; bait AMButton; bait AMButtonFlt = LOW; staatiline bait ModeButton; staatiline bait ModeButtonFlt = HIGH; // staatilise baidi algväärtus ModeButtonOld = LOW; // käivitab erandid käivitamisel staatiline bait SetupStep = false; allkirjastamata pikad BlinkFromM-id; allkirjastamata pikad StartFromMs; allkirjastamata pikk ModeFromMs; bait W, W0, W1, W2, Wxx, Wmax, Uxx, Uon, Uoff; void PWM3_init() ( // Seadistage PWM PB3-l (pin 2), kasutades taimerit 1 TCCR1 = _BV (CS11) | _BV (CS10); // eelskaleerija /4 GTCCR = _BV (COM1B0) | _BV (PWM1B); // tühjendada OC1B võrrelge OCR1B = 255 // esialgne täitmine 0% (kasuta pöördväljundit!) // PWM sagedus = 1KHz (1 000 000 /4 /256) tühi analoogWrite_PB3 (uint8_t duty_value) ( ​​on//); PIN_B3 OCR1B = 255-duty_value // täitmine 0-255 (0-100%) (kasuta pöördväljundit!) bait ScanButton(void) ( // LED-iga ühe väljundiga ühendatud nupu lugemine // Kiirendatud versioon väljundi taastamisega; ja ilma PWM-ita keelab baidi väärtuse, port_bak = PORTB // salvesta DDRB väljund &= ~(1<intervall))( \ outvar = varname;\ )\ )\ else (\ __lastChange_##varname=millis();\ ) // Initsialiseerimine void setup() ( pinMode(MODE_LED_PIN, OUTPUT); // põhiolek - pinMode indikatsioon (PWM_LED_PIN, OUTPUT); ; Uon = EEPROM.read(2); // Sujuv kiirendus tühikäigule või käsitsi seadistus, kui (digitalRead(AM_PIN)==HIGH) W0 = Wxx else ( W0 = 255- (analogRead(SP_PIN) >> 2); // 0-255, muutuv takisti meil on pöördväärtus); ) W1 = 0 jaoks (W = 0 ; W<=W0; W++) { analogWrite_PB3(W); W1 = W1 + 4; delay(W1); } delay(800); Mode = MODE_WAITING; } // Рабочий цикл void loop() { // Индикация текущего режима морганием switch (Mode) { case MODE_MANUAL: ModeLedVal = LOW; // выключено break; case MODE_WAITING: (ModeLedVal==HIGH) ? ModeLedVal=LOW: ModeLedVal=HIGH; // в полнакала break; case MODE_START: case MODE_DRILLING: case MODE_STOP: ModeLedVal = HIGH; // на полную break; case MODE_SETUP_XX: if ((millis()-BlinkFromMs >400)) ( // harva (ModeLedVal==HIGH) ? ModelLedVal=LOW: ModelLedVal=HIGH; BlinkFromMs = millis(); ) break;<< 5) - CurrentFiltered) >case MODE_SETUP_MAX: if ((millis()-BlinkFromMs > 100)) ( // sageli (ModeLedVal==HIGH) ? ModelLedVal=LOW: ModelLedVal=HIGH; BlinkFromMs = millis(); ) break;<1В) CurrentU8 = byte (CurrentFiltered >> 5);< Uoff) { // Тормозим analogWrite_PB3(Wxx); Mode = MODE_STOP; } if (AMButtonFlt==LOW) Mode = MODE_MANUAL; break; case MODE_STOP: // Тормозим и ждем пока выйдем на ток ХХ if (CurrentU8 < Uon) { // Замедлились if (millis()-StartFromMs >// kui >1V, et mitte segi ajada väikestega if ((CurrentFiltered >> 5) & 0x7F00) CurrentU8=255;


// Masina lüliti (Mode) olek ( case MODE_MANUAL: // Käsijuhtimine nupuga analogWrite_PB3(SetPoint); if (SetupStep) Mode = MODE_SETUP_XX; if (AMButtonFlt==HIGH) ( // Masinale lülitudes aeglustada analoogWrite_PB3(Wxx) StartFromMs = millis( Mode = MODE_STOP) ; Mode = MODE_START ) kui (SetupStep) Mode = MODE_SETUP_XX =LOW) Mode = MODE_MANUAL ; case MODE_DRILLING: // Puurimine, oodake voolu langust, kui (CurrentU8

300) // usaldusväärne režiim = MODE_WAITING;

) else ( StartFromMs = millis(); ) if (AMButtonFlt==LOW) Mode = MODE_MANUAL; murda; case MODE_SETUP_XX: // Tühikäigu kiiruse määramine Wxx = SetPoint;

Võtame testri, kaevame välja ostsilloskoobi ja hakkame uurima, mida me väljastame ja mida vastu võtame. Ja me tõmbame lõuad alla. Šundil näeme induktiivsust läbivate õrnade voolulainete asemel PWM-impulsside alguses kümnete voltide nõelu. See tähendab, et läbi šundi voolab kümnete amprite pikkune impulssvool! Ja isegi väljalülitatud mootoriga. Pole üllatav, et tahvel helises. Aga mis teeb ringi ilma mootorita? Pisike 100nF kondensaator! See suudab ja summutab mähiste vahetamisel häireid, kuid praegu korraldab see lühiajalise lühise igal PWM-perioodil! Järeldus - mürasummutuskondensaator ei ühildu PWM-juhtimisega ja see tuleb eemaldada.

Ja siis hakkab mulle kohale jõudma, et need kõrgepinge liigpinged lähevad peaaegu otse sobiva ADC-sse (kuna seal on amplituudidetektor, laetakse jalal olev kondensaator nõelas maksimaalse pingeni ja salvestab selle ohutult, kuna tühjenemine toimub ainult dioodi lekke kaudu). Tinka ei paista veel surevat, aga mis tal jalal viga on? Seadmed näitavad jalal pidevat pinget 5,2V, kõrgemat kui toitepinge, aga kuhu kadus ülejäänu? Peame meeles - liigpingetega võitlemiseks on sellel "+" ja "-" toiteplokkidel spetsiaalselt treenitud dioodid, mis juhivad ülejäägi toiteallikasse. Kuid sisseehitatud dioodid on nõrgad ja te ei tohiks neile väga loota.

Eemaldame neetud kondensaatori, mõõdame jalaga pinget - töötab! Töökindlad mikrokontrollerid on valmistatud Atmel! Ilmselt aitas kaasa see, et kondensaatorite võimsus oli väike, pumbati läbi.

Ilma kondensaatorita kadusid nõelad, plaat lõpetas muusika mängimise, jalg tundub, et tegelikult mõõdab PWM impulsi voolu amplituudi. Alustame häälestusprotseduuri ja proovime puurida. Tundub, et kõik on nii nagu peab - koormuse all lisab kiirust, kui trell välja tuleb siis lähtestab. Kuid mitte ainult – mitu korda minutis see spontaanselt kiirendab ja aeglustab ilma koormuseta. Jääb arusaamatuks, miks, instrumendid ei näita midagi. Kas jalg on põlenud või juhtmete mahtuvus tekitab nähtamatuid nõelu nagu see Conder, või tulevad häired samast kollektorist.

Siin otsustasin probleemiga radikaalselt tegeleda, sest märkasin, et ükski teine ​​vooluring ei kasuta piigidetektorit. Vastupidi, RC-filtreid läbiva voolu integraalväärtust kontrollitakse kõikjal. Ja sellised mõõtmised on täpselt ebatundlikud üksikute emissioonide kujul esinevatele häiretele. Asendame dioodi takistiga - ja amplituudidetektor muutub madalpääsfiltriks.

ADC poolt muudetud pinge langes kohe suurusjärgu võrra - lamedate lainete kujul, mille vahel on pausid, on efektiivne pinge palju madalam kui amplituud. Pidime püüdma umbes 0,2 V pinget. Muidugi oli võimalik šundi takistust suurendada, aga kas kasutasime PWM-i atmosfääri soojendamiseks? Ja suure PWM-täidise ja mootori koormusega võite saada ülepinge. Seetõttu peate töötama madala tühikäigu U-ga.

Ka koormusele reageerimine näib olevat aeglustunud. Kiirendus algab umbes poole sekundiga, kuid ma ei näe selles suurt probleemi - puur lihtsalt joondub ja läbib väikese kiirusega vase. Ja enam pole valestarti. Saate töötada.

Seadme lõplik skeem:


Seade paigaldati korpusesse, mille rolliks oli tihendatud elektripaigaldis “Tuso plastikust harukarp ilma tihenditeta 120x80x50 mm, IP55 hall 67052 Ruvinil Venemaa.” Tahtsin leida lamedamat, aga ma ei leidnud midagi sellist nagu 110*60*30. Et mitte vanikuid lauale asetada, keerasin regulaatori koos toiteallikaga ühtseks tervikuks. Tellis osutus suurepäraseks, kuid me ei saa seda isegi taskus kanda. Ja kuigi peale paarikümne augu puurimist polnud katsudes märgatavat võtmeväljalüliti, šundi ja stabilisaatori kuumenemist, puurisin põhja ja tagaseina veidi tuulutust.







Sellest ajast saadik on masin koos regulaatoriga osalenud veel 2 plaadi loomisel (näete, kui palju oli vaja puurida vastavalt sõnadele "AVR Fusebit Doctor" Olen selle tööga väga rahul).

Tahaksin ka märkida, et Ali karbiidtrellidel on 3,2 mm vars ja tsangid olid ainult 3,0 ja 3,5 - puur ei mahu ühte ega klammerdu teise külge. Keerasin vasktraadi ümber puuri ja sisestasin selle kuidagi 3,5 mm sisse, kuid see ei olnud ilus. Kui keegi on kohanud 6 mm läbimõõduga 3,2 tsangit (kõikjal ainult Dremeli omad, mille saba on lihvitud kuni 5 mm), siis andke teada.

Trellide vahetamisel tuleb seadistusprotseduuri uuesti korrata - ilmselt mõjutab mootori voolu “kõhna” tavatrelli ja paksendatud varrega karbiidtrelli erinev inertsmoment. Kuid seda tehakse kiiresti ja see pole tüütu. Huvilised saavad püsivarasse lisada salvestavad puurimisprofiilid :)

Olen korduvalt kohanud nõuannet puurida lauad veekihi alla, et klaasiviilud mitte hingata. Mul ei õnnestunud. Vees esinev murdumine segab puuri täpset positsioneerimist, kui see on kõrgel, ja silmamõõtur on valesti joondatud. Ja kui puur vette siseneb, hakkavad tekkima lained ja midagi pole näha. Kas peatatud külvik on vaja seadistada ja seejärel sisse lülitada? Selle tulemusena panin lihtsalt kausi veega selle kõrvale ja kastsin saepuru niisutamiseks ja maha pesemiseks perioodiliselt plaadi sellesse. Sel juhul on saepuru niiske ja see ei lenda ka augu kohale.

Ja veel üks lüüriline kõrvalepõige, väikeste kinnitusdetailide kohta.

Otsustasin seadmesse paigaldada DS-225 tüüpi toitepistiku, paneeli toitepesa. Selle kinnitamiseks oli vaja 2,5 mm keermega kruvisid ja mutreid. Sahvris polnud midagi sobivat ja siis tuli meelde, et teise osa jaoks on vaja 2mm kruvisid. See tähendab, et tasub oma kinnitusdetailide kollektsiooni täiendada, et järgmine kord ei peaks piirkonna teise otsa pähkli järele lendama. Ma pole ehituspoodides midagi väiksemat kui M3 kohanud, seega pean otsima spetsiaalseid.

Esimeseks suhteliselt mugavaks kaupluseks osutus kauplusekett
Sees jooksid mul silmad igasugusest kasulikust, aga halb õnn - kõige väiksemad kruvid olid ainult sama pikkusega M2,5, aga mutreid ja seibe neile pole! Muljet avaldas pähklite müük üksikult 2 rubla tk ja kõige ostetud ühe T-särgikotti valamine (erinevate suuruste jaoks väikseid kotte polnud). Jällegi on erineva suurusega varumine kallis.

Appi tuli veel üks kinnitusdetailide pood -
Siin on laos tõesti kõike, alates M1.6-st, erinevate pesade ja peadega, müüakse tüki ja kaalu kaupa ning eelmisest konkurendist suurusjärgu võrra madalama hinnaga. Peate lihtsalt minema otse Plehhanovi tänava laopoodi, muidu läksin kõigepealt Perovo metroojaama lähedal asuvasse poodi ja olin väga üllatunud väljakuulutatud hinna üle. Ja selgus, et neil on ainult roostevaba teras ja tavaliste kinnitusdetailide jaoks peate minema ülekandelattide tööstustsooni.

Plaanin osta +67 Lisa lemmikute hulka Mulle meeldis arvustus +76 +152

Mikropuurimiskiiruse regulaator PIC-kontrolleril
POTAPCHUK,
Rivne, Ukraina. E-post: [e-postiga kaitstud]

Raadioamatöörpraktikas on üks olulisemaid tööriistu trell. Mootoreid kasutatakse sageli miniatuursete elektritrellidena trükkplaatide puurimiseks. DC käepideme külge kinnitatud mikrolülitiga. Sellise mikroelektrilise puuri toide saadakse välisest toiteallikast. Enamasti elektrimootori kiirust ei reguleerita ja selleks, et “puur” paremini töötaks, antakse sellele kõrgendatud toitepinge. See toob kaasa elektrimootori enneaegse rikke. Seadme teine ​​nõrk lüli on toitenupp. See pole üllatav, arvestades, et elektrimootori käivitusvool võib ulatuda 3 A-ni või rohkem.

Need puudused ajendasid välja töötama kiirusregulaatori kaasaegsele mikrokontrollerile f.Microchip PIC16F627/628. Oluline omadus See mikrokontrolleri mudel on varustatud sisemise kahekiiruselise RC-ostsillaatoriga. Seda funktsiooni kasutades saate programmi täitmise ajal lülitada mikrokontrolleri taktsagedust 4 MHz-lt 32 kHz-le ja vastupidi. See kiip sisaldab ka sisseehitatud impulsi laiuse modulaatorit (PWM), mis võimaldab teil rakendada kogu kiiruse reguleerimise vahemikku. Impulsi töötsükkel (töötsükli pöördväärtus) varieerub vahemikus 0 kuni 1. See võimaldab teil ehitada peaaegu samale kiibile väga ergonoomilise seadme minimaalne kogus välised komponendid.


Tehnilised andmed

Toitepinge, V 8...25
Seadme voolutarve töörežiimis
(olenevalt elektrimootori võimsusest), A 0,5...3
Voolutarve ooterežiimis, mA< 1
PWM töösagedus, kHz 15
PWM töötsükkel 0,4...1
Elektrimootori pinge reguleerimise astmete arv 50
PWM-i töötsükli reguleerimise sujuvus, sammud/s 2

Seadme juhtnupud on ühendatud mikrokontrolleri tihvtidega 18, 7 ja 8 (joonis 1). Tuleb märkida, et töö ajal tuleb elektrimootorilt ja ühenduskaablilt üsna märkimisväärset elektromagnetkiirgust, mis võib põhjustada nuppude SB2 ja SB3 spontaanse töö. Selle vältimiseks kasutatakse blokeerimiskondensaatoreid C4 ja C5, mis mööduvad kõrgsageduslikud häired nupu klemmidel. Circuit R2-VD2 on lihtne parameetriline stabilisaator, mis vähendab SB1 nupust mikrokontrolleri digitaalsisendisse antavat pingetaset standardsete TTL signaalitasemeteni. Takisti R3 moodustub
pin 18 DD1 loogiline tase "O", kui SB1 nupp on vabastatud. HL1 LED näitab seadme töörežiime.
Mikrokontrolleri väljundist tulev PWM-signaal juhitakse läbi takisti R4 komposiittransistorile VT1, VT2. Transistori kollektorid on ühendatud elektrimootori ühe poolusega. Elektrimootor ühendatakse seadmega kolmejuhtmelise kaabli abil. Toiteallikaks kasutatakse kahte juhtmest, kolmandat kasutatakse Start-nupu signaali vastuvõtmiseks. Mootori toitepinge sõltub PWM-signaali töötsüklist. DA1 kiibil olev stabilisaator annab mikrokontrollerile toite. Kondensaatoreid C1 ja C2 kasutatakse nii toiteallikast kui ka elektrimootorist endast tulevate kõrgsageduslike häirete filtreerimiseks. Samadel eesmärkidel paigaldatakse kondensaator SZ, mis on ühendatud paralleelselt elektrimootori toitepostidega. Diood VD1 summutab iseinduktsiooni voolusid, mis töö ajal elektrimootori toiteahelasse ilmuvad.
Joonisel 2 esitatud algoritmskeem aitab teil seadme tööpõhimõtteid üksikasjalikult mõista. Selle kohaselt läbib mikrokontroller kohe pärast programmi käivitamist esialgse lähtestamise. Initsialiseerimise ajal konfigureeritakse mikrokontrolleri pordid, taimerid (loendurid) ja taktsagedus lülitatakse 4 MHz-lt 32 kHz-le. Pärast seda siseneb mikrokontroller tarkvaraahelasse, mis ootab nupu "Start" (SB1) vajutamist. See tsükkel töötleb ka taimer-loendur 2 ülevoolukatkestust, mida kasutatakse LED NL1 tööperioodide seadistamiseks.
Pärast SB1 nupu vajutamist lülitab mikrokontrolleri programm koheselt taktsageduse 32 kHz pealt 4 MHz peale ja initsialiseerib sisemise PWM-kontrolleri. Järgmisena loeb protsessor PWM-impulsi kestuse väärtuse, mis on varem salvestatud püsimälusse (EEPROM) ja kirjutab selle vastavasse teenindusregistrisse. Pärast kõigi nende toimingute tegemist käivitab mikrokontroller PWM-i ja satub taas programmitsüklisse, mis ootab nuppude SB2, SB3 vajutamist või nupu SB1 vabastamist.
Kui vajutate nuppu SB2 (SB3), suurendab (vähendab) mikrokontroller PWM-impulsi kestust ja muudab seeläbi elektrimootorile rakendatavat pinget. Pärast iga PWM-impulsi kestuse muutust salvestatakse praegune väärtus konstantina mikrokontrolleri püsimällu (EEPROM). See võimaldab iga kord, kui alustate tööd, mitte läbi viia "puuri" pöörlemiskiiruse esialgset reguleerimist. Kui programm tuvastab, et SB1 nupp vabastatakse, läheb mikrokontroller kohe PWM-kontrolleri komplekteerimise tarkvara harusse. Selles harus lülitatakse PWM välja (DD1 kontakt 9 on seatud madalale tasemele) ja mikrokontroller siseneb uuesti nupu "Start" vajutamise ootamise tsüklisse. Seejärel korratakse seadme töö algoritmi.
Mikrokontrolleri juhtimisprogramm on näidatud tabelis 1 ja püsivara kaart on näidatud tabelis 2. Selle peamised ülesanded on nuppude skaneerimine ja PWM-signaali juhtimine.
PWM-i perioodiregistri olemasolu tõttu selles mikrokontrolleris saate määrata peaaegu igasuguse sageduse. Selles seadmes valitakse praktilistel põhjustel PWM-i sageduseks umbes 15 kHz (täpne väärtus sõltub sisemise RC-ostsillaatori sagedusest). Täiteteguri (K3), nagu eespool mainitud, saab määrata vahemikus 0 kuni 1. Kuid praktika on näidanud, et enamik elektrimootoreid ei pöörle, kui K3 on väiksem kui 0,4. Sel põhjusel on selles programmis võimaliku K3 vahemik 0,4.. 1. Programm annab K3 diskreetse muutuse (50 sammu), kui vajutada vastavaid juhtnuppe.
Seadet juhitakse kolme nupuga SB1.. SB3. Nupu SB1 abil lülitate elektrimootori sisse ja välja (sel ajal kui seda nuppu vajutatakse, mootor pöörleb). Nupp SB2 suurendab kiirust ja SB3 vähendab seda. Iga kiiruse muutus salvestatakse mikrokontrolleri püsimällu. Seetõttu pöörleb mootor järgmisel toite sisselülitamisel eelnevalt seadistatud kiirusel.
Kui elektriline puur on välja lülitatud, on mikrokontroller energiasäästurežiimis (RC ostsillaatori sagedus on 37 kHz) ja voolutarve on alla 1 mA. Sellest režiimist annab märku LED HL1, mis vilgub ebaühtlaselt (3 s intervalliga). Pärast elektrimootori käivitamist nupuga SB1 kustub LED K3 vahetamine on võimalik ainult siis, kui elektrimootor on sisse lülitatud. Kõik SB2 ja SB3 nuppude vajutused kinnitatakse HL1 LED-i vilkumisega. Kui kiiruse reguleerimise ajal saavutatakse ülemine või alumine piir, lõpetab HL1 LED vilkumise, mis näitab, et regulaator on jõudnud reguleerimispiirini.
Seade on kokku pandud tahvlile, mille mõõtmed on 55x38 mm (joonis 3). Selle ühte otsa on puuritud kolm auku, millesse on joodetud elektrimootori toitekaabli juhtmed, mille pikkus võib olla 0,5... 1 m Nupp SB1, samuti blokeerimiskondensaator SZ ja impulssdiood VD1 on paigaldatud elektrimootori korpusele sobivasse kohta. Kirjeldatud seade kasutab PIC16F627 või PIC16F628 mikrokontrollerit. Ilma programmiparanduseta on võimalik asendada PIC16F627A, PIC16F628A või PIC16F648A vastu, mis on enamasti soodsamad. Peamine erinevus nende kolme mikrokontrolleri vahel on erinev programmimälu maht. Seega on PIC16F627/627A programmimälu maht 1024 sõna, PIC16F628/628A 2048 sõna ja PIC16F648A 4096 sõna. Lisaks on PIC16F648A-l rohkem RAM-i ja EEPROM-i (igaüks 256 baiti). Kasulik on paigaldada mikrokontrolleri kiip ise "pesa" plaadile. See võimaldab teil seadet uuendada ilma jootekolbi kasutamata, sest... Saate mikrokontrolleri igal ajal eemaldada ja programmeerida värskendatud tarkvaraga.
Kuna elektrimootori voolutarve võib olla päris suur, siis VT2 transistor on soovitav paigaldada vähemalt 40x40 mm mõõtmetega jahutusradiaatorile (kasutasin vana teleri skanneri jahutusradiaatorit). Transistor VT2 valitakse vastavalt kasutatava mootori võimsusele, näiteks KT817 võimsuse hajumine jahutusradiaatoriga on 20 W ja KT819 - 60 W. Minu seade kasutab DPM-25-03 tüüpi elektrimootorit.
Mõnel juhul on vajalik, et elektritrell võtaks käivitamisel sujuvalt kiirust üles (näiteks trükkplaatidesse aukude puurimisel ilma augustamata). Sellisteks puhkudeks on välja töötatud programmi teine ​​versioon (püsivarakaart – tabelis 3).

Tabelid leiate elektrooniliselt aadressil http://radio-mir.com

1. Pooljuhtide vastuvõtu- ja võimendusseadmed (R.M. Tereštšuk jt). - K., 1987.
2. http://www.microcontrollers.narod.ru

Erinevaid skeemilahendusi on suur hulk, kuid meie puhul analüüsime mitmeid PWM-i võimalusi LED heleduse juhtimine() PIC-mikrokontrolleril.

PIC10F320/322 on ideaalne võimalus erinevate valgustuse kontrollerite projekteerimiseks. Samal ajal saame üsna keeruka seadme, mille maksumus on madalaim ja ehitusele kulub minimaalselt aega. Vaatame mitut dimmeri valikut.

Esimene variant. Põhiline LED-heleduse juhtseade, milles LED-ide heledust muudetakse muutuva nupu pööramisega, samal ajal kui heledus muutub vahemikus 0 kuni 100%

Valgusdioodide heledus seatakse muutliku takisti R1 potentsiaali eemaldamisega. See muutuv pinge läheb sisendisse RA0, mis toimib analoogsisendina ja on ühendatud mikrokontrolleri ADC sisendiga AN2. PWM-viik RA1 juhib transistori V1 toitelülitit.

Võimalik on valida suvaline loogilise juhtimistasemega võimsustransistor, see tähendab, et need on need transistorid, mis 1...2 volti väravasse saades avavad oma kanali täielikult.

Näiteks IRF7805 transistoriga on võimalik juhtida kuni 13 amprit voolu täites vajalikke nõudeid ja mis tahes muudel tingimustel on garanteeritud kuni 5 amprit. Pistikut CON1 on vaja ainult mikrokontrolleri ahelasiseseks programmeerimiseks, vaja on ka takistusi R2 ja R5, see tähendab, et kui mikrokontroller on programmeeritud, siis kõiki neid raadioelemente ei pruugita paigaldada.

Takistus R4 ja BAV70 kaitsevad ülepinge ja toiteallika vale ühendamise eest. Kondensaatorid C1 ja C2 on keraamilised ja vähendavad impulssmüra ja tagavad stabilisaatori LM75L05 usaldusväärse töö.

Teine variant. Siin juhitakse ka LED-ide heledust muutuva takistiga ning sisse-välja lülitamine toimub nuppude abil.

Kolmas variant. Nagu näete, pole ahelas muutuvat takistit. Selles versioonis juhitakse LED-ide heledust eranditult kahe nupuga. Reguleerimine toimub astmeliselt, heledus muutub iga järgneva vajutusega.

Neljas variant. Sisuliselt sama, mis kolmas võimalus, kuid nuppu all hoides muutub LED-tuli sujuvalt.