I dag er entusiaster meget interesseret i at kontrollere børsteløs DC (BLDC)
sammenlignet med den traditionelle DC -motor, motorens ydelse er forbedret, energieffektivitet er også forbedret, men det er vanskeligere at bruge. Der findes mange off-the-
hylde-produkter til dette formål.
For eksempel er der en masse små BLDCS -controllere, der fungerer meget godt for RC -fly.
For dem, der ønsker at undersøge kontrollen af BLDC mere dybtgående, er der også mange forskellige mikrokontrollere og anden elektronisk hardware til industrielle brugere, som normalt har meget god dokumentation.
Indtil videre har jeg ikke fundet nogen omfattende beskrivelse af, hvordan man bruger Arduino-mikrokontroller til BLDC-kontrol.
Hvis du er interesseret i at lave regenerativ bremsning eller bruge en BLDC til kraftproduktion, har jeg ikke fundet mange produkter, der er egnede til brug med små motorer, og jeg har heller ikke fundet ud af, hvordan man kontrollerer 3-fase generator.
Denne struktur var oprindeligt i en historie om realtidsberegning
, jeg fortsætter med at gøre det, efter at kurset er forbi.
Idéen med projektet er at vise en proportional model af en hybridbil med opbevaring af svinghjulsenergi og regenerativ bremsning.
Motoren, der bruges i projektet, er en lille BLDCS renset fra den beskadigede computerharddisk.
Denne manual beskriver, hvordan man bruger Arduino-mikrokontrolleren og hallen
påvirker positionssensorer i kørsel og regenerative bremsemetoder.
Bemærk, at det at besøge Oscillisoft er meget nyttigt, hvis ikke vigtigt, til at afslutte dette projekt.
Hvis du ikke er i stand til at få adgang til omfanget, har jeg tilføjet nogle forslag til, hvordan du gør det uden omfanget (trin 5).
Én ting, som dette projekt ikke skal omfatte i nogen faktisk motorisk controller, er nogen sikkerhedsfunktion, såsom over den aktuelle beskyttelse.
Faktisk er det værste, at du brænder HD -motoren ud.
Imidlertid er det ikke vanskeligt at implementere overstrømsbeskyttelse med nuværende hardware, og måske vil jeg gøre det på et tidspunkt.
Hvis du prøver at kontrollere en større motor, skal du tilføje den aktuelle beskyttelse for at beskytte din motor og din egen sikkerhed.
Jeg vil prøve at bruge denne controller med en større motor, der kan udføre noget \ 'ægte \' arbejde, men jeg har ikke den rigtige endnu.
Jeg bemærkede, at eBay solgte en 86 W -bil for omkring $ 40.
Ser ud som en god kandidat.
Der er også et RC -websted kaldet \ 'Gobrushless \', der sælger sæt, der samler deres egen BLDC.
Disse er ikke for dyre, og det er værd at opleve at opbygge en.
Bemærk, at der ikke er nogen Hall -sensor til motoren på dette websted. Whew!
At skrive denne struktur er et stort job.
Jeg håber, du finder det nyttigt, bedes du give dine kommentarer og forslag.
Digital multimeter (DMM)-
Hvis din DMM har et frekvensmåler oscilloskop (
det er bedre at have mindst 2 kanaler)
T8 Torx-driver (
du har brug for en af dem for at åbne enhver harddisk).
Der er en god hardwarebutik.
Maskinværksted og hurtig prototype (
disse er meget nyttige, men jeg tror, at dette projekt kan udføres uden dem).
Materiale BLDC-motorisk magnetisk ring fra computerharddisken (
halvdelen af motoren)
fra en anden harddiskeveral (3-6)
på harddisk
Der er en anden lille motor i
sølvdisken Poteniometer100 K Ohmst Micro Circuit L6234 Tre-faset motordriver IC To 100 UF-kondensatorer En 10 NF-kondensator En 220 NF-kondensator En 1 UF-kondensator En 100 UF-kondensator Tre, der modtager dioder en 2.
Honeywell SS411A Bipolar Hall-5 Amp Fuse 1 FUSE Holder 3
Bemærk: Mike Anton Designet og solgt et produkt, der vil erstatte Power Electronics og Hall-sensoren kredsløb. Manual (
det styres ved hjælp af potentialet induktion tilbage).
Specifikationer og indkøbsoplysninger findes i disse to links: Hvis du vil gøre dette projekt, foreslår jeg, at du tager dig tid til at forstå, hvordan BLDC fungerer og kontrollerer.
Der er et stort antal referencer online (
se nedenfor for nogle forslag).
Jeg inkluderer dog nogle diagrammer og tabeller i mit projekt, der skal hjælpe dig med at forstå.
Her er en liste over de koncepter, som jeg synes er mest vigtige for at forstå dette projekt: MOSFET-transistorer 3-fase halvbro 6-
3-trins reduktion af sætning
Pulsbredde Modulering af fasemotor (PWM) Hall-
mikrochip AVR443: Sensorer-generel reference DC Motor Basic Principles for Digital Position Sensors
Kontrol af tre-fase børsteløs DC-motor Baseret på Melbrus-Motor DC
Motor Control Fase BLE Flying Star Hall -sensor, en god video af oprydning af harddiskmotoren, men forfatteren ser ud til at køre motoren som et trinmotor og som et springbræt. En mere specifik referencebesiden til BLDC på L6234 Motor Drive IC, inklusive datablade, applikationsnotater og købsoplysninger.
Gratis prøve til pm børsteløst motorisk drev til hybrid elektrisk køretøjsapplikation.
Dette er det eneste papir, jeg fandt, der beskriver rækkefølgen af den regenerative bremsefaseændring.
Denne artikel, regenerativ bremsning i elektriske køretøjer, er nyttigt, jeg lånte et par numre fra det, men jeg synes, det forkert beskriver, hvordan regenerering fungerer.
Jeg lavede dette projekt med genanvendt diskdrevmotor, fordi det var let at passere, og jeg kan godt lide at bruge en lille lavspændingsmotor til at lære den ledning, der kontrolleres af BLDC, og ikke forårsage nogen sikkerhedsproblemer.
Derudover bliver magnetkonfigurationen af hallensoren meget enkel ved at bruge den magnetiske ring (rotor)
fra den anden af disse motorer (se trin 4).
Hvis du ikke ønsker at gå til alt besværet med at installere og kalibrere hallensoren (trin 5-7),
ved jeg, at der er mindst nogle CD/DVD-drevmotorer, der er bygget i-hallsensor.
For at tilvejebringe en vis vending af inerti til motoren og give dem en lille belastning, satte jeg 5 harddiske på motoren, limet forsigtigt sammen med lidt stærk lim og limet på motoren (
dette gjorde svinghjulet i mit originale projekt).
Hvis du vil fjerne motoren fra harddisken, har du brug for et T8 Torx -drev for at skrue huset skrue (
normalt er der to skruer skjult bag pinden i midtmærket)
og interne skruer, der holder motoren på plads.
Du skal også fjerne hovedlæseren (
Sound Circle Executive)
på denne måde kan du tage hukommelsesdisken ud for at nå motoren.
Derudover har du brug for en anden samme harddiskmotor for at fjerne rotoren fra denne motor (
der er en magnet indeni).
For at tage motoren fra hinanden, greb jeg rotoren (øverst)
en skruestik af motoren og lurer den på statoren (bund)
De to skruetrækkere er 180 grader fra hinanden.
Det er ikke let at holde motoren på et stramt nok par uden deformation.
Det kan være en god ide at bygge en træ V-
blok, der bruges til dette formål.
Jeg borede et hul i den magnetiske ring på drejebænken, så den passer komfortabelt på toppen af motoren.
Hvis du ikke er i stand til at bruge drejebænken, kan du fikse den omvendte rotor på motoren med en stærk lim.
Billederne 2 og 3 nedenfor viser det indre af en af de motorer, jeg har adskilt.
I den første halvdel der (rotoren) er 8 poler (
magnet indpakket i plast).
I anden halvdel (statoren)
er der 12 slots (viklinger).
Hver af de tre motoriske faser har 4 slots i serie.
Nogle HD -motorer har tre kontakter i bunden, den ene kontakt pr. Fase, og den anden er motorens midterhaner (
hvor tre faser mødes).
I dette projekt er der ikke påkrævet noget centerhane, men det kan komme godt med i sensorfri kontrol (
jeg håber at frigive en note om sensorfri kontrol en dag).
Hvis din motor har fire kontakter, kan du identificere fasen med Ohmeter.
Modstanden mellem midterhanen og fasen er halvdelen af modstanden mellem to faser.
Det meste af litteraturen om BLDC Motors omhandler dem med en stigeformet bagpotentiel bølgeform, men harddiskmotoren ser ud til at have et rygpotentiale, der ligner en sinus (se nedenfor).
Så vidt jeg ved, fungerer det at køre en sinusbølgemotor med en sinusbølge PWM fint, selvom effektiviteten kan falde noget.
Som alle BLDC-motorer består denne af trefasede halvtransistorbro
(
se 2. fotos nedenfor).
Jeg bruger IC lavet af ST Micro (L6234)
til broen, også kendt som den motoriske driver.
Den elektriske forbindelse af L6234 er vist i trin 8.
Det tredje foto nedenfor viser et skematisk diagram over den motoriske driver og de tre motoriske faser.
For at motoren skal fungere med uret, foretages kontakten i følgende rækkefølge (
det første bogstav er den øvre transistor, og det andet bogstav er den nedre transistor)
: Trin 1 2 3 4 5 6 Med uret: CB, AB, AC, BC, BA, CA Counter med uret: BC, BA, CA, CB, AB, AC. Disse 6- TRIN-SECENCE KRAV BESKRIVELSE
A 90 for disse motorer.
Derfor forekommer rotationshastigheden for hver motor fire gange.
De to sekvenser ser ud til at være de samme, men de er ikke de samme, fordi
den aktuelle retning for CCW for 6-trins-sekvens er en retning, og for CCW er den aktuelle retning modsat.
Du kan selv se dette ved at anvende spændingen på batteriet eller strømforsyningen på enten motorfase.
Hvis du anvender spændingen, bevæger motoren sig lidt i en retning og stopper.
Hvis du hurtigt kan ændre spændingen på fasen i en af ovenstående sekvenser, kan du rotere motoren manuelt.
Transistorer og mikrokontrollere afslutter alle disse switches meget hurtigt og skifter hundreder af gange i sekundet, når motoren kører i høj hastighed.
Bemærk også, at hvis spændingen påføres begge faser, bevæger motoren sig lidt og stopper derefter.
Dette skyldes, at drejningsmomentet er nul.
Du kan se dette på det fjerde foto nedenfor, der viser bagpotentialet i et par motoriske faser.
Dette er en sinusbølge.
Når bølgen går gennem X-
skaftet, er det drejningsmoment, der leveres af denne fase, nul. I den seks
-trins skiftesekvens, der aldrig skete.
Før drejningsmomentet på en bestemt fase bliver lav, skiftes strømmen til en anden fasekombination.
Større BLDC -motorer fremstilles normalt af hallsensorer inde i motoren.
Hvis du har en sådan motor, kan du springe dette trin over.
Jeg ved også, at der er mindst nogle CD/DVD-drevmotorer, der er bygget i allerede-hallsensor.
Når motoren roterer, bruges tre hallsensorer til positionsdetektion, så faseændringen udføres på det rigtige tidspunkt.
Min HD -motor løber op til 9000 o / min (150 Hz).
Da der er 24 ændringer pr. Hjul, ved 9000 o / min, ændres maskinen hver 280 mikrosekunder.
Arduino-mikrokontrolleren fungerer ved 16 MHz, så hver urcyklus er 0. 06 mikrosekunder.
Jeg ved ikke, hvor mange urcyklusser der kræves for at udføre en reduktion af sætningen, men selv hvis der kræves 100 urcyklusser, tager det 5 mikrosekunder for hver reduktion af sætningen.
HD -motorer har ikke hallsensorer, så det er nødvendigt at installere dem på ydersiden af motoren.
Sensoren skal fastgøres med hensyn til den motoriske rotation og udsættes for en række poler, der er i overensstemmelse med den motoriske rotation.
Min løsning er at fjerne den magnetiske ring fra den samme motor og installere den på hovedet på motoren, der skal kontrolleres.
Derefter installerede jeg tre hallsensorer over denne magnetiske ring, 30 grader bortset fra hinanden på motorakslen (
120 graders elektrisk motorrotation).
Min hallsensorholder består af en simpel holder bestående af tre aluminiumdele, der er behandlet af mig og tre plastdele lavet på en hurtig prototype.
Hvis du ikke har disse værktøjer, skal det ikke være vanskeligt at finde en anden måde at indikere positionen på.
Oprettelse af parenteser til hallsensorer vil være mere udfordrende.
Dette er en mulig måde at arbejde på: 1.
Find en plastikbakke af den rigtige størrelse, og du kan omhyggeligt epoxy hallensoren. 2.
en skabelon udskrives på papiret, der har den samme cirkel som den magnetiske ringradius, og de tre mærker er 15 grader 3 fra hinanden.
Lim skabelonen til disken, og brug derefter skabelonen som en guide til omhyggeligt at placere Hall Sensor Epoxy på plads.
Nu hvor hallsensorer er installeret på motoren, skal du forbinde dem til kredsløbet vist nedenfor og teste dem ved hjælp af et DMM eller oscilloskop for at sikre, at output bliver højere og lavere, når motoren roterer.
Jeg kører disse sensorer under 5 V ved hjælp af Arduino 's 5 V output.
Hallensoren er høj eller lav i output (1 eller 0),
det afhænger af, om de føler Antarktis eller Arktis.
Da de er 15 grader fra hinanden, roterer magneterne under dem og ændrer polariteten hver 45 grader, vil disse tre sensorer aldrig være høje eller lave på samme tid.
Når motoren roterer, er sensorudgangen 6-
trinmønsteret vist i følgende tabel.
Sensoren skal være på linje med motorens bevægelse, så en af de tre sensorer ændres nøjagtigt i motorfaseændringspositionen.
I dette tilfælde skal den stigende kant af den første hallsensor (H1)
være i overensstemmelse med åbningen af C -kombinationen (høj) og B (lav).
Dette svarer til at tænde for transistorer 3 og 5 i broområdet.
Jeg justerer sensoren med magneten med et oscilloskop.
For at gøre dette skal jeg bruge tre kanaler med omfang.
Jeg roterer motoren ved at forbinde til bæltet på den anden motor og måler ryggenes potentiale mellem to -fasekombinationer (
A og B, A og C)
Dette er to sinus.
Ligesom bølgerne på billedet herunder,
så se på signalet fra Hall Sensor 2 på kanal 3 i oscilloskopet.
Hallsensorholderen drejes, indtil den stigende kant af hallensoren er fuldt på linje med det punkt, hvor faseændringen skal udføres (se nedenfor).
Jeg er nu klar over, at der kun er to kanaler til at gøre den samme kalibrering.
Hvis BEMF for fasekombination B-
ved hjælp af C, vil den stigende kant af H2 være relateret til BC-kurve.
Årsagen til, at faseændringen skal udføres her, er altid at holde motormomentet så højt som muligt.
Bagsiden er proportionalt med drejningsmomentet, og du vil bemærke, at hver faseændring opstår, når bagpotentialet passerer under den næste trinkurve.
Derfor består det faktiske drejningsmoment af den højeste del af hver fasekombination.
Hvis du ikke kan få adgang til omfanget, er her min idé om tilpasning.
Dette er faktisk en interessant øvelse for alle, der vil vide, hvordan BLDC -motoren fungerer.
Hvis motorfase A er tilsluttet (positiv) og B (negativ)
til strømforsyningen og tænd for strømforsyningen, roterer motoren lidt og stopper.
Derefter, hvis den negative effektleder flyttes til C -fasen, og strømmen er tændt, vil motoren vende videre og stoppe.
Den næste del af sekvensen vil være at flytte den positive føring til fase B osv.
Når du gør dette, stopper motoren altid, hvor drejningsmomentet er nul, hvilket svarer til et sted, hvor diagrammet passerer gennem x-aksen på diagrammet.
Bemærk, at nulpunktet i den tredje fase-kombination svarer til faseændringspositionen for de to første kombinationer.
Derfor er den nul drejningsmomentposition for B-
C-kombinationen, hvor du vil placere den stigende kant af H2.
Marker denne position med fine mærker eller skarpe klinger, og juster derefter hallensorholderen ved hjælp af DMM, indtil output fra H2 er nøjagtigt højere på dette mærke.
Selv hvis du afviger lidt fra din skoleplan, skal motoren fungere godt.
Den tre motorfase modtager strøm fra L6234-trefaset motordriver.
Jeg fandt, at dette er et godt produkt, der kan stå tidens prøve.
Der er mange måder at ved et uheld til at stege dine komponenter, når du bruger kraftelektronik, jeg er ikke en elektrisk ingeniør, og jeg ved ikke altid, hvad der foregår.
I mit skoleprogram gjorde vi vores egen 3-
fase halvbro-output på 6 MOSFET-transistorer og 6 dioder.
Vi brugte dette på HIP4086 af den anden chauffør Intersil, men vi har en masse problemer med denne opsætning,
vi brændte en masse transistorer og chips.
Jeg kører L6234 (
så motoren) ved 12V.
L6234 har et usædvanligt sæt input til at kontrollere en halvbro på 6 transistorer.
Ikke alle transistorer har et input, men et aktiverende (EN)
input for hvert af de tre trin, og derefter
vælger et andet input (IN), hvilken transistor i den åbne fase (øvre eller nedre).
Tænd for eksempel transistor 1 (øvre) og 6 (nedre)
både EN1 og EN3 er høje (
EN2 lav for at holde scenen lukket)
i1 høj, in3 lav.
Dette gør fase-kombination-C.
While the L6234 application note suggested applying the PWM used to control the speed of the motor to the IN pin, I decided to do it on the EN pin because, at that time, I think it would be \'strange\' to turn on the upper and lower transistors of the phase alternately \'.
In fact, it seems that there is nothing wrong with turning on the low transistors of both phases at the same time, because they have the same potential, so neither of De
passerer
strømmen
.
gennem Lidt lille, så for større versioner, se dokumentationen til L6234.
Bemærk: Mike Anton lavede PCB til L6234, som (jeg tror)
erstatter dette spor og redder dig jobbet med at samle det.
Se disse links for specifikationer og købsoplysninger: Jeg har ikke fundet meget omkring 3-
Jeg vil beskrive min forståelse af, hvordan det fungerer.
Bemærk, at jeg ikke er en elektrisk ingeniør, og vi vil sætte pris på enhver korrektion af min forklaring.
Ved kørsel sender kontrolsystemet strømmen i tre motoriske faser på en måde, der maksimerer drejningsmomentet.
Ved regenerativ bremsning maksimerer kontrolsystemet også drejningsmomentet, men denne gang er det et negativt drejningsmoment, der får motoren til at bremse, mens motoren sendes tilbage til batteriet.
Den regenerative bremsemetode, jeg brugte, kom fra et papir fra Oakridge National Laboratory i USA. S. Govt.
Et laboratorium, der forsker meget for bilmotorer.
Diagrammet nedenfor kommer fra et andet papir, der hjælper med at illustrere, hvordan det fungerer (
dog synes jeg, at forklaringen, der er givet i dette andet papir, er delvist forkert).
Husk, at når motoren roterer, svinger BEMF -spændingen i motorfasen op og ned.
I figuren viser det det øjeblik, hvor BEMF er høj i trin B og lav i scenen.
I dette tilfælde er det muligt for strømmen at flyde fra B til.
Kritisk for regenerativ bremsning tænder og slukker low-end transistorer hurtigt (
tusinder af PWM-afbrydere pr. Sekund).
Når high-end transistorkontakten er slukket;
Når den lave transistor er tændt, flyder strømmen som vist på det første billede.
Med hensyn til kraftelektronik er kredsløbet som en enhed kaldet en boost -konverter, hvor energi opbevares i motorens fase (
Wikipedia har en god artikel, der forklarer, hvordan boost -konverteren fungerer).
Denne energi frigøres, når den low-end transistor er slukket, men ved en højere spænding flyder den nuværende øjeblikkeligt gennem \ 'anti-excitation \' dioden ved siden af hver transistor og vender derefter tilbage til batteriet.
Dioden forhindrer strøm i at strømme fra batteriet til motoren.
På samme tid interagerer strømmen i denne retning (
i modsætning til kørsel)
med magnetringen for at producere et negativt drejningsmoment, der bremser motoren ned.
Transistoren med lav side bruger en PWM-switch, og PWM's driftscyklus kontrollerer mængden af bremsning.
Når du kører, skifter pendlingen af motoren fra den ene kombination til den næste med tiden for at opretholde det højest mulige drejningsmoment.
Pendlingen af den regenerative bremse er meget ens, fordi nogle switching -tilstand får motoren til at producere så meget negativt drejningsmoment som muligt.
Hvis du ser videoen i det første trin, kan du se, at den regenerative bremse fungerer fint, men det fungerer ikke godt.
Jeg tror, at hovedårsagen er, at harddiskmotoren, jeg bruger, er en meget lav drejningsmomentmotor, så det producerer ikke meget BEMF undtagen med den højeste hastighed.
Ved en lavere hastighed er der meget lidt regenerativ bremsning (hvis nogen).
Mit system kører også med en relativt lav spænding (12 V)
desuden, da hver sti gennem anti-excitationsdioden reducerer spændingen med flere volt, reducerer dette også effektiviteten.
Jeg bruger normale ensretterdioder, og jeg får muligvis bedre ydelse, hvis jeg bruger nogle specielle dioder med lavere spændingsfald.
Nedenfor er en liste over input og output på Arduino.
Medtag også diagrammer og fotos af mit bord. 2-
Digital entry-Hall 1
120 K Modstand af GND 3
Digital Entry Hall 2
120 K Modstand af GND 4
Hall 3 Digital input-
120 K Modstand af GND 5
1 Digital udgang i serie med 400 ohm modstand 6
2 digitale udgang i serien med 400 OHM modstand 7 3 Digital udgang i serie med 400 ohm modstand 9-
400 OHM Resistor 10- Digital Output Output Output
Digitale udgang af en 1 i serien med
Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Output Out Putput Output Out Put Putput 2 I serie med 400 ohm modstand 11-
EN 3 digitale output er i serie med en 400 ohm modstand, 100 K ohm potentiometer, med 5 V og GND forbundet i begge ender og analog pin 0 forbundet i midten.
Dette potentiometer bruges til at kontrollere motorens hastighed og bremsevolumen.
5 V Strømforsyning bruges også til at køre Hall -sensorer (se trin 5).
Her er hele programmet, jeg skrev til Ardjuino, som inkluderer kommentarer:/* BLDC_CONGROLLER 3. 1.
1* 3 af David Glazer.
X-serien er ST L6234 3-
faset motordriver ic * Running Disk Drive Motor med uret * med regenerativ bremsning * Motorhastighed og bremsekontrolleret af et enkelt potentiometer * Motorposition med tre hall-
effekt sensor * Arduino modtager output fra 3 Hall-sensorer (PINS 2,3,4) * og konverter deres kombination til 6 forskellige fase-Changing-trin på Pins 9, 10, 11 ved 32
*
khz til EN 1,2, 3 * 3 gør på henholdsvis pins 5,6, 7 (i 1,2,3)
simuleringen i 0 til potentiometeret for at ændre PWM-driftscyklus og ændring * mellem kørsel og regenerativ
*
bremsning
Tilslut
* Allstate1
;
() {pinMode (2, input);
/Hall 1 PinMode (3, input);
/Hall 2 pinmode (4, input);
/L6234 Hall 3/Output af PinMode Motor Driver (5, Output);
/I 1 pinMode (6, output);
/I 2 pinmode (7, output);
/I 3 pinmode (9, output);
/Da 1 pinMode (10, output);
/Da 2 pinMode (11, output);
/Da 3/Serial. begynde (9600);
Hvis du bruger en seriel forbindelse, skal du fjerne denne linje.
Flush -kommandoen i slutningen af programmet.
/* Sæt PWM-frekvens på stifter 9, 10 og 11/sæt PWM til 32 kHz for stifter 9, 10/første ryd alle tre før-Divider-bits: int Prescaleval = 0x07;
/Opret en variabel kaldet Prescaleval og indstil den til at svare til det binære nummer \ '00000111 \' TCCR1B & = ~ PRESCALER
/OG VALUE I TCCR0B MED EN BINARY ANTAL ON \ '11111000 \' /Sæt nu den passende forindkodningsbit: int pre-Accoding bit 2 = 1;
/Set Prescaleval for at svare til det binære nummer \ '00000001 \' TCCR1B | = PresCaleVal2;
/Eller værdi i TCCR0B med et binært antal \ '00000001 \' /sæt PWM til 32 kHz til PIN 3,11 (
dette program bruger kun PIN 11)
/Ryd alle tre før-caleriske bits først: TCCR2B & = ~ Pre-Calal;
/Og værdien i TCCR0B med et binært antal \ '1111000 \'/Indstil nu den passende forkodningsbit: TCCR2B | = For-kodende bit 2;
/Eller værdien i TCCR0B med et binært antal \ '00000001 \'/første ryd alle tre forudkodede bits:}
Hovedsløjfen af/prgrom void loop () {
/tid = millis ();
Tid efter trykprogrammet starter. println (tid); // Serial. trykke(\'\');
Throttle = AnaloGread (0);
/Throttle potentiometer MSPS = kort (
gashåndtering, 512.1023, 0,255);
/Kørsel er kortlagt til den øverste halvdel af potentiometeret bspeed = kort (
gashåndtering, 0,511,255, 0);
/Halvdelen regenerativ bremsning i bunden af gryden/MSPS ED = 100;
/Til debugging hallstate1 = digitalread (2);
/Læs inputværdi fra Hall 1 2 = Digital Read (3);
/Læse inputværdi fra Hall 2 3 = digital læsning (4);
Læs inputværdien/numerisk skriv fra Hall 3 (8, Hallstate1);
/Når den tilsvarende sensor er i høj effekt, tændes LED
oprindeligt brugt til at fejlsøge DigitalWrite (9, Hallstate2);
// DigitalWrite (10, HallState3); Hallval = (hallstate1)+ (2*hallstate2)+ (4*hallstate3);
/Beregn de binære værdier for 3 Hall -sensorer/* -serien. print (\ 'H 1: \');
Til fejlsøgning af seriel port. println (hallstate1); Seriel. print (\ 'H 2: \'); Seriel. println (hallstate2); Seriel. print (\ 'H 3: \'); Seriel. println (hallstate3); Seriel. println (\ '\');
*/// Serial. println (mspeed); // Serial. println (hallval); // Serial. trykke(\'\');
/Monitor transistor output/forsinkelse (1000);
/* T1 = digitalread (2); // t1 = ~ t1;
T2 = DigitalRead (4); // T2 = ~ T2;
T3 = DigitalRead (5); // t3 = ~ t3; Seriel. print (T1); Seriel. print (\ '\ t \'); Seriel. print (T2); Seriel. print (\ '\ t \'); Seriel. print (T3); Seriel. trykke(\'\'); Seriel. trykke(\'\'); Seriel. Print (DigitalRead (3)); Seriel. print (\ '\ t \'); Seriel. Print (DigitalRead (9)); Seriel. print (\ '\ t \'); Seriel. println (DigitalRead (10)); Seriel. trykke(\'\'); Seriel. trykke(\'\'); // forsinkelse (500);
*/Kørselsfaseændring/Hvert binært antal har en sag, der svarer til de forskellige transistorer, der er tændt for/bit matematik, der bruges til at ændre værdien af output arduino:/portd indeholder output af in pin på L6234 -driveren/Outputet, der bruges til at bestemme, om den øvre transistor eller den nedre transistor/en pin for hver fase kontrolleres af arduino -kommandoen analogy, sætter pligtcyklussen af pwm
( eller gashåndtaget kontrolleret af potentiometer). if (throttle> 511) {switch (hallval) {sag
3:/portd = 1111xxx00;
/Forventet output af pin 0-
7 XXX henviser til Hall-input, og Portd & = B00011111 bør ikke ændres;
Portd | = B01100000;
/Analowrite (9, mspeed);
PWM på en fase (
avanceret transistor) analogwrite (10,0);
Fase B -lukning (told = 0) AnalogWrite (11.255); // fase C på -duty = 100% (
low -end transistor) pause;
Sag 1:/portd = B001XXX00;
/Forventet output af pin 0-
7 Portd & = B00011111;
/Portd | = B00100000;
/Analowrite (9, mspeed);
PWM på en fase (
avanceret transistor) analogwrite (10.255); // fase B på (
low-end transistor) analogWrite (11,0); // fase B off (told = 0) pause;
Sag 5:/portd = b101xxx00;
/Forventet output af pin 0-
7 Portd & = B00011111;
/Portd | = B10100000; AnalogWrite (9,0); AnalogWrite (10.255); AnalogWrite (11, mspeed); pause;
Sag 4:/portd = b100xxx00;
/Forventet output af pin 0-
7 Portd & = B00011111;
Portd | = BYM000;
/Analowrite (9.255); AnalogWrite (10,0); AnalogWrite (11, mspeed); pause;
Sag 6:/portd = b110xxx00;
/Forventet output af pin 0-
7 Portd & = B00011111;
Portd B11. 000 =;
/Analowrite (9.255); AnalogWrite (10, mspeed); AnalogWrite (11,0); pause;
Sag 2:/portd = B010XXX00;
/Forventet output af pin 0-
7 Portd & = B00011111;
B0201700 PORTD | =;
/Analowrite (9,0); AnalogWrite (10, mspeed); AnalogWrite (11.255); pause; }}
/Regenerativ bremsefaseændring /portd (
output af in pin på L6234)
Stifterne er altid lave, så kun lave transistorer på hver fase bruges under regen. bremsning. andet {
/portd = b000xxx00;
/Forventet output af pin 0-
7 Portd & = B00011111;
Portd | = BYM0000; // switch (hallval) {
sag 3: analogi skrivning (9, bspeed); // AnalogWrite (9,0); AnalogWrite (10,0); AnalogWrite (11,0); pause;
Sag 1: Analogi -skrivning (9, BSpeed); AnalogWrite (10,0); AnalogWrite (11,0); pause;
Sag 5: Analogi -skrivning (9,0); AnalogWrite (10,0); AnalogWrite (11, BSpeed); pause;
Sag 4: Analogi -skrivning (9,0); AnalogWrite (10,0); AnalogWrite (11, BSpeed); pause;
Sag 6: Analogi -skrivning (9,0); AnalogWrite (10, BSpeed); AnalogWrite (11,0); pause;
Sag 2: Analogi -skrivning (9,0); AnalogWrite (10, BSpeed); AnalogWrite (11,0); pause; }}
/Tid = millis ();
Tid efter trykprogrammet starter. println (tid); // Serial. trykke(\'\'); // Serial. flush ();
/Hvis du vil fejlsøge ved hjælp af en seriel port, skal du ikke komme i stykker}
Jeg tror, at den operation, som Arduino gør i dette projekt, er så enkel, at det ser ud til at være affald at udføre denne opgave med en mikroprocessor.
Faktisk anbefaler L6234 's applikationsnotater en simpel programmerbar gatearray (
GAL16V8 lavet af Gitter Semiconductor) til at udføre dette job.
Jeg er ikke bekendt med programmeringen af denne enhed, men omkostningerne ved IC er kun $ 2. 39 på Newark.
Andre lignende integrerede kredsløb er også meget billige.
En anden mulighed er at dele de diskrete logikporte sammen.
Jeg kom med nogle relativt enkle logiske sekvenser, der kunne drive L6234 IC fra output fra de tre hallsensorer.
Diagrammet for trin A er vist nedenfor, og sandhedstabellen for alle tre faser (
for at være logikkredsløbet i B- og C -faserne, skal \ ikke \ '-døren skiftes til den anden side af \' eller.
Problemet med denne tilgang er, at der er næsten 20 forbindelser på hvert trin, så det tager en smule arbejde at sætte det sammen.
Det er bedst at programmere det som en programmeringslogikport.