Programming the myRIO PWM outputs
Some myRIO DIO lines can be optionally configured to generate
pulse-width modulation (PWM) signals at rates up to \(40\) kHz (Instruments 2020). Each of the A
and B connectors have three and the C connector has two PWM lines. The
myRIO C library includes several functions for programming these
interfaces (see PWM.h and PWM.c). The T1 library includes an additional
wrapper function, pwm_set
, as to
simplify the programming interface. From pwm-wrapper.h, the prototype is
int pwm_set(MyRio_Pwm* pwm,
,
MyRio1900Fpga60_ControlU8 regdouble duty);
The first argument pwm
is a
pointer reference to a PWM channel struct
type MyRio_Pwm
, defined in PWM.h. The following could be used to configure the
A connector PWM0
pin for PWM:
;
MyRio_Pwm pwmA0.cnfg = PWMA_0CNFG;
pwmA0.cs = PWMA_0CS;
pwmA0.max = PWMA_0MAX;
pwmA0.cmp = PWMA_0CMP;
pwmA0.cntr = PWMA_0CNTR; pwmA0
Note that not pwmA0
, but a pointer
thereto, should be passed to pwm_set
,
(i.e., &pwmA0
). Other PWM channels
have constants defined in the myRIO C library header MyRio1900.h.
The second argument reg
of pwm_set
is the register corresponding to the
connector chosen for the pwm
channel
argument. In the example given here, we chose an A connector, so we
would use
= SYSSELECTA; MyRio1900Fpga60_ControlU8 reg
For B and C connectors, reg
would
be SYSSELECTB
and SYSSELECTC
, which are defined in MyRio.h.
The third argument duty
of pwm_set
is the duty cycle of the PWM
waveform. It is of type double
and should be
in the interval \([0,1]\). The duty
cycle resolution is \(0.001\), but the
function handles any double
in the
interval.
The frequency of the PWM will be set to its maximum, \(40\) kHz. Lower PWM frequencies can be
generated with the functions provided by the myRIO C library’s PWM.h header, but the pwm_set
wrapper function does not support
this.
fpgaPersonality6
Online Resources for Section G.1
No online resources.