Contrôle de moteur sans balai avec Arduino, récupéré moteur HD et des capteurs Hall (11 / 12 étapes)

Etape 11 : Logiciel de contrôle pour l’Arduino

Voici le programme complet que j’ai écrit pour le Ardjuino, avec commentaires inclus :
/*
* BLDC_congroller 3.1.1
* par David Glaser
*
* La série 3.x de programmes est pour la ST L6234 moteur 3 phases Driver IC
*
* Fonctionne un moteur de lecteur de disque dans le sens horaire
* Avec système de freinage
* Moteur vitesse et le freinage est commandé par un potentiomètre unique
* Moteur position est déterminée par trois capteurs à effet Hall

* L’Arduino reçoit des sorties de 3 sondes de hall (broches 2,3,4)
* et convertit leur combinaison en 6 étapes de commutation différentes
* PWM sorties sur les broches 9,10,11, à 32 kHz (correspondant respectivement à fr 1,2,3
* 3 ne sur broches 5,6,7 (1,2,3)
* Analogique 0 est relié à un potentiomètre pour modifier l’obligation PWM et définir
entre les automobilistes et régénérative freinage.
* 0 à 499 : freinage
* 500-523 : cabotage
* 524-1023 : automobile
* Il existe de nombreuses lignes a commenté dehors qui ont été utilisés pour le débogage de
* impression des valeurs différentes pour la connexion série.
*/

int HallState1 ; Variables pour les capteurs trois hall (3,2,1)
int HallState2 ;
int HallState3 ;
int HallVal = 1 ; valeur binaire de toutes les sondes de hall 3

int mSpeed = 0 ; niveau de vitesse du moteur
int bSpeed = 0 ; niveau de freinage
manette des gaz int = 0 ; Cette variable est utilisée avec analog dans pour mesurer la position du potentiomètre papillon

void setup() {}
pinMode(2,INPUT) ;    Hall 1
pinMode(3,INPUT) ;    Hall 2
pinMode(4,INPUT) ;    Hall 3

Sorties du pilote de moteur L6234
pinMode(5,OUTPUT) ;   DANS 1
pinMode(6,OUTPUT) ;   2
pinMode(7,OUTPUT) ;   3
pinMode(9,OUTPUT) ;   FR 1
pinMode(10,OUTPUT) ;  FR 2
pinMode(11,OUTPUT) ;  FR 3


Serial.Begin(9600) ; Décommentez cette ligne si vous utilisez la connexion en série
aussi décommenter la commande Serial.flush à la fin du programme.

/ * La valeur de fréquence PWM sur Epingles 9,10 et 11
ce morceau de code provient de
http://usethearduino.blogspot.com/2008/11/Changing-PWM-Frequency-on-Arduino.html
*/
Goupilles de réglage PWM pour 9,10 à 32 kHz
Tout d’abord, désactivez tous les trois bits de diviseur :
int prescalerVal = 0 x 07 ; Créez une variable nommée prescalerVal et égal au nombre nombre binaire « 00000111 » nombre « 00000111 » « 00000111 »
TCCR1B & = ~ prescalerVal ; ET la valeur TCCR0B à nombre binaire « 11111000 »

Maintenant, définissez les bits de diviseur appropriés :
int prescalerVal2 = 1 ; prescalerVal une valeur égale au nombre binaire « 00000001 »
TCCR1B | = prescalerVal2 ; OU la valeur TCCR0B à nombre binaire « 00000001 »

Goupilles de réglage PWM pour 3,11 à 32 kHz (seule broche 11 est utilisée dans ce programme)
Tout d’abord, désactivez tous les trois bits de diviseur :
TCCR2B & = ~ prescalerVal ; ET la valeur TCCR0B à nombre binaire « 11111000 »

Maintenant, définissez les bits de diviseur appropriés :

TCCR2B | = prescalerVal2 ; OU la valeur TCCR0B à //First le nombre binaire « 00000001 » effacer tous les trois bits de diviseur :

}
GRANDE BOUCLE DE LA PRGROM
void loop() {}

