Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
He leído casi todo el hilo para darme cuenta que no encontré salvo cuando otro usuario lo publicó un código completo tuyo, o tal vez se me pasó por alto pero he visto cosas parciales de tu código.
20Hz como te han dicho se cuentan simplemente sin interrupciones pero ya que las usas, es raro que tengas los problemas que describes.
Cual es tu código completo?
Puedes publicarlo? Digo porque con solo probarlo uno se da cuenta donde puede estar tu fallo.
void setup() {
pinMode(7,OUTPUT); //motor
pinMode(26,OUTPUT); // sentido giro
pinMode(20,INPUT); //reed switch
pinMode(14,INPUT_PULLUP); //boton
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(20), sumarPulsosM1, CHANGE);
}
int boton = 0;
void sumarPulsosM1() {
digitalWrite(7, LOW);
detachInterrupt(digitalPinToInterrupt(20)); //aca para la interrupcion
}
void loop() {
boton = digitalRead(14);
if (boton == 0){
Serial.println("pulso");
delay(100);
digitalWrite(7,HIGH);
delay(1000);
}
}
Sin haberme leído el datasheet del MOSFET, yo quitaría la R de 10k y pondría la de 100k de 10k o menos.
Veo unas impedancias desaforadamente enormes ahí.
Ese circuito me parece que hace inútil el pwm, no creo que el MOSFET corte .
El mosfet que sugieres es de 100A!
Necesitas controlar una carga digamos de varias decenas de Amper?
Ahora no tengo idea pero la corriente de freewheeling seguramente no será de 3A con una carga de decenas de Amper. Asi que tal vez el diodo este mal. Pero depende de tu carga.
Si ese es el caso como vas a montar el MOSFET para que disipe el calor?
Si usas un MOSFET para corrientes elevadas, debes proteger al Arduino de la posiblidad que el GATE del MOSFET tome demasiada corriente y para ello se pone un Resistor de bajo valor en serie que limite la corriente. Suele ser de 10 a 100 ohms y actua como fusible en caso de fallos por disipación o porque falle el diodo de freewheeling, traducido se quema de algun modo el MOSFET y hay conducción excesiva en el Gate donde antes no la había.
Luego en un código con interrupciones pones delay(100) dos veces? incoherente. Se puede si, pero para mi no va el uso de delay().
Y para colmo, la interrupción funciona 1 vez porque la activas en el setup y a la primer oportunidad la desactivas y luego no hay nada que la vuelva a poner en marcha.
Bueno ahora las cosas tienen otro sentido. Explicas porque semejante MOSFET y porque con esa carga ese diodo esta bien.Lo maximo que le medi al motor fueron 1.5A, actualmente no uso PWM y lo tengo con un diodo 1n5408 es de 3A pero no es rapido.
El mosfet acualmente solo enciende y apaga el motor, no se calienta para nada, pero si al usar PWM toma temperatura le pongo un disipador y listo.
Pondré la resistencia que suguieres en el GATE, ademas el mosfet esta optoacoplado del arduino.
Si quieres hazlo pero no tiene sentido para el consumo que tendrás.Pondré la resistencia que suguieres en el GATE, ademas el mosfet esta optoacoplado del arduino.
Sigues hablando de precisión pero no es la palabra adecuada cuando usas un REED SWITCH como sensor.Este problema solo sucede cuando se usan las interrupciones en modo CHANGE y seria bueno usarlo de ese modo porque tengo mas precisión.
Pues lo unico extraño que veo y justo en particular en esa parte del código es que el LOW tiene un espacio despues de la coma, quizas eso te este trayendo el problema.void sumarPulsosM1() {
digitalWrite(7, LOW);
detachInterrupt(digitalPinToInterrupt(20)); //aca para la interrupcion
}
No tiene nada de extraño. Es un parametro de digitalWrite y despues de la coma podes escribirlo donde te plazca, incluso en la linea de abajo o al extremo derecho de la pantalla. Al compilador no le importa.en esa parte del código es que el LOW tiene un espacio despues de la coma
Opino igual, para mí el imán está a una distancia u orientación que falla de tanto en tanto.En cualquier caso, se pone el osciloscopio y se ve que pasa.
Dices que cambie el reed switch por este sensor y modifique la parte de los imanes para que sea tipo un encoder?No tiene nada de extraño. Es un parametro de digitalWrite y despues de la coma podes escribirlo donde te plazca, incluso en la linea de abajo o al extremo derecho de la pantalla. Al compilador no le importa.
PD: yo usaría un opto como el CNY70
Y dejaria de jugar con los reed...