Tegenwoordig zijn enthousiastelingen zeer geïnteresseerd in het beheersen van borstelloze DC (BLDC)
vergeleken met de traditionele DC -motor, de prestaties van de motor zijn verbeterd, de energie -efficiëntie is ook verbeterd, maar het is moeilijker te gebruiken. Voor dit doel bestaan er veel off-the-
plankproducten.
Er zijn bijvoorbeeld veel kleine BLDCS -controllers die heel goed werken voor RC -vliegtuigen.
Voor degenen die de BLDC in meer diepte willen besturen, zijn er ook veel verschillende microcontrollers en andere elektronische hardware voor industriële gebruikers, die meestal een zeer goede documentatie hebben.
Tot nu toe heb ik geen uitgebreide beschrijving gevonden van het gebruik van Arduino Micro-Controller voor BLDC-besturingselement.
Ook als u geïnteresseerd bent in regeneratief remmen, of een BLDC gebruiken voor stroomopwekking, heb ik niet veel producten gevonden die geschikt zijn voor gebruik met kleine motoren, noch heb ik ontdekt hoe ik 3-fase generator kunt besturen.
Deze structuur was oorspronkelijk in een verhaal over realtime
berekening, ik blijf dit doen nadat de cursus voorbij is.
Het idee van het project is om een proportioneel model van een hybride auto te tonen met vliegwiel -energieopslag en regeneratief remmen.
De motor die in het project wordt gebruikt, is een kleine BLDC's die zijn opgeruimd van de harde schijf van de beschadigde computer.
Deze handleiding beschrijft hoe u de Arduino-microcontroller en Hall- beïnvloedt,
beïnvloedt positiesensoren bij het rijden en regeneratieve remmodi.
Houd er rekening mee dat het bezoeken van Oscillisoft zeer nuttig is, zo niet essentieel, om dit project te voltooien.
Als u geen toegang hebt tot de scope, heb ik enkele suggesties toegevoegd om het te doen zonder de reikwijdte (stap 5).
Een ding dat dit project niet in een echte motorcontroller moet opnemen, is een veiligheidsfunctie zoals over de huidige bescherming.
Het ergste is zelfs dat je de HD -motor opbrandt.
Het implementeren van overstroombeveiliging met de huidige hardware is echter niet moeilijk, en misschien zal ik dat op een gegeven moment doen.
Als u probeert een grotere motor te besturen, voeg dan de huidige bescherming toe om uw motor en uw eigen veiligheid te beschermen.
Ik wil proberen deze controller te gebruiken met een grotere motor die wat \ 'echt \' kan doen, maar ik heb nog niet de juiste.
Ik heb gemerkt dat eBay een 86 W -auto verkocht voor ongeveer $ 40.
Ziet eruit als een goede kandidaat.
Er is ook een RC -website genaamd \ 'Gobrushless \' die kits verkoopt die hun eigen BLDC assembleren.
Deze zijn niet te duur en het is de moeite waard om er een te bouwen.
Houd er rekening mee dat er geen Hall -sensor is voor de motor op deze website. Oef!
Het schrijven van deze structuur is een groot werk.
Ik hoop dat je het nuttig vindt, maak je opmerkingen en suggesties.
Digitale multimeter (DMM)-
Als uw DMM een frequentiemeter-oscilloscoop heeft (
het is beter om ten minste 2 kanalen te hebben)
T8 Torx-stuurprogramma (
je hebt er een nodig om een harde schijf te openen).
Er is een goede ijzerhandel.
Machine -workshop en snel prototype (
deze zijn erg nuttig, maar ik denk dat dit project zonder hen kan worden gedaan).
Materiaal BLDC Motor magnetische ring van Computer Hard Disk (
helft van de motor)
van een andere hard aandrijfverzekere (3-6)
Er is een tweede kleine motor in de zilveren schijf op de harde schijf (DC geborsteld OK)
Rubberen band of (bij voorkeur)
de borstelloze DC-motor met een handvat met een andere motor elektronische broodjes OHMST MICRO CIRCUIT L6234 Drie fasen motorrijder IC Twee 100 UF-condensatoren Een 10 NF-condensator één 220 NF-condensator één 1 UF-condensator één 100 UF-condensator Drie ontvangende diodes One 2.
Honeywell SS411A Bipolar Hall-5 Amp Fuse 1 Fuse Holder 3
Noot: Mike Anton Designed en Sald a Power Electronics and Sald the Power Electronic handleiding (
het wordt geregeld met behulp van potentiële inductie terug).
Specificaties en inkoopinformatie zijn te vinden in deze twee links: als u dit project gaat doen, raad ik u aan de tijd te nemen om grondig te begrijpen hoe de BLDC werkt en controleert.
Er zijn een groot aantal referenties online (
zie hieronder voor enkele suggesties).
Ik neem echter enkele grafieken en tafels in mijn project op die u zouden moeten helpen begrijpen.
Here is a list of the concepts that I think are most important to understanding this project: MOSFET transistors 3-phase half-bridge 6-
3-step reduction of sentence
Pulse Width Modulation of phase motor (PWM)Hall-
Microchip AVR443: sensors-general reference DC motor Basic Principles for Digital position sensors
Control of three-phase brushless DC motor based on atmelbrusless DC motor control
Phase BLDC motor control of the Flying Star Hall Sensor, een goede video van het opruimen van de harde schijfmotor, maar de auteur lijkt de motor te laten werken als een stapmotor en als een stapmotor. Een meer specifieke referentiewebpagina voor de BLDC op de L6234 Motor Drive IC, inclusief gegevensbladen, toepassingsnotities en aankoopinformatie.
Gratis monster voor PM -borstelloze motoraandrijving voor hybride elektrische voertuigtoepassingen.
Dit is het enige artikel dat ik heb gevonden dat de volgorde van de regeneratieve remfase -verandering beschrijft.
Dit artikel, regeneratief remmen in elektrische voertuigen is nuttig, ik heb er een paar nummers van geleend, maar ik denk dat het ten onrechte beschrijft hoe regeneratie werkt.
Ik heb dit project gedaan met gerecyclede schijfaandrijfmotor omdat het gemakkelijk was om door te gaan en ik graag een kleine laagspanningsmotor gebruik om het koord te leren bestuurd door BLDC en geen veiligheidsproblemen te veroorzaken.
Bovendien wordt de magneetconfiguratie van de Hall -sensor heel eenvoudig door de magnetische ring (rotor) te gebruiken
van de tweede van deze motoren (zie stap 4).
Als u niet naar al het gedoe van het installeren en kalibreren van de Hall-sensor wilt gaan (stappen 5-7),
weet ik dat er minstens enkele CD/DVD-aandrijfmotoren zijn gebouwd in Hall-sensor.
Om wat omdraaiende traagheid aan de motor te geven en ze een kleine lading te geven, legde ik 5 harde schijven op de motor, zachtjes aan elkaar gelijmd met een beetje sterke lijm en aan de motor gelijmd (
dit maakte het vliegwiel in mijn oorspronkelijke project).
Als u de motor uit de harde schijf gaat verwijderen, heeft u een T8 Torx -drive nodig om de behuizing los te schrappen (
meestal zijn er twee schroeven verborgen achter de stok in het middenlabel)
en interne schroeven die de motor op hun plaats houden.
U moet ook de koplezer (
Sound Circle Executive)
op deze manier verwijderen, u kunt de geheugenschijf eruit halen om de motor te bereiken.
Bovendien heeft u een tweede dezelfde harde schijfmotor nodig om de rotor uit die motor te verwijderen (
er zit een magneet binnen).
Om de motor uit elkaar te halen, pakte ik de rotor (boven)
een bankschroef van de motor en wrikte deze op de stator (onder)
De twee schroevendraaiers liggen 180 graden uit elkaar.
Het is niet eenvoudig om de motor zonder vervorming op een strak genoeg paar vast te houden.
Misschien wilt u een houtblok bouwen
dat voor dit doel wordt gebruikt.
Ik boorde een gat in de magnetische ring op de draaibank zodat deze comfortabel op de bovenkant van de motor past.
Als u de draaibank niet kunt gebruiken, kunt u de omgekeerde rotor op de motor met een sterke lijm repareren.
De foto's 2 en 3 hieronder tonen het interieur van een van de motoren die ik heb gedemonteerd.
In de eerste helft daar zijn (de rotor) 8 polen (
magneet gewikkeld in plastic).
In de tweede helft (de stator)
zijn er 12 slots (wikkelingen).
Elk van de drie motorfasen heeft 4 slots in serie.
Sommige HD -motoren hebben drie contacten onderaan, één contact per fase en het andere is de middelste kraan van de motor (
waar drie fasen bijeenkomen).
In dit project is geen middelste kraan vereist, maar het kan van pas komen in sensorvrije controle (
ik hoop op een dag een opmerking over sensorvrije controle uit te brengen).
Als uw motor vier contacten heeft, kunt u de fase identificeren met ohmeter.
De weerstand tussen de middelste kraan en de fase is de helft van de weerstand tussen twee fasen.
De meeste literatuur over BLDC-motoren gaat over mensen met een laddervormige potentiële golfvorm van de rug, maar de harde schijfmotor lijkt een achterpotentieel te hebben dat eruit ziet als een sinus (zie hieronder).
Voor zover ik weet, werkt het besturen van een sinusgolfmotor met een sinusgolf PWM prima, hoewel de efficiëntie enigszins kan dalen.
Net als alle BLDC-motoren bestaat deze uit driefasige halftransistorbrug
(
zie 2e foto's hieronder).
Ik gebruik de IC gemaakt door St Micro (L6234)
voor de brug, ook bekend als de motorrijder.
De elektrische verbinding van L6234 wordt weergegeven in stap 8.
De derde foto hieronder toont een schematisch diagram van de motorrijder en de drie motorfasen.
Om de motor met de klok mee te laten werken, wordt de schakelaar in de volgende volgorde gemaakt (
de eerste letter is de bovenste transistor en de tweede letter is de lagere transistor)
: Stap 1 2 3 4 5 6 met de klok mee: CB, AB, AC, AC, BC, BA, CA Tegengekoons: BC, BA, CA, CB, AB, AC Deze 6-
De Step-sequentie Vereist Ac deze 6- De Step-sequentie vereist AC deze 6- De Step-sequentie voor deze 6- De Step-sequentie voor deze 6- De 6- De Step-sequentie vereist een akte. Motoren.
Daarom vindt de rotatiesnelheid van elke motor vier keer plaats.
De twee sequenties lijken hetzelfde te zijn, maar ze zijn niet hetzelfde omdat voor de 6-
stappensequentie, voor CW, de huidige richting door de fase één richting is, en voor CCW is de huidige richting tegengesteld.
U kunt dit zelf zien door de spanning van de batterij of voeding toe te passen op beide motiefase.
Als u de spanning aanbrengt, beweegt de motor een beetje in één richting en stopt.
Als u de spanning op de fase in een van de bovenstaande sequenties snel kunt wijzigen, kunt u de motor handmatig roteren.
Transistoren en microcontrollers voltooien al deze schakelaars zeer snel en schakelen honderden keren per seconde wanneer de motor op hoge snelheid draait.
Houd er ook rekening mee dat als de spanning op beide fasen wordt toegepast, de motor een beetje beweegt en vervolgens stopt.
Dit komt omdat het koppel nul is.
Je kunt dit zien op de vierde foto hieronder, die het achterpotentieel van een paar motorfasen toont.
Dit is een sinusgolf.
Wanneer de golf door X-as gaat
, is het koppel van deze fase nul. In de zes-
stappen BLDC-faseveranderingssequentie die nooit is gebeurd.
Voordat het koppel op een bepaalde fase laag wordt, wordt het vermogen overgeschakeld naar een andere fasecombinatie.
Grotere BLDC -motoren worden meestal vervaardigd door halsensoren in de motor.
Als je zo'n motor hebt, kun je deze stap overslaan.
Ik weet ook dat er op zijn minst sommige CD/DVD-aandrijfmotoren zijn ingebouwd in reeds-hall sensor.
Wanneer de motor roteert, worden drie Hall -sensoren gebruikt voor positiedetectie, zodat de faseverandering op het juiste moment wordt uitgevoerd.
Mijn HD -motor loopt tot 9000 tpm (150 Hz).
Omdat er 24 wijzigingen per wiel zijn, bij 9000 tpm, wordt de machine elke 280 microseconden gewijzigd.
De Arduino-microcontroller werkt op 16 MHz, dus elke klokcyclus is 0, 06 microseconden.
Ik weet niet hoeveel klokcycli nodig zijn om een vermindering van de zin uit te voeren, maar zelfs als 100 klokcycli nodig zijn, dat wil zeggen, het kost 5 microseconden voor elke vermindering van de zin.
HD -motoren hebben geen Hall -sensoren, dus het is noodzakelijk om ze aan de buitenkant van de motor te installeren.
De sensor moet worden vastgesteld ten opzichte van de motorrotatie en worden blootgesteld aan een reeks polen die consistent zijn met de motorrotatie.
Mijn oplossing is om de magnetische ring uit dezelfde motor te verwijderen en deze ondersteboven op de te besturen motor te installeren.
Ik installeerde vervolgens drie Hall -sensoren boven deze magnetische ring, 30 graden uit elkaar op de motoras (
120 graden elektromotorrotatie).
Mijn Hall -sensorhouder bestaat uit een eenvoudige houder bestaande uit drie door mij verwerkte aluminium onderdelen en drie plastic onderdelen gemaakt op een snel prototype.
Als u deze tools niet hebt, zou het niet moeilijk moeten zijn om een andere manier te vinden om de positie aan te geven.
Het maken van beugels voor Hall -sensoren zal uitdagender zijn.
Dit is een mogelijke manier om te werken: 1.
Zoek een plastic dienblad van de juiste maat en u kunt de Hall -sensor zorgvuldig epoxyen. 2.
Een sjabloon wordt op het papier gedrukt, die dezelfde cirkel heeft als de magnetische ringradius, en de drie markeringen zijn 15 graden 3 uit elkaar.
Lijm de sjabloon op de schijf en gebruik vervolgens de sjabloon als een gids om de Hall -sensorepoxy zorgvuldig op zijn plaats te plaatsen.
Nu Hall -sensoren op de motor worden geïnstalleerd, sluit u ze aan op het hieronder getoonde circuit en test u ze met een DMM of oscilloscoop om ervoor te zorgen dat de uitgang hoger en lager wordt naarmate de motor draait.
Ik gebruik deze sensoren onder 5 V met behulp van de 5 V -uitvoer van Arduino.
De Hall -sensor is hoog of laag in uitgang (1 of 0)
Het hangt ervan af of ze het Antarctica of het Noordpoolgebied voelen.
Omdat ze 15 graden uit elkaar liggen, roteren de magneten eronder en veranderen de polariteit om de 45 graden, deze drie sensoren zullen nooit tegelijkertijd hoog of laag zijn.
Wanneer de motor roteert, is de sensoruitgang 6-
Het stappatroon dat wordt weergegeven in de volgende tabel.
De sensor moet worden uitgelijnd met de beweging van de motor, zodat een van de drie sensoren precies in de positie van de motorfase verandert.
In dit geval moet de stijgende rand van de eerste Hall -sensor (H1)
consistent zijn met de opening van de C -combinatie (hoog) en B (laag).
Dit komt overeen met het inschakelen van transistors 3 en 5 in het brugcircuit.
Ik lijn de sensor uit met de magneet met een oscilloscoop.
Om dit te doen, moet ik drie kanalen van reikwijdte gebruiken.
Ik roteer de motor door verbinding te maken met de riem van de tweede motor en het achterste potentieel te meten tussen de twee fasecombinaties (
A en B, A en C)
Dit is twee sinus.
Net als de golven in de onderstaande afbeelding,
kijk dan naar het signaal van Hall Sensor 2 op kanaal 3 van de oscilloscoop.
De Hall -sensorhouder is gedraaid totdat de stijgende rand van de Hall -sensor volledig is uitgelijnd met het punt waar de faseverandering moet worden uitgevoerd (zie hieronder).
Ik realiseer me nu dat er slechts twee kanalen zijn om dezelfde kalibratie te doen.
Als de BEMF van de fasecombinatie B-
met behulp van C, is de stijgende rand van H2 gerelateerd aan BC-curve.
De reden waarom de faseverandering hier moet worden uitgevoerd, is om het motorkoppel altijd zo hoog mogelijk te houden.
Het achterste potentieel is evenredig met het koppel en u zult merken dat elke faseverandering optreedt wanneer de achterpotentieel onder de volgende fase -curve gaat.
Daarom bestaat het werkelijke koppel uit het hoogste deel van elke fasecombinatie.
Als u geen toegang hebt tot de scope, hier is mijn idee van uitlijning.
Dit is eigenlijk een interessante oefening voor iedereen die wil weten hoe de BLDC -motor werkt.
Als de motorfase A is aangesloten (positief) en B (negatief)
op de voeding en de voeding inschakelen, draait de motor een beetje en stopt.
Als het negatieve vermogens lood wordt verplaatst naar de C -fase en het vermogen wordt ingeschakeld, draait de motor verder en stopt.
Het volgende deel van de reeks zal zijn om de positieve voorsprong te verplaatsen naar fase B, enz.
Wanneer u dit doet, stopt de motor altijd waar het koppel nul is, wat overeenkomt met één plaats waar de grafiek door de x-as op de grafiek gaat.
Merk op dat het nulpunt van de derde fase combinatie overeenkomt met de faseveranderingspositie van de eerste twee combinaties.
Daarom is de nul koppelpositie van B-
de C-combinatie waar u de stijgende rand van H2 wilt positioneren.
Markeer deze positie met fijne markeringen of scherpe messen en pas vervolgens de Hall -sensorhouder aan met behulp van DMM totdat de uitgang van H2 precies hoger is op dit markering.
Zelfs als u een beetje afwijkt van uw schoolschema, moet de motor goed werken.
De drie motorfase ontvangt vermogen van de L6234-driefasige motorrijder.
Ik ontdekte dat dit een goed product is dat de tand des tijds kan doorstaan.
Er zijn veel manieren om uw componenten per ongeluk te bakken bij het gebruik van stroomelektronica, ik ben geen elektrotechnisch ingenieur en ik weet niet altijd wat er aan de hand is.
In mijn schoolprogramma hebben we onze eigen 3-
fase halfbrug output van 6 MOSFET-transistoren en 6 diodes gedaan.
We hebben dit gebruikt op de HIP4086 van de andere intersil van de bestuurder, maar we hebben veel problemen met deze opstelling.
We hebben een aantal transistors en chips verbrand.
Ik gebruik L6234 (
dus de motor) op 12V.
De L6234 heeft een ongebruikelijke set inputs om een halve brug van 6 transistors te besturen.
Niet elke transistor heeft een ingang, maar een inschakelen (EN)
-invoer voor elk van de drie fasen, en vervolgens een andere ingang (in)
selecteer welke transistor in de open fase (boven of lager).
Schakel bijvoorbeeld transistor 1 (boven) en 6 (lager) in,
zowel EN1 als EN3 zijn hoog (
EN2 laag om het podium gesloten te houden)
in 1 hoog, in 3 laag.
Dit maakt de fase-combinatie-c.
Hoewel de L6234 -toepassingsnotitie voorstelde om de PWM toe te passen die werd gebruikt om de snelheid van de motor op de in pin te regelen, besloot ik het op de en -pin te doen, omdat ik op dat moment denk dat het \ 'Strange \' zou zijn om de bovenste en lagere transistoren van de fase te hebben, dus
geen van hen zijn, dus geen van hen zijn niet hetzelfde potentieel, dus geen van hen zijn van hetzelfde potentieel. Gaat
de
stroom
.
door Beetje klein, dus voor grotere versies, raadpleeg de documentatie voor L6234.
OPMERKING: Mike Anton heeft de PCB gemaakt voor L6234, die (geloof ik)
deze track zal vervangen en u de taak zou besparen om het te assembleren.
Bekijk deze links voor specificaties en aankoopinformatie: ik heb niet veel gevonden over 3-
Ik zal mijn begrip beschrijven hoe het werkt.
Houd er rekening mee dat ik geen elektrotechnisch ingenieur ben en we zouden eventuele correcties voor mijn uitleg op prijs stellen.
Tijdens het rijden stuurt het besturingssysteem de stroom in drie motorfasen op een manier die het koppel maximaliseert.
Bij regeneratief remmen maximaliseert het besturingssysteem ook het koppel, maar deze keer is het een negatief koppel dat ervoor zorgt dat de motor vertraagt terwijl de stroom terug wordt gestuurd naar de batterij.
De regeneratieve remmethode die ik gebruikte kwam van een paper van het Oakridge National Laboratory in de Verenigde Staten. S. Govt.
Een laboratorium dat veel onderzoek doet voor automotive -motoren.
De onderstaande grafiek komt uit een ander artikel dat helpt illustreren hoe het werkt (
ik denk echter dat de uitleg in dit tweede artikel gedeeltelijk onjuist is).
Houd er rekening mee dat wanneer de motor roteert, de BEMF -spanning in de motorfase op en neer fluctueert.
In de figuur toont het het moment waarop BEMF hoog is in fase B en laag in het podium.
In dit geval is het mogelijk dat de stroom van B naar Blow naar.
Cruciaal voor regeneratief remmen, low-end transistors zetten snel in en uit (
duizenden PWM-schakelaars per seconde).
Wanneer de high-end transistorschakelaar wordt uitgeschakeld;
Wanneer de lage transistor wordt ingeschakeld, stroomt de stroom zoals weergegeven in de eerste afbeelding.
In termen van stroomelektronica is het circuit als een apparaat dat een boost -omzetter wordt genoemd, waarbij energie wordt opgeslagen in de fase van de motor (
Wikipedia heeft een goed artikel waarin wordt uitgelegd hoe de boost -converter werkt).
Deze energie wordt vrijgegeven wanneer de low-end transistor wordt uitgeschakeld, maar bij een hogere spanning stroomt de stroom onmiddellijk door de \ 'anti-excitatie \' diode naast elke transistor en keert vervolgens terug naar de batterij.
De diode voorkomt dat de stroom van de batterij naar de motor stroomt.
Tegelijkertijd interageert de stroom in deze richting (
in tegenstelling tot rijden)
met de magneetring om een negatief koppel te produceren dat de motor vertraagt.
De lage transistor gebruikt een PWM-schakelaar en de duty cyclus van PWM regelt de hoeveelheid rem.
Tijdens het rijden schakelt de commutatie van de motor van de ene combinatie naar de andere te zijner tijd om het hoogst mogelijke koppel te behouden.
De commutatie van de regeneratieve rem is zeer vergelijkbaar omdat een schakelmodus ervoor zorgt dat de motor zoveel mogelijk negatief mogelijk koppel produceert.
Als u de video in de eerste stap bekijkt, kunt u zien dat de regeneratieve rem prima werkt, maar deze werkt niet goed.
Ik denk dat de belangrijkste reden is dat de harde schijfmotor die ik gebruik een zeer lage koppelmotor is, dus het produceert niet veel BEMF, behalve met de hoogste snelheid.
Bij een lagere snelheid is er heel weinig regeneratief remmen (indien aanwezig).
Ook loopt mijn systeem op een relatief lage spanning (12 V)
bovendien, omdat elk pad door de anti-excitatie-diode de spanning met verschillende volt vermindert, dit vermindert ook de efficiëntie aanzienlijk.
Ik gebruik normale gelijkrichterdioden en ik kan betere prestaties krijgen als ik een aantal speciale diodes gebruik met lagere spanningsval.
Hieronder vindt u een lijst met ingangen en uitgangen op Arduino.
Neem ook grafieken en foto's van mijn bord op. 2-
Digital entry-Hall 1
120 K resistance of Gnd 3
Digital entry hall 2
120 K resistance of Gnd 4
Hall 3 digital input-
120 K resistance of Gnd 5
1 Digital Output in series with 400 ohm resistor 6
2 Digital outputs in series with 400 ohm resistor 7
3 Digital outputs in series with 400 ohm resistor 9-
Digital Output of EN 1 in series with 400 ohm resistor 10-
Digital Output of EN 2 in series with 400 ohm resistor 11-
De EN 3 digitale uitgang is in serie met een 400 ohm weerstand, 100 K ohm potentiometer, met 5 V en GND verbonden aan beide uiteinden en analoge pin 0 verbonden in het midden.
Deze potentiometer wordt gebruikt om de motorsnelheid en het remvolume te regelen.
5 V -voeding wordt ook gebruikt om Hall -sensoren uit te voeren (zie stap 5).
Hier is het hele programma dat ik heb geschreven voor Ardjuino, dat opmerkingen bevat:/* bldc_congroller 3. 1.
1* 3 door David Glazer.
De X-serie is ST L6234 3-
fase motor Motor Driver IC * Running Disk Drive Motor met de klok mee * met regeneratief remmen * Motoresnelheid en rem geregeld door een enkele potentiometer * Motorpositie * Motorpositie door drie Hall-
effect sensor * Arduino ontvangt uitgang van 3 Hall-sensoren (pins 2,3,4)
* En converteer hun combinatie van 6 verschillende fase-change stappen op PINS 9, 11, 11, 11 bij 32 khz * PWM-output (correspondent (correspondent 2,3,4)
. 1,2, 3 * 3 doen op pins 5,6, 7, respectievelijk (in 1,2,3)
de simulatie in 0 met de potentiometer om de PWM-duty-cyclus te wijzigen en te wijzigen * tussen rijden en regeneratief remmen
*
*
Verbind
. Allstate1
;
() {PinMode (2, invoer);
/Hal 1 pinmode (3, invoer);
/Hal 2 pinmode (4, invoer);
/L6234 HALL 3/UITGANG VAN PINMODE MOTOR DRIVER (5, Output);
/In 1 pinmode (6, uitvoer);
/In 2 pinmode (7, uitgang);
/In 3 pinmode (9, uitgang);
/EN 1 pinmode (10, uitvoer);
/EN 2 pinmode (11, uitgang);
/EN 3/serieel. begin (9600);
Als u een seriële verbinding gebruikt, kunt u deze regel opsluiten.
De opdracht flush aan het einde van het programma.
/* Stel de PWM-frequentie in op pinnen 9, 10 en 11/Stel PWM in op 32 kHz voor pennen 9, 10/Wis eerst alle drie pre-divider bits: int prescalerval = 0x07;
/Maak een variabele met de naam Prescalerval en stel deze in op het binaire getal \ '00000111 \' TCCR1B & = ~ Prescaler
/en de waarde in TCCR0B met een binair nummer van \ '11111000 \' /Stel nu het juiste pre-encoding bit in: Int Pre-Incoding Bit 2 = 1;
/Stel Prescalerval in om het binaire nummer te evenaren \ '00000001 \' TCCR1B | = Prescalerval2;
/Of waarde in TCCR0B met een binair nummer van \ '00000001 \' /Stel PWM in op 32 kHz voor pin 3,11 (
dit programma gebruikt alleen pin 11)
/wist eerst alle drie pre-caler bits: TCCR2B & = ~ pre-Calerval;
/En de waarde in TCCR0B met een binair nummer van \ '11111000 \'/Stel nu het juiste pre-coderingsbit in: TCCR2B | = Bit 2 voor het coderen van 2;
/Of de waarde in TCCR0B met een binair aantal \ '00000001 \'/Wis eerst alle drie de vooraf gecodeerde bits:}
De hoofdlus van de/prGrom void Loop () {
/time = millis ();
Tijd nadat het afdrukprogramma is gestart. println (tijd); // Serieel. afdrukken(\'\');
Throttle = analogread (0);
/Throttle Potentiometer MSP's = kaart (
gasklep, 512,1023, 0,255);
/Rijden wordt toegewezen aan de bovenste helft van de potentiometer BSpeed = kaart (
gashendel, 0,511,255, 0);
/Halfgedeelte regeneratief remmen aan de onderkant van de pot/MSPS ED = 100;
/Voor foutopsporing Hallstate1 = digitalread (2);
/Lees invoerwaarde uit hal 1 2 = digitaal lezen (3);
/Lees invoerwaarde uit hal 2 3 = digitaal lezen (4);
Lees invoerwaarde/numeriek schrijven uit hal 3 (8, Hallstate1);
/Wanneer de overeenkomstige sensor in hoog vermogen is, wordt de LED
oorspronkelijk ingeschakeld om DigitalWrite (9, Hallstate2) te debuggen;
// digitalWrite (10, Hallstate3); Hallval = (Hallstate1)+ (2*Hallstate2)+ (4*Hallstate3);
/Bereken de binaire waarden van 3 Hall -sensoren/* -serie. print (\ 'h 1: \');
Voor het debuggen van seriële poort. println (Hallstate1); Serie. print (\ 'h 2: \'); Serie. println (Hallstate2); Serie. print (\ 'h 3: \'); Serie. println (Hallstate3); Serie. println (\ '\');
*/// Serieel. println (mSpeed); // Serieel. println (Hallval); // Serieel. afdrukken(\'\');
/Monitor Transistor -uitgang/vertraging (1000);
/* T1 = digitalread (2); // t1 = ~ t1;
T2 = digitalread (4); // t2 = ~ t2;
T3 = digitalread (5); // t3 = ~ t3; Serie. print (T1); Serie. print (\ '\ t \'); Serie. print (T2); Serie. print (\ '\ t \'); Serie. print (T3); Serie. afdrukken(\'\'); Serie. afdrukken(\'\'); Serie. print (digitalread (3)); Serie. print (\ '\ t \'); Serie. print (digitalread (9)); Serie. print (\ '\ t \'); Serie. println (digitalread (10)); Serie. afdrukken(\'\'); Serie. afdrukken(\'\'); // vertraging (500);
*/Rijfase Wijziging/Elk binair getal heeft een case dat overeenkomt met de verschillende transistors ingeschakeld/bit wiskunde die worden gebruikt om de waarde van de uitgang Arduino:/Portd te wijzigen, bevat de uitgang van de in PIN op de L6234 -stuurprogramma/de uitgang van de uitgang van PWM (PWM van de L6234 -cyclus van PWM (
0 = ONTOOL OF OF OF OF OF OF OF OF THROTTE VOLGENDE DOOR DE GOLDE DOOR DE FASE GEERDE DOOR DE FASE GEERDE DOOR ELK potentiometer). if (throttle> 511) {switch (HallVal) {
case 3:/portd = 1111xxx00;
/Verwachte uitgang van PIN 0-
7 XXX verwijst naar Hall-ingang en PORTD & = B00011111 mag niet worden gewijzigd;
PORTD | = B01100000;
/Analowrite (9, mSpeed);
PWM op een fase (
high-end transistor) analogwrite (10,0);
Fase B -sluiting (Duty = 0) Analogwrite (11,255); // fase C op -duty = 100% (
low -end transistor) pauze;
Case 1:/portd = b001xxx00;
/Verwachte uitgang van PIN 0-
7 PORTD & = B00011111;
/Portd | = B00100000;
/Analowrite (9, mSpeed);
PWM op een fase (
high-end transistor) analogwrite (10.255); // fase B op (
low-end transistor) analogwrite (11,0); // Fase B Off (Duty = 0) breken;
Case 5:/portd = b101xxx00;
/Verwachte uitgang van PIN 0-
7 PORTD & = B00011111;
/Portd | = B10100000; Analogwrite (9,0); Analogwrite (10,255); Analogwrite (11, mSpeed); pauze;
Case 4:/Portd = B100XXX00;
/Verwachte uitgang van PIN 0-
7 PORTD & = B00011111;
PORTD | = BYM000;
/Analowrite (9,255); Analogwrite (10,0); Analogwrite (11, mSpeed); pauze;
Case 6:/portd = b110xxx00;
/Verwachte uitgang van PIN 0-
7 PORTD & = B00011111;
PORTD B11. 000 =;
/Analowrite (9,255); Analogwrite (10, mSpeed); Analogwrite (11,0); pauze;
Case 2:/portd = b010xxx00;
/Verwachte uitgang van PIN 0-
7 PORTD & = B00011111;
B0201700 PORTD | =;
/Analowrite (9,0); Analogwrite (10, mSpeed); Analogwrite (11,255); pauze; }}
/Regeneratieve remfase wijziging /portd (
uitgang van in pin op L6234)
De pennen zijn altijd laag, dus alleen lage transistoren op elke fase worden gebruikt tijdens regen. Remmen. else {
/portd = b000xxx00;
/Verwachte uitgang van PIN 0-
7 PORTD & = B00011111;
PORTD | = BYM0000; // Switch (HallVal) {
Case 3: Analogy Writing (9, BSpeed); // analogwrite (9,0); Analogwrite (10,0); Analogwrite (11,0); pauze;
Case 1: Analogy Writing (9, BSpeed); Analogwrite (10,0); Analogwrite (11,0); pauze;
Case 5: Analogy Writing (9,0); Analogwrite (10,0); Analogwrite (11, BSpeed); pauze;
Case 4: Analogy Writing (9,0); Analogwrite (10,0); Analogwrite (11, BSpeed); pauze;
Case 6: Analogy Writing (9,0); Analogwrite (10, BSpeed); Analogwrite (11,0); pauze;
Case 2: Analogy Writing (9,0); Analogwrite (10, BSpeed); Analogwrite (11,0); pauze; }}
/Time = millis ();
Tijd nadat het afdrukprogramma is gestart. println (tijd); // Serieel. afdrukken(\'\'); // Serieel. flush ();
/Als u een debug wilt debuggen met behulp van een seriële poort, alstublieft Uncomment}
Ik denk dat de bewerking die Arduino in dit project doet zo eenvoudig is dat het een verspilling lijkt om deze taak met een microprocessor te doen.
In feite bevelen de toepassingsnotities van L6234 een eenvoudige programmeerbare poortarray (
GAL16V8 gemaakt van roostere halfgeleider) aan om dit werk te doen.
Ik ben niet bekend met het programmeren van dit apparaat, maar de kosten van IC zijn slechts $ 2. 39 bij Newark.
Andere vergelijkbare geïntegreerde circuits zijn ook erg goedkoop.
Een andere optie is om de discrete logische poorten samen te voegen.
Ik kwam met een aantal relatief eenvoudige logische sequenties die de L6234 -IC konden sturen vanuit de uitgang van de drie Hall -sensoren.
De grafiek voor fase A wordt hieronder getoond, en de waarheidstabel voor alle drie de stadia (
om het logische circuit van de B- en C -fasen te volgen, moet de \ 'niet \' deur worden overgeschakeld naar de andere kant van de \ 'of.
Het probleem met deze aanpak is dat er bijna 20 verbindingen zijn in elke fase, dus het is een beetje om het samen te voegen om
het samen te stellen als een programmeerbare logische poort.