Control de Motor de BLDC con Arduino, salvado el motor del HD y sensores Hall (11 / 12 paso)

Paso 11: Software de Control para el Arduino

Abajo está todo el programa que escribí para el Ardjuino, con comentarios incluidos:
/*
* BLDC_congroller 3.1.1
* por David Glaser
*
* La serie 3.x de programas es para lo ST L6234 3 fases Motor Driver IC
*
* Ejecuta un motor de unidad de disco en sentido horario
* Con frenado regenerativo
* Velocidad motor y de frenado es controlado por un potenciómetro único
* Determinada posición motor con tres sensores de efecto Hall

* El Arduino recibe salidas de sensores hall 3 (pines 2,3,4)
* y su combinación se convierte en 6 pasos diferentes de conmutación
* PWM salidas pines 9,10,11, a 32 kHz (correspondiente a EN 1,2,3 respectivamente
* 3 no en pernos 5.6.7 (1,2,3)
* Analógico en 0 está conectado a un potenciómetro para cambiar el deber PWM y cambiar
entre el automovilismo y regenerativo de frenado.
* 0-499: frenado
* 500-523: costear
* 524-1023: automovilismo
* Hay muchas líneas comentamos hacia fuera que se utiliza para la depuración por
* impresión de distintos valores para la conexión en serie.
*/

int HallState1; Variables de los sensores de tres pasillo (3,2,1)
int HallState2;
int HallState3;
int HallVal = 1; valor binario de todos los sensores de pasillo 3

int mSpeed = 0; nivel de velocidad del motor
int bSpeed = 0; nivel de frenado
Acelerador de int = 0; Esta variable se utiliza con análogo en para medir la posición del potenciómetro mariposa

void setup() {}
pinMode(2,INPUT);    Pabellón 1
pinMode(3,INPUT);    Sala 2
pinMode(4,INPUT);    Sala 3

Salidas para el conductor del Motor L6234
pinMode(5,OUTPUT);   EN LA 1
pinMode(6,OUTPUT);   EN LA 2
pinMode(7,OUTPUT);   EN EL 3
pinMode(9,OUTPUT);   EN 1
pinMode(10,OUTPUT);  EN 2
pinMode(11,OUTPUT);  EN 3


Serial.Begin(9600); descomentar esta línea Si utilizas la conexión en serie
también descomentar Serial.flush comando al final del programa.

/ * Ajustar frecuencia de PWM en pernos 9,10 y 11
Este pedacito de código proviene de
http://usethearduino.blogspot.com/2008/11/Changing-PWM-Frequency-on-Arduino.html
*/
Set PWM para pernos de 9,10 a 32 kHz
Claro primero todos los tres bits de divisor:
int prescalerVal = 0x07; crear una variable llamada prescalerVal y set igual al número binario "00000111" número "00000111" número "00000111"
TCCR1B & = ~ prescalerVal; Y el valor en TCCR0B con el número binario "11111000"

Ahora configurar los bits divisor apropiados:
int prescalerVal2 = 1; prescalerVal Set igual al número binario "00000001"
TCCR1B | = prescalerVal2; O el valor en TCCR0B con el número binario "00000001"

Set PWM para pernos 3,11 a 32 kHz (sólo pin 11 se utiliza en este programa)
Claro primero todos los tres bits de divisor:
TCCR2B & = ~ prescalerVal; Y el valor en TCCR0B con el número binario "11111000"

Ahora configurar los bits divisor apropiados:

TCCR2B | = prescalerVal2; O el valor en TCCR0B con el número binario "00000001" //First todos los tres bits de divisor:

}
BUCLE PRINCIPAL DE LA PRGROM
void loop() {}

tiempo = millis();
imprime el tiempo desde que comenzó el programa
Serial.println(Time);
Serial.Print("\n");

mariposa = analogRead(0); valor del potenciómetro mariposa
mSpeed = mapa (acelerador, 512, 1023, 0, 255); Automovilismo se asigna a la parte superior del potenciómetro
bSpeed = mapa (de la válvula reguladora, 511, 255, 0, 0);    frenado regenerativo en la parte inferior de olla
mSpeed = 100; utiliza para la depuración

HallState1 = digitalRead(2);  leer valor de entrada del pabellón 1
HallState2 = digitalRead(3);  leer valor de entrada de la sala 2
HallState3 = digitalRead(4);  leer valor de entrada de la sala 3
digitalWrite (8, HallState1);  LED encendida cuando el sensor correspondiente es alto - originalmente se utiliza para la depuración
digitalWrite (9, HallState2);
digitalWrite (10, HallState3);

HallVal = (HallState1) + (2 * HallState2) + (4 * HallState3); Calcula el valor binario de los 3 sensores de pasillo

