One of the basic rules that I try to follow in this library is that the devices shouldn’t use GPIO channels directly,
but instead do so through different classes of interfaces. With this my goal is that the same channel isn’t configured
more than once and also to abstract the logic of a device from the communications layer with the hardware.

The PWM object from the RPi.GPIO library uses threads to function and is reconfigurable; we can stop it and
restart with other parameters with no problem. This gives us the flexibility to reuse it in our code and get
the most out of it. It just has one small drawback: the amplitude of the pulse width is controlled by software,
not hardware, and because of this the pulse width can sometimes vary slightly, provoking small movements in
critical elements like servomotors when they should remain stationary in a certain position. It’s a minor issue.

Not all devices will be able to use the InterfacePWM class, basically because they are incompatible due to their
internal workings. On the other hand there are devices like servos that depend exclusively on this interface (for
now) or which we can use to control the speed of DC motors, for example, or any other application that we want.