BLDC Motor Control met Arduino, geborgen HD-motor en Hall sensoren (11 / 12 stap)

Stap 11: Controlesoftware voor de Arduino


Hieronder is het volledige programma dat ik schreef voor de Ardjuino, met opmerkingen opgenomen:
/*
* BLDC_congroller 3.1.1
* door David Glaser
*
* De 3.x serie van programma's is voor de ST L6234 3-fase Motor Driver IC
*
* Loopt een schijf toer motor met de klok mee
* Met regeneratief remmen
* Motor snelheid en remmen wordt beheerd door een enkele potentiometer
* Motor positie wordt bepaald met drie sensoren van Hall-Effect

* De Arduino ontvangt uitgangen van 3 hall-sensoren (pinnen 2,3,4)
* en hun combinatie omgezet in 6 verschillende telefonieoverdracht stappen
* PWM-uitgangen op pennen 9,10,11, op 32 kHz (overeenkomend met nl 1,2,3 respectievelijk
* 3 doen op pinnen 5,6,7 (IN 1,2,3)
* Analoog in 0 is aangesloten op een potmeter om te veranderen van de PWM-plicht en wijzigen
* tussen autorijden en remmen met energieterugwinning.
* 0-499: remmen
* 500-523: kustvaarders
* 524-1023: autorijden
* Er zijn veel regels commentaar die werden gebruikt voor het opsporen van fouten door
* afdrukken van verschillende waarden voor de seriële aansluiting.
*/

int HallState1; Variabelen voor de drie hall-sensoren (3,2,1)
int HallState2;
int HallState3;
int HallVal = 1; binaire waarde van alle 3 hall-sensoren

int mSpeed = 0; niveau van de snelheid van de motor
int bSpeed = 0; remmen van niveau
int gasklep = 0; Deze variabele wordt gebruikt met analoge in voor het meten van de positie van de gasklep potentiometer

VOID Setup {}
pinMode(2,INPUT);    Hal 1
pinMode(3,INPUT);    Hal 2
pinMode(4,INPUT);    Hal 3

Uitgangen voor de L6234 Motor-Driver
pinMode(5,OUTPUT);   IN 1
pinMode(6,OUTPUT);   IN 2
pinMode(7,OUTPUT);   IN 3
pinMode(9,OUTPUT);   NL 1
pinMode(10,OUTPUT);  NL 2
pinMode(11,OUTPUT);  NL 3


Serial.begin(9600); uncomment deze lijn als u de seriële aansluiting gebruiken
ook uncomment Serial.flush opdracht aan einde van het programma.

/ * PWM-mailfrequentie instellen op pinnen 9,10 en 11
Dit codefragment vandaan
http://usethearduino.blogspot.com/2008/11/Changing-PWM-Frequency-on-Arduino.html
*/
Set PWM voor pinnen 9,10 tot en met 32 kHz
Eerst schakelt u alle drie prescaler bits:
int prescalerVal = 0x07; Maak een variabele met de naam prescalerVal en stel deze gelijk aan het aantal nummer "00000111" binair getal "00000111" "00000111"
TCCR1B & = ~ prescalerVal; EN de waarde in TCCR0B met binair getal "11111000"

Nu het instellen van de juiste prescaler bits:
int prescalerVal2 = 1; prescalerVal ingesteld op binair getal "00000001"
TCCR1B | = prescalerVal2; OF de waarde in TCCR0B met binair getal "00000001"

Set PWM voor pinnen 3,11 tot en met 32 kHz (alleen pin 11 wordt gebruikt in dit programma)
Eerst schakelt u alle drie prescaler bits:
TCCR2B & = ~ prescalerVal; EN de waarde in TCCR0B met binair getal "11111000"

Nu het instellen van de juiste prescaler bits:

TCCR2B | = prescalerVal2; OF de waarde in TCCR0B met binair getal "00000001" //First uit alle drie prescaler bits:

}
MAIN LOOP VAN DE PRGROM
void loop {}

tijd = millis();
afdrukken van tijd aangezien programma gestart
Serial.println(time);
Serial.Print("\n");

gasklep = analogRead(0); waarde van de gasklep potentiometer
mSpeed = kaart (gashendel, 512, 1023, 0, 255); autorijden is toegewezen aan de bovenste helft van de potentiometer
bSpeed = kaart (throttle, 511, 255, 0, 0);    regeneratief remmen op de onderste helft van de pot
mSpeed = 100; gebruikt voor foutopsporing

HallState1 = digitalRead(2);  Lees de invoerwaarde van hal 1
HallState2 = digitalRead(3);  invoerwaarde afgelezen in hal 2
HallState3 = digitalRead(4);  Lees de invoerwaarde van Hall 3
digitalWrite (8, HallState1);  LED's ingeschakeld wanneer de bijbehorende sensor is hoog - oorspronkelijk gebruikt voor foutopsporing
digitalWrite (9, HallState2);
digitalWrite (10, HallState3);

HallVal = (HallState1) + (2 * HallState2) + (4 * HallState3); Berekent de binaire waarde van de 3 Hall-sensoren

