PieM
Senior Member
Bonjour,
Ci joint un programme permettant de commander un moteur pas à pas bipolaire, en accélération et en décélération constantes tout en respectant le nombre de pas.
Les différentes séquences permettent de piloter le moteur par pas entiers, 1 phase ou 2 phases (couple maxi) et par demi-pas.
Ce programme peut également être utilisé pour un moteur unipolaire.
Petite vidéo
Le fichier basic plus lisible ...
View attachment PAP-Bipol-accel01.bas
PS: Dans les commentaires du programme remplacer pause en ms par pause en 1/800 de ms.
en effet c'est l'instruction pauseus (sous 32 MHz) qui est utilisée et non pause.
Ci joint un programme permettant de commander un moteur pas à pas bipolaire, en accélération et en décélération constantes tout en respectant le nombre de pas.
Les différentes séquences permettent de piloter le moteur par pas entiers, 1 phase ou 2 phases (couple maxi) et par demi-pas.
Ce programme peut également être utilisé pour un moteur unipolaire.
Petite vidéo
Code:
'================================================= ==
'Commande moteur PAP bipolaires avec accélération
'18M2 vers;2A - Driver L293D
'PieM 20120528
'Moteur commandé par les sorties B.7 à B.4
'================================================= ==
#picaxe 18M2
setfreq M32
'================================================= ==
symbol MOT = outpinsB 'MOT correspond au portB du 18M2
symbol index=b3
symbol period1 = w10 'temps entre pas en ms
symbol nbpas1 = w9 'Nombre de pas moteur1
symbol coef = w7 'coef d'accélération
dirsB= %11110000 'affectation B.4 à B.7 en sortie vers le L293
'mémorisation de la sequence de commande pour les moteurs en demi-pas
eeprom 0,(%1010,%1000,%1001, %0001,%0101,%0100,%0110,%0010)
'================================================= =======================
princ:
do
Mot = Mot & $F0 | %0000 'arret moteur hors tension;
pause 8000
gosub s_prog1 :pause 800
gosub s_prog2 :pause 10
gosub s_prog3 :pause 800
gosub s_prog4 :pause 800
gosub s_prog5 :pause 10
gosub s_prog6 :pause 800
loop
s_prog1:'actionne nbpas pas entiers (2 phases) dans un sens avec une vitesse fixe
{ nbpas1 = 400 'definit le nombres de pas
period1 = 1000 'definit la vitesse ( en fait 1/vitesse)
index=0 'definit le mode 2 phases
for w8 = 1 to nbpas1
gosub Moteur1 'action Mot. Bipolaire
index=index+2 'incrémentation adresse eeprom
next
return
}
s_prog2:'actionne nbpas pas entiers (2 phases) dans un sens avec une accélération
{ nbpas1 = 1600 'definit le nombres de pas
index=0 'va lire une séquence (paire) sur deux (mode 2 enroulements alimentés)
coef = 65000/nbpas1 : coef = 100 /coef 'la valeur 100 est à augmenter si le moteur vibre
for w8= 1 to nbpas1
period1 = 65000 /w8 * coef max 60000
gosub Moteur1 'action Mot. Bipolaire
index=index-2 'incrémentation adresse eeprom
next
return
}
s_prog3:'actionne nbpas pas entiers (2 phases) dans un sens inverse avec une décélération
{ nbpas1 = 800
index = 0 'va lire une séquence (paire) sur deux (mode 2 enroulements alimentés)
coef = 65000/nbpas1 : coef = 100 /coef
for w8 = nbpas1 to 1 step -1
gosub Moteur1 'action Mot. Bipolaire step 2 phases
period1 = 65000 /w8 * coef max 60000
gosub Moteur1 'action Mot. Bipolaire step 2 phases
index = index-2 'décrémentation adresse eeprom (inversion sens)next
next
return
}
s_prog4:'actionne 200 pas entiers (1 phase) dans sens inverse avec une vitesse fixe
{ nbpas1 = 200
period1 = 2000
index = 1'va lire une séquence (impaire) sur deux (mode 1 enroulement alimenté)
for w8 = 1 to nbpas1
gosub Moteur1 'action Mot. Bipolaire step 1 phase
index = index-2
next
return
}
s_prog5:'actionne nbpas demi-pas dans un sens avec une accélération
{ nbpas1 = 1600
coef = 65000/nbpas1 : coef = 100 /coef
for w8= 1 to nbpas1
period1 = 65000 /w8 * coef max 60000
gosub Moteur1 'action Mot. Bipolaire 1/2 step
index=index-1 'incrémentation adresse eeprom
next
return
}
s_prog6:'actionne nbpas demi-pas dans un sens inverse avec une décélération
{ nbpas1 = 1600
coef = 65000/nbpas1 : coef = 50 /coef
for w8 = nbpas1 to 1 step -1
gosub Moteur1 'action Mot. Bipolaire step 2 phases
period1 = 65000 /w8 * coef max 60000
gosub Moteur1 'action Mot. Bipolaire step 2 phases
index = index-1 'décrémentation adresse eeprom (inversion sens)next
next
return
}
Moteur1: ' Commande pas du bipolaire
{ index = index & %00000111 'la valeur de b3 est limitée à 3 bits, soit 0 à 7
read index, b4 ' va lire la séquence 0 à 7 dans l'eeprom.
b4 = b4*16 'decale de de 4 bit pour être au niveau de B.4 à B.7
Mot = Mot & $0f | b4 'envoi de cette séquence au moteur en masquant les B.0 à B.3
pauseus period1 'pause en ms
return
}
'================================================= =======================
Le fichier basic plus lisible ...
View attachment PAP-Bipol-accel01.bas
PS: Dans les commentaires du programme remplacer pause en ms par pause en 1/800 de ms.
en effet c'est l'instruction pauseus (sous 32 MHz) qui est utilisée et non pause.
Last edited: