Esquemas de Hall(no el increible)y bovina
Este es el código(es bien venida algún comentario de programación)
#include <pic.h>
#include "lcd3pin.c"
#define PBIT(adr, bit) ((unsigned)(&adr)*8+(bit))
static bit hall @ PBIT(PORTB, 6); //sensor del distribuidor
unsigned int i;
unsigned int t;
unsigned int ton;
unsigned int toff;
unsigned int ciclos;
unsigned int tmaxavance;
unsigned int avance;
unsigned char acel;
void ready(void)
{
LCD_FunctionMode();
LCD_Write_4_Bit(set_dd_line1);
LCD_DataMode();
WriteLCDString(" cpu alistada! "); //por lo menos funciona
LCD_SEL=0;
dtran(lcd);
}
void visucont(void)
{
LCD_FunctionMode( );
LCD_Write_4_Bit(0xC9);
LCD_DataMode();
LcdWriteInt(ton);
LCD_SEL=0;
dtran(lcd);
}
//---------------------------------------------------------------------------------------
main()
{
PR2=0xFF;
T2CON=0x06;
CCP1CON=0x0C; //para desactibar el pwm CCP1CON=0x00
// CCP1CON=0x00;
CCP1X=1;
CCP1Y=1;
PORTA = 0x00;
CMCON = 0x07;
VRCON = 0x00;
OPTION =0xDF ;
T1CON=0B00000111;
TRISA = 0B00000000;
PORTA = 0B00000000;
TRISB = 0B01000000;
PORTB = 0x00;
ciclos=1000;
CCP1X=0;
CCP1Y=0;
CCPR1L=0;//es el valor del % de PWM
GIE=0;
LCD_Setup();
ready();
ton=40000;
while(1)
{
if(hall)
{
if(ton<1000 && ciclos<10) //cuando el motor tiene altos regimenes de rpm
{
CCPR1L=255; //y el nucleo de la bobina pueda saturarse bien
}
else
{
CCPR1L=0;
}
ton=0;
while(hall) //sector de deteccion de rpms
{
ton++;
}
if(ton<40000 && ciclos>980) // para el arranque en extremo frio en gas
{
ton=40000;
}
toff=(ton/2); //la relacion entre el ton y toff es la mitad
tmaxavance=((toff/14)*10); //defino un % para el maximo avance
avance=tmaxavance;
ciclos--;
if(ciclos<10) //en relacion a las rpm(deducidas de ton) corrijo
{ //el avance empiricamente
ciclos=9;
if(ton<10000)
{
avance=2900;
}
if(ton<9000)
{
avance=2600;
}
if(ton<8000)
{
avance=2400;
}
if(ton<7000)
{
avance=2200;
}
if(ton<6000)
{
avance=1800;
}
if(ton<5000)
{
avance=1300;
}
if(ton<4000)
{
avance=1000;
}
if(ton<3000)
{
avance=700;
}
if(ton<2000)
{
avance=200;
}
if(ton<1000)
{
avance=70;
}
}
CCPR1L=255; //esta parte considero como un 1 en RB3
//es desir bobina1 ;pensaba aplicar PWM
//pero en 1Khz no se puede saturar bien
//el nucleo de la bovina
while(avance) //retardo para el toff
{
avance--;
}
CCPR1L=0; //chispa
//visucont(); //rutina para tener una idea aprox de
//la variable ton y otros
}
}
}