H
henrik2000
Guest
Gebruiken CPLD uw steppers controle is een alternatief voor de pc probeert te gebruiken om dit te doen ..Als uw pc gaat weg voor 150 milliseconden om te controleren of u geplaatst (of niet) een DVD ..Het is niet de goede zorg van uw steppers.(Onder Windows ik bedoelde natuurlijk) ..Dus als een idee, waarom niet gebruik maken van een klein CPLD te controleren elk van uw stepper ..?De controller kan dan gewoon ontvangen laag niveau orde en zorgen dat alles soepel te laten verlopen ..
Om te laten zien hoe klein dit kan worden, is hier een voorbeeld van de code nodig voor een stepper (rij P & N macht FETS).Dit in bochten laat je kiezen wat je wilt stepper, van zeer ruwe 7.5 graden per stap naar exotische 0,5 graad ..En wat spanning / stroom nodig ..
Als u meer informatie, PM me ..Cheers ..
----------------------------------
module StepperMotorPorts (StepDrive, klok, Direction, StepEnable, ProvideStaticHolding);
output [3:0] StepDrive / / uitgang van de 4 te rijden de mosfets het besturen van de spoelen in de motor.
reg [3:0] StepDrive;
input klok; / / clock input voor de logica apparaat
input richting; / / spin de klok mee of tegen de klok in?(werkelijke richting is afhankelijk van de juiste aansluiting / Opdrachten pin)
input StepEnable; / / zet een stap op de volgende klok divider kantelen.verlof hoog voor een enkele klok om een enkele stap.
/ / Als hoog over rollover, kan krijgen twee stappen
input ProvideStaticHolding;
reg [1:0] staat; / / simpel toestand machine, 4 bepaalt
reg [31:0] StepCounter;
/ / De meeste motoren niet extrordinarially snel zal draaien, dus dit vertraagt de klok-ingang weg naar beneden
parameter [31:0] StepLockOut = 32'b00000000000000110000110101000000;
/ / rollover voor de teller, om een niet-binaire vertragingstijd divider
reg InternalStepEnable; / / gebruikt om een stap vastleggen in staat, zelfs wanneer we in de wacht lus voor de klok divider.
altijd @ (posedge klok)
beginnen
/ / op klok
StepCounter <= StepCounter 31'b0000000000000000000000000000001; / / zet de vertraging teller
if (StepEnable == 1'b1)
beginnen
InternalStepEnable <= 1'b1; / / capture alle verzoeken om een stap, zelfs terwijl we wachten ...
eindigen
if (StepCounter> = StepLockOut)
beginnen
StepCounter <= 32'b00000000000000000000000000000000; / / als we roll-over ed, dan is het tijd om iets te doen
if (ProvideStaticHolding == 1'b1)
beginnen
/ / we moeten spoelen verlof in energized staat door defaul of niet?
StepDrive <= 4'b0000;
eindigen
anders
beginnen
StepDrive <= 4'b1111;
eindigen
if (InternalStepEnable == 1'b1)
beginnen
/ / Moeten we nu stap op deze klok?
InternalStepEnable <= StepEnable;
/ / InternalStepEnable togles op de snelheid van de klok divider rollover, trailing de
/ / Externe StepEnable door minder dan of gelijk aan een rollover.
/ / Brengen dit in de \ "als de interne = 1 \" laat ons wachten tot na de verhuizing uit te schakelen,
/ / Dus we gaan minstens een keer per puls van externe stap mogelijk lijn.
if (richting == 1'b1)
beginnen
toestand <= staat 2'b01;
end / / naar de richting van een stappenmotor veranderen, Energize u
if (richting == 1'b0)
beginnen
staat <= staat - 2'b01;
einde / / de spoelen in de tegenovergestelde patroon, dus alleen staten lopen achteruit
/ / Dit maakt het ook mogelijk een verandering van richting op elk willekeurig punt
geval is (staat)
2'b00:
beginnen
StepDrive <= 4'b1010 / / deze landen volgen juiste patroon van spoel energizing voor het draaien Steppers
eindigen
2'b01:
beginnen
StepDrive <= 4'b1001;
eindigen
2'b10:
beginnen
StepDrive <= 4'b0101;
eindigen
2'b11:
beginnen
StepDrive <= 4'b0110;
eindigen
default:
beginnen
eindigen
endcase / / state
eindigen
eindigen
eindigen
endmodule
Om te laten zien hoe klein dit kan worden, is hier een voorbeeld van de code nodig voor een stepper (rij P & N macht FETS).Dit in bochten laat je kiezen wat je wilt stepper, van zeer ruwe 7.5 graden per stap naar exotische 0,5 graad ..En wat spanning / stroom nodig ..
Als u meer informatie, PM me ..Cheers ..
----------------------------------
module StepperMotorPorts (StepDrive, klok, Direction, StepEnable, ProvideStaticHolding);
output [3:0] StepDrive / / uitgang van de 4 te rijden de mosfets het besturen van de spoelen in de motor.
reg [3:0] StepDrive;
input klok; / / clock input voor de logica apparaat
input richting; / / spin de klok mee of tegen de klok in?(werkelijke richting is afhankelijk van de juiste aansluiting / Opdrachten pin)
input StepEnable; / / zet een stap op de volgende klok divider kantelen.verlof hoog voor een enkele klok om een enkele stap.
/ / Als hoog over rollover, kan krijgen twee stappen
input ProvideStaticHolding;
reg [1:0] staat; / / simpel toestand machine, 4 bepaalt
reg [31:0] StepCounter;
/ / De meeste motoren niet extrordinarially snel zal draaien, dus dit vertraagt de klok-ingang weg naar beneden
parameter [31:0] StepLockOut = 32'b00000000000000110000110101000000;
/ / rollover voor de teller, om een niet-binaire vertragingstijd divider
reg InternalStepEnable; / / gebruikt om een stap vastleggen in staat, zelfs wanneer we in de wacht lus voor de klok divider.
altijd @ (posedge klok)
beginnen
/ / op klok
StepCounter <= StepCounter 31'b0000000000000000000000000000001; / / zet de vertraging teller
if (StepEnable == 1'b1)
beginnen
InternalStepEnable <= 1'b1; / / capture alle verzoeken om een stap, zelfs terwijl we wachten ...
eindigen
if (StepCounter> = StepLockOut)
beginnen
StepCounter <= 32'b00000000000000000000000000000000; / / als we roll-over ed, dan is het tijd om iets te doen
if (ProvideStaticHolding == 1'b1)
beginnen
/ / we moeten spoelen verlof in energized staat door defaul of niet?
StepDrive <= 4'b0000;
eindigen
anders
beginnen
StepDrive <= 4'b1111;
eindigen
if (InternalStepEnable == 1'b1)
beginnen
/ / Moeten we nu stap op deze klok?
InternalStepEnable <= StepEnable;
/ / InternalStepEnable togles op de snelheid van de klok divider rollover, trailing de
/ / Externe StepEnable door minder dan of gelijk aan een rollover.
/ / Brengen dit in de \ "als de interne = 1 \" laat ons wachten tot na de verhuizing uit te schakelen,
/ / Dus we gaan minstens een keer per puls van externe stap mogelijk lijn.
if (richting == 1'b1)
beginnen
toestand <= staat 2'b01;
end / / naar de richting van een stappenmotor veranderen, Energize u
if (richting == 1'b0)
beginnen
staat <= staat - 2'b01;
einde / / de spoelen in de tegenovergestelde patroon, dus alleen staten lopen achteruit
/ / Dit maakt het ook mogelijk een verandering van richting op elk willekeurig punt
geval is (staat)
2'b00:
beginnen
StepDrive <= 4'b1010 / / deze landen volgen juiste patroon van spoel energizing voor het draaien Steppers
eindigen
2'b01:
beginnen
StepDrive <= 4'b1001;
eindigen
2'b10:
beginnen
StepDrive <= 4'b0101;
eindigen
2'b11:
beginnen
StepDrive <= 4'b0110;
eindigen
default:
beginnen
eindigen
endcase / / state
eindigen
eindigen
eindigen
endmodule