Programa PIC USART + Sensores + PaP.

Hola a todos.

Estoy trabajando en un proyecto que más que nada es hecho por la PC, pero se necesita de un PIC para hacer de intrerfaz entre sensores y salidas. Dicho PIC se comunica a la PC mediante USART o puerto serie.

Sólamente hice borradores de esquemas, así que no hay nada de programa hecho (programo en C).

La idea es que la PC le mande de a 2 números por vez al PIC, y éste mueva 2 motores paso a paso. El movimiento debe ser así: Envío de un paso del motor A, corroboración de paso del motor A. Si se movió 1 paso, hace el que sigue, si no, lo repite. Cuando se mueve todo lo que se tenía que mover el motor A, el B hace lo mismo. Una vez que los 2 motores PaP se movieron, se acciona un tercer servo-motor por PWM, aunque esa parte ya me doy una idea de cómo hacerla.

Necesito que me cuenten de alguna experiencia o algo que sepan del tema, desde leer un archivo de texto, codificarlo si es necesario (en esta primera parte se necesita un poco más de conocimientos de informática y programación en Java por ejemplo, cosa que no sé nada), y enviar de a 2 números al PIC mediante USART, hasta el control de los sensores y los motores.

Vi que los sensores tienen que ser ópticos para mejor precisión, y que a los motores se les envía pulsos senoidales para que no pierdan pasos y no vibren, necesito más información del tema. Para generar esa "senoidal", se puede usar un puerto de 8-bit a un DAC, y enviarlo directo al motor?

Un saludo, espero que me puedan ayudar. Con tiempo voy a ir poniendo más información.
 
por partes, la senoidal no es necesaria para nada... solo para generar micropasos, y no creo que necesites tantisima precision. para empezar necesitarias 2 motores paso a paso, dos puentes en h duales, osease 4 puentes en h. cada puente en H se controla con 4 entradas(señales logicas) por lo que necesitarias 8 pines del pic si no te quieres complicar para las salidas de este.
luego lo de los sensores, no se para que los necesitas ni por que dices que tiene que ser opticos.
luego la aplicacion no se que quieres o como quieres que funcione pero yo no recibiria confirmacion de si el motor a dado el paso, por que seria tener que comunicar todo el rato... mandaria cuantos pasos tiene que dar cada motor y en que direccion y listo yel pic se encarga de contar y de saber donde esta
 
Hola, muchas gracias por contestar.

El tema es que teóricamente si yo mando un paso, el motor lo tiene que hacer. Ahora, si hay una falla mecánica? Si se traba en alguna parte, y un paso se omite? Ahí me llevaría el motor a una posición errónea, por más que sea por 1 o 2 pasos en 300 que tiene que dar.

Y como los motores mueven un objeto desde el último punto donde éste estuvo, si se van a tener errores todo el tiempo, es como si éstos se arrastraran, y me terminaría dando cualquier cosa.

Lo de la senoidal tenía entendido que era para no perder pasos, ya que con el tema de la inercia y la fricción, si se manda un pulso "de una" o digital, se podrían perder. Y no, no necesito precisión de cirujano, así que puede que lo de la senoidal lo omita... a fin de cuenta, si controlo la salida, puedo mejorar para que sea senoidal, pero por el momento me preocupo más por lo otro.

Y los sensores, para corroborar que el paso se haya hecho correctamente, y no se haya perdido. Si bien el objeto a mover no es pesado ni genera grandes pérdidas mecánicas, existe la posibilidad de que se pierda algún paso.

Alguna vez usaste un paso a paso? Te pasó que haya perdido pasos? Si no, me quedo tranquilo y hago algo medio "así nomás" y lo mejoro al final en todo caso.

Y un tema, las bobinas (generalmente 4 o 6) se activa una por una, o de a pares? Nunca entendí eso.

Saludos y gracias.
 
si tienes una traba mecanica no creo que pierdas uno o dos pasos... talvez pierdas todos los pasos que vaya a dar despues de haberse atascado. Si el sistema esta bien no tienes por que perder pasos.

El tema de usar las bobinas por pares, en mi caso 2 bobinas, no 4 ni 6 :p, los de 3 bobinas son los tipicos brushless de radiocontrol creo recordar, los paso a paso de toda la vida 2 bobinas. Bueno se consige generar un campo magnetico mas fuerte en caso de que en excitacion simple andarias justo de fuerza para moverlo.

