Documentos de Académico
Documentos de Profesional
Documentos de Cultura
//yafar hernandez
// PRUEBA-PWM
char texto[20];
// variables
unsigned int codigo;
unsigned int velo1;
signed int velo2=0;
//motor1
void floattostr_(float numero_, unsigned char *cadena_,char decimales_)
{
//variables temporales
int largo_entera,largo_n,cont_for,tempo_int;
double tempo_float;
//largo de la trama a armar en decimales
largo_n = decimales_+1;
largo_entera = 0;
// si es negativa coloca el -
if ( numero_ < 0)
{
*cadena_++ = '-';
numero_ = -numero_;
}
//si es menor que no multiplica por 10
if (numero_ > 0.0) while (numero_ < 1.0)
{
numero_ =numero_* 10.0;
largo_entera--;
}
}
//motor 1
void derecha1()
{
M11=0; //izquierda
M12=1; //derecha
}
void izquierda1()
{
M11=1; //izquierda
M12=0; //derecha
}
//motor2
void derecha2()
{
M21=0;
M22=1;
}
void izquierda2()
{
M21=1;
M22=0;
}
void main()
{
ADCON1=0B1110; //ANALOGO
TRISA=0B11111111; // A ENTRADA
TRISB=0; // todo salida
// ENTRADA DE MOTOR
TRISB4_bit=1;
TRISB5_bit=1;
TRISB6_bit=1;
TRISB7_bit=1;
// SALIDAS PWM
RC1_bit=0;
RC2_bit=0;
PWM1_Init(500);
PWM2_Init(500);
PWM1_Set_Duty(40);
PWM2_Set_Duty(200);
//ARRANCA PWM
PWM1_Start(); // ARRANCA
PWM2_Start();
ADC_Init();
while(1)
{
// ecuacion de velocidad
codigo=ADC_Read(0);
velo1= (codigo*255.0/1023.0);
PWM1_Set_Duty (velo1);
// giros del motor
derecha1();
izquierda2();
if(sube2==0)
{
velo2=velo2+10;
if(velo2>=255) velo2=255;
PWM2_Set_Duty (velo2);
Delay_ms(200);
}
if(baja2==0)
{
velo2=velo2-10;
if(velo2<=0) velo2=0;
PWM2_Set_Duty (velo2);
Delay_ms(250);
}
if(giro1==0)
{
izquierda1();
Lcd_Chr(1,15,'I');
}
else
{
derecha1();
Lcd_Chr(1,15,'D');
}
if(giro2==0)
{
izquierda2();
Lcd_Chr(3,15,'I');
}
else
{
derecha2();
Lcd_Chr(3,15,'D');
}
floattostr_(velo1*100.0/255.0,texto,1);
Lcd_Out(1,5,texto);
floattostr_(velo2*100.0/255.0,texto,2);
Lcd_Out(3,5,texto);
}
}