/*Serial.Print ("H 1:"); gebruikt voor foutopsporing
Serial.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("\n");

Monitor transistor hulpuitgangen
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("\n");
Serial.Print("\n");
Serial.Print(digitalRead(3));
Serial.Print("\t");
Serial.Print(digitalRead(9));
Serial.Print("\t");
Serial.println(digitalRead(10));
Serial.Print("\n");
Serial.Print("\n");
delay(500);
*/

Apparatuur voor telefonische overdracht voor automobiliteit geworden
Elk binair getal heeft een behuizing die correspondeert met verschillende transistoren wordt ingeschakeld
Bits Math wordt gebruikt om de waarden van de output wijzigen
Voor zelfstudie over bitmath met de Arduino: http://www.arduino.cc/playground/Code/BitMath
PORTD bevat de uitgangen voor de pennen IN op het L6234-stuurprogramma
die bepalen of de boven- of ondergrens transistor van elke fase wordt gebruikt
De uitgangen voor de nl-pennen worden gecontroleerd door de Arduino opdracht analogWrite, die
Hiermee stelt u de plicht van de PWM (0 = OFF, 255 = ON of waarde die wordt gecontroleerd door de potentiometer throttle).

Als (gashendel > 511) {}
schakelaar (HallVal)
{
Case 3:
PORTD = B011xxx00;  Gewenste Output voor pinnen 0-7 xxx verwijst naar de Hall-ingangen, die niet mogen worden gewijzigd
PORTD & = B00011111;
PORTD | = B01100000;  //

analogWrite(9,mSpeed); PWM op fase A (hoge kant transistor)
analogWrite(10,0);  Fase B uit (plicht = 0)
analogWrite(11,255); Fase C - dienstdoende = 100% (lage kant transistor)
breken;
Case 1:
PORTD = B001xxx00;  Gewenste Output voor pinnen 0-7
PORTD & = B00011111;  //
PORTD | = B00100000;  //

analogWrite(9,mSpeed); PWM op fase A (hoge kant transistor)
analogWrite(10,255); Fase B op (lage kant transistor)
analogWrite(11,0); Fase B uit (plicht = 0)
breken;
Case 5:
PORTD = B101xxx00;  Gewenste Output voor pinnen 0-7
PORTD & = B00011111;  //
PORTD | = B10100000;

analogWrite(9,0);
analogWrite(10,255);
analogWrite(11,mSpeed);
breken;
Case 4:
PORTD = B100xxx00;  Gewenste Output voor pinnen 0-7
PORTD & = B00011111;
PORTD | = B10000000;  //

analogWrite(9,255);
analogWrite(10,0);
analogWrite(11,mSpeed);
breken;
Case 6:
PORTD = B110xxx00;  Gewenste Output voor pinnen 0-7
PORTD & = B00011111;
PORTD = B11000000;  //

analogWrite(9,255);
analogWrite(10,mSpeed);
analogWrite(11,0);
breken;
Case 2:
PORTD = B010xxx00;  Gewenste Output voor pinnen 0-7
PORTD & = B00011111;
PORTD | = B01000000;  //

analogWrite(9,0);
analogWrite(10,mSpeed);
analogWrite(11,255);
breken;
}
}

Apparatuur voor telefonische overdracht voor het remmen met energieterugwinning
PORTD (Outputs voor IN pinnen op L6234) pinnen zijn altijd laag dus alleen de
lagere transistoren op elke fase worden gebruikt
bovenste transistoren zijn altijd af tijdens regen. remmen.
else {}
PORTD = B000xxx00;  Gewenste Output voor pinnen 0-7
PORTD & = B00011111;
PORTD | = B00000000;  //
schakelaar (HallVal)
{
Case 3:
analogWrite(9,bSpeed);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,0);
breken;
Case 1:
analogWrite(9,bSpeed);
analogWrite(10,0);
analogWrite(11,0);
breken;
Case 5:
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,bSpeed);
breken;
Case 4:
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,bSpeed);
breken;
Case 6:
analogWrite(9,0);
analogWrite(10,bSpeed);
analogWrite(11,0);
breken;
Case 2:
analogWrite(9,0);
analogWrite(10,bSpeed);
analogWrite(11,0);
breken;
}
}
tijd = millis();
afdrukken van tijd aangezien programma gestart
Serial.println(time);
Serial.Print("\n");
Serial.Flush(); uncomment dit als u seriële poort voor foutopsporing gebruiken
}

Gerelateerde Artikelen

Motor Control met arduino motor shield via Web

Motor Control met arduino motor shield via Web

In dit project, zal ik de controle van DC motor (ventilator Computer) met motor shield(official) via webpagina's.U kunt de motor zoals trage of snelle snelheid en stop.Ook als u wilt, kunt u controleknop toevoegen of wijzigen van besturingsknop in we
Krachtige controle met Arduino: Interfacing een lineaire Actuator

Krachtige controle met Arduino: Interfacing een lineaire Actuator

