// Les ports de l'encoder sont 2 pour bénéficier de l'interuption sur A et 8 pour utiliser le PortManipulation. Attention sur le port manipulation à ne pas utiliser les pin 9 à 13 !
#define encoder0PinA 2 // PD2 (INT0)
#define encoder0PinB 8 // PB0; (I8)
#define encoder0PinB 8 // PB0; (I8)
// Utilisation de 5 et 6 pour la commande moteur via le driver L293D. Le enable est connecté au vcc et le pwm est envoyé directement dans les input.
#define MotorIN1 5 //(I5) IN1
#define MotorIN1 5 //(I5) IN1
#define MotorIN2 6 //(I6) IN2
#define MotorIN2 6 //(I6) IN2
//from ramps 1.4 stepper driver
// Recuperation des step de la carte avec interuption sur le port 3 et PortManipulation sur le port A0. Attention sur le port manipulation à ne pas utiliser les pin A1 à A5 !
#define STEP_PIN 3 //PD3 (INT1) (I3)
#define STEP_PIN 3 //PD3 (INT1) (I3)
#define DIR_PIN 14 //PC0; (A0)
#define DIR_PIN 14 //PC0; (A0)
// Récupération du fin de course x_min pour l'initialisation du moteur
// Initialisation de la position encoder. Attention celle-ci est incrémenté via un CHANGE sur l'interuption 0. Le nombre de pas de la roue codeuse est donc double !
volatilelongencoder0Pos=0;
volatilelongencoder0Pos=0;
longtarget=0;
longtarget=0;
longtarget1=0;
longtarget1=0;
intStartRoutine=0;
//correction = Kp * error + Kd * (error - prevError) + kI * (sum of errors)
//PID controller constants
floatKP=5;//position multiplier (gain) 2.25
floatKI=0.1;// Intergral multiplier (gain) .25
floatKD=2.0;// derivative multiplier (gain) 1.0
intlastError=0;
intlastError=0;
intsumError=0;
intsumError=0;
intStartRoutine=0;
//Integral term min/max (random value and not yet tested/verified)
//Integral term min/max (random value and not yet tested/verified)
intiMax=100;
intiMax=100;
@ -84,12 +80,16 @@ void setup() {
pinModeFast(MotorIN1,OUTPUT);
pinModeFast(MotorIN1,OUTPUT);
pinModeFast(MotorIN2,OUTPUT);
pinModeFast(MotorIN2,OUTPUT);
//ramps 1.4 motor control
// Initailisation recuperation commande carte
pinModeFast(STEP_PIN,INPUT);
pinModeFast(STEP_PIN,INPUT);
pinModeFast(DIR_PIN,INPUT);
pinModeFast(DIR_PIN,INPUT);
// INTERUPTION
attachInterrupt(0,doEncoderMotor0,CHANGE);// encoder pin on interrupt 0 - pin 2
attachInterrupt(0,doEncoderMotor0,CHANGE);// encoder pin on interrupt 0 - pin 2
attachInterrupt(1,countStep,RISING);//on pin 3
attachInterrupt(1,countStep,RISING);//on pin 3
// INTERUPTION
Serial.begin(115200);
Serial.begin(115200);
Serial.println("start");// a personal quirk
Serial.println("start");// a personal quirk
@ -125,7 +125,8 @@ void loop(){
}
}
voidFstart(){
voidFstart(){
//Fonction start joue une seul fois
// Devellopement de l'autotune en cours a intergrer au demarrage du moteur ainsi que le homing