temps = millis() ;
imprime le temps depuis le démarrage de programme
Serial.println(Time) ;
Serial.Print("\n") ;

gaz = analogRead(0) ; valeur du potentiomètre papillon
mSpeed = carte (accélérateur, 512, 1023, 0, 255) ; automobile est mappé sur la moitié supérieure du potentiomètre
bSpeed = carte (throttle, 511, 0, 0, 255) ;    régénération de freinage sur le fond la moitié du pot
mSpeed = 100 ; utilisé pour le débogage

HallState1 = digitalRead(2) ;  lire la valeur d’entrée du Hall 1
HallState2 = digitalRead(3) ;  lire la valeur d’entrée du Hall 2
HallState3 = digitalRead(4) ;  lire la valeur d’entrée du Hall 3
digitalWrite (8, HallState1) ;  LED allumé lorsque le capteur correspondant est élevé - initialement utilisé pour le débogage
digitalWrite (9, HallState2) ;
digitalWrite (10, HallState3) ;

HallVal = (HallState1) + (2 * HallState2) + (4 * HallState3) ; Calcule la valeur binaire des capteurs Hall 3

/*Serial.Print (« H 1: ") ; utilisé pour le débogage
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") ;

Sorties de transistor de moniteur
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) ;
*/

Commutation pour automobile
Chaque nombre binaire a un cas qui correspond à différents transistors étant allumés
Math de bit sert à modifier les valeurs de sortie
Tutoriel sur bitmath avec l’Arduino : http://www.arduino.cc/playground/Code/BitMath
PORTD contient les sorties pour les broches IN sur le pilote L6234
qui déterminent si le transistor supérieur ou inférieur de chaque phase utilisé
Les sorties pour les broches EN sont contrôlées par l’Arduino commande analogWrite, qui
définit l’obligation de la PWM (0 = OFF, 255 = ON ou valeur qui est contrôlée par le potentiomètre de papillon).

Si {(gaz > 511)
Switch (HallVal)
{
cas 3 :
PORTD = B011xxx00 ;  Sortie désirée pour xxx broches 0-7 fait référence aux entrées Hall, qui ne doivent pas être changées
PORTD & = B00011111 ;
PORTD | = B01100000 ;  //

analogWrite(9,mSpeed) ; MLI sur la Phase A (transistor à haute pression)
analogWrite(10,0) ;  Phase B arrêt (obligation = 0)
analogWrite(11,255) ; Phase C - duty = 100 % (transistor à basse pression)
rupture ;
cas 1 :
PORTD = B001xxx00 ;  Sortie désirée pour broches 0-7
PORTD & = B00011111 ;  //
PORTD | = B00100000 ;  //

analogWrite(9,mSpeed) ; MLI sur la Phase A (transistor à haute pression)
analogWrite(10,255) ; Phase B (transistor à basse pression)
analogWrite(11,0) ; Phase B arrêt (obligation = 0)
rupture ;
cas no 5 :
PORTD = B101xxx00 ;  Sortie désirée pour broches 0-7
PORTD & = B00011111 ;  //
PORTD | = B10100000 ;

analogWrite(9,0) ;
analogWrite(10,255) ;
analogWrite(11,mSpeed) ;
rupture ;
cas 4 :
PORTD = B100xxx00 ;  Sortie désirée pour broches 0-7
PORTD & = B00011111 ;
PORTD | = B10000000 ;  //

analogWrite(9,255) ;
analogWrite(10,0) ;
analogWrite(11,mSpeed) ;
rupture ;
cas 6 :
PORTD = B110xxx00 ;  Sortie désirée pour broches 0-7
PORTD & = B00011111 ;
PORTD = B11000000 ;  //

analogWrite(9,255) ;
analogWrite(10,mSpeed) ;
analogWrite(11,0) ;
rupture ;
cas 2 :
PORTD = B010xxx00 ;  Sortie désirée pour broches 0-7
PORTD & = B00011111 ;
PORTD | = B01000000 ;  //

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

Commutation pour système de freinage
Broches PORTD (sorties de pins sur L6234) sont toujours faibles alors que le
des transistors plus bas sur chaque phase sont utilisés
transistors haute sont toujours hors tension pendant regen. de freinage.
else {}
PORTD = B000xxx00 ;  Sortie désirée pour broches 0-7
PORTD & = B00011111 ;
PORTD | = B00000000 ;  //
Switch (HallVal)
{
cas 3 :
analogWrite(9,bSpeed) ;
analogWrite(9,0) ;
analogWrite(10,0) ;
analogWrite(11,0) ;
rupture ;
cas 1 :
analogWrite(9,bSpeed) ;
analogWrite(10,0) ;
analogWrite(11,0) ;
rupture ;
cas no 5 :
analogWrite(9,0) ;
analogWrite(10,0) ;
analogWrite(11,bSpeed) ;
rupture ;
cas 4 :
analogWrite(9,0) ;
analogWrite(10,0) ;
analogWrite(11,bSpeed) ;
rupture ;
cas 6 :
analogWrite(9,0) ;
analogWrite(10,bSpeed) ;
analogWrite(11,0) ;
rupture ;
cas 2 :
analogWrite(9,0) ;
analogWrite(10,bSpeed) ;
analogWrite(11,0) ;
rupture ;
}
}
temps = millis() ;
imprime le temps depuis le démarrage de programme
Serial.println(Time) ;
Serial.Print("\n") ;
Serial.Flush() ; Décommentez ceci si vous souhaitez utiliser le port série pour le débogage
}