In dit specifieke artikel zullen we bespreken hoe eenvoudig het is om controle van krachtige mechanische kracht met behulp van een microcontroller zoals de Arduino en een lineaire Actuator van DC lineaire actuatoren Inc.Stap 1: MicrocontrollersRaspbe
OSD-Audio ATM-7 Smartphone Speaker controle met Arduino en Blynk

OSD-Audio ATM-7 Smartphone Speaker controle met Arduino en Blynk

Deze dagen zijn er verschillende manieren om te implementeren multi-zone geluid met behulp van smartphone gebaseerd controle, maar de meeste zijn beperkt tot een aantal zones of vereisen duur merkgebonden vakken op elke locatie (Hello! Sonos). Een sp
Gyroscoop leidde controle met Arduino

Gyroscoop leidde controle met Arduino

In dit project zal ik u tonen hoe te bouwen van een eenvoudige 4 led tilt dimmer met een gyroscoop en een arduino uno. Er zijn 4 LED's die zijn gerangschikt in de vorm van een "+" en ze meer als je het breadboard Tilt zal oplichten.Stap 1: mater
Aquarium automatische ventilator controle met arduino mini

Aquarium automatische ventilator controle met arduino mini

een ander goed ding voor het aquarium, in de zomer warmte. :)Met dit arduino mini apparaat, kunt u automatisch het aquarium fan wanneer de temperatuur van het waterstak het aangepast niveau.Regelbaar zijn tussen 21-30 * C. (69,8-86 * F)Temperatuursen
Controle van een DC-motor met Arduino en Visual Basic

Controle van een DC-motor met Arduino en Visual Basic

Hallo vrienden dit is mijn eerste post in instructables.com waar ik zal proberen om meer nieuwheid des vaak.Thema is vandaag met Arduino en Visual Basic.Het project dat we nu zien is een dc-motor controller met Arduino en Visual Basic.Om te controler
Dual Motor Driver met Arduino met behulp van een SN754410NE Quad halve H-Bridge

Dual Motor Driver met Arduino met behulp van een SN754410NE Quad halve H-Bridge

Een stap voor stap projectrichtlijnen door ArduinoFunMet dit Instructable ga ik je laten zien hoe u met een SN754410NE Quad H-Bridge IC controle twee 12-volt DC-motoren.Ik heb een video toegevoegd zodat u de dubbele Motor in actie kunt zien.  Zoals u
Het uitvoeren van een borstelloze motor ESC met Arduino

Het uitvoeren van een borstelloze motor ESC met Arduino

Dit instructable zal u tonen hoe te configureren en het uitvoeren van een borstelloze motor ESC met een arduino en het uitvoeren van een borstelloze motor op verschillende snelheden. Het zal gaan door de materialen, installatie van hardware en de sof
Run A CDROM Brushless Motor met Arduino

Run A CDROM Brushless Motor met Arduino

een borstelloze dc-motor of BLDC is een soort motor zonder een borstel. Het betekent dat er geen directe verbinding (penseel is) tussen roterende as en andere vaste delen zoals als spoel. Het spinnen is dus rendement van wijzigingen in de huidige ric
Hoe met behulp van oude Stepper Motors met Arduino en A4988 Driver

Hoe met behulp van oude Stepper Motors met Arduino en A4988 Driver

Mij zijn geweest using stappenmotoren voor een tijdje nu, en ze zijn fantastisch voor allerlei soorten robotica projecten.Vandaag zal ik het aandeel van de dingen die ik tot nu toe heb geleerd over het hergebruik van oude stappenmotoren geborgen van
DC Motors(PC Fans) regelen met Arduino en Relay bord

DC Motors(PC Fans) regelen met Arduino en Relay bord

In dit instructable zullen we zien zonder in detail te treden, het gebruik van 12V DC motoren (PC ventilatoren) met Arduino en relais boord eBlockStap 1: Instellen van Hardware en Software Om het te maken moeten we sommige hardware die u op het Inter
Controle van een OWI robotarm met Arduino

Controle van een OWI robotarm met Arduino

de OWI rand robotarm is een goedkope en geweldig 5-mate-van-vrijheid robotic arm dat alleen kost $37. Het is een grote kit met een kind op te bouwen en meer dan een paar uur tot finish zal niet duren. Uit de doos, kan het alleen worden gecontroleerd
Gesture control car(robot) met Arduino en Android(bluetooth)

Gesture control car(robot) met Arduino en Android(bluetooth)

Hallo mensen,Hier is een interessant project voor alles wat je daar creatieve geesten. We gaan om een android telefoon gecontroleerde RC auto te bouwen.Niets zou zijn meer fascinerend dan extern gecontroleerde auto. Deze maakt gebruik van Bluetooth v
Hoe maak je een remote controlled Robotic Hand met Arduino

Hoe maak je een remote controlled Robotic Hand met Arduino

Dit is mijn schoolproject voor het 5de jaar van de middelbare school (ik ben Italiaans, we hebben 5 jaar van de middelbare school).Het bestaat uit een kunstmatige hand gecontroleerd door een handschoen met flex sensoren. De kunstmatige hand reproduce