Bonjour à tous,
j'ai réalisé une carte de controle de moteur pas à pas piloté par le PC en USB, mais je rencontre quelques difficultés dans la séquence de pilotage du moteur....
J'utilise un PIC18F4550 pour la comm USB ainsi que pour les envois de commande moteur vers un ULN2803A.
Tout fonctionne bien, mais certains pas ne sont pas bien effectués, j'ai des comportements assez étranges, quelque fois le moteur tourne bien, mais il arrive qu'il saute des pas (dans un sens comme dans l'autre).
J'ai programmé mon PIC en C (C18), le datasheet du moteur me donne l'indication suivante:
et l'extract de mon code est le suivant:Code:/* RS step A B C D 0 1 1 0 0 1 0 1 1 0 2 0 0 1 1 3 1 0 0 1 */
le MOTOR1 (enfin l'ULN...) est connecté sur les PIN RB0->RB3 de mon PICCode:void Backward_RS(byte step, byte speed){ byte i=0; while(i<step){ //Step 0 -> Step 1 if(MOTOR1_A == 1 && MOTOR1_B == 1 && MOTOR1_C == 0 && MOTOR1_D == 0){ MOTOR1_A = 0; MOTOR1_B = 1; MOTOR1_C = 1; MOTOR1_D = 0; } //Step 1 -> Step 2 else if(MOTOR1_A == 0 && MOTOR1_B == 1 && MOTOR1_C == 1 && MOTOR1_D == 0){ MOTOR1_A = 0; MOTOR1_B = 0; MOTOR1_C = 1; MOTOR1_D = 1; } //Step 2 -> Step 3 else if(MOTOR1_A == 0 && MOTOR1_B == 0 && MOTOR1_C == 1 && MOTOR1_D == 1){ MOTOR1_A = 1; MOTOR1_B = 0; MOTOR1_C = 0; MOTOR1_D = 1; } //Step 3 -> Step 0 else if(MOTOR1_A == 1 && MOTOR1_B == 0 && MOTOR1_C == 0 && MOTOR1_D == 1){ MOTOR1_A = 1; MOTOR1_B = 1; MOTOR1_C = 0; MOTOR1_D = 0; } //Init a Step 0 else{ MOTOR1_A = 1; MOTOR1_B = 1; MOTOR1_C = 0; MOTOR1_D = 0; } tempo(speed); i++; } }
voyez vous quelque chose qui cloche dans mon code ? (je sais je ne fais pas de masques, mais pour le debug c'est quand meme plus simple comme ça pour le moment...)
Merci de votre aide !
Tiamat.
-----