Hola.
Pues ese es mi problema. Es un diseño para controlar y frenar un motor DC, y cuando pulso de manera repetitiva y rápida el interruptor de freno, se bloquea el circuito.
Pienso que es el programa, pero yo no consigo ver el error.
Si alguien puede darme una idea lo agradeceré enormemente, adjunto el programa.
Pues ese es mi problema. Es un diseño para controlar y frenar un motor DC, y cuando pulso de manera repetitiva y rápida el interruptor de freno, se bloquea el circuito.
Pienso que es el programa, pero yo no consigo ver el error.
Si alguien puede darme una idea lo agradeceré enormemente, adjunto el programa.
PHP:
// ENTRADAS
int FONDO = 13;//entrada gas fondo poste
int C1 = 2;//entrada curva 1
int C2 = 4;//entrada curva 2
int C3 = 3;//entrada curva 3
int BRAKE = 1;//entrada freno INTERRUPTOR
int HALL = A5;//entrada sensor hall
int MINIM = A4;//entrada ajuste minimo
int PFET = A1;//entrada pfet antispin ajuste
int NFET = A0;//entrada ajuste freno
//SALIDAS
int PULso = 11;//salida pwm en pin 3 transistor
int FETfondo = 10;//salida pwm en pin 10 fondo
int FREno = 9;//salida pwm nfet freno
//VARIABLES
int VC = 0;//variable curva
int VC1 = 0;//
int VC2 = 0;//
int VC3 = 0;//
int ancho = 0;//variable ancho pulso transistor de potencia
int minimo = 0;//variable de minimo o salida
int afondo = 0;//variable gas fondo solo para encender el led y fet
int pfet = 0;//variable pulso fet de fondo
int nfet = 0;//variable pulso fet de freno
int vfreno = 0;//variable entrada freno
int aspin = 0;//variable ajuste antispin
unsigned long timer = 0;//variable timer antispin
void setup()
{
TCCR2B = (TCCR2B & 0b11111000) | 0x01;
pinMode(FONDO,INPUT); //configuramos pin 0 como entrada poste fondo
pinMode(FREno,OUTPUT); //configuramoa pin 9 como salida pwm fet-freno
pinMode(PULso,OUTPUT); //configuramos pin 5 como salida pwm fuente pre transistor
pinMode(FETfondo,OUTPUT); //configuramos pin 10 como salida pwm fet-fondo
}
void loop()
{
nfet = analogRead(NFET); // leemos mando ajuste freno
nfet = map(nfet, 0, 1023, 0, 255); // mapeamos el rango del ajuste del freno
vfreno = digitalRead(BRAKE); // leemos interuptor de freno
if (vfreno == HIGH)
{
analogWrite(PULso, 0);
analogWrite(FETfondo, 0);
analogWrite(FREno, nfet);
}
else
{
analogWrite(FREno, 0); //apagamos fet de freno
VC1 = digitalRead(C1);
VC2 = digitalRead(C2);
VC3 = digitalRead(C3);
if (VC1 == HIGH)
{
VC = 249;
}
else if (VC2 == HIGH)
{
VC = 243;
}
else if (VC3 == HIGH)
{
VC = 237;
}
else
{
VC = 255;
}
aspin = analogRead(PFET); //leemos ajuste antispin
aspin = map(aspin, 0, 1023, 0, 8); //mapeamos el rango del ajuste del antispin
afondo = digitalRead(FONDO); //leemos si vamos afondo
if (afondo == HIGH)
{
analogWrite(FETfondo, pfet);
if (pfet == 0)
{
timer = millis(); pfet++; // asignamos los ms actuales al timer y sumamos inicio pfet
}
if (pfet < 255)
{
if (millis() - timer > aspin) // comprobamos si han pasado los milisegundos ajustados
{
pfet++; timer = millis();
}
}
else
{
analogWrite(FETfondo, 255);
}
}
else
{
pfet = 0;
analogWrite(FETfondo, pfet);
}
minimo = analogRead(MINIM); //leemos el ajuste de minimo para transistor
minimo = map(minimo, 0, 1023, 8, 115); // mapeamos el punto de salida
ancho = analogRead(HALL); //leemos el sensor magnetico
ancho = map(ancho, 320, 795, VC, minimo); // mapeado inverso del rango del ancho de pulso controlando el minimo ajustable
analogWrite(PULso, ancho); // damos al pulso la anchura necesaria segun referencia
}}
Última edición por un moderador: