este motor se alimenta de 170 VDC, 264 W, ya lo he podido hechar a andar con una secuencia de paso completo pero al iniciar el giro como que los pulsos son un poco rápidos y no alcanza a girar instantáneamente por lo cual al principio gira como vibrando o erraticamente pero después de 1 seg aproximadamente se acopla a la frecuencia de los pulso y gira normal, por tal motivo recurrí a bajar la frecuencia de los pulsos para ver si de esta manera no vibraba al principio y esto no funciono ya que al bajar la frecuencia no alcanza a hacer el giro y por tal motivo el motor consume mas corriente y se me queman los mosfet de una de las ramas de mis dos puentes H para el control de las 2 bobinas......
por eso es que quisiera implementar una limitación de corriente suministrada al motor y que de ese nivel no pase mas...
en caso contrario de aumentar la frecuencia esta es muy rápida que no gira el motor y se queda amarrado hasta dejar de inyectar pulsos a los puentes H...
adjunto a esto también quisiera saber como generar rampas de aceleración y desaceleracion en este tipo de motores......
controlo los puentes H con un pic18f2580 programado en C con ccs compiler
y tambien tengo mi duda en saber si en realidad estoy modificando la frecuencia en el pic o el ancho de pulso, ya que mando un dato por X ms y despues pongo en cero por los mismos X ms, y creo que asi estoy modificando la frecuencia y el ancho de pulso tambien como si siempre estubiera mandando señales con un ciclo de trabajo del 50% .. si me explico ???
adjunto esquematico de los puentes H (la cajita que se ve en la parte superior izquierda es una fuente que alimenta a otra etapa, no tiene que ver con la etapa de potencia) y tambien adjunto el programa:
Código:
[COLOR="Blue"]#include <18F2580.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock = 4000000) // se define el oscilador interno a 4MHz
#use fast_IO(A) // Indica que usará el puerto A
#use fast_IO(B) // Indica que usará el puerto B
#use fast_IO(C) // Indica que usará el puerto C
#byte PORTA=0x05 //renombramos las direcciones de los puertos
#byte TRISA=0x85
#byte PORTB=0x06
#byte TRISB=0x86
#byte PORTC=0x07
#byte TRISC=0x87
#define cierra input(PIN_A0) //renombramos a los pines ..
#define abre input(PIN_A1)
#define paro input(PIN_B0) // es la interrupcion..
#define A1 (PIN_C0)
#define B1 (PIN_C1)
#define C1 (PIN_C2)
#define D1 (PIN_C3)
#define A2 (PIN_C4)
#define B2 (PIN_C5)
#define C2 (PIN_C6)
#define D2 (PIN_C7)
#INT_EXT
parar()
{
int i,j,stop=0;
output_high(pin_b5);
for (i=0;i<=100;i++)
{
for (j=0;j<=200;j++)
{
delay_us(10);
}
}
[B] output_low(pin_b5);
stop=1;
return(stop);
}
void giro_rap_der() //funcion
{
output_high(pin_b7);
int16 t=500;
while(true)
{
output_c(0x66);
delay_us(t);
output_c(0x56);
delay_us(t);
output_c(0x96);
delay_us(t);
output_c(0x95);
delay_us(t);
output_c(0x99);
delay_us(t);
output_c(0x59);
delay_us(t);
output_c(0x69);
delay_us(t);
output_c(0x65);
delay_us(t);[/B]
}
output_c(0X00);
output_low(pin_b7);
}
void main (stop)
{
set_TRIS_A(0xFF); // todo el puerto A son entradas digitales (botones)
set_TRIS_B(0x0F); // todo el puerto B son entradas digitales (control de puentes)
set_TRIS_C(0x00); // todo el puerto c son salidas digitales
output_c(0X00);
output_b(0X00);
while(true)
{
if(stop==1)
{
output_high(pin_b4);
}
else
{
while(cierra==1)
{
giro_rap_der(); //llama a la funcion
}
}
enable_interrupts(int_ext);
ext_int_edge(L_TO_H);
enable_interrupts(Global);
}
}
lo que se encuentra en negritas es a lo que me refiero que siempre trabajo al 50% de trabajo en los pulsos ya que este tiempo es el mismo en alto o en bajo y al modificarlo se modifica tanto en alto como en bajo ..
espero y me halla explica y me puedan ayudar .... saludos