A pulsbreddemodulasjon er en måte å kontrollere rotasjon eller posisjon av en elektrisk motor eller servo. Ved hjelp Verilog HDL , vil jeg vise hvor enkelt det er å bruke tellere for å skape en PWM . Du trenger
Xilinx ISE
FPGA
Servo /motor
Vis flere instruksjoner
en
Så hvordan gjør en PWM arbeid ?
< p> å ha en periodisk rektangulær signal , endrer vi driftssyklus ( modulere ) for å være mindre eller større og dermed kontrollere vår enhet.
Hvorfor bruke en PWM ?
p Det er en enkel digital til analog konvertering teknikk som ikke krever en ADC .
2
Ok , så la oss tenke hva innganger , utganger, registre og tellere vi trenger og hvilken design vi ønsker å skape .
jeg vil bruke de åtte brytere på Spartan FPGA bord for å kontrollere hvordan min motor /servo beveger seg eller hvor fort eller sakte jeg vil den skal flytte
Innganger: . klokke, 8 switchesOutputs : pwmRegisters : pwmCounters : 16 bit telleren ( vil forklare hvorfor 16 bits senere )
3
vite hva som er klokkehastighet på FPGA din og hvilken periode du ønsker å bruke.
jeg har en Spartan FPGA bord med en 50MHz klokke . Jeg ønsker å oppdatere signal hver 1 millisekund (t ) . Vi bruker følgende beregning for å finne den bølgeform periode ( p )
p = t * FPGA klokke
I mitt tilfelle : en
p = 0,001 sekunder * 50MHz = 50000
vite min p er viktig for å beregne min trinn forsinkelse ( sd ) : en
sd = p /256 = 195
Hvorfor jeg bruke 256 ? Jeg skal bruke åtte brytere for å kontrollere min servo /motor , så 2 ^ 8 = 256 .
4
Til slutt ønsker vi å bruke vår telleren som vår plikt syklus. For å beregne hvor mange biter komponere vår teller vi bruker : en
log2 ( sd ) = hvor mange biter er vår teller
Mens disken er mindre enn sd (trinn forsinkelse) multiplisert med brytere verdi (som kan variere fra 0 til 255) , dette er vår plikt syklus.