Tegenwoordig zijn enthousiastelingen erg geïnteresseerd in het besturen van Brushless DC (BLDC).
Vergeleken met de traditionele DC-motor zijn de prestaties van de motor verbeterd, is de energie-efficiëntie ook verbeterd, maar is deze moeilijker te gebruiken. veel kant-en- klare producten.
Voor dit doel bestaan er
Er zijn bijvoorbeeld veel kleine BLDC-controllers die heel goed werken voor RC-vliegtuigen.
Voor degenen die dieper in de besturing van de BLDC willen kijken, zijn er ook veel verschillende microcontrollers en andere elektronische hardware voor industriële gebruikers, die meestal over zeer goede documentatie beschikken.
Tot nu toe heb ik geen uitgebreide beschrijving gevonden van het gebruik van de Arduino-microcontroller voor BLDC-besturing.
En als je geïnteresseerd bent in regeneratief remmen of het gebruik van een BLDC voor energieopwekking: ik heb niet veel producten gevonden die geschikt zijn voor gebruik met kleine motoren, en ik heb ook niet ontdekt hoe je een driefasige generator kunt besturen.
Deze structuur zat oorspronkelijk in een verhaal over realtime
rekenen, ik blijf dit doen nadat de cursus voorbij is.
Het idee van het project is om een proportioneel model te tonen van een hybride auto met vliegwiel-energieopslag en regeneratief remmen.
De motor die in het project wordt gebruikt, is een kleine BLDC die is opgeruimd van de beschadigde harde schijf van de computer.
Deze handleiding beschrijft hoe u de Arduino-microcontroller en Hall-
Affects-positiesensoren kunt gebruiken in de rij- en regeneratieve remmodi.
Houd er rekening mee dat een bezoek aan Oscillisoft zeer nuttig, zo niet essentieel, is om dit project te voltooien.
Als u geen toegang heeft tot de scope, heb ik enkele suggesties toegevoegd over hoe u dit kunt doen zonder de scope (stap 5).
Eén ding dat dit project in geen enkele motorcontroller mag bevatten, is een veiligheidsfunctie zoals overstroombeveiliging.
Het ergste is zelfs dat je de HD-motor doorbrandt.
Het implementeren van overstroombeveiliging met de huidige hardware is echter niet moeilijk, en misschien zal ik dat ooit nog eens doen.
Als u een grotere motor probeert te besturen, voeg dan een overstroombeveiliging toe om uw motor en uw eigen veiligheid te beschermen.
Ik wil proberen deze controller te gebruiken met een grotere motor die 'echt' werk kan doen, maar ik heb nog niet de juiste.
Ik zag dat eBay een auto van 86 W verkocht voor ongeveer $ 40.
Lijkt me een goede kandidaat.
Er is ook een RC-website genaamd \'GoBrushless\' die kits verkoopt waarmee ze hun eigen BLDC kunnen samenstellen.
Deze zijn niet te duur en het is de moeite waard om er een te bouwen.
Houd er rekening mee dat er geen hallsensor voor de motor op deze website staat. Wauw!
Het schrijven van deze structuur is een grote klus.
Ik hoop dat u het nuttig vindt. Geef uw opmerkingen en suggesties door.
Digitale multimeter (DMM) -
Als uw DMM een oscilloscoop met frequentiemeter heeft (
het is beter om minimaal 2 kanalen te hebben).
T8 Torx-stuurprogramma (
u hebt er één nodig om een harde schijf te openen).
Er is een goede bouwmarkt.
Machinewerkplaats en snel prototype (
deze zijn erg nuttig, maar ik denk dat dit project zonder hen kan worden uitgevoerd).
Materiaal bldc motor magnetische ring van computer harde schijf (
helft van de motor)
Van een andere harde schijf Meerdere (3-6)
Er zit een tweede kleine motor in de zilveren schijf op de harde schijf (DC geborsteld OK)
Elastiekje of (bij voorkeur)
De borstelloze gelijkstroommotor met een handvat met een andere motor elektronische broodplaat massieve draadmaand de Arduino Duemilanove 120 k ohm weerstand zes tot 400 ohm weerstand lineair of roterend Poteniometer 100 k ohm ST microschakeling L6234 driefasige motordriver-IC twee condensatoren van 100 uF één condensator van 10 nF één condensator van 220 nF één condensator van 1 uF één condensator van 100 uF drie ontvangstdiodes Eén 2.
Honeywell SS411A bipolaire Hall-5 Amp-zekering 1 zekeringhouder 3
Opmerking: Mike Anton heeft een product ontworpen en verkocht dat de vermogenselektronica en Hall-sensorcircuits zal vervangen die ik in deze handleiding heb getoond (
het wordt bestuurd met behulp van back-potentiaalinductie).
Specificaties en aanbestedingsinformatie kunt u 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 bestuurt.
Er zijn een groot aantal referenties online te vinden (
zie hieronder voor enkele suggesties).
Ik neem echter wel enkele grafieken en tabellen op in mijn project die u zouden moeten helpen het te begrijpen.
Hier is een lijst met de concepten die volgens mij het belangrijkst zijn om dit project te begrijpen: MOSFET-transistoren 3-fasige halve brug 6-3
-staps reductie van de zin
Pulsbreedtemodulatie van fasemotor (PWM) Hall-
Microchip AVR443: sensoren - algemene referentie DC-motor Basisprincipes voor digitale positiesensoren
Besturing van driefasige borstelloze DC-motor gebaseerd op atmelbrusless DC-motorbesturing
Fase BLDC-motorbesturing van de Flying Star Hall-sensor, een goede video over het opruimen van de harde schijf motor, maar de auteur lijkt de motor als stappenmotor en als stappenmotor te gebruiken. Een meer specifieke referentiewebpagina voor de BLDC op de l6234-motoraandrijving-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 remfaseverandering beschrijft.
Dit artikel, regeneratief remmen in elektrische voertuigen is nuttig, ik heb er een paar cijfers uit geleend, maar ik denk dat het verkeerd beschrijft hoe regeneratie werkt.
Ik heb dit project gedaan met een gerecyclede schijfaandrijfmotor omdat deze gemakkelijk te passeren was en ik gebruik graag een kleine laagspanningsmotor om het snoer te leren besturen door BLDC en geen veiligheidsproblemen te veroorzaken.
Bovendien wordt de magneetconfiguratie van de Hall-sensor heel eenvoudig door gebruik te maken van de magnetische ring (rotor)
van de tweede van deze motoren (zie stap 4).
Als je geen zin hebt in al het gedoe van het installeren en kalibreren van de Hall-sensor (stappen 5-7),
weet ik dat er op zijn minst enkele CD/DVD-aandrijfmotoren in de Hall-sensor zijn ingebouwd.
Om de motor enige draaitraagheid te geven en ze een beetje te belasten, heb ik 5 harde schijven op de motor geplaatst, voorzichtig aan elkaar gelijmd met een beetje sterke lijm en aan de motor gelijmd (
dit vormde het vliegwiel in mijn oorspronkelijke project).
Als je de motor van de harde schijf gaat verwijderen, heb je een T8 torx-drive nodig om de behuizing los te schroeven (
meestal zijn er twee schroeven verborgen achter de stick in het middelste label)
en interne schroeven die de motor op zijn plaats houden.
Ook dient u de koplezer (
Sound Circle executive) te verwijderen.
Op deze manier kunt u de geheugenschijf eruit halen om bij de motor te komen.
Bovendien hebt u een tweede motor van dezelfde harde schijf nodig om de rotor van die motor te verwijderen (
er zit een magneet in).
Om de motor uit elkaar te halen, pakte ik de rotor (boven)
Een bankschroef van de motor en wrik deze op de stator (onder).
De twee schroevendraaiers staan 180 graden uit elkaar.
Het is niet eenvoudig om de motor stevig genoeg vast te houden zonder vervorming.
Misschien wilt u een houten v-blok bouwen
dat voor dit doel wordt gebruikt.
Ik heb een gat in de magnetische ring op de draaibank geboord, zodat deze comfortabel op de bovenkant van de motor past.
Als u de draaibank niet kunt gebruiken, kunt u de omgekeerde rotor met sterke lijm op de motor bevestigen.
De onderstaande afbeeldingen 2 en 3 tonen het interieur van een van de motoren die ik heb gedemonteerd.
In de eerste helft (de rotor) zitten 8 polen (
magneet verpakt 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 aan de onderkant, één contact per fase, en het andere is de middenaftakking van de motor (
waar drie fasen samenkomen).
In dit project is geen middenkraan vereist, maar het kan van pas komen bij sensorvrije bediening (
ik hoop ooit een opmerking over Sensorvrije bediening uit te brengen).
Als uw motor vier contacten heeft, kunt u de fase identificeren met een ohmeter.
De weerstand tussen de middenaftakking en de fase is de helft van de weerstand tussen twee fasen.
De meeste literatuur over BLDC-motoren gaat over motoren met een laddervormige back-potentiaalgolfvorm, maar de motor van de harde schijf lijkt een back-potentiaal te hebben dat op een sinus lijkt (zie hieronder).
Voor zover ik weet werkt het aandrijven van een sinusmotor met een sinusgolf-PWM prima, al kan het rendement wel wat teruglopen.
Zoals alle BLDC-motoren bestaat deze uit een driefasige half-
transistorbrug (
zie tweede foto's hieronder). Voor de brug
gebruik ik het IC van ST Micro (L6234)
, ook wel de motordriver genoemd.
De elektrische aansluiting van de L6234 wordt getoond in stap 8.
De derde foto hieronder toont een schematisch diagram van de motoraansturing 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 de onderste transistor)
: Stap 1 2 3 4 5 6 met de klok mee: CB, AB, AC, BC, BA, CA tegen de klok in: BC, BA, CA, CB, AB, AC deze 6-
De stappenreeks vereist een \'elektrische graad\' van 360, maar slechts een fysieke graad van 90 voor deze motoren.
Daarom komt de rotatiesnelheid van elke motor vier keer voor.
De twee reeksen lijken hetzelfde te zijn, maar zijn niet hetzelfde, omdat bij een 6-
stapsreeks voor CW de stroomrichting door de fase één richting is, en voor CCW de stroomrichting tegengesteld is.
U kunt dit zelf zien door de spanning van de accu of voeding op een van beide motorfasen aan te leggen.
Als u de spanning aanbrengt, beweegt de motor een beetje in één richting en stopt.
Als u de spanning op de fase snel kunt wijzigen in een van de bovenstaande reeksen, kunt u de motor handmatig draaien.
Transistors 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 klein 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 laat zien.
Dit is een sinusgolf.
Wanneer de golf door x-Shaft gaat
, is het koppel dat door deze fase wordt geleverd nul. In de uit zes
stappen bestaande BLDC-faseveranderingssequentie gebeurde dat nooit.
Voordat het koppel op een bepaalde fase laag wordt, wordt het vermogen naar een andere fasecombinatie geschakeld.
Grotere BLDC-motoren worden meestal vervaardigd door Hall-sensoren in de motor.
Als je zo'n motor hebt, kun je deze stap overslaan.
Ik weet ook dat er op zijn minst enkele cd-/dvd-aandrijfmotoren zijn ingebouwd in de Hall-sensor.
Wanneer de motor draait, worden er drie hall-sensoren gebruikt voor positiedetectie, zodat de faseverandering op het juiste moment plaatsvindt.
Mijn HD-motor loopt tot 9000 RPM (150 Hz).
Omdat er per wiel 24 wisselingen zijn, wordt de machine bij 9000 tpm elke 280 microseconden gewisseld.
De Arduino-microcontroller werkt op 16 MHz, dus elke klokcyclus bedraagt 0,06 microseconden.
Ik weet niet hoeveel klokcycli nodig zijn om een zinsreductie uit te voeren, maar zelfs als er 100 klokcycli nodig zijn, duurt het 5 microseconden voor elke zinsreductie.
HD-motoren hebben geen Hall-sensoren, dus het is noodzakelijk om deze aan de buitenkant van de motor te installeren.
De sensor moet worden gefixeerd 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 van dezelfde motor te verwijderen en deze ondersteboven op de te besturen motor te installeren.
Vervolgens heb ik boven deze magnetische ring drie hallsensoren geïnstalleerd, 30 graden uit elkaar op de motoras (
120 graden rotatie van de elektromotor).
Mijn Hall-sensorhouder bestaat uit een eenvoudige houder bestaande uit drie door mij bewerkte aluminium onderdelen en drie kunststof onderdelen gemaakt op een snel prototype.
Als u niet over deze hulpmiddelen beschikt, 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 een grotere uitdaging zijn.
Dit is een mogelijke manier om te werken: 1.
Zoek een plastic bakje van de juiste maat en je kunt de hallsensor voorzichtig epoxypen. 2.
Er wordt een sjabloon op het papier afgedrukt, dat dezelfde cirkel heeft als de straal van de magnetische ring, en de drie markeringen liggen 15 graden 3 uit elkaar.
Lijm de sjabloon op de schijf en gebruik de sjabloon vervolgens als richtlijn om de Hall-sensor-epoxy voorzichtig op zijn plaats te plaatsen.
Nu Hall-sensoren op de motor zijn geïnstalleerd, sluit u ze aan op het hieronder weergegeven circuit en test u ze met een DMM of oscilloscoop om er zeker van te zijn dat de output hoger en lager wordt naarmate de motor draait.
Ik gebruik deze sensoren onder 5 V met behulp van Arduino's 5 V-uitgang.
De Hall-sensor heeft een hoog of laag vermogen (1 of 0).
Het hangt ervan af of ze Antarctica of Noordpool voelen.
Omdat ze 15 graden uit elkaar staan, de magneten eronder draaien en de polariteit elke 45 graden veranderen, zullen deze drie sensoren nooit tegelijkertijd hoog of laag zijn.
Wanneer de motor draait, is de sensoruitvoer 6-
Het stappenpatroon weergegeven in de volgende tabel.
De sensor moet worden uitgelijnd met de beweging van de motor, zodat een van de drie sensoren precies verandert op de positie van de faseverandering van de motor.
In dit geval moet de stijgende flank 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 transistoren 3 en 5 in het brugcircuit.
Ik lijn de sensor uit met de magneet met een oscilloscoop.
Om dit te doen, moet ik drie reikwijdtekanalen gebruiken.
Ik roteer de motor door verbinding te maken met de riem van de tweede motor en meet het tegenpotentiaal tussen de twee fasecombinaties (
A en B, A en C).
Dit zijn twee sinussen.
Zoals de golven in onderstaande afbeelding.
Kijk dan naar het signaal van Hall-sensor 2 op kanaal 3 van de oscilloscoop.
De houder van de Hall-sensor wordt gedraaid totdat de stijgende flank van de Hall-sensor volledig is uitgelijnd met het punt waar de faseverandering moet worden uitgevoerd (zie hieronder).
Ik realiseer me nu dat er maar twee kanalen zijn om dezelfde kalibratie uit te voeren.
Als de BEMF van fasecombinatie B -
C gebruikt, zal de stijgende flank van H2 gerelateerd zijn aan de BC-curve.
De reden waarom hier de faseverandering moet worden uitgevoerd, is om het motorkoppel altijd zo hoog mogelijk te houden.
Het back-potentiaal is evenredig met het koppel en u zult merken dat elke faseverandering optreedt wanneer het back-potentiaal onder de volgende fasecurve komt.
Daarom bestaat het werkelijke koppel uit het hoogste deel van elke fasecombinatie.
Als je geen toegang hebt tot de reikwijdte, is hier 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 inschakelt, zal de motor een beetje draaien en stoppen.
Als de negatieve voedingskabel vervolgens naar de C-fase wordt verplaatst en de stroom wordt ingeschakeld, zal de motor verder draaien en stoppen.
Het volgende deel van de reeks is het verplaatsen van de positieve draad naar fase B, enz.
Wanneer u dit doet, stopt de motor altijd waar het koppel nul is, wat overeenkomt met één plaats waar de kaart door de x-as op de kaart gaat.
Merk op dat het nulpunt van de derde-fasecombinatie overeenkomt met de faseveranderingspositie van de eerste twee combinaties.
Daarom is de nulkoppelpositie van B-
De C-combinatie de plaats waar u de stijgende flank van h2 wilt positioneren.
Markeer deze positie met fijne markeringen of scherpe messen en pas vervolgens de hallsensorhouder aan met behulp van DMM totdat de output van H2 precies hoger is op deze markering.
Zelfs als je een beetje afwijkt van je schoolrooster, zou de motor goed moeten werken.
De driemotorige fase krijgt stroom van de L6234 driefasige motoraansturing.
Ik ontdekte dat dit een goed product is dat de tand des tijds kan doorstaan.
Er zijn veel manieren waarop je je componenten per ongeluk kunt braden als je vermogenselektronica gebruikt. Ik ben geen elektrotechnisch ingenieur en ik weet niet altijd wat er aan de hand is.
In mijn schoolprogramma maakten we onze eigen driefasige
halfbruguitgang van 6 MOSFET-transistors en 6 diodes.
We hebben dit gebruikt op de HIP4086 van de andere driver Intersil, 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 ingangen om een halve brug van 6 transistors aan te sturen.
Niet elke transistor heeft een ingang, maar een enable-
ingang (EN) voor elk van de drie trappen, en vervolgens nog een ingang (IN).
Selecteer welke transistor in de open fase (bovenste of onderste).
Schakel bijvoorbeeld transistor 1 (boven) en 6 (onder) in.
Zowel EN1 als EN3 zijn hoog (
EN2 laag om de trap gesloten te houden)
IN1 Hoog, IN3 laag.
Dit maakt de fasecombinatie-C.
Hoewel in de toepassingsnota van de L6234 werd voorgesteld om de PWM die wordt gebruikt om de snelheid van de motor te regelen op de IN-pin toe te passen, besloot ik dit op de EN-pin te doen, omdat ik op dat moment denk dat het 'vreemd' zou zijn om de bovenste en onderste transistoren van de fase afwisselend in te schakelen.
In feite lijkt het erop dat er niets mis is met het tegelijkertijd inschakelen van de lage transistors van beide fasen, omdat ze hetzelfde potentieel hebben, dus geen van beide gaat door de stroom.
methode wordt de hoge fase afwisselend in- en uitgeschakeld op de PWM-frequentie, terwijl de lage fase aan blijft tijdens de gehele faseverandering.
Hieronder ziet u een schema van de motoraandrijving. Ik heb ook een
zekering van 2,5 ampère toegevoegd tussen de positieve accukabel en het circuit, een zekering van 100 uF-condensator tussen de voeding en de aarde om de rimpel in de regeneratieve stroom te verminderen.
Dit cijfer is een beetje klein, dus voor grotere versies raadpleegt u de documentatie voor L6234.
Opmerking: Mike Anton heeft de printplaat voor de L6234 gemaakt, die (denk ik) deze
baan zal vervangen en je de montagewerkzaamheden zal besparen.
Zie deze links voor specificaties en aankoopinformatie:
. 3- Ik zal mijn begrip beschrijven van hoe het werkt regeneratief remmen, het
Ik heb er niet veel over gevonden
controlesysteem
maximaliseert ook het koppel, maar deze keer is het een negatief koppel dat ervoor zorgt dat de motor langzamer gaat lopen terwijl de stroom terug naar de accu wordt gestuurd ( ik denk echter
. roteert, fluctueert de BEMF-spanning
in de motorfase op en neer.
In de figuur wordt het moment weergegeven
dat de uitleg in dit tweede artikel gedeeltelijk onjuist is )
waarop BEMF hoog is in fase B en laag
in fase elektronica, het circuit is als een apparaat dat een boost-converter 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 komt vrij wanneer
naar de batterij. De diode voorkomt
spanning stroomt de stroom onmiddellijk door de 'anti-excitatie'
-diode naast elke transistor en keert vervolgens terug
de low-end transistor wordt uitgeschakeld, maar bij een hogere
dat er stroom van de batterij naar de motor vloeit de magneetring
produceert een negatief koppel dat de motor vertraagt. De low-side transistor maakt gebruik van een PWM-schakelaar en de duty-
cycle van PWM regelt de mate van remmen.
Tijdens het rijden schakelt de commutatie van de motor na verloop van tijd over van de ene combinatie naar de volgende om het hoogst mogelijke koppel te behouden. De commutatie van de regeneratieve
rem is zeer vergelijkbaar
, omdat een
niet goed. Ik denk dat de belangrijkste reden is dat de
bepaalde schakelmodus ervoor zorgt dat de motor zoveel mogelijk negatief koppel produceert. maar het werkt
motor van de harde schijf die
ik gebruik een motor met een zeer laag koppel is, dus hij produceert niet veel BEMF, behalve op de hoogste snelheid, er is heel weinig regeneratief remmen (indien aanwezig). Bovendien werkt mijn systeem op een relatief lage spanning ( 12 V). Omdat
de anti-excitatiediode de spanning met enkele volt verlaagt, vermindert dit ook de efficiëntie aanzienlijk betere prestaties als ik een aantal speciale diodes gebruik met een lagere spanningsval. Hieronder staat een lijst met in- en
elk pad door
2- Digitale ingangshal 1 120 K weerstand van Gnd 3
Digitale ingangshal 2 120 K weerstand van Gnd 4 Hal 3 digitale ingang - 120 K weerstand
uitgangen op Arduino. Ook grafieken en foto's van mijn bord.
van Gnd 5 1 Digitale uitgang in serie met 400 ohm weerstand 6 2 Digitale uitgangen in serie met 400 ohm weerstand 7 3 Digitale uitgangen in serie met 400 ohm weerstand 9- Digitale uitgang van EN 1
in serie met 400 ohm weerstand
in serie met 400 ohm weerstand 10-
en analoge pin 0 aangesloten in het midden
Digitale uitgang
van EN 2
11- De EN 3 digitale uitgang
weerstand, 100 k Ohm potentiometer, met 5 V en aarde aangesloten aan beide
uiteinden
De 5 V -voeding wordt ook gebruikt om Hall-sensoren aan te sturen (zie stap 5
is in serie met een 400 ohm
. Deze potentiometer wordt gebruikt om de motorsnelheid en het remvolume te
regelen.
). Hier
is het hele programma dat ik voor Ardjuino heb geschreven, inclusief commentaar:/* bldc_congroller 3. 1.
1*3 door David Glazer De X-serie is een ST L6234 3-fase motoraandrijf-IC * draaiende schijfaandrijfmotor met de klok mee * met regeneratief remmen *
motorsnelheid en remmen worden geregeld door één enkele. potentiometer * motorpositie
ontvangt uitvoer van 3 hall-sensoren (pinnen 2,3,4) * En converteert hun combinatie naar 6 verschillende faseveranderende stappen op pinnen 9
Arduino
, 10, 11
door drie Hall-effectsensoren *
bij 32 kHz * PWM-uitgang (komt overeen met EN 1,2, 3*3
DO
op respectievelijk pinnen 5,6, 7 (IN 1,2,3) * Sluit de simulatie in 0 aan op de potentiometer om te veranderen
0- 499: rem * 500- 523
de PWM-werkcyclus en verandering * tussen rijden en regeneratief remmen *. *
:
Taxi * 524-
1023: autorijden * geeft commentaar op veel regels voor foutopsporing door verschillende waarden af te drukken naar een seriële verbinding
*/Int allstate1;
waarde van alle 3 hall-sensoren int MSP's = 0; /Snelheidsniveau int bSpeed = 0 voor motor; / Remniveau
van gaspedaal = 0;
/Deze variabele wordt samen met de analoge in gebruikt om de positie van de gaskleppotentiometer te meten (){pinMode(2,INPUT); 3 /
motordriver
uitvoer van pinMode
(5,OUTPUT); /In 1 pinMode (6,OUTPUT); /In 2 pinMode (7,OUTPUT);
/In 3 pinMode (9,OUTPUT); /EN 1 pinMode (10
OUTPUT);
,
/EN 2 pinMode (11,OUTPUT); verwijder het commentaar op deze regel. Het flush-commando aan het einde van het programma /
10
* Stel de PWM-frequentie in op pinnen 9,
en 11/stel PWM in op 32 kHz voor pinnen 9, 10/wis eerst alle drie de 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 getal \'11111000\'/stel nu de juiste pre-encoding bit in: int pre-encoding bit 2 = 1; /Set prescalerVal zodat deze gelijk is aan het binaire getal \'00000001\' TCCR1B = prescalerVal2; \'00000001\'/stel PWM in op 32
kHz voor pin 3,11 (dit programma gebruikt alleen pin 11) /Wis eerst alle drie pre-caler bits:
TCCR2B & = ~ Pre-calerval
/En de waarde in TCCR0B met een binair getal van \'11111000\'/stel
nu de
juiste pre-encoding bit in: TCCR2B |
Pre-codering bit 2; /Of de waarde in TCCR0B met een binair getal van \'00000001\'/
wis eerst alle drie de vooraf gecodeerde bits:}
De hoofdlus van de/PRGROM void loop (){
/Time = millis ();
Tijd nadat het afdrukprogramma is gestart //Serial MSPs = map ( Throttle, 512,1023, 0,255); /Rijden wordt toegewezen aan de bovenste helft van de
(3)
potentiometer bSpeed = map ( Throttle, 0,511,255, 0); /
; /Lees invoerwaarde uit Hall 2 3 = Digitaal lezen (4
Half-part regeneratief remmen aan de onderkant van de pot/MSPs ed = 100; 2 = Digitaal lezen
);
de overeenkomstige sensor een hoog vermogen heeft, gaat de led aan. Oorspronkelijk gebruikt om digitalWrite te debuggen (9,
(8, HallState1) ; /Wanneer
Lees invoerwaarde/numeriek schrijven uit Hall 3
HallState2 );
Calculate the binary values of 3 hall sensors/* series. print(\'H 1: \'); For
/
debugging serial port. println(HallState1);
Serial. print(\'H 2: \'); Serial. println(HallState2); Serial.
print(\'H 3: \'); Serial. println( HallState3);
Serial. println(\' \'); */ //Serial. println(mSpeed); //Serial. println(HallVal); //Serial. print(\'\'); /Monitor transistor output/delay (1000); /* T1 = digitalRead (2); //T1 = ~T1; T2 = digitalRead
(4); //T2 = ~T2; T3 = digitalRead
(5);
//T3 = ~T3; Serial. print(T1); Serial. print(\'\t\'
);
Serial. print(T2); Serial. print(\'\t\'); Serial. print(T3); Serial. print(\'\'); Serial. print(\'\'); Serial. print(digitalRead(3)); Serial. print(\'\t\'); Serial. print(digitalRead(9)); Serial. print(\'\t\'); Serial. println(digitalRead(10)); Serial. print(\'\'); Serial. print(\'\');
*/Driving phase change/elk binair getal heeft een case die overeenkomt met de verschillende transistoren die zijn ingeschakeld/bit wiskunde die wordt gebruikt om de waarde van de output arduino te wijzigen: /PORTD bevat de output van de IN-pin op de L6234-driver/de output die wordt gebruikt om te bepalen of de bovenste transistor of de onderste transistor/EN-pin voor elke fase wordt bestuurd door de Arduino-commando-analogie, stel de duty-cycle van PWM in (
0 = UIT, 255 = AAN of gasklepwaarde geregeld door potentiometer). if (throttle > 511) {switch (HallVal){
Case 3:/PORTD = 1111xxx00;
Verwachte output van pin 0-7
xxx verwijst naar Hall-invoer en PORTD & = B00011111 mag niet worden gewijzigd;
B01100000;
/Analowrite (9,mSpeed);
PWM op A-fase (
)
analogWrite(10,0); Fase B sluiting
high-end transistor
(plicht = 0)analogWrite(11,255);
//Fase C in bedrijf = 100%
pauze; = B00011111
; /PORTD | = B00100000
; /Analowrite (9,mSpeed)
( low-end transistor)
; PWM on A phase (
High-end transistor)analogWrite(10,255); //Phase B on ( Low-end transistor)analogWrite(
11,0);
//Phase B off (duty = 0) break
;
Case 5:/PORTD = B101xxx00; /Expected output of pin 0- 7 PORTD & = B00011111;
PORTD | = B10100000
/
;
analogWrite(9,0);
analogWrite(10,255); analogWrite(11,mSpeed); break; Case
4:/PORTD = B100xxx00;
/Expected output of pin 0-
7 PORTD & = B00011111 ;
PORTD | = bym000; /Analowrite (9,255
); analogWrite(10,0); analogWrite(11,mSpeed); break;
Case 6:/PORTD = B110xxx00;
/Expected output of pin 0-
7 PORTD & = B00011111;
PORTD b11. 000 =;
/Analowrite (9,255); analogWrite(10,mSpeed); analogWrite(11,0); break; Case 2:/
(
van
PORTD = B010xxx00; /Expected output of pin 0- 7 PORTD & = B00011111; B0201700 PORTD | =; /Analowrite (9,0); analogWrite(10,mSpeed); analogWrite(11,255); break; }} /Regenerative brake phase change/PORTD
Output
/
IN-
pin op L6234) De pinnen zijn altijd laag, dus tijdens het remmen worden alleen lage transistors gebruikt. else{
PORTD = B000xxx00; Geval 3: analogie
schrijven (9,bSpeed); analogWrite(10,0
); analogWrite(11,0); break;
Case 1: analogy writing (9,bSpeed); analogWrite(10,0); analogWrite(11,0); break;
Case 5: analogy writing (9,0); analogWrite(10,0); analogWrite(11,bSpeed); break;
Case 4: analogy writing (9,0); analogWrite(10,0); analogWrite(11,bSpeed); break; Case 6: analogy writing (9,0); analogWrite(10,bSpeed); analogWrite
(11,0
); break; Case 2: analogy writing (9,0); analogWrite(10,bSpeed); analogWrite(11,0)
; break; }} /Time = millis (); Time after the printing program starts. println(time
); //Serial. print(\'\'); //Serial. flush(); / If you want to debuggen
een seriële
met behulp van
poort, geef geen commentaar.} Ik denk dat de handeling die Arduino in dit project uitvoert
zo eenvoudig is dat het zonde lijkt om deze taak met een microprocessor uit te voeren. In feite bevelen
de
toepassingsnotities van de L6234 een eenvoudige programmeerbare poortarray aan
(GAL16V8 gemaakt van Lattice Semiconductor) om dit werk te doen .
Ik ben niet bekend met de programmering van dit apparaat, maar de kosten van IC bedragen slechts $ 39 bij Newark Een andere optie is om de discrete logische poorten samen te voegen. Ik heb een aantal relatief eenvoudige logische sequenties bedacht die de L6234 IC kunnen aansturen vanaf de uitgang van de
drie hall-sensoren. Het diagram voor fase A wordt hieronder weergegeven, en de waarheidstabel voor alle drie fasen (Om het logische circuit van de B- en C-fasen te bereiken, moet de 'niet'-deur naar de andere kant van de 'of' worden geschakeld. Het probleem met deze aanpak is dat er bij elke fase bijna 20 aansluitingen zijn. fase, dus het vergt nogal wat werk om het in elkaar te zetten.
Het is het beste om het te programmeren als een programmeerbare logische poort.