Projeto 7: Controle de Motor DC por Rampa de Aceleração

04/01/2017

PIC18F4431

#include<p18f4431.h>
#define ON PORTAbits.RA0
#define RESET PORTAbits.RA1
float mac_cicle=655e-6; //ciclo de máquina (2^16 /10MIPS)
float time=6.0; //tempo de execução da rampa (ajustável)
float regime=80.0; //fim da rampa (ajustável)
float acel=0;
float dc=0;
void config_io()
{
TRISA=0X03;
ANSEL0=0X00;
}
void config_ramp()
{
PTCON0=0X00;
PTCON1=0X80;
PWMCON0=0X47;
PWMCON1=0X00;
PTPERL=1000;
PTPERH=1000>>8;
PDC0L=0;
PDC0H=0;
OVDCOND=0X00;
OVDCONS=0X00;
regime=regime/100;
acel=regime/time; //cálculo da aceleração
}
void start_ramp_inc()
{
dc=dc+(acel*mac_cicle); //cálculo para determinação do Duty cicle
if(dc>=regime) //limitação do valor máximo da rampa
{
acel=0;
}
PDC0L=((int)(1000*dc))<<2;
PDC0H=((int)(1000*dc))>>6;
OVDCOND=0X01;
}
void reset_ramp()
{
PDC0L=0;
PDC0H=0;
OVDCOND=0X00;
dc=0;
acel=regime/time;
}
void main()
{
OSCCON=0X72;
config_io();
config_ramp(); //sub-rotina de configuração da rampa
while(1)
{
if((ON==1)&&(RESET==0))
{
start_ramp_inc(); //sub-rotina de execução
}
else
{
reset_ramp(); //sub-rotina de reset
}
}
}

© 2016 Dnl Silva. São Paulo - SP
Desenvolvido por Webnode
Crie seu site grátis! Este site foi criado com Webnode. Crie um grátis para você também! Comece agora