'===========================================================================
'Prog: Simulavion01
'Commande de vitesses moteur par séquences, en PWM
'PieM - 120411
'===========================================================================
#picaxe 14M2
setfreq M4
'Entrées ------------------------------------------------------------------------------------------------------------------------
'Sorties ------------------------------------------------------------------------------------------------------------------------
symbol Moteur = B.2
'Variables ----------------------------------------------------------------------------------------------------------------------
symbol Vini = b1 'Vitesse initiale dans la séquence
symbol Vcou = b2 'Vitesse courante de commande du PWM
symbol Vfin = b3 'Vitesse finale dans la séquence
symbol dt = b10 'dt : durée séquence en secondes
symbol dv = b11 'dv : ecart de vitesse
symbol acc= b13 'acc: acceleration
symbol seq= b14 'seq: adresse de sequence en cours
'Contantes ------------------------------------------------------------------------------------------------------------------------
symbol coef = 6 'coef de mise à l'echelle des valeurs de vitesse
'à faire varier en fonction du moteur et du résultat souhaité
'Initialisation ------------------------------------------------------------------------------------------------------------------------
'Chargement des données par séquence: [vitesse initiale], [vitesse finale],[durée]
EEprom 0,(1,5,6,25,25,9,35,35,4,25,25,9,40,40,10,20,20,12,8,0,8)
'Les vitesses sont données en équivalence centaines de tours : (25= 2500)
'mais sont mises à l'echelle de la commande PWM.par coef.
'============================================================================
principal:
for seq = 0 to 18 step 3 'adressage de la mémoire, de 3 en 3
read seq,Vini,Vfin,dt 'lecture des donnée de la séquence à l'adresse seq
Vini = Vini* coef 'mise à l'echelle des valeurs
Vfin = Vfin* coef 'mise à l'echelle des valeurs
Vcou = Vini 'Initialisation Vitesses courante = V initiale
gosub Testacc
next
pwmout Moteur,OFF 'Arrêt du moteur
pause 60000 'Attente 60s
goto principal 'rebouclage du programme
'============================================================================
Testacc: 'test si accélération, décélération ou vitesse constante.
if Vfin = Vini then gosub constant
if Vfin > Vini then gosub accel
if Vini > Vfin then gosub decel
return
'============================================================================
accel:
dv = Vfin-Vini 'ecart de vitesse
acc = dv/dt 'accélération résultante
pwmout pwmdiv16, Moteur, 124, Vini 'commande moteur à sa vitesse initiale
for b5 = 1 to dt
Vcou = Vcou+acc ' toutes les secondes la vitesse courante est augmentée de acc
pwmduty Moteur,Vcou 'Commande nouvelle vitesse moteur
pause 1000 'pause 1 seconde
next
return
'============================================================================
decel:
dv = Vini-Vfin 'ecart de vitesse
acc = dv/dt 'accélération résultante
pwmout pwmdiv16, B.2, 124, Vini 'commande moteur à sa vitesse initiale
for b5 = 1 to dt
Vcou = Vcou-acc ' toutes les secondes la vitesse courante est réduite de acc
pwmduty Moteur,Vcou 'Commande nouvelle vitesse moteur
pause 1000 'pause 1 seconde
next
return
'========================================================================
constant:
pwmout pwmdiv16, B.2, 124, Vini 'commande moteur à sa vitesse initiale
w10 = dt *1000 'calcul de la pause en ms
pause w10
return
'********************************fin prog***************************************