Self tuning controller