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);
}
Una pregunta tonta... ¿por qué haces un doble anidamiento con bucles for?
O tienes los cables mal conectados o el tiempo de paso no es correcto (es lo que me pasaba a mí). Si tienes un analizador lógico mirate que los pulsos que le estás enviando sean correctos.
S2
Ranganok Schahzaman
Una pregunta tonta... ¿por qué haces un doble anidamiento con bucles for?
Bueno... es mi primer programa de este tipo. La idea era tener un bucle para los pasos de cada giro, y luego otro para el número de vueltas que quiera dar.
O tienes los cables mal conectados o el tiempo de paso no es correcto (es lo que me pasaba a mí). Si tienes un analizador lógico mirate que los pulsos que le estás enviando sean correctos.
En cuanto a los cables, lo que he hecho es medir con un polímetro la continuidad entre ellos. He identificado que entre dos de ellos hay una resistencia de 56 ohm, así que estos dos pertenecen a una bobina y los otros dos a la otra.
Luego he desconectado los cables de los motores del Skybot que estaban en el puerto B, bits:
Motor2 Bits 1 y 2
Motor1 Bits 3 y 4
Los bits 0, 5, 6 y 7 estáns asignados a sensores, por tanto configurados como entradas y éstos están desconectados.
Los cables de una bobina los he conectado a las entradas del motor2 y los de la otra al motor 1.
En cuanto al analizador lógico... no sé ni lo que es (estoy empezando).
Con "tiempo de paso" ¿a qué te refieres, al tiempo que estoy enviando los pulsos?
Un saludo y gracias por la ayuda.