I'm controlling a 6V DC motor using a microcontroller (Atmega328) that creates a PWM signal that is fed to a H-bridge (L293D), the problem is that the motor only moves when I set the PWM with a duty cycle of 45% or higher, if it has a lower duty cycle it doesn't move and makes a noise. For duty cycles between 40%-45% if I give it a push with my hand it rotates. I've tried all PWM frequencies that the microcontroller can create and the higher the frequency the higher the duty cycle has to be to make the motor rotate.
But if I use a power supply, directly connected to the motor, it works perfectly, for any voltage.
All the test were made without any load.
I noticed that the L293D circuit drops some voltage, and instead of receiving 6V the motor was receiving a bit over 3V, so I fed the L293D with 9V instead of 6V and the motor was receiving around 5.8V, but it made no difference (beside moving faster). I even changed the L293D for a L298N that has lower voltage drops (I fed it with 6V and the motor was receiving the 6V) and is capable of driving higher currents, but it also made no difference.
The power supply I used shows the current aswell and the motor needs around 0.4A (measured when the motor is directly connected to the power supply) to start rotating but when driving the motor through the h-bridge and giving it a PWM with a duty cycle below 45% the motor doesn't move and the power supply shows around 0.13A.
What's the reason for this to happen and how can I make the motor to move at slower speeds if I can't use low values? I'm trying to make a PID controller to control the motor position and I need those small values.