В фреймворке Arduino предусмотрена готовая функция для запуска аппаратного ШИМ сигнала на пине analogWrite(pin, value):
pin - номер GPIO, который поддерживает ШИМ сигнал. См. описание к конкретной плате/МК, также на распиновке такие пины помечены символом ~. Например на Arduino Nano/UNO это пины 3, 5, 6, 9, 10, 11 - выводы аппаратных таймеров