Articles Liés

La réalisation d’un cardan bricolage sans balais avec Arduino

La réalisation d’un cardan bricolage sans balais avec Arduino

Il s'agit d'une histoire de mon troisième projet avec gyro bon marché et Arduino.Après les précédentes deux projets, Simple pendule inversé et calligraphie 3D, j'ai pensé faire Caméra cardan avec Arduino. Puis j'ai eu trois stratégies pour le projet.
Cardan sans balais avec Arduino

Cardan sans balais avec Arduino

Il s'agit d'un projet de printemps 2014 Electronics à Pomona College créé par Andreas Biekert et Jonah Grubb. Merci au professeur Dwight Whitaker, Tony Grigsby et le département de physique de Pomona.Avec ce projet, notre but était de créer un cardan
* mise à jour * LED-tour « Hello », Vu-mètre avancé de détection musique sans qu’avec Arduino et l’interfaçage d’IC avec le logiciel PC Windows !

* mise à jour * LED-tour « Hello », Vu-mètre avancé de détection musique sans qu’avec Arduino et l’interfaçage d’IC avec le logiciel PC Windows !

LED-tour « Hello », Vu-mètre avancé de détection musique sans qu'avec Arduino d'ICet l'interfaçage avec le logiciel PC Windows ! Salut, tout le monde.Ce qui rend ce projet cool c'est le fait, que sa musique de télédétection, contrairement aux traditi
Comment faire une télécommande contrôlée main robotisée avec Arduino

Comment faire une télécommande contrôlée main robotisée avec Arduino

