Con l'oscillosopio hai controllato l'onda sui pin d'ingresso d Arduino ?
Se deriva nel tempo potrebbe essere a causa della temperatura, prova a scaldare con un asciugacapelli il circuito d'interfaccia.
Per provare se la colpa non è del firmware dovresti avere un generatore modulabile in frequenza od un generatore di funzioni programmabile in modo da far variare i giri in maniera casuale, potresti anche fartene uno semplice con un Arduino.