/*Serial.Print ("H 1:"); utiliza para la depuración
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 salidas del transistor
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);
*/

Conmutación para automovilismo
Cada número binario tiene un caso que corresponde a los diferentes transistores se enciende
Bits de matemáticas se utilizan para cambiar los valores de la salida
Tutorial en bitmath con Arduino: http://www.arduino.cc/playground/Code/BitMath
PORTD contiene las salidas de los pines de la IN en el controlador L6234
determinar si se utiliza el transistor superior o inferior de cada fase
Las salidas de los pines EN son controladas por el Arduino comando analogWrite, que
establece el deber del PWM (0 = OFF, 255 = ON o valor que se controla con el potenciómetro de la válvula reguladora).

Si (acelerador > 511) {}
interruptor (HallVal)
{
caso 3:
PORTD = B011xxx00;  Salida deseada para pins 0-7 xxx se refiere a las entradas de la sala, que no se deben cambiar
PORTD y = B00011111;
PORTD | = B01100000;  //

analogWrite(9,mSpeed); PWM en fase A (transistor de alta presión)
analogWrite(10,0);  Fase B apagado (deber = 0)
analogWrite(11,255); Fase C en - deber = 100% (transistor del lado de baja)
rotura;
caso 1:
PORTD = B001xxx00;  Salida deseada para pins 0-7
PORTD y = B00011111;  //
PORTD | = B00100000;  //

analogWrite(9,mSpeed); PWM en fase A (transistor de alta presión)
analogWrite(10,255); Fase B (transistor del lado de baja)
analogWrite(11,0); Fase B apagado (deber = 0)
rotura;
caso 5:
PORTD = B101xxx00;  Salida deseada para pins 0-7
PORTD y = B00011111;  //
PORTD | = B10100000;

analogWrite(9,0);
analogWrite(10,255);
analogWrite(11,mSpeed);
rotura;
caso 4:
PORTD = B100xxx00;  Salida deseada para pins 0-7
PORTD y = B00011111;
PORTD | = B10000000;  //

analogWrite(9,255);
analogWrite(10,0);
analogWrite(11,mSpeed);
rotura;
caso 6:
PORTD = B110xxx00;  Salida deseada para pins 0-7
PORTD y = B00011111;
PORTD = B11000000;  //

analogWrite(9,255);
analogWrite(10,mSpeed);
analogWrite(11,0);
rotura;
caso 2:
PORTD = B010xxx00;  Salida deseada para pins 0-7
PORTD y = B00011111;
PORTD | = B01000000;  //

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

Conmutación para frenado regenerativo
Pines PORTD (salidas para en pins en L6234) siempre son bajos por lo que sólo el
se utilizan transistores inferiores en cada fase
los transistores superiores son siempre apagado durante la regeneración. de frenado.
Else {}
PORTD = B000xxx00;  Salida deseada para pins 0-7
PORTD y = B00011111;
PORTD | = B00000000;  //
interruptor (HallVal)
{
caso 3:
analogWrite(9,bSpeed);
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,0);
rotura;
caso 1:
analogWrite(9,bSpeed);
analogWrite(10,0);
analogWrite(11,0);
rotura;
caso 5:
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,bSpeed);
rotura;
caso 4:
analogWrite(9,0);
analogWrite(10,0);
analogWrite(11,bSpeed);
rotura;
caso 6:
analogWrite(9,0);
analogWrite(10,bSpeed);
analogWrite(11,0);
rotura;
caso 2:
analogWrite(9,0);
analogWrite(10,bSpeed);
analogWrite(11,0);
rotura;
}
}
tiempo = millis();
imprime el tiempo desde que comenzó el programa
Serial.println(Time);
Serial.Print("\n");
Serial.Flush(); descomentar esto si va a usar puerto serie para la depuración
}

Artículos Relacionados

Interfaz de Motor de CC sin escobillas (BLDC) con Arduino

Interfaz de Motor de CC sin escobillas (BLDC) con Arduino

este es un tutorial sobre cómo la interfaz y funcionamiento de un motor DC sin escobillas con Arduino. Si usted tiene alguna pregunta o comentario por favor, responda en los comentarios o por correo a rautmithil [at] gmail [dot] com. También puede ob
Interfaz de Motor de corriente continua sin escobillas (BLDC) con Arduino

Interfaz de Motor de corriente continua sin escobillas (BLDC) con Arduino

Este es un tutorial sobre cómo la interfaz y funcionamiento de un motor DC sin escobillas con Arduino. Si usted tiene alguna pregunta o comentario por favor, responda en los comentarios o por correo a rautmithil [at] gmail [dot] com. Usted también pu
Control de interruptor remoto CoTech con Arduino (433Mhz)

