Commande de moteur PaP en accélération et décélération

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

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:
Top