Un'altra possibilità sarebbe quella di applicare un fitro passa basso (digitale) sia al segnale di ingresso che al valore di PWM in uscita.
Se può interessare, ho un paio di notebook python condivisi su Google Colab di ausilio per calcolare i coefficienti per le funzioni di trasferimento sia per un classico LPF che per un filtro Butterworth LPF.