Provided by: linuxcnc-uspace_2.9.0~pre1+git20230208.f1270d6ed7-1_amd64 bug

NAME

       pwmgen - software PWM/PDM generation

SYNOPSIS

       loadrt pwmgen output_type=type0[,type1...]

DESCRIPTION

       pwmgen  is used to generate PWM (pulse width modulation) or PDM (pulse density modulation)
       signals.  The maximum PWM frequency and  the  resolution  is  quite  limited  compared  to
       hardware-based  approaches,  but in many cases software PWM can be very useful.  If better
       performance is needed, a hardware PWM generator is a better choice.

       pwmgen supports a maximum of eight channels.   The  number  of  channels  actually  loaded
       depends on the number of type values given.  The value of each type determines the outputs
       for that channel.

       type 0: single output
              A single output pin, pwm, whose duty cycle is determined by  the  input  value  for
              positive inputs, and which is off (or at min-dc) for negative inputs.  Suitable for
              single ended circuits.

       type 1: pwm/direction
              Two output pins, pwm and dir.  The duty cycle on pwm varies as a  function  of  the
              input value.  dir is low for positive inputs and high for negative inputs.

       type 2: up/down
              Two output pins, up and down.  For positive inputs, the PWM/PDM waveform appears on
              up, while down is low.  For negative inputs, the waveform appears on down, while up
              is  low.   Suitable  for driving the two sides of an H-bridge to generate a bipolar
              output.

FUNCTIONS

       pwmgen.make-pulses (no floating-point)
              Generates the actual PWM waveforms, using information computed by update.  Must  be
              called  as  frequently  as  possible,  to maximize the attainable PWM frequency and
              resolution, and minimize jitter.  Operates on all channels at once.

       pwmgen.update (uses floating point)
              Accepts an input value, performs scaling and limit checks, and converts it  into  a
              form usable by make-pulses for PWM/PDM generation.  Can (and should) be called less
              frequently than make-pulses.  Operates on all channels at once.

PINS

       pwmgen.N.enable bit in
              Enables PWM generator N - when false, all pwmgen.N output pins are low.

       pwmgen.N.value float in
              Commanded value.  When value = 0.0, duty cycle is 0%, and when value = ±scale, duty
              cycle is ± 100% (subject to min-dc and max-dc limitations).

       pwmgen.N.pwm bit out (output types 0 and 1 only)
              PWM/PDM waveform.

       pwmgen.N.dir bit out (output type 1 only)
              Direction output: low for forward, high for reverse.

       pwmgen.N.up bit out (output type 2 only)
              PWM/PDM waveform for positive input values, low for negative inputs.

       pwmgen.N.down bit out (output type 2 only)
              PWM/PDM waveform for negative input values, low for positive inputs.

       pwmgen.N.curr-dc float out
              The  current  duty cycle, after all scaling and limits have been applied.  Range is
              from -1.0 to +1.0.

       pwmgen.N.max-dc float in/out
              The maximum duty cycle.  A value of 1.0 corresponds to 100%.  This  can  be  useful
              when  using  transistor  drivers with bootstrapped power supplies, since the supply
              requires some low time to recharge.

       pwmgen.N.min-dc float in/out
              The minimum duty cycle.  A value of 1.0 corresponds to 100%.  Note  that  when  the
              pwm  generator  is  disabled,  the  outputs  are  constantly low, regardless of the
              setting of min-dc.

       pwmgen.N.scale float in/out
       pwmgen.N.offset float in/out
              These parameters provide a scale and offset from the value pin to  thewactual  duty
              cycle.  The duty cycle is calculated according to dc = (value/scale) + offset, with
              1.0 meaning 100%.

       pwmgen.N.pwm-freq float in/out
              PWM frequency in Hz.  The upper limit is half of the frequency at which make-pulses
              is  invoked,  and  values  above  that  limit  will  be  changed  to the limit.  If
              dither-pwm is false, the value will be changed to the nearest  integer  submultiple
              of  the  make-pulses  frequency.  A value of zero produces Pulse Density Modulation
              instead of Pulse Width Modulation.

       pwmgen.N.dither-pwm bit in/out
              Because software-generated PWM  uses  a  fairly  slow  timebase  (several  to  many
              microseconds), it has limited resolution.  For example, if make-pulses is called at
              a 20 kHz rate, and pwm-freq is 2 kHz, there are only 10 possible duty  cycles.   If
              dither-pwm  is  false,  the  commanded duty cycle will be rounded to the nearest of
              those values.  Assuming value remains constant, the same output will  repeat  every
              PWM  cycle.   If dither-pwm is true, the output duty cycle will be dithered between
              the two closest values, so that the long-term average  is  closer  to  the  desired
              level.   dither-pwm  has  no effect if pwm-freq is zero (PDM mode), since PDM is an
              inherently dithered process.