I did not consider “complementary channels”. I think it means, that you always set the state of each side of an H-bridge to opposite polarity. It might be a 1c option. I have not seen that option used with H-bridges, and I do disagree to the contrary, that it should be more energy efficient. If you control the H-bridge like that, you get a higher ripple current in motor winding for the same PWM-frequency used, and this will be less energy efficient.
You are right, that some applications make use of breaking of a motor by making a short circuit of the motor winding by keeping the two sides on the H-bridge (or three half bridges) at same potential. But in this case this state is kept for a much longer time, that the period you see with PWM timing.
This way of breaking can actually be a bit risky, because the currents can become very high and above what is safe for the power transistors used. For an application I use a quite old and slow H-bridge called BTS7960. It have got an internal safety feature, so it short circuits the motor when it see a two high supply voltage. In most cases it may save damage to the device due to over voltage. But in my case I have seen it cause a too high breaking current from a DC motor, that then damaged the BTS7960. So I think the best design is to make active breaking, while you control the current. If the power voltage becomes too high, you limit the breaking current.
It may actually be possible to use the software in some way like you drive a normal BLDC three-phase motor and only use the two phases. Then you set the voltage to the two phases like indicated post 4 from top in this thread. But you still have to figure out how to make the right timing to trigger the ADC(s), but it will likely be right except for the case of the voltage is near max.
@zhangzq71 I look forward to hear from you regarding the results from using the other scheme.
I have tried to use this scheme with the old Arduino AtMega328p MPU with one DC-motor. The timers here is much more simple. It will be more difficult to make this MPU control the two windings to the step-motor. It can be done, but it will seriously constrain the PWM-frequency to be used. I can supply you with some of this code, but I doubt, that it will be that helpful.
I looked back in my notes, and I am sorry to say, that I have to correct my statement. I still think the 1b is better option than 1a, but you may experience some “dead band” in the control in both cases. The reason is, that the transistors in a half bridge are switched with a time delay, to avoid both transistors are on at the same time. But it results in the case, that for a short time both transistors are off. At a fixed provided PWM signal for a low voltage to the winding, you will see a significant change in the voltage depending of the polarity of the current to the winding. This is due to this short time, that the transistors are off, but the free wheeling diodes will likely be on during that short time.