I dag er entusiaster veldig interessert i å kontrollere børsteløs DC (BLDC
) Mange off-the-
hyllprodukter eksisterer for dette formålet.
For eksempel er det mange små BLDCS -kontrollere som fungerer veldig bra for RC -fly.
For de som vil se på kontrollen av BLDC mer dybde, er det også mange forskjellige mikrokontrollere og annen elektronisk maskinvare for industrielle brukere, som vanligvis har veldig god dokumentasjon.
Så langt har jeg ikke funnet noen omfattende beskrivelse av hvordan jeg bruker Arduino mikrokontroller for BLDC-kontroll.
Hvis du er interessert i å gjøre regenerativ bremsing, eller bruke en BLDC til kraftproduksjon, har jeg ikke funnet mange produkter som er egnet til bruk med små motorer, og jeg har heller ikke funnet ut om hvordan jeg skal kontrollere 3-fase generator.
Denne strukturen var opprinnelig i en historie om
beregning av sanntid, jeg fortsetter å gjøre det etter at kurset er over.
Ideen med prosjektet er å vise en proporsjonal modell av en hybridbil med lagring av svinghjul og regenerativ bremsing.
Motoren som brukes i prosjektet er en liten BLDC -er som er renset opp fra den skadede datamaskinens harddisk.
Denne håndboken beskriver hvordan du bruker Arduino mikrokontroller og Hall-
påvirker posisjonssensorer i kjøring og regenerative bremsemodus.
Vær oppmerksom på at å besøke Oscillisoft er veldig nyttig, om ikke viktig, for å fullføre dette prosjektet.
Hvis du ikke har tilgang til omfanget, har jeg lagt til noen forslag til hvordan du gjør det uten omfanget (trinn 5).
En ting som dette prosjektet ikke skal inkludere i noen faktisk motorkontroller, er noen sikkerhetsfunksjon som over gjeldende beskyttelse.
Det verste er faktisk at du brenner ut HD -motoren.
Imidlertid er det ikke vanskelig å implementere overstrømsbeskyttelse med nåværende maskinvare, og kanskje vil jeg gjøre det på et tidspunkt.
Hvis du prøver å kontrollere en større motor, kan du legge til gjeldende beskyttelse for å beskytte motoren og din egen sikkerhet.
Jeg vil prøve å bruke denne kontrolleren med en større motor som kan gjøre noe \ 'ekte \' arbeid, men jeg har ikke den rette ennå.
Jeg la merke til at eBay solgte en 86 W -bil for omtrent $ 40.
Ser ut som en god kandidat.
Det er også et RC -nettsted kalt \ 'Gobrushless \' som selger sett som samler deres egen BLDC.
Disse er ikke for dyre, og det er verdt opplevelsen å bygge en.
Vær oppmerksom på at det ikke er noen Hall -sensor for motoren på dette nettstedet. Whew!
Å skrive denne strukturen er en stor jobb.
Jeg håper du synes det er nyttig, vennligst kom med dine kommentarer og forslag.
Digital multimeter (DMM)-
Hvis din DMM har et frekvensmåler-oscilloskop (
det er bedre å ha minst 2 kanaler)
T8 Torx-driver (
du trenger en av dem for å åpne enhver harddisk).
Det er en god jernvarehandel.
Maskinverksted og rask prototype (
disse er veldig nyttige, men jeg tror dette prosjektet kan gjøres uten dem).
Materiale BLDC Motor Magnetic Ring fra datamaskinens harddisk (
halvparten av motoren)
fra en annen harddisk (3-6)
Det er en annen liten motor i sølvskiven på harddisken (DC børstet OK)
gummibånd eller (helst)
børstefri DLE Motor med en håndtak med en annen motor elektronisk brødplate Six Six Måned. Arduino duemilanove 120 Poteniometer100 K OHMST Micro Circuit L6234 Trefase motorisk driver IC TO 100 UF Kondensatorer én 10 NF kondensator En 220 NF Kondensator én 1 UF kondensator En 100 UF kondensator Tre mottar Dioder one
2
. Manual (
den kontrolleres ved hjelp av potensiell induksjon av rygg).
Spesifikasjoner og anskaffelsesinformasjon finner du i disse to koblingene: Hvis du skal gjøre dette prosjektet, foreslår jeg at du tar deg tid til å forstå grundig hvordan BLDC fungerer og kontrollerer.
Det er et stort antall referanser på nettet (
se nedenfor for noen forslag).
Imidlertid inkluderer jeg noen diagrammer og tabeller i prosjektet mitt som skal hjelpe deg å forstå.
Her er en liste over konseptene som jeg tror er viktigst for å forstå dette prosjektet: MOSFET-transistorer 3-fase halvbror 6-
-trinns reduksjon av
setningspulsbredde Modulering av fasemotor (PWM) Hall- Mikrochip
: Sensorer-general referanse
3
AVR443 Flying Star Hall -sensor, en god video om å rydde opp i harddiskmotoren, men forfatteren ser ut til å kjøre motoren som en springmotor og som en springmotor. En mer spesifikk referansewebside for BLDC på L6234 Motor Drive IC, inkludert datablad, applikasjonsnotater og kjøpsinformasjon.
Gratis prøve for PM børsteløs motorstasjon for hybrid elektriske kjøretøysapplikasjoner.
Dette er det eneste papiret jeg fant som beskriver rekkefølgen på den regenerative bremsefaseendringen.
Denne artikkelen, regenerativ bremsing i elektriske kjøretøyer er nyttig, jeg lånte noen få tall fra den, men jeg tror det feil beskriver hvordan regenerering fungerer.
Jeg gjorde dette prosjektet med resirkulert diskstasjonsmotor fordi det var lett å passere gjennom og jeg liker å bruke en liten lavspenningsmotor for å lære ledningen kontrollert av BLDC og ikke forårsake sikkerhetsproblemer.
I tillegg blir magnetkonfigurasjonen til hallsensoren veldig enkel ved å bruke magnetringen (rotoren)
fra det andre av disse motorene (se trinn 4).
Hvis du ikke vil gå til alt bryet med å installere og kalibrere hallsensoren (trinn 5-7),
vet jeg at det er i det minste noen CD/DVD-stasjonsmotorer som er innebygd i halsen.
For å gi litt sving treghet til motoren og gi dem litt belastning, la jeg 5 harddisker på motoren, limt forsiktig sammen med litt sterkt lim og limt på motoren (
dette gjorde svinghjulet i det originale prosjektet mitt).
Hvis du skal fjerne motoren fra harddisken, trenger du en T8 Torx -stasjon for å skru av huset (
vanligvis er det to skruer gjemt bak pinnen i Centeron -etiketten)
og indre skruer som holder motoren på plass.
Du må også fjerne hodeleseren (
Sound Circle Executive)
på denne måten du kan ta ut minneskiven for å nå motoren.
I tillegg trenger du en annen harddiskmotor for å fjerne rotoren fra den motoren (
det er en magnet inni).
For å ta motoren fra hverandre, tok jeg tak i rotoren (øverst)
en skrue av motoren og lirker den på statoren (nederst)
de to skrutrekkere er 180 grader fra hverandre.
Det er ikke lett å holde motoren på et stramt nok par uten deformasjon.
Det kan være lurt å bygge en tre-
blokk som brukes til dette formålet.
Jeg boret et hull i den magnetiske ringen på dreiebenken slik at den passer komfortabelt på toppen av motoren.
Hvis du ikke kan bruke dreiebenken, kan du fikse den omvendte rotoren på motoren med et sterkt lim.
Bildene 2 og 3 nedenfor viser interiøret til en av motorene jeg har demontert.
I første omgang er der (rotoren) 8 stolper (
magnet pakket inn i plast).
I andre omgang (statoren)
er det 12 spor (viklinger).
Hver av de tre motoriske fasene har 4 spor i serie.
Noen HD -motorer har tre kontakter i bunnen, den ene kontakten per fase, og den andre er midtkranen på motoren (
hvor tre trinn møtes).
I dette prosjektet kreves det ikke noe senterknapp, men det kan komme til nytte i sensorfri kontroll (
jeg håper å gi ut et notat om sensorfri kontroll en dag).
Hvis motoren din har fire kontakter, kan du identifisere fasen med OHmeter.
Motstanden mellom sentrumskranen og fasen er halvparten av motstanden mellom to faser.
Det meste av litteraturen om BLDC Motors omhandler de med en stigeformet bakpotensiell bølgeform, men harddiskmotoren ser ut til å ha et ryggpotensial som ser ut som en sinus (se nedenfor).
Så vidt jeg vet, fungerer det å kjøre en sinusbølgemotor med en sinusbølge PWM, selv om effektiviteten kan falle noe.
Som alle BLDC-motorene, består denne av trefaset halvtransistor
bro (
se 2. bilder nedenfor).
Jeg bruker IC laget av St Micro (L6234)
for broen, også kjent som motordriveren.
Den elektriske tilkoblingen til L6234 er vist i trinn 8.
Det tredje bildet nedenfor viser et skjematisk diagram av motordriveren og de tre motoriske fasene.
For at motoren skal operere med klokken, vil bryteren bli gjort i følgende rekkefølge (
første bokstaven er den øvre
den
transistor for disse motorene.
Derfor skjer rotasjonshastigheten til hver motor fire ganger.
De to sekvensene ser ut til å være de samme, men de er ikke de samme fordi for 6-
trinns sekvens, for CW, er gjeldende retning gjennom fasen en retning, og for CCW er den nåværende retningen motsatt.
Du kan se dette selv ved å påføre spenningen på batteriet eller strømforsyningen til en av motorfasen.
Hvis du påfører spenningen, vil motoren bevege seg litt i en retning og stoppe.
Hvis du raskt kan endre spenningen i fasen i en av de ovennevnte sekvensene, kan du rotere motoren manuelt.
Transistorer og mikrokontrollere fullfører alle disse bryterne veldig raskt, og bytter hundrevis av ganger per sekund når motoren kjører i høy hastighet.
Vær også oppmerksom på at hvis spenningen påføres begge faser, beveger motoren seg litt og deretter stopper.
Dette er fordi dreiemomentet er null.
Du kan se dette på det fjerde bildet nedenfor, som viser bakpotensialet til et par motoriske faser.
Dette er en sinusbølge.
Når bølgen går gjennom x-
akselen, er dreiemomentet som leveres av denne fasen null. I seks-
trinns BLDC-faseendringssekvens som aldri skjedde.
Før dreiemomentet på en bestemt fase blir lavt, blir kraften byttet til en annen fasekombinasjon.
Større BLDC -motorer produseres vanligvis av Hall -sensorer inne i motoren.
Hvis du har en slik motor, kan du hoppe over dette trinnet.
Jeg vet også at det er i det minste noen CD/DVD-stasjonsmotorer innebygd allerede-halssensor.
Når motoren roterer, brukes tre hallsensorer for posisjonsdeteksjon, så faseendringen utføres i riktig øyeblikk.
HD -motoren min kjører opp til 9000 o / min (150 Hz).
Siden det er 24 endringer per hjul, ved 9000 o / min, endres maskinen hver 280 mikrosekunder.
Arduino mikrokontroller fungerer ved 16 MHz, så hver klokkesyklus er 0. 06 mikrosekunder.
Jeg vet ikke hvor mange klokkesykluser som kreves for å utføre en reduksjon av setningen, men selv om det er nødvendig med 100 klokkesykluser, det vil si at det tar 5 mikrosekunder for hver reduksjon av setningen.
HD -motorer har ikke hallsensorer, så det er nødvendig å installere dem på utsiden av motoren.
Sensoren må fikses med hensyn til motorrotasjonen og utsettes for en serie stolper som er i samsvar med motorrotasjonen.
Løsningen min er å fjerne den magnetiske ringen fra den samme motoren og installere den opp ned på motoren som skal kontrolleres.
Jeg installerte deretter tre hallsensorer over denne magnetiske ringen, 30 grader bortsett fra hverandre på motorakselen (
120 graders elektrisk motorrotasjon).
Hallsensorholderen min består av en enkel holder bestående av tre aluminiumsdeler behandlet av meg og tre plastdeler laget på en rask prototype.
Hvis du ikke har disse verktøyene, skal det ikke være vanskelig å finne en annen måte å indikere posisjonen på.
Å lage parentes for hallsensorer vil være mer utfordrende.
Dette er en mulig måte å jobbe på: 1.
Finn et plastbrett i riktig størrelse, og du kan nøye epoksy hallsensoren. 2.
En mal er trykt på papiret, som har samme sirkel som magnetisk ringradius, og de tre merkene er 15 grader 3 fra hverandre.
Lim malen på disken, og bruk deretter malen som en guide for å plassere hallsensorens epoksy nøye på plass.
Nå som Hall -sensorer er installert på motoren, kobler du dem til kretsen som er vist nedenfor og test dem ved hjelp av et DMM eller oscilloskop for å sikre at utgangen blir høyere og lavere når motoren roterer.
Jeg kjører disse sensorene under 5 V ved å bruke Arduino 's 5 V -utgang.
Hallsensoren er høy eller lav i utgangen (1 eller 0)
det avhenger av om de føler Antarktis eller Arktis.
Siden de er 15 grader fra hverandre, roterer magnetene under dem og endrer polariteten hver 45 grader, vil disse tre sensorene aldri være høye eller lave samtidig.
Når motoren roterer, er sensorutgangen 6-
Trinnmønsteret vist i tabellen nedenfor.
Sensoren må være på linje med bevegelsen til motoren slik at en av de tre sensorene endres nøyaktig ved motorfasendringsposisjonen.
I dette tilfellet bør den stigende kanten av den første hallsensoren (H1)
være i samsvar med åpningen av C -kombinasjonen (høy) og B (lav).
Dette tilsvarer å slå på transistorer 3 og 5 i brokretsen.
Jeg justerer sensoren med magneten med et oscilloskop.
For å gjøre dette, må jeg bruke tre omfangskanaler.
Jeg roterer motoren ved å koble til beltet til den andre motoren og måle bakpotensialet mellom tofasekombinasjonene (
A og B, A og C)
dette er to sinus.
Som bølgene på bildet nedenfor,
så se på signalet til Hall Sensor 2 på kanal 3 i oscilloskopet.
Hallsensorholderen er snudd til den stigende kanten av hallsensoren er helt på linje med punktet der faseendringen skal utføres (se nedenfor).
Jeg innser nå at det bare er to kanaler som gjør samme kalibrering.
Hvis BEMF av fasekombinasjon B-
ved bruk av C, vil den stigende kanten av H2 være relatert til BC-kurve.
Årsaken til at faseendringen skal utføres her er å alltid holde motorens dreiemoment så høyt som mulig.
Bakpotensialet er proporsjonalt med dreiemomentet, og du vil merke at hver faseendring oppstår når ryggpotensialet passerer under neste trinnskurve.
Derfor består det faktiske dreiemomentet av den høyeste delen av hver fasekombinasjon.
Hvis du ikke kan få tilgang til omfanget, her er min ide om justering.
Dette er faktisk en interessant øvelse for alle som vil vite hvordan BLDC -motoren fungerer.
Hvis motorfasen A er koblet (positiv) og B (negativ)
til strømforsyningen og slå på strømforsyningen, vil motoren rotere litt og stoppe.
Deretter, hvis den negative effektledningen flyttes til C -fasen og kraften er slått på, vil motoren snu videre og stoppe.
Den neste delen av sekvensen vil være å flytte den positive ledningen til fase B osv.
Når du gjør dette, stopper motoren alltid der dreiemomentet er null, noe som tilsvarer ett sted der diagrammet passerer gjennom x-aksen på diagrammet.
Merk at nullpunktet for tredjefasekombinasjonen tilsvarer faseendringsposisjonen til de to første kombinasjonene.
Derfor er nullmomentposisjonen til B-
C-kombinasjonen der du vil plassere den stigende kanten av H2.
Merk denne posisjonen med fine merker eller skarpe kniver, og juster deretter Hall -sensorholderen ved å bruke DMM til utgangen av H2 er nøyaktig høyere på dette merket.
Selv om du avviker litt fra skoleplanen din, skal motoren fungere bra.
Den tre motoriske fasen vil motta strøm fra L6234 trefaset motordriver.
Jeg fant ut at dette er et godt produkt som kan stå tidens prøve.
Det er mange måter å steke komponentene dine ved et uhell når du bruker Power Electronics, jeg er ikke en elektroingeniør, og jeg vet ikke alltid hva som skjer.
I skoleprogrammet mitt gjorde vi vår egen 3-
fase halvbroutgang av 6 MOSFET-transistorer og 6 dioder.
Vi brukte dette på HIP4086 av den andre sjåføren Intersil, men vi har mange problemer med dette oppsettet.
Vi brente en haug med transistorer og chips.
Jeg kjører L6234 (
så motoren) på 12V.
L6234 har et uvanlig sett med innganger for å kontrollere en halvbro av 6 transistorer.
Ikke hver transistor har en inngang, men en ANIBLE (EN)
inngang for hvert av de tre trinnene, og deretter en annen inngang (in)
velger hvilken transistor i den åpne fasen (øvre eller nedre).
Slå for eksempel på transistor 1 (øvre) og 6 (nedre)
både EN1 og EN3 er høye (
EN2 lavt for å holde scenen lukket)
i1 høyt, in3 lavt.
Dette gjør fasekombinasjonen-C.
Mens L6234 -applikasjonsnotatet foreslo å bruke PWM som ble brukt til å kontrollere motorens hastighet på i PIN -pinnen, bestemte jeg meg for å gjøre det på en
-tapp dem
passerer
strømmen
.
gjennom Liten, så for større versjoner, se dokumentasjonen for L6234.
Merk: Mike Anton laget PCB for L6234, som vil (tror jeg)
erstatte dette sporet og spare deg for jobben med å samle det.
Se disse koblingene for spesifikasjoner og kjøpsinformasjon: Jeg har ikke funnet mye om 3-
Jeg vil beskrive min forståelse av hvordan det fungerer.
Vær oppmerksom på at jeg ikke er elektroingeniør, og vi vil sette pris på alle korreksjoner i forklaringen min.
Når du kjører, sender kontrollsystemet strømmen inn i tre motoriske faser på en måte som maksimerer dreiemomentet.
Ved regenerativ bremsing maksimerer kontrollsystemet også dreiemomentet, men denne gangen er det et negativt dreiemoment som får motoren til å bremse mens du sender strømmen tilbake til batteriet.
Den regenerative bremsemetoden jeg brukte kom fra et papir fra Oakridge National Laboratory i USA. S. Govt.
Et laboratorium som gjør mye forskning for bilmotorer.
Diagrammet nedenfor kommer fra et annet papir som hjelper til med å illustrere hvordan det fungerer (
jeg tror imidlertid at forklaringen som er gitt i denne andre artikkelen er delvis feil).
Husk at når motoren roterer, svinger BEMF -spenningen i motorfasen opp og ned.
I figuren viser det øyeblikket når BEMF er høyt i trinn B og lavt i scenen.
I dette tilfellet er det mulig for strømmen å strømme fra B til.
Kritisk for regenerativ bremsing, low-end transistorer slås raskt av og på (
tusenvis av PWM-brytere per sekund).
Når high-end transistorbryteren er slått av;
Når den lave transistoren er slått på, strømmer strømmen som vist på det første bildet.
Når det gjelder kraftelektronikk, er kretsen som en enhet som kalles en boost -omformer, der energi lagres i motorens fase (
Wikipedia har en god artikkel som forklarer hvordan Boost Converter fungerer).
Denne energien frigjøres når lavenden transistor er slått av, men med en høyere spenning strømmer strømmen øyeblikkelig gjennom \ 'anti-eksitasjon \' diode ved siden av hver transistor og går deretter tilbake til batteriet.
Dioden forhindrer strøm fra å strømme fra batteriet til motoren.
Samtidig samhandler strømmen i denne retningen (
i motsetning til kjøring)
med magnetringen for å produsere et negativt dreiemoment som bremser motoren ned.
Transistoren på lav side bruker en PWM-bryter, og pliktsyklusen til PWM kontrollerer mengden bremsing.
Når du kjører, bryter pendlingen av motoren fra den ene kombinasjonen til den neste etter hvert for å opprettholde høyest mulig dreiemoment.
Pendlingen av den regenerative bremsen er veldig lik fordi noen koblingsmodus får motoren til å produsere så mye negativt dreiemoment som mulig.
Hvis du ser videoen i det første trinnet, kan du se at den regenerative bremsen fungerer bra, men det fungerer ikke bra.
Jeg tror hovedårsaken er at harddiskmotoren jeg bruker er en veldig lav momentmotor, så den ikke produserer mye BEMF bortsett fra i høyeste hastighet.
I lavere hastighet er det veldig lite regenerativ bremsing (hvis noen).
Systemet mitt kjører også med en relativt lav spenning (12 V)
, siden hver bane gjennom anti-eksitasjonsdioden reduserer spenningen med flere volt, dette reduserer også effektiviteten kraftig.
Jeg bruker normale likeretterdioder, og jeg kan få bedre ytelse hvis jeg bruker noen spesielle dioder med lavere spenningsfall.
Nedenfor er en liste over innganger og utganger på Arduino.
Inkluder også diagrammer og bilder av styret mitt. 2-
Digital inngangshall 1
120 K Motstand av GND 3
Digital inngangshall 2
120 K Motstand av GND 4
Hall 3 Digital inngang-
120 K Motstand av GND 5
1 Digital utgang i serie med 400 ohm motstand 6
2 Digital Ohm i serie med 400 Ohm Resistor 7 3
3 Digital output 400 med serie med serie med serie med serie med serie med serie med serie med serie
med serie med serie med serie med serie i serie med serie med
serie med serie i serie 4 Serier med 400 ohm motstand 11-
EN 3 digitale utgang er i serie med en 400 ohm motstand, 100 k ohm potensiometer, med 5 V og GND koblet i begge ender og analog pinne 0 koblet i midten.
Dette potensiometeret brukes til å kontrollere motorhastighet og bremsevolum.
5 V Strømforsyning brukes også til å kjøre hallsensorer (se trinn 5).
Her er hele programmet jeg skrev for Ardjuino, som inkluderer kommentarer:/* bldc_congroller 3. 1.
1* 3 av David Glazer.
X-serien er ST L6234 3-
fase motorisk driver IC * Løpende diskstasjonsmotor med klokken * med regenerativ bremsing * Motorhastighet og bremsing kontrollert av et enkelt potensiometer * Motorposisjon med tre Hall-
Effect Sensor * Arduino mottar output fra 3 Hall-sensorer (pins 2,4
, 10, og konverterer sin kombinasjon til 6 forskjellige fase-hall-trinn på pins på pins pins 9,4
) EN 1,2, 3 * 3 gjør på henholdsvis pinner 5,6, 7 (i 1,2,3)
simuleringen i 0 til potensiometeret for å endre PWM-pliktsyklusen og endre * mellom kjøring og regenerativ
*
bremsing
Koble
* Allstate1
;
() {PinMode (2, input);
/Hall 1 pinmode (3, input);
/Hall 2 pinmode (4, input);
/L6234 Hall 3/Output of Pinmode Motor Driver (5, utgang);
/I 1 pinmode (6, utgang);
/I 2 pinmode (7, utgang);
/I 3 pinmode (9, utgang);
/En 1 pinmode (10, utgang);
/En 2 pinmode (11, utgang);
/En 3/serie. Begynn (9600);
Hvis du bruker en seriell tilkobling, vennligst ukommentar denne linjen.
Flush -kommandoen på slutten av programmet.
/* Sett PWM-frekvens på pinnene 9, 10 og 11/sett PWM til 32 kHz for pinner 9, 10/Først tøm alle tre pre-dividerbiter: int prescalerval = 0x07;
/Opprett en variabel kalt PrescalerVal og sett den til å være lik det binære tallet \ '00000111 \' Tccr1b & = ~ Prescaler
/og verdien i tccr0b med et binært antall \ '1111000 \' /nå sett den aktuelle pre-vinnende bit: int pre-encod bit 2 = 1;
/Sett prescalerval for å være lik det binære tallet \ '00000001 \' tccr1b | = PrescalerVal2;
/Eller verdi i TCCR0B med et binært antall \ '00000001 \' /Sett PWM til 32 kHz for pinne 3,11 (
dette programmet bruker bare pin 11)
/tøm alle tre pre-caler bits først: tccr2b & = ~ pre-kals;
/Og verdien i TCCR0B med et binært antall \ '11111000 \'/Sett nå den aktuelle pre-kodende biten: TCCR2B | = Pre-kodende bit 2;
/Eller verdien i TCCR0B med et binært antall \ '00000001 \'/Først tøm alle tre forhåndskodede biter:}
Hovedsløyfen til/prgrom void loop () {
/time = millis ();
Tid etter at utskriftsprogrammet starter. println (tid); // Seriell. trykk(\'\');
Gass = analograad (0);
/Gasspotensiometer MSPS = kart (
gass, 512.1023, 0.255);
/Kjøring er kartlagt til den øvre halvdelen av potensiometeret BSpeed = kart (
gass, 0,511 255, 0);
/Halvdel regenerativ bremsing i bunnen av potten/MSP-er ED = 100;
/For feilsøking HallState1 = DigitalRead (2);
/Les inngangsverdi fra Hall 1 2 = Digital Read (3);
/Les inngangsverdi fra Hall 2 3 = Digital Read (4);
Les inngangsverdi/numerisk skriv fra Hall 3 (8, Hallstate1);
/Når den tilsvarende sensoren er i høy effekt, vil LED slå på
opprinnelig brukt til å feilsøke DigitalWrite (9, HallState2);
// DigitalWrite (10, Hallstate3); HallVal = (HallState1)+ (2*HallState2)+ (4*Hallstate3);
/Beregn de binære verdiene til 3 Hall -sensorer/* -serier. print (\ 'h 1: \');
For feilsøking av seriell port. println (Hallstate1); Serie. print (\ 'h 2: \'); Serie. println (Hallstate2); Serie. print (\ 'h 3: \'); Serie. println (HallState3); Serie. println (\ '\');
*/// Seriell. Println (MSpeed); // Seriell. Println (HallVal); // Seriell. trykk(\'\');
/Monitor transistorutgang/forsinkelse (1000);
/* T1 = DigitalRead (2); // t1 = ~ t1;
T2 = DigitalRead (4); // t2 = ~ t2;
T3 = DigitalRead (5); // t3 = ~ t3; Serie. Print (T1); Serie. print (\ '\ t \'); Serie. trykk (T2); Serie. print (\ '\ t \'); Serie. trykk (T3); Serie. trykk(\'\'); Serie. trykk(\'\'); Serie. Print (DigitalRead (3)); Serie. print (\ '\ t \'); Serie. Print (DigitalRead (9)); Serie. print (\ '\ t \'); Serie. Println (DigitalRead (10)); Serie. trykk(\'\'); Serie. trykk(\'\'); // forsinkelse (500);
*/Kjøringsfaseendring/Hvert binært tall har et tilfelle som tilsvarer de forskjellige transistorene som er slått på/bit matematikk som brukes til å endre verdien på utgangen Arduino:/Portd inneholder utgangen til IN -pinnen på L6234 -driveren/Utgangen som brukes til å bestemme om den øvre transistoren eller den nedre transistoren/en pin for hver fase er kontrollert av den øvre transistoren eller
den nedre transistor Verdi kontrollert av potensiometer). if (gass> 511) {switch (HallVal) {
sak 3:/portd = 1111xxx00;
/Forventet utgang av pinne 0-
7 XXX refererer til Hall-inngang og Portd & = B00011111 skal ikke endres;
Portd | = B01100000;
/Analowrite (9, mspeed);
PWM på en fase (
high-end transistor) analogwrite (10,0);
Fase B -lukking (plikt = 0) AnalogWrite (11.255); // Fase C på -Duty = 100% (
low -end transistor) brudd;
Sak 1:/portd = b001xxx00;
/Forventet utgang av pinne 0-
7 Portd & = B00011111;
/Portd | = B00100000;
/Analowrite (9, mspeed);
PWM på en fase (
high-end transistor) analogwrite (10 255); // Fase B på (
lav-end transistor) analogwrite (11,0); // Fase B OFF (Duty = 0) Break;
Sak 5:/portd = b101xxx00;
/Forventet utgang av pinne 0-
7 Portd & = B00011111;
/Portd | = B10100000; analogwrite (9,0); analogwrite (10.255); analogwrite (11, mspeed); brudd;
Sak 4:/portd = b100xxx00;
/Forventet utgang av pinne 0-
7 Portd & = B00011111;
Portd | = BYM000;
/Analowrite (9 255); analogwrite (10,0); analogwrite (11, mspeed); brudd;
Sak 6:/Portd = B110xxx00;
/Forventet utgang av pinne 0-
7 Portd & = B00011111;
Portd B11. 000 =;
/Analowrite (9 255); analogwrite (10, mspeed); analogwrite (11,0); brudd;
Sak 2:/portd = b010xxx00;
/Forventet utgang av pinne 0-
7 Portd & = B00011111;
B0201700 Portd | =;
/Analowrite (9,0); analogwrite (10, mspeed); analogwrite (11.255); brudd; }}
/Regenerativ bremsefaseendring /portd (
utgang av i PIN på L6234)
Pinnene er alltid lave, så bare lave transistorer på hver fase brukes under regen. bremsing. annet {
/portd = b000xxx00;
/Forventet utgang av pinne 0-
7 Portd & = B00011111;
Portd | = BYM0000; // switch (HallVal) {
sak 3: analogisk skriving (9, bspeed); // analogwrite (9,0); analogwrite (10,0); analogwrite (11,0); brudd;
Sak 1: Analogi skriving (9, BSpeed); analogwrite (10,0); analogwrite (11,0); brudd;
Sak 5: analogisk skriving (9,0); analogwrite (10,0); analogwrite (11, bspeed); brudd;
Sak 4: analogisk skriving (9,0); analogwrite (10,0); analogwrite (11, bspeed); brudd;
Sak 6: analogisk skriving (9,0); analogwrite (10, bspeed); analogwrite (11,0); brudd;
Sak 2: analogisk skriving (9,0); analogwrite (10, bspeed); analogwrite (11,0); brudd; }}
/Tid = millis ();
Tid etter at utskriftsprogrammet starter. println (tid); // Seriell. trykk(\'\'); // Seriell. Flush ();
/Hvis du vil feilsøke ved hjelp av en seriell port, vennligst ukommentar
.
Faktisk anbefaler L6234 's applikasjonsnotater en enkel programmerbar port -array (
GAL16V8 laget av gitter -halvleder) for å gjøre denne jobben.
Jeg er ikke kjent med programmeringen av denne enheten, men kostnadene for IC er bare $ 2. 39 på Newark.
Andre lignende integrerte kretsløp er også veldig billige.
Et annet alternativ er å dele sammen de diskrete logikkportene.
Jeg kom med noen relativt enkle logiske sekvenser som kunne drive L6234 IC fra utgangen fra de tre hallsensorene.
Diagrammet for trinn A er vist nedenfor, og sannhetstabellen for alle tre trinn (
for at logikkretsen til B- og C -fasene, må ikke \ '-døren byttes til den andre siden av \' eller. Problemet med denne tilnærmingen er at det er nesten 20 tilkoblinger på hvert trinn, så
tar ganske mye.
det