C'est mon projet d'école pour la 5e année du secondaire (je suis italien, nous avons 5 ans d'études secondaires).Il consiste en une main artificielle contrôlée par un gant avec des capteurs de flex. La main artificielle qui reproduit les mouvements d
Assurez-vous câblé bras robotisé Edge « Sans fil » avec Arduino DIY + XBee

Assurez-vous câblé bras robotisé Edge « Sans fil » avec Arduino DIY + XBee

Mise à jour : ajouté schéma Top Layer PCB, PCB de couche de fond et les deux dessus, images de fond PCBQuand j'ai fini le « RevIO » - un Clone de l'Arduino, qui a la façon différente d'exposer son utilisation de goupilles. J'ai décidé d'aller plus lo
Contrôle Motors(PC Fans) DC avec Arduino et relais Conseil

Contrôle Motors(PC Fans) DC avec Arduino et relais Conseil

Dans cette instructable nous verrons sans entrer dans les détails, l'utilisation de 12V DC moteurs (Fans de PC) avec Arduino et relais Conseil eBlockÉtape 1: Configuration matérielle et logicielle Pour en faire nous avons besoin de certains matériels
Contrôler votre musique sans fil avec une souris Logitech

Contrôler votre musique sans fil avec une souris Logitech

avez-vous jamais eu besoin de contrôler votre musique sans fil ? Avec un peu de logiciel et d'une souris Logitech, c'est facile. Nous irons sur la façon de mettre en place votre souris afin que vous pouvez mettre en pause, sauter et rejouer jusqu'à c
Contrôler un bras robotisé OWI avec Arduino

Contrôler un bras robotisé OWI avec Arduino

OWI le bras robotique de pointe est un formidable et bon marché 5-degré de liberté robotique bras que tout coûte 37 $. C'est un excellent kit pour construire avec un gamin et ne prendra pas plus de quelques heures pour terminer. Out of the box, il pe
Contrôler l’interrupteur à distance CoTech avec Arduino (433Mhz)

Contrôler l’interrupteur à distance CoTech avec Arduino (433Mhz)

Tout à l'heure j'ai acheté 3 interrupteurs à distance Co/Tech 51058 x 10 et un 50027 éloignées des Clas Ohlson en Norvège. Ils utilisent l'AM 433mhz bande de communiquer. J'ai voulu contrôler avec un Arduino, et après avoir googler et lu beaucoup de
Interrupteur de contrôle horaire (433MHz) sans fil de Arduino pour plusieurs périphériques

Interrupteur de contrôle horaire (433MHz) sans fil de Arduino pour plusieurs périphériques

J'ai écrit cette instructable parce que j'ai fait un projet similaire récemment et pensé qu'il serait agréable d'écrire mon travail et partager avec les autres.Ce que nous voulons atteindre avec cette instructable, est sans fil contrôler plusieurs ap
Contrôler quoi que ce soit avec Arduino et une télécommande infrarouge

Contrôler quoi que ce soit avec Arduino et une télécommande infrarouge

Salut, ceci est mon premier instructable et j'ai pensé que je montrerais une brève démonstration de comment contrôler quoi que ce soit comme la LED, moteurs à courant continu et un tas d'autres choses avec un arduino et à peu près n'importe quelle té
Tutoriel - aide HC06 Bluetooth adaptateurs série UART sans fil avec Arduino

Tutoriel - aide HC06 Bluetooth adaptateurs série UART sans fil avec Arduino

Envoi des données entre un Arduino ou compatible Office et un périphérique Bluetooth tel qu'un smartphone Android ou la tablette est très facile grâce à des modules Bluetooth HC-06 peu coûteux, que vous avez peut-être vu sur le marché. Ils sont égale
Contrôle automatique du ventilateur aquarium avec arduino mini

Contrôle automatique du ventilateur aquarium avec arduino mini

une autre bonne chose pour l'aquarium, dans la chaleur de l'été. :)Avec cet appareil mini arduino, vous pouvez activer automatiquement l'aquarium ventilateur quand la température de l'eaufranchi le niveau ajusté.Réglable de 21 à 30 * C. (69,8-86 * F)
Programmation ESP8266 ESP-12F NodeMCU v1.0 avec Arduino IDE dans l’enregistreur de température sans fil

Programmation ESP8266 ESP-12F NodeMCU v1.0 avec Arduino IDE dans l’enregistreur de température sans fil

Retour à fin 2014 et 2015 au début, votre vraiment tombé surCette ESP8266 de puce WiFi astucieux (l'ESP-01) et dois bataille parmi les documentations incompatibles provenant de diverses sources. Pour l'instant de l'éperon, il a documenté ses frustrat