Adaptive perturb and observe algorithm for photovoltaic maximum power point tracking