I am completely new to this, I hope there is someone who can help me I connected an Arduino uno with an Arduino motorshield R3 to a motor (permanent magnet and brushes), and supplied external power (8V, max 1A). The voltage of the motor terminals is not linearly related to the duty cycle, this relation will also vary dependent on the load of the motor. A recording of the voltage with an oscilloscope showed that the voltage during the 'zero' period of the block wave is not zero, so the terminals are 'open' then. Is there a possibility to make the terminal voltage zero during the zero period of the block wave?
You want to use synchronous rectification, not slow or fast decay mode. You’ll need to
keep the motor driver enabled constantly and apply PWM to the direction pin.
50% duty cycle will then be zero drive, > 50% will be forwardsa and < 50% will be backwards.
However before doing this you must ensure you have a high enough PWM frequency that the
inductance of the motor winding is keeping the current from varying too much across the cycle,
the default Arduino frequency is likely too small. Try 8kHz (this involves reprogramming a timer).
This way of driving a motor will waste a bit more heat in the magnetics, but allows smooth
servo-motor control even at stationary as the duty cycle controls the average voltage directly.
Thank you for your answer. I have to learn a lot more about the ATMega processor before I could do something like reprogramming timers.