\section{PWM Unit}

The \gls{PWM} unit uses a timer/counter to generate a \gls{PWM} (pulse train) signal. There are four outputs with a common frequency and independent duty cycles. Each channel can be individually enabled or disabled. This unit is intended for applications such as light dimming, heater regulation, or the control of H-bridges.

\subsection{PWM Configuration}

\begin{inicode}
[PWMDIM:pwm@12]
# Default pulse frequency (Hz)
frequency=1000
# Pin mapping - 0=disabled
# Channel1 - 1:PA6, 2:PB4, 3:PC6
ch1_pin=1
# Channel2 - 1:PA7, 2:PB5, 3:PC7
ch2_pin=0
# Channel3 - 1:PB0, 2:PC8
ch3_pin=0
# Channel4 - 1:PB1, 2:PC9
ch4_pin=0
\end{inicode}

\subsection{PWM Commands}

\begin{cmdlist}
    0 & \cname{SET\_FREQUENCY}
    Set the PWM frequency
    & \begin{cmdreq}
        \cfield{u32} frequency in Hz
    \end{cmdreq} \\

    1 & \cname{SET\_DUTY}
    Set the duty cycle of one or more channels
    & \begin{cmdreq}
        \item Repeat 1--4 times:
        \begin{pldlist}
            \cfield{u8} channel number 0--3
            \cfield{u16} duty cycle 0--1000
        \end{pldlist}
    \end{cmdreq} \\

    2 & \cname{STOP}
    Stop the hardware timer. Outputs enter low level.
    & \\

    3 & \cname{START}
    Start the hardware timer.
    & \\
\end{cmdlist}