si todo va bien se usa en modo simple y doble, que quiero decir con esto, que se trabaja a medios pasos
Ej: A+ 90º, B+ 180º, A- 270ª, B- 360º, este seria el modo simple
B-A+ 45º, A+ 90º, A+B+`135º, B+180º.... Asi 8 pasos en vez de cuatro, uin poco mas de precision, y sobre todo ayuda a que tenga que desplazarse menos con el consiguiente de tener que hacer menos esfuerzo.

respeto lo de la perdida de pasos que los quieras contar, pero aun asi, podria ser el mismo micro el que se encargue de eso, y no tener que enviar siempre al pc la respuesta, simplemente le dices 300 pasos, y ya el micro es el que se encarga de todo, y si quieres cuando los da pues envia señal de que ya lo ha hecho. Yo lo enfocaria asi pero bueno tu proyecto es tu sabras ;) un saludo
 
Sí sí, la idea es que la PC le mande una coordenada de 2 dimensiones, y el micro lo haga, y vaya contando paso por paso. Si uno se omitió manda otro, y así. Después hace lo mismo para el otro eje.

Una vez que termina exitosamente de mover los motores, le pide a la PC que le envíe más información.

Ahora.. cómo? No sé nada de programar aplicaciones en java ni visual... lo único que usé fue la consola de windows en C, se podrá hacer lo de leer y enviar? Yo leí que sí, pero pregunto.

Gracias.
 
Pues con cualquier aplicacion de esas que has comentado, o algun terminal que permita enviar datos, tipo teraterm o si usas ccs creo que tambien tiene una consola, o con el pickit, e introducirlos manualmente.

en visualbasic es facil usar el puerto serie.
 
Bueno.
Yo hice esa interfaz en usb, antes trabajaba con el puerto paralelo en Dev C pero brinque al Visual C++, es más cómodo.

Ahora, mover un motor a pasos no es la gran ciencia solo basta como poner la secuencia de ceros y unos para mover 4 hilos.

Aunque suene mentira, la misma secuencia para motores unipolares y bipolares funciona, pero eso depende según el caso.

Yo he movido motores bipolares, así que como experiencia para mover un motor debes tener en cuenta la ley de ohm, es decir si tus bobinas miden 12 ohms y dice que es a 2A puedes sacar el voltaje, si lo haces a lo burro puedes quemar el puente H y el micro, cosa que ya me paso como 2 veces.

Ahora hay que buscar una secuencia digamos Full steep y half steep, esa secuencia te dará la resolución en pasos.
Y ya que tengas la secuencia de pasos puedes meterlas en un array para que lo puedas usar en tu micro.

Yo no recomiendo en lo mínimo ASM por que es regresar a a-la época de las cavernas.
Yo sugiero que programes en C como CCS o algún otro que te acomode.

Adjuntaré un editor para hacer las secuencias mas fáciles.



Este es un editor con un ejemplo.
El ejemplo se llama A.txt y tiene una secuencia de motor a pasos.
El editor lo único que hace es traducirlo a números decimales, lo escribí hace unos años para facilitar hacer los arreglos.

Es decir, traduce esto:

10000011
11101101
11101101
11101101
10000011

A esto:

131,237,237,237,131

Y la utilización adecuada en C sería así.
Asi nos hace la vida mas bonita. :cool:

Código:
unsigned char secuencia[5]={131,237,237,237,131};

ahora un ejemplo de mover un motor a pasos en C con CCS:

void main()
{
unsigned char secuencia[5]={131,237,237,237,131};
unsigner char contador=0;

while(1)//bucle infinito
{
   while(contador!=4)
  {
     output_B(secuencia[contador]);
     delay_ms(50);
     contador++;
  }//fin de while

  contador=0;   //reiniciamos el contador


}//fin del bucle infinito
}//fin del main
Y así de chamacos. ;)
 

Adjuntos

  • A.txt
    48 bytes · Visitas: 10
  • editor.zip
    35.7 KB · Visitas: 8
Última edición por un moderador:
Hola,

Para el control de motores paso a paso puedes utilizar un PIC18F2550 para que lo puedas controlar por puerto USB, y para la etapa de potencia el CI L293 dependiendo de la corriente del motor paso a paso que utilices.

Salu2
Néstor
 
si, si sabes usar el puerto USB de lo contrario no lo recomiendo por que solo lleva a mas confuciones
el CI L293 es completamente reemplazable con el SN75441one es compatible pin a pin solo que es mas economico.
ojo a economico no me refiero que sea malo.
otra cosa a aclarar si se llegara a quemar el puente H es por que uno no midio la impedancia del motor a pasos el puente H soporta maximo 1 A.
eso hay que tomarlo en cuenta para alimentar el motor digamos

por ejemplo

mi motor en sus bobinas miden 4 ohms y yo de bruto le meto 12V
I=12v/4ohms I=3A
obviamente el puente H sacara lumbre si hacemos esto

para esto debemos alimentarlo con 4v
V=1A*4ohms V=4v

siempre siempre hay que hacer esto no todos los motores a pasos tienen esta impedancia normalmente son impedancias de 11 a 15 ohms

pero si los hay de 2 y 4 ohms, lo cuento para que no hagan un quemazon
que ami ya me paso :LOL:
 
Atrás
Arriba