variable duty factor, using PID