1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| /*
H-bridge_servo_ATmega48
driver mosfet HIP4081A
OUTPUT PIN24/PC1 (ADC1/PCINT9)=enable disable circuits HIP4081A .............a mettre a l'état haut (HIGH) ARDUINO= A1
....................................................
sens de rotation moteur
OUTPUT pin9/(PCINT21/OC0B/T1) PD5 =(ALI -> circuits HIP4081A)...utiliser pour ce programme ARDUINO= D5
OUTPUT PIN10/(PCINT22/OC0A/AIN0) PD6 = (bli -> circuits HIP4081A)...utiliser pour ce programme ARDUINO= D6
....................................................
pin25/PC2 (ADC2/PCINT10)...input/OUTPUT =A2
pin26/PC3 (ADC3/PCINT11)...input/OUTPUT =a3
pin27/PC4 (ADC4/SDA/PCINT12)...input ...utiliser pour ce programme (position_moteur) ARDUINO=A4
PIN23/PC0 (ADC0/PCINT8)...INPUT ...utiliser pour ce programme pulsein ARDUINO=A0
*/
unsigned long ch1; // canal valeur
unsigned long temps;
int position_moteur;
int SENSOR_PIN = 27; // potentiometre ARDUINO=A4
int RPWM_Output = 9; // Arduino PWM broche de sortie 5
int LPWM_Output = 10; // Arduino PWM broche de sortie 6
int val;
int enable_circuit = 24;
void setup()
{
pinMode(SENSOR_PIN, INPUT);// PIN 27 = ARDUINO = A4
pinMode(enable_circuit, INPUT);// PIN 24 = ARDUINO = A1
pinMode(23, INPUT);// PIN 23 = ARDUINO = A0
pinMode(RPWM_Output, OUTPUT);
pinMode(LPWM_Output, OUTPUT);
}
void loop()
{
digitalWrite(enable_circuit, HIGH);//enable & disable circuits HIP4081A
ch1 = pulseIn(23, HIGH, 25000); // Lire PWM.. largeur d'impulsion du rc pwm
temps = map(ch1,1000, 25000,-500,500);
val = analogRead(SENSOR_PIN); //lecture de la position du moteur
position_moteur = map(val, 0, 1023,-500,500);
//*************************************************************************
switch(temps)
{
case if (temps < 512):
{
// Rotation inverse
digitalWrite(LPWM_Output, LOW); //analogWrite
digitalWrite(RPWM_Output, HIGH);//analogWrite
break;
}
case if (temps < -512):
{
// Rotation vers l'avant
digitalWrite(LPWM_Output, HIGH);//analogWrite
digitalWrite(RPWM_Output, LOW);//analogWrite
break;
}
case if (temps == position_moteur):
{
// stop moteur
digitalWrite(LPWM_Output, LOW);++
digitalWrite(RPWM_Output, LOW);
break;
} |
Partager