Programa Para Motor Sin Retro Alimentacion
23izaak19 de Febrero de 2012
1.196 Palabras (5 Páginas)1.056 Visitas
/*
programa para controlar un motor con retro alimentacion
*/
#include "18F45K22.h"
#include "P18F45K22.h"
#DEVICE ADC=8
#FUSES NOMCLR,INTRC_IO,NOPLLEN,PRIMARY_SW
#FUSES NOPBADEN,XINST
#use delay(CLOCK=4000000)
int8 ciclo=13;
int8 q; //revoluciones
//int16 vueltas=25 ; // vueltas que debe dar
int32 tiempo; //tiemppo de muestreo
int8 muestra1;
int8 muestra2;
int8 muestra3;
int8 muestra4;
int8 muestra5;
int8 x1,x2,x3,x4,x5;
float mediaX,mediaY
float sxx,syy,sxy;
float b,a,R2
void main()
{
OSCCON=0x52;
SETUP_CCP1(CCP_PWM); //Configurando módulo para PWM Y MODIFICARLO PARA QUE SEA
// DE 16 BITS COMO RL TMR1 Y PODER HACER LOS WHILE
SETUP_TIMER_2(T2_DIV_BY_4,26,4); //MODIFICAR PARA 16 BITS
// T1CON=0B10000111; // contador externo
T0CON=0xFF; // contador interno
SET_TIMER0(0)
while(1)
{
SET_PWM1_DUTY(ciclo);
tiempo=tiempo+1;
// while(tiempo==55000)
// {
// q=get_timer0();
while(tiempo==40000)
{
q=get_timer0();
muestra1=q;
q=0;
ciclo=ciclo+1;
x1=ciclo;
delay_ms(100);
}
while(tiempo==80000)
{
q=get_timer0();
muestra2=q;
q=0;
ciclo=ciclo+1;
x2=ciclo;
delay_ms(100);
}
while(tiempo==160000)
{
q=get_timer0();
muestra3=q;
q=0;
ciclo=ciclo+1;
x3=ciclo;
delay_ms(100);
}
while(tiempo==200000)
{
q=get_timer0();
muestra4=q;
q=0;
ciclo=ciclo+1;
x4=ciclo;
delay_ms(100);
}
while(tiempo==24000)
{
q=get_timer0();
muestra5=q;
q=0;
ciclo=ciclo+1;
x5=ciclo;
delay_ms(100);
}
while(tiempo==24010)
{
mediaY=(muestra1+muestra2+muestra3+muestra4+muestra5)/5;
mediaX=(x1+x2+x3+x4+x5)/5;
sxx=(x1-mediax)^2+(x2-mediax)^2+(x3-mediax)^2+(x4-mediax)^2+(x5-mediax)^2;
syy=(y1-mediay)^2+(y2-mediay)^2+(y3-mediay)^2+(y4-mediay)^2+(y5-mediay)^2;
sxy=(y1-mediay)(x1-mediax)+(y2-mediay)(x2-mediax)+(y3-mediay)(x3-mediax)+(y4-mediay)(x4-mediax)+(y5-mediay)(x5-mediax);
b=sxy/sxx;
...