TLE6209, control sencillo de un motor DC

Una de las principales misiones encomendas a los micros ha sido siempre el control preciso de motores… control de velocidad, sentido de giro, incluso potencia,par,…

Habitualmente la forma tradicional es usar un puente en H wiki aunque ello implica los cuatro transistores el driver, el código para la activación correcta de la secuencia…

Hace algún tiempo que he comenzado a sustituir ese control por un chip de Infineon, el TLE6209 (me costó encontrarlos, pero merecen la pena)  datasheet Básicamente es capar de controlar un motor de 6A de consumo continuo y de ofrecer monitorización y configuración de algunos parámetros de operación vía SPI.

TLE6209 TOPTLE6209 BOTTOM

Lo interesante es que se obtiene información detallada caso de fallo del motor: sobretemperatura, lazo abierto, sobretensión,… esto junto con el bajo consumo en modo stand-by lo hace perfecto para aplicaciones remotas..

TLE6209 EJEMPLO 3

Puesto que el TLE es capaz de controlar picos de 7A hay que tener en cuenta el dimensionar correctamente las pistas por la que va a circular tal intensidad.

Aunque se podría controlar directamente desde el microcontrolador, en este montaje se usa una puerta AND a modo de buffer y driver

TLE6209 EJEMPLO 2TLE6209 EJEMPLO 1

Para la correcta disipación del calor es necesario usar toda la superficie disponible.

Con un TLE y un PIC18LF2550 se puede controlar un motor por USB
En cuanto al código para leer/escribir por SPI puede ser algo así:

//se define una unión para la estructura de datos  que se lee/escribe (facilita las cosas)
typedef union __TLE
{
unsigned char DATOS[2];
struct{
//escritura
unsigned char STATUS_REGISTER_RESET:1;
unsigned char OVLO:1;
unsigned char NOTUSEW:1;
unsigned char CHOPPEROFFTIME:2;
unsigned char PWMMODE:1;
unsigned char CHOPPERCURRENTLIMIT:2;
//lectura
unsigned char POWERFAIL:1;
unsigned char NOTUSER:1;
unsigned char SHORTTOVS:1;
unsigned char SHORTTOGND:1;
unsigned char OPENLOAD:1;
unsigned char TEMP:2;
unsigned char ERRORFLAG:1;
}bits;
}_TLE;

//Se define la variable….

_TLE TLE;

// una función básica para leer/escribir el TLE, esta configuración del SPI es en concreto para un 33Fxx de Microchip, pero se migra sin mayor dificultad.
void ReadTLE()
{
unsigned int SPICON1Save;

IFS2bits.SPI2IF=0;
SPICON1Save = SPI2CON1;
SPI2STATbits.SPIEN=0;
Nop();
SPI2CON1 = 0×22A;
SPI2STATbits.SPIEN=1;
Nop();
Nop();
TLE.bits.CHOPPERCURRENTLIMIT=LIMITE_MOTOR; //aqui ponemos el valor deseado de limite (un vistazo al datasheet…)
//el reseteo del error se hace aqui, se debe decidir cuando se resetea el error

//lo habitual es resetearlo cuando desaparezca la orden de marcha..
TLE.bits.STATUS_REGISTER_RESET=0;
unsigned  char n;
_TLE_CS = 0;
for(n=0;n<50;n++);
TLE.DATOS[1] = ReadSPI2(TLE.DATOS[0]);
_TLE_CS = 1;
IFS2bits.SPI2IF=0;
SPI2STATbits.SPIEN=0;
Nop();
SPI2CON1=SPICON1Save;
Nop();
SPI2STATbits.SPIEN=1;
}

En fin, que os parece??

4 Responses to “TLE6209, control sencillo de un motor DC”

  1. aclapix Says:

    Hola felix

    quisiera saber si es posible obtener el material que tenías en la página pacalaconcurso, me interesa particularmente el referente a modbus-tcp

    si es así porfavor envíame un mail a olivarescroc@gmail.com

    muchas gracias

  2. how to can peach salsa Says:

    […]We Like to Honor it by Linking to it from Our Blog. Here is a Quality Page You Might Find Interesting that we Encourage You to Check[…]…

  3. osbox68 Says:

    Hola estoy tratando de hacer una librería modbus para el PIC32, aunque existen algunas son demasiado complejas, yo recuerdo en el sitio pacalaconcurso existía
    una muy sencilla y que funcionaba muy bien, si la tuvieras me la envías la convierto a pic32 usando el mplabx y el c32 y te la envio para que la publiques, estaría muy agradecido.
    Atte.
    Osbox68

  4. felix Says:

    la tienes en esta misma web:
    http://blog.sasian.es/2010/01/08/modbus-tcp-para-pic-parte-i/

    saludos

Leave a Reply

You must be logged in to post a comment.