H
henrik2000
Guest
Bruke CPLD å kontrollere Stepmaskiner er et alternativ til å bruke PCen til å gjøre det ..Hvis PCen går unna på 150 millisekunder for å sjekke om du har satt inn (eller ikke) en DVD ..Det er ikke å ta godt vare på Stepmaskiner.(Under windows Jeg mente selvfølgelig) ..Så som en idé, hvorfor ikke bruke en liten CPLD å kontrollere hver enkelt av stepper ..?Kontrolleren kan deretter bare motta lavt nivå orden og sørge for at alt går greit ..
For å vise hvor lite dette kan være, her er et eksempel på kode som kreves for en stepper (driving P & N makt FETs).Dette gjør at du kan velge det stepper du ønsker, fra svært grove 7,5 grader per trinn til eksotiske 0,5 grader ..Og uansett spenning / strøm nødvendig ..
Hvis du trenger mer informasjon, PM meg ..Cheers ..
----------------------------------
modul StepperMotorPorts (StepDrive, klokke, retning, StepEnable, ProvideStaticHolding);
output [3:0] StepDrive; / de 4 utgang for å drive MOSFETs drev spolene i motoren.
reg [3:0] StepDrive;
input klokke; / klokke innspill til logisk enhet
input Direction; / spinner med eller mot klokken?(faktisk retning avhenger riktig HOOKUP / pin assignements)
input StepEnable; / flytte et enkelt trinn på neste klokken divider rollover.la høyt for en enkelt klokke for å få et enkelt trinn.
/ / Hvis høyt over rollover, kan få to trinn
input ProvideStaticHolding;
reg [1:0] stat; / / enkelt stat maskin, 4 stater
reg [31:0] STEGTELLER;
/ / De fleste motorene vil ikke spinne extrordinarially raskt, så dette forsinker klokken input vei ned
parameter [31:0] StepLockOut = 32'b00000000000000110000110101000000;
/ / rollover til disken, for å få en ikke-binær forsinkelse divider
reg InternalStepEnable; / / brukes til å ta et skritt aktiverer selv når vi er i vente løkke for klokken divider.
alltid @ (posedge klokke)
begynne
/ / på klokken
STEGTELLER <= STEGTELLER 31'b0000000000000000000000000000001; / flytte forsinkelsen counter
if (StepEnable == 1'b1)
begynne
InternalStepEnable <= 1'b1; / registrere eventuelle forespørsler om et steg, selv mens vi venter ...
slutt
if (STEGTELLER> = StepLockOut)
begynne
STEGTELLER <= 32'b00000000000000000000000000000000; / / hvis vi bare roll-ed over, så er det på tide å gjøre noe
if (ProvideStaticHolding == 1'b1)
begynne
/ / bør vi la spoler i strømførende tilstanden ved defaul eller ikke?
StepDrive <= 4'b0000;
slutt
ellers
begynne
StepDrive <= 4'b1111;
slutt
if (InternalStepEnable == 1'b1)
begynne
/ / Skal vi tråkke på denne klokken?
InternalStepEnable <= StepEnable;
/ / InternalStepEnable togles på hastigheten til klokken divider rollover, den etterfølgende
/ / Ekstern StepEnable med mindre enn eller lik en rollover.
/ / Setter dette inn i \ "hvis indre = 1 \" gjør oss vente til etter å flytte for å slå av,
/ / Så vi flytte minst en gang for hver puls av eksterne trinn aktivere linje.
if (retning == 1'b1)
begynne
state <= stat 2'b01;
end / / for å endre retning av en stepper motor, energi du
if (retning == 1'b0)
begynne
state <= stat - 2'b01;
end / / den spoler i motsatt mønster, så bare kjøre statene bakover
/ / Dette gjør også en endring av retning på en vilkårlig punkt
case (stat)
2'b00:
begynne
StepDrive <= 4'b1010; / disse statene følger riktig mønster av coil energigivende for å snu Stepmaskiner
slutt
2'b01:
begynne
StepDrive <= 4'b1001;
slutt
2'b10:
begynne
StepDrive <= 4'b0101;
slutt
2'b11:
begynne
StepDrive <= 4'b0110;
slutt
default:
begynne
slutt
endcase / / stat
slutt
slutt
slutt
endmodule
For å vise hvor lite dette kan være, her er et eksempel på kode som kreves for en stepper (driving P & N makt FETs).Dette gjør at du kan velge det stepper du ønsker, fra svært grove 7,5 grader per trinn til eksotiske 0,5 grader ..Og uansett spenning / strøm nødvendig ..
Hvis du trenger mer informasjon, PM meg ..Cheers ..
----------------------------------
modul StepperMotorPorts (StepDrive, klokke, retning, StepEnable, ProvideStaticHolding);
output [3:0] StepDrive; / de 4 utgang for å drive MOSFETs drev spolene i motoren.
reg [3:0] StepDrive;
input klokke; / klokke innspill til logisk enhet
input Direction; / spinner med eller mot klokken?(faktisk retning avhenger riktig HOOKUP / pin assignements)
input StepEnable; / flytte et enkelt trinn på neste klokken divider rollover.la høyt for en enkelt klokke for å få et enkelt trinn.
/ / Hvis høyt over rollover, kan få to trinn
input ProvideStaticHolding;
reg [1:0] stat; / / enkelt stat maskin, 4 stater
reg [31:0] STEGTELLER;
/ / De fleste motorene vil ikke spinne extrordinarially raskt, så dette forsinker klokken input vei ned
parameter [31:0] StepLockOut = 32'b00000000000000110000110101000000;
/ / rollover til disken, for å få en ikke-binær forsinkelse divider
reg InternalStepEnable; / / brukes til å ta et skritt aktiverer selv når vi er i vente løkke for klokken divider.
alltid @ (posedge klokke)
begynne
/ / på klokken
STEGTELLER <= STEGTELLER 31'b0000000000000000000000000000001; / flytte forsinkelsen counter
if (StepEnable == 1'b1)
begynne
InternalStepEnable <= 1'b1; / registrere eventuelle forespørsler om et steg, selv mens vi venter ...
slutt
if (STEGTELLER> = StepLockOut)
begynne
STEGTELLER <= 32'b00000000000000000000000000000000; / / hvis vi bare roll-ed over, så er det på tide å gjøre noe
if (ProvideStaticHolding == 1'b1)
begynne
/ / bør vi la spoler i strømførende tilstanden ved defaul eller ikke?
StepDrive <= 4'b0000;
slutt
ellers
begynne
StepDrive <= 4'b1111;
slutt
if (InternalStepEnable == 1'b1)
begynne
/ / Skal vi tråkke på denne klokken?
InternalStepEnable <= StepEnable;
/ / InternalStepEnable togles på hastigheten til klokken divider rollover, den etterfølgende
/ / Ekstern StepEnable med mindre enn eller lik en rollover.
/ / Setter dette inn i \ "hvis indre = 1 \" gjør oss vente til etter å flytte for å slå av,
/ / Så vi flytte minst en gang for hver puls av eksterne trinn aktivere linje.
if (retning == 1'b1)
begynne
state <= stat 2'b01;
end / / for å endre retning av en stepper motor, energi du
if (retning == 1'b0)
begynne
state <= stat - 2'b01;
end / / den spoler i motsatt mønster, så bare kjøre statene bakover
/ / Dette gjør også en endring av retning på en vilkårlig punkt
case (stat)
2'b00:
begynne
StepDrive <= 4'b1010; / disse statene følger riktig mønster av coil energigivende for å snu Stepmaskiner
slutt
2'b01:
begynne
StepDrive <= 4'b1001;
slutt
2'b10:
begynne
StepDrive <= 4'b0101;
slutt
2'b11:
begynne
StepDrive <= 4'b0110;
slutt
default:
begynne
slutt
endcase / / stat
slutt
slutt
slutt
endmodule