H
henrik2000
Guest
Utilisation CPLD pour contrôler votre steppers est une alternative à essayer d'utiliser le PC pour le faire ..Si votre PC disparaît pendant 150 millisecondes pour vérifier si vous avez inséré (ou non) d'un DVD ..Il ne prend pas bien soin de vos moteurs pas à pas.(Sous windows je voulais dire bien sûr) ..Donc, comme une idée, pourquoi pas une petite CPLD pour contrôler chacun de vos pas à pas ..?Le contrôleur peut alors recevoir l'ordre juste de bas niveau et s'assurer que tout va bien ..
Pour montrer comment cela peut être petit, voici un exemple du code nécessaire pour un stepper (conduite avec P & FETS puissance N).Ceci à son tour vous permettent de choisir ce que vous voulez pas à pas, de très approximative de 7,5 degrés par pas de 0,5 degré exotiques ..Et quelle que soit tension / courant requis ..
Si vous voulez plus de détails, PM me ..Cheers ..
----------------------------------
module StepperMotorPorts (StepDrive, horloge, Direction, StepEnable, ProvideStaticHolding);
sortie [3:0] StepDrive; / / la sortie de 4 à conduire les MOSFET de conduire les bobines dans le moteur.
reg [3:0] StepDrive;
entrée d'horloge; / / entrée d'horloge à la logique de périphérique
direction d'entrée / / spin dans le sens horaire ou anti-horaire?(direction réelle dépend de branchement correct / pin Assignements)
entrée StepEnable; / / déplacer un seul pas sur roulement horloge suivante diviseur.congés élevé pour une horloge unique pour obtenir une seule étape.
/ / Si élevés à travers le retournement, mai obtenez deux étapes
ProvideStaticHolding d'entrée;
reg [1:0] État; / / machine simple état, 4 états
reg [31:0] incrément;
/ / La plupart des moteurs seront pas filer extrordinarially rapide, si cela ralentit l'entrée d'horloge par voie
paramètre [31:0] StepLockOut = 32'b00000000000000110000110101000000;
/ / capotage pour le comptoir, pour obtenir un retard non diviseur binaire
reg InternalStepEnable; / / utilisé pour capturer une étape permettra même lorsque nous sommes dans la boucle d'attente pour le diviseur d'horloge.
always @ (horloge posedge)
commencer
/ / sur l'horloge
Incrément <= incrément 31'b0000000000000000000000000000001; / / déplacer le compteur de retard
if (StepEnable == 1'b1)
commencer
InternalStepEnable <= 1'b1; / / récupère toutes les demandes pour une étape, même pendant que nous attendons ...
fin
if (incrément> = StepLockOut)
commencer
Incrément <= 32'b00000000000000000000000000000000 / / si nous roulons juste-ed-dessus, alors il est temps de faire quelque chose
if (ProvideStaticHolding == 1'b1)
commencer
/ / doit-on laisser bobines en état excité par defaul ou pas?
StepDrive <= 4'b0000;
fin
autre
commencer
StepDrive <= 4'b1111;
fin
if (InternalStepEnable == 1'b1)
commencer
/ / Sommes-nous censés intervenir sur cette horloge?
InternalStepEnable <= StepEnable;
/ / Togles InternalStepEnable à la vitesse de la reconduction diviseur d'horloge, de fuite de la
/ / Externe par StepEnable inférieure ou égale à un retournement.
/ / Pour mettre cela à l'intérieur du \ "si 1 = interne \" nous fait attendre après le coup d'éteindre,
/ / Si nous passons au moins une fois pour chaque impulsion de l'étape externes permettent ligne.
if (direction == 1'b1)
commencer
State <= Etat 2'b01;
end / / pour changer la direction d'un moteur pas à pas, vous dynamiser
if (direction == 1'b0)
commencer
State <= Etat - 2'b01;
end / / les bobines dans la tendance inverse, donc mettez seulement des Etats vers l'arrière
/ / Ceci permet également à un changement de direction au point de tout arbitraire
affaire (d'Etat)
2'b00:
commencer
StepDrive <= 4'b1010; / / ces Etats suivent modèle approprié de la bobine énergisant pour tourner des steppers
fin
2'b01:
commencer
StepDrive <= 4'b1001;
fin
2'b10:
commencer
StepDrive <= 4'b0101;
fin
2'b11:
commencer
StepDrive <= 4'b0110;
fin
par défaut:
commencer
fin
ENDCASE / / État
fin
fin
fin
endmodule
Pour montrer comment cela peut être petit, voici un exemple du code nécessaire pour un stepper (conduite avec P & FETS puissance N).Ceci à son tour vous permettent de choisir ce que vous voulez pas à pas, de très approximative de 7,5 degrés par pas de 0,5 degré exotiques ..Et quelle que soit tension / courant requis ..
Si vous voulez plus de détails, PM me ..Cheers ..
----------------------------------
module StepperMotorPorts (StepDrive, horloge, Direction, StepEnable, ProvideStaticHolding);
sortie [3:0] StepDrive; / / la sortie de 4 à conduire les MOSFET de conduire les bobines dans le moteur.
reg [3:0] StepDrive;
entrée d'horloge; / / entrée d'horloge à la logique de périphérique
direction d'entrée / / spin dans le sens horaire ou anti-horaire?(direction réelle dépend de branchement correct / pin Assignements)
entrée StepEnable; / / déplacer un seul pas sur roulement horloge suivante diviseur.congés élevé pour une horloge unique pour obtenir une seule étape.
/ / Si élevés à travers le retournement, mai obtenez deux étapes
ProvideStaticHolding d'entrée;
reg [1:0] État; / / machine simple état, 4 états
reg [31:0] incrément;
/ / La plupart des moteurs seront pas filer extrordinarially rapide, si cela ralentit l'entrée d'horloge par voie
paramètre [31:0] StepLockOut = 32'b00000000000000110000110101000000;
/ / capotage pour le comptoir, pour obtenir un retard non diviseur binaire
reg InternalStepEnable; / / utilisé pour capturer une étape permettra même lorsque nous sommes dans la boucle d'attente pour le diviseur d'horloge.
always @ (horloge posedge)
commencer
/ / sur l'horloge
Incrément <= incrément 31'b0000000000000000000000000000001; / / déplacer le compteur de retard
if (StepEnable == 1'b1)
commencer
InternalStepEnable <= 1'b1; / / récupère toutes les demandes pour une étape, même pendant que nous attendons ...
fin
if (incrément> = StepLockOut)
commencer
Incrément <= 32'b00000000000000000000000000000000 / / si nous roulons juste-ed-dessus, alors il est temps de faire quelque chose
if (ProvideStaticHolding == 1'b1)
commencer
/ / doit-on laisser bobines en état excité par defaul ou pas?
StepDrive <= 4'b0000;
fin
autre
commencer
StepDrive <= 4'b1111;
fin
if (InternalStepEnable == 1'b1)
commencer
/ / Sommes-nous censés intervenir sur cette horloge?
InternalStepEnable <= StepEnable;
/ / Togles InternalStepEnable à la vitesse de la reconduction diviseur d'horloge, de fuite de la
/ / Externe par StepEnable inférieure ou égale à un retournement.
/ / Pour mettre cela à l'intérieur du \ "si 1 = interne \" nous fait attendre après le coup d'éteindre,
/ / Si nous passons au moins une fois pour chaque impulsion de l'étape externes permettent ligne.
if (direction == 1'b1)
commencer
State <= Etat 2'b01;
end / / pour changer la direction d'un moteur pas à pas, vous dynamiser
if (direction == 1'b0)
commencer
State <= Etat - 2'b01;
end / / les bobines dans la tendance inverse, donc mettez seulement des Etats vers l'arrière
/ / Ceci permet également à un changement de direction au point de tout arbitraire
affaire (d'Etat)
2'b00:
commencer
StepDrive <= 4'b1010; / / ces Etats suivent modèle approprié de la bobine énergisant pour tourner des steppers
fin
2'b01:
commencer
StepDrive <= 4'b1001;
fin
2'b10:
commencer
StepDrive <= 4'b0101;
fin
2'b11:
commencer
StepDrive <= 4'b0110;
fin
par défaut:
commencer
fin
ENDCASE / / État
fin
fin
fin
endmodule