C'est sympa de continuer à me répondre !
J'envoie via arduino des salves de 5 créneaux et je les vois bien tous les 5 (oscillo, avec trigger) pendant la phase erratique, ou en continu pendant la phase de positionnement. Donc Arduino fait le job.
Le disque à fente n'est pas activé : j'essaye de voir si le guide-fil sera bien entrainé, mais oui, les fentes sont détectées par interruption et ça fonctionne bien.
Le pilotage du pas à pas se fait par un couple L297-L298 câblés selon la datasheet.
Le L297 semble fonctionner correctement : identité des signaux entre la sortie de l'arduino et l'entrée clock (broche 18) et signal conforme à la datasheet sur l'une des sortie ABCD, avec l'action visible du découpage courant. Donc ça a l'air bien.
Reste le L298 : c'est un shield très courant sur internet, pcb carré, sans doute chinois, à peine modifié pour pouvoir utiliser les résistances Rsense sur le L297. Le scope donne sur ses sorties des signaux qui sont des créneaux très tourmentés mais bon, ça fait tourner le pas à pas en continu.
Le programme n'est pas optimisé. C'était juste pour mesurer l'avance du guide-fil pour un pas. Et aussi pour examiner un autre problème : j'ai remarqué des différences dans les distances parcourues pour un même nombre de pas dans un sens et dans l'autre. mais vérification faite, ça n'est vrai que dans les fonctionnements erratiques. Je ne mets donc que la fonction droite -gauche et j'omets la fonctions recepnbr qui sert à recevoir un nombre saisi depuis le moniteur.
byte pinPas = 7;
byte pinDp = 8;
byte pinFcd = 11;
byte pinFcg = 13;
byte pinEnPap = 17;//carte pap, réduit et en
byte pinSens = 18;
int PASTOT= 4000; //4000 pas à faire pour le test
int SALVE[4]={5,10,20,50};
int delai;
unsigned int intersalve;
void setup(){
pinMode(pinCarc, INPUT);
pinMode(pinFcd,INPUT);
pinMode(pinDp,INPUT);
pinMode(pinFcg, INPUT);
pinMode(pinSens, OUTPUT);
pinMode(pinPas, OUTPUT);
pinMode(pinEnPap, OUTPUT);
digitalWrite(pinSens,LOW);
digitalWrite(pinPas, LOW);
digitalWrite(pinEnPap, LOW);
Serial.begin(9600);
}
void loop() {
//Choix de la vitesse PAP
Serial.print("Vitesse du PAP en µs : ");
delai=recepnbr();
Serial.println(delai);
//Choix du délai intersalve
Serial.print("Intervalle entre deux salves (ms) : ");
intersalve=recepnbr();
Serial.println(intersalve);
//mesures de l'avance par pas en aller et en retour
Serial.print("Mesure de l'impact des salves");
for(int K=0;K<4;K++){
Serial.print(PASTOT);
Serial.print(" pas, salves de ");
Serial.println(SALVE[K]);
droite_gauche(PASTOT,SALVE[K]);
while(digitalRead(pinDp)==LOW){//attente
delay(100);
}
gauche_droite(PASTOT,SALVE[K]);
while(digitalRead(pinDp)==LOW){//attente
delay(100);
}
}
}
void droite_gauche(int NBRPAS, int AV){
int PAS=0;
Serial.println("Réglage de la position de carcasse. Calage vers la droite du départ");
digitalWrite(pinSens, LOW); // vers la droite
digitalWrite(pinEnPap,HIGH);
while(digitalRead(pinFcd)!=HIGH){
digitalWrite(pinPas,LOW);
delayMicroseconds(delai);
digitalWrite(pinPas,HIGH);
delayMicroseconds(delai);
}
digitalWrite(pinEnPap,LOW);
Serial.println("Chariot positionné en butée droite. Ajustez la joue puis Dp");
while(digitalRead(pinDp)==LOW){//attente
delay(100);
}
digitalWrite(pinSens, HIGH); // vers la gauche
if(AV==1){
digitalWrite(pinEnPap,HIGH);
for(int I=1;I<=NBRPAS;I++){
digitalWrite(pinPas,LOW);
delayMicroseconds(delai);
digitalWrite(pinPas,HIGH);
delayMicroseconds(delai);
}
digitalWrite(pinEnPap,LOW);
}
else{
while(PAS<=NBRPAS){
digitalWrite(pinEnPap,HIGH);
for(int I=1;I<=AV;I++){
digitalWrite(pinPas,LOW);
delayMicroseconds(delai);
digitalWrite(pinPas,HIGH);
delayMicroseconds(delai);
}
digitalWrite(pinEnPap,LOW);
PAS+=AV;
delay(intersalve);
}
digitalWrite(pinEnPap,LOW);
}
}
Les créneaux jusqu'au L297 sont très purs mais serait-il possible que des parasites de commutation se manifestent dans le L298 ?
Merci pour ton aide