Control de interruptor remoto CoTech con Arduino (433Mhz)

Hace poco tiempo compré 3 interruptores remotos de Co/Tech 51058 x 10 y una 50027 remoto de Clas Ohlson en Noruega. Utiliza la AM 433mhz banda para comunicarse. Quería controlar con un Arduino, y después de googlear y leer mucho tiempo, no pude encon
Seguimiento y control de su auto remotamente con Arduino y Android

Seguimiento y control de su auto remotamente con Arduino y Android

En realidad, muchos de nosotros pueden sufrir o miedo de ser su auto robada. En este proyecto, voy a intentar ayudarte a proteger tus coches e incluso controlarlos remotamente.Básicamente, tienes que dejar un teléfono móvil en su coche y cuando el co
Construir un tablero de circuitos de transistor para control mando de aire acondicionado con Arduino

Construir un tablero de circuitos de transistor para control mando de aire acondicionado con Arduino

yo estuve apoyando un grupo de estudiantes en su proyecto de graduación. Una de las dificultades fue el control de una unidad de aire acondicionado con microcontrolador Arduino.El primer experimento que tratamos de resolverla era por registro la seña
Control de un Led RGB con Arduino y procesamiento

Control de un Led RGB con Arduino y procesamiento

este instructable (mi primer no menos) se muestra cómo controlar un RGB led usando procesamiento y arduino.La característica fundamental que el color se selecciona haciendo clic en una imagen, el valor RGB del pixel que usted haga clic en es procesad
IR Control remoto para tu ordenador con arduino

IR Control remoto para tu ordenador con arduino

Con este receptor, controlar el ordenador remotamente gracias al módulo IR y Arduino.Modo de Lazzy activado ^^Paso 1: En primer lugar debo desmontar receptor de IR de Sony VAIO myold.Receptor IR que viene de mi padre, totalmente inservible porque pro
El control de reguladores de velocidad con Arduino.

El control de reguladores de velocidad con Arduino.

Hola chicos, estoy con otro instructivo. Esto es sobre variadores RC. Lo que esto hará es permitirle probar el controlador de velocidad en el mundo de Arduino usando serie, entonces usted anote los valores y puede utilizarlos para sus proyectos.Envia
Control remoto controle su ordenador portátil con arduino UNO!

Control remoto controle su ordenador portátil con arduino UNO!

Hola a todos.En este tutorial, voy a enseñarte cómo puede convertir su Arduino Uno en un sistema de control remoto para tu ordenador.Paso 1: lo que se necesitaPrincipiante:1. Arduino Uno2. receptor de infrarrojos3. IR remote4. Arduino softwareAvanzad
Control de aparatos electrodomésticos con Arduino

Control de aparatos electrodomésticos con Arduino

Hola Instructables... Aquí está el proyecto simple por el cual nos podemos encender y apagar aparatos por cualquier ordinario IR remotos TV, controles remotos DVD etc...,Paso 1: Componentes necesarios Componentes requierenPlaca de relé conductor - 1T
Táctil teclado / controlador con Arduino y el proceso del juego

Táctil teclado / controlador con Arduino y el proceso del juego

este instructable describe de una manera rápida y sencilla para crear un teclado táctil o un controlador de juegos con-cartón,-papel de aluminio,- y un Arduino.También proporciona los códigos de Arduino y el proceso para comenzar a jugar inmediatamen
Coche de Control remoto con Arduino y Bluetooth

Coche de Control remoto con Arduino y Bluetooth

Este proyecto consiste en hacer un coche de control remoto mediante una conexión bluetooth. Este coche está destinado a ser utilizado en un globo hacer estallar la competencia contra otros coches similares. La conexión inalámbrica se consigue mediant
Control de calidad con Arduino Uno de aire

Control de calidad con Arduino Uno de aire

Control de calidad de aire con Arduino Uno con la ayuda de MQ135 aire calidad gases peligrosos módulo Sensor Detector.Paso 1: Configuración de pines Rojo = 5VVerde = datos (A0)Negro = tierraPaso 2: Conexión del cable de 1 = rojo (5V)2=Black(Ground)4=
Construir un XBMC/KODI remoto con Arduino, protector del Sensor IR y VB.NET

Construir un XBMC/KODI remoto con Arduino, protector del Sensor IR y VB.NET

Construir un XBMC/KODI remoto con Arduino y un protector del Sensor IR, que funciona con cualquier mando a distancia.Quería controlar mi PC XBMC/Kodi de control remoto de mi decodificador satélite, ya sea ver películas en XMBC/Kodi o TV vía satélite,