One of the parts that I have changed the most in LibreServo and thought about is the power supplies. In previous versions it was a linear regulator that I reduced in size, but the truth is that I was not at all comfortable since if LibreServo was powered with only 12V, the linear regulator should dissipate up to 1.74 Watts and in 16v 2.54 Watts... something that was really unreal that it could handled.
A few months ago I discovered the MPM3610, and this finally made it possible for me to design the power supply as I wanted. This tiny component is a powerful 1.2A step-down that supports up to 21V input and also has a built-in diode and coil! It is the latter that makes it perfect for my design, due to the reduced space used, being the only step-down that is manufactured that has an integrated coil and diode in the same package. The difference between using a step-down and a linear regulator is that a linear regulator from 3.3V to 12V gives an efficiency of 35%, while a step-down of 80% or higher, the rest is dissipated in heat, so one is much more prone to overheating than the other. The downside of using a step-down is that they are quite noisy and their output is not as clean as one from a linear regulator.
In order to join the best of both voltage regulators, the step-down and the linear regulator, I decided to make the following circuit. On the one hand, the MPM3610 will regulate the input voltage to 3.9V and a ferrite will remove the high-frequency noise of the output (the MPM3610 works at 2MHz), and then the AP2112 linear regulator will give the 3.3V that LibreServo needs. The AP2112 is a compact linear regulator capable of delivering 700mA without fussing, with a PSRR, power supply rejection factor or noise filter, quite good and a maximum voltage drop of 250mV being only 50mV when it is giving 150mA, very spectacular characteristics. Unfortunately the datasheet does not show us how it behaves in the face of noise of a frequency higher than 100KHz, so let's use the ferrite to filter the noise at high frequencies as intended. A linear regulator is not as good filter as people think and in this video [min 5:00] you can see exactly that. Still, the AP2112 is considered a linear regulator with very good PSRR, so it will be something I will have to measure.
MPM3610 and AP2112 circuit
The circuit shown in the diagram would be the final configuration that we are going to analyze in the article. Actually, on the test board with the switches you can select different combinations of ferrites and capacitors, different resistors to configure the output of the MPM3610, change the order of the circuit so that the ferrite is after or before the AP2112... It is a flexible board for testing all available options. In this article we will focus on the final design chosen.
Power elements on the Test PCB for LibreServo
This very compact step-down is capable of giving 1.2A despite its tiny package. It can be fed from 4.5V to 21V, a perfect range for LibreServo, but in order to be fed at 21V REN, which is the pull-up resistor that must be put on the EN pin to enable the step-down, it must be at least 145KOhms as seen on page 14 of the datasheet, I emphasize it because Arduino, Adafruit and MPS itself! (manufacturer of the MPM3610) sell badly designed circuits with the MPM3610 since they are advertised as supporting up to 21V input but they have a REN of 100K only supporting 16.5V, not 21. I have discussed this with their technical department and they have confirmed it to me, so be careful when buying new Arduino models and powering them at more than 16.5V.
On the other hand, with a resistive divider the output voltage is selected, something standard, in this case it is configured so that it is approximately 3.9V, giving margin to be able to operate without problems up to the minimum admitted voltage of 4.5V and giving margin also to be able to post-regulate to 3.3V later in the linear regulator. In addition, it has two operating modes, broadly speaking there is the low consumption mode (AAM) in which it switches at a lower frequency, consumes less but generates a noisier output, and the high performance mode (CCM) in which it switches at its maximum frequency (2MHz) and with which it achieves the cleanest output but consuming a bit more. The MPM3610 changes modes based on a pull-down resistor on the AAM pin, but if that pin is left floating (not connected to anything), the MPM3610 will always work in CCM mode, which is what we want for LibreServo.
Simplified model and measurement of a Ferrite
Ferrite is a component that is used to filter noise. It is a component that is assimilated to a coil and a series resistance that varies depending on the frequency, which it does in a very basic way, the higher the frequency the more resistance it opposes and therefore reduces the noise of high frequencies by dissipating it in heat. Generally it is used to filter the power that feeds the analog components, such as sensors or the AD of the microcontrollers, but here I use it to pre-filter the output of the MPM3610 before reaching the AP2112. When selecting a ferrite as a rule, it is usually recommended to use a ferrite of at least 5 times the value of the current that is going to circulate and a resistance of at least 450 Ohms but with a lower resistance to DC possible, although there are many more parameters to look at. The ferrite chosen is a 2A and 600 Ohms, but only 0.1Ohms in DC, it is also quite small since its SMD package is a 0603.
Finally, the chosen linear regulator is a well-known one and very well valued for its low price but more than adequate characteristics, as we have already commented. It is a linear regulator that allows up to 6V input, which would be a problem but by having the MPM3610 doing the majority of the work of regulation, the problem is avoided. Its encapsulation is very small even though it offers up to 700mA of output current. It has a maximum drop of only 250mV but in normal conditions it is around 50-150mV, which leaves more than enough margin up to the 3.9V that the MPM3610 regulates. In addition, it has a very good noise behavior with a fairly high PSRR.
When testing the circuit, as I did in the analysis of the current sensor ZXCT1010, I am going to analyze different points that I think are the most interesting and critical:
- Noise with different current loads
- Noise from current changes
- Need for ferrite and/or linear regulator
Noise with different current loads
I am going to analyze the behavior of the different power supply elements, step-down, ferrite and linear regulator in different current consumption scenarios, 0.26mA, 48.5mA, 97mA and 243mA, which correspond to a minimum load, almost zero as a control mode, a load that would be the approximate basic consumption of the STM32F302 microcontroller, a consumption somewhat above than the expected for LibreServo and finally, the maximum consumption expected in the worst consumption situation (with all components consuming at their peak and with collisions on the serial communications port).
In the following four photos, channel one (1) corresponds to the MPM3610, channel two (2) corresponds to the output of the ferrite filter and channel three (3) corresponds to the output of the AP2112.
Focusing on the MPM3610, it can be see how it works at 2MHz in all situations exactly how we said we wanted it to work. Its noise ranges between 30mVpp and 60mVpp, the more consumption, the more noise. Both readings are clearly higher than the advertised on the datasheet. On the other hand, the ferrite does a much better job than expected and manages to filter practically all the noise, I did not expect such a good performance. We notice also that the more current passes, the greater the voltage is "lost" in the ferrite. Finally, the linear regulator does the expected work and generates the 3.3V in any circumstance without any problem.
Noise from current changes
To analyze the behavior in the face of a change in current, I will see how the different elements of the power supply behave in the face of a sudden jump in current from 48.5mA to 243mA and from 243mA to 45.5mA.
In the next two photos we see how in the first channel the MPM3610 takes about 30µs to stabilize with an oscillation of about 30mv in both cases. In the second channel we see something very interesting. The ferrite due to its inductor component is more opposed to the change of current and takes about 45µs to stabilize, but due to its resistive component, depending on the current we see how it stabilizes 50mV lower when we increase the current and 50mV higher when we decrease it, which gives us an R of about 0.2 Ohms continuously, which although it is double what it says in the datasheet, is still very low. On the other hand, we see an oscillation of about 70mV. Finally, in the third channel, we see how the AP2112 performs the best, stabilizing at 8-10µs and with an oscillation of about 30mV.
Need for ferrite and/or linear regulator
Seeing the results of the previous tests, if we want some accuracy in the analog part, since in the digital one there would be no major problem, we cannot feed directly with the output of the MPM3610 since it is relatively noisy. Ferrite does an outstanding job of filtering noise, but with current changes its performance is not the most adequate. Lastly, the AP2112 seems to behave as expected. We would only have one doubt. Is ferrite necessary?
In the first photo you can see how the ferrite behaves in the face of slow noise. One of the times I was taking measurements, the MPM3610 generated that "triangular" noise on top of the high frequency noise we've seen. That noise the ferrite is not capable of filtering since the ferrite only filters high frequency noise. On the other hand, in the following two tests we see how the AP2112 behaves without the ferrite both at maximum consumption (243mA), when the MPM3610 is noisier, and in a current change from 48.5mA to 243mA. The behavior is excellent, it has surprised me a lot. The AP2112 filters the noise of the MPM3610 without any problem behaving exactly the same with or without the ferrite.
So is ferrite necessary? Looking at the data, the "couple" of the MPM3610 with the AP2112 behaves in an outstanding way, it might seem that the ferrite is not necessary, but two factors must be taken into account, the ferrite costs 0.007 €, it is almost free, and we clearly see that it filters high frequency noise very well, so it will not do badly and for no money it will facilitate the work of the AP2112.
NOTE: After writing the article, I realized that in order for the MPM3610 to work properly from 4.5V, the output voltage of the MPM3610 should be 3.6V and not 3.9V. Unfortunately, with a Vin of only 3.6V the behavior of the AP2112 is not the same and in the event of current changes it takes longer to stabilize and with more pronounced oscillations. After much consideration, 3.8V gives an identical result as 3.9V and if LibreServo is fed below 4.7V, the MPM3610 continues to work but lowers its output voltage by about 0.9V above the input.