H-bridge_servo_ATmega48

bon toujours avec la même carte.
je suis à votre écoute pour toute amélioration de mon code mais je suis limité a 4k
dans l'avenir je vais ajouter un code controle de temperature avec le lm35 en protection de surchauffe des mosfet.

un simulateur arduino ça peut servir
http://virtronics.com.au/Simulator-for-Arduino.html

H-bridge_servo_ATmega48

driver mosfet HIP4081A
OUTPUT PIN24/PC1 (ADC1/PCINT9)=enable disable circuits HIP4081A .............a mettre a l'état haut (HIGH) ARDUINO-DIGITAL= 15... ARDUINO=A1
....................................................
sens de rotation moteur
OUTPUT pin9/(PCINT21/OC0B/T1) PD5 =(ALI -> circuits HIP4081A)...utiliser pour ce programme ARDUINO-DIGITAL= 5

OUTPUT PIN10/(PCINT22/OC0A/AIN0) PD6 = (bli -> circuits HIP4081A)...utiliser pour ce programme ARDUINO-DIGITAL= 6
....................................................
pin25/PC2 (ADC2/PCINT10)...input/OUTPUT =A2 //utiliser-DIGITAL PIN 16 = ARDUINO = A2 PWM du moteur

pin26/PC3 (ADC3/PCINT11)...input/OUTPUT =a3 // utilisation future protection-capteur de température lm35 

pin27/PC4 (ADC4/SDA/PCINT12)...input ...utiliser pour ce programme (position_moteur)ARDUINO-DIGITAL=18... ARDUINO =A4

PIN23/PC0 (ADC0/PCINT8)...INPUT ...utiliser pour ce programme pulsein...ARDUINO-DIGITAL=14... ARDUINO=A0
*/
//#include <avr/io.h>
// #include <util/delay.h>

unsigned long ch1; // canal valeur
int val_1;
int val_2;
int temps;
int position_moteur;
int PWM_moteur2;
int PWM_moteur1 = 16 ; // DIGITAL PIN 16 = ARDUINO = A2
int SENSOR_PIN = 18; // potentiometre ARDUINO=A4
int pulsein_rc = 14 // ARDUINO-DIGITAL=14
int RPWM_Output = 5; // Arduino PWM broche de sortie 5
int LPWM_Output = 6; // Arduino PWM broche de sortie 6
int enable_circuit = 15;//ARDUINO-DIGITAL= 15 

void setup() {
stop_moteur();
pinMode(SENSOR_PIN, INPUT);// PIN 18 = ARDUINO = A4
pinMode(PWM_moteur1, INPUT);// PIN 16 = ARDUINO = A2
pinMode(enable_circuit, OUTPUT);// PIN 15 = ARDUINO = A1
pinMode(pulsein_rc, INPUT);// DIGITAL PIN 14 = ARDUINO = A0
pinMode(RPWM_Output, OUTPUT);
pinMode(LPWM_Output, OUTPUT);
}

void stop_moteur ()	{
if (temps == position_moteur) 
{
// stop moteur
digitalWrite(LPWM_Output, LOW);
digitalWrite(RPWM_Output, LOW);
//digitalWrite(enable_circuit, LOW);//enable & disable circuits HIP4081A 
}
}

void loop() {

digitalWrite(enable_circuit, HIGH);//enable & disable circuits HIP4081A 

ch1 = pulseIn(pulsein_rc, HIGH, 25000); // lecture PWM.. largeur d'impulsion du rc pwm
temps = map(ch1,1000, 25000,-512,512);

val_1 = analogRead(SENSOR_PIN); //lecture de la position du moteur
position_moteur = map(val_1, 0, 1023,-512,512);

val_2 = analogRead(PWM_moteur1); //PWM du moteur
PWM_moteur2 = map(val_2, 0, 1023, 0 , 255 );





if (temps == position_moteur) 
{
stop_moteur();
}
else if (temps <= position_moteur)
{ 
analogWrite(LPWM_Output,PWM_moteur2); // GAUCHE
delayMicroseconds ( 5 ) ; // pauses pendant 5 microsecondes
analogWrite(RPWM_Output,LOW); // DROITE
}
else if (temps == position_moteur) 
{
stop_moteur();
}
else if (temps >= position_moteur)
{
analogWrite(RPWM_Output,PWM_moteur2); // DROITE
delayMicroseconds ( 5 ) ; // pauses pendant 5 microsecondes 
digitalWrite(LPWM_Output, LOW); // GAUCHE
}
}

HIP4081A.pdf (477 KB)