Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola de nuevo:
Sigo trasteando con mi skybot. Uno de los alicientes que tengo para estar en este mundillo es que un día me topé con la página de Heli sobre reciclaje.
He desguazado un lector de CD-ROM, y estoy intentando controlar el motorcillo que controla la posición de la lente.
Tiene un cable con 4 canales, por lo que deduzco que es bipolar. He seguido las indicaciones de este sitio, y una vez identificados los cables de cada bobina los he conectado al Skybot.
Para ello he desconectado los cables de los motores (que a su vez van al puerto B de la Skypic), y he conectado allí los del motor PaP. Luego he compilado el programa que os adjunto.
Sólo he conseguido que el motor "tiemble", pero no termina de dar un giro aunque he hecho un montón de pruebas. A ver si alguien me puede explicar si lo que estoy haciendo es una tontería y no se puede conseguir con el Skybot, o si estoy metiendo la pata en el código, etc..
Aquí va el programa, para que se entienda mejor, he puesto el valor binario de cada paso, y he separado los bits que corresponden al motor:
//-- Especificar el pic a emplear
#include <pic16f876a.h>
//-- Para usar temporizaciones con el timer 0
#include "delay0.h"
//-- Definiciones para los motores. Estos valores define
//-- los movimientos del robot
#define paso1 0x14 // 000 1010 0
#define paso2 0x12 // 000 1001 0
#define paso3 0x0A // 000 0101 0
#define paso4 0x0c // 000 0110 0
#define STOP 0x00
#define espera 10
#define pasos 20
int i,p;
//----------------------------
//- Comienzo del programa
//----------------------------
void main(void)
{
//-- Configurar el puerto B para trabajar con el Skybot
//-- RB0, RB5, RB6 y RB7 como entradas
//-- RB1, RB2, RB3 y RB4 como salidas
TRISB=0xE1;
//-- Configurar temporizador
timer0_configurar();
//-- Comienzo de la secuencia
for (p=0;p<pasos;p++)
{
for (i=0;i<4;i++)
{
PORTB=paso1;
delay0(espera);
PORTB=paso2;
delay0(espera);
PORTB=paso3;
delay0(espera);
PORTB=paso4;
delay0(espera);
}
}
//-- Fin
PORTB=STOP;
//-- Bucle infinito
while(1);
}
Ya lo he resuelto. Simplemente, merluzo de mí, identifiqué que los bornes de las clemas de la skypic en las que se conectan los motores eran las mismas que las asignaciones del puerto B, o sea, que en mi lógica cuando enviaba un uno lógico al bit 2 del puerto B pensaba que habría tensión en el conector 2º de la clema.
chewy.gif
Lógicamente no es así, de lo contrario no se podría controlar el giro del motor con sólo dos cables.
Ahora el motor gira con fuerza y suavidad en los dos sentidos.
Os adjunto fotos con el detalle de las soldaduras y conexionado, así como del código de un pequeño programa que mueve el motor primero en un sentido y luego en otro. Licencia GPL, por supuesto.
Aquí tenéis un pequeño vídeo del motor funcionando:
pievd5_c77M
Pues eso, los cables mal conectados... te lo decía porque a mí me ha pasado.
S2
Ranganok Schahzaman