You want a power supply that reasonably regulates voltage and can put out 1/2 killowatt at 12 V. That's going to cost some money one way or another. If you add to that current limiting (current regulation) and adjustable voltage, it will cost even more money. These things take some engineering to do well, safely, with regulatory approval, and the volume won't be that high. That all means a commercial product that does all that will cost real money.
If you are going to draw 40 A, then maybe you should be using a higher voltage, like 24 or 48 V. 40 A is going to require thick cable and will otherwise create hassles. You can probably deliver and use 10 A at 48 V more efficiently than 40 A at 12 V. Note that the issue around efficiency isn't so much wasting the power, but dealing with the heat the wasted power causes. A 90% efficient 480 W supply will cause about 50 W of heat.
As for your current limiting spec, it seems you don't really want current limiting at all, but rather overcurrent tripping. That is also sometimes called a electronics fuse. Fortunately, unlike with current limiting, overcurrent tripping can be added separately after a canned supply. For sake of keeping a common ground for measurements and the like, I'd probably use a high side current sense resistor, with something like a INA169 to bring the signal down to the ground reference.
I'm am doing a project right now that includes two electronic fuses. A microcontroller is watching the current sense signal every 10-20 µs in a periodic interrupt. If the current is above the trip point, a counter is incremented. If below, the counter is decremented unless it is already zero. If the counter reaches a particular level, which means the current has been high for some pre-determined amount of time, then the output is shut off for two seconds.
You need to set the trip time long enough to allow for inrush as power on. Or, you apply the algorithm differently at power on. Right now I am using a flat 2 ms for one supply and 750 µs on the other, but that one does a soft start during which the fuse is handled differently.
20 ms seems like a long time, but is still faster than most real fuses take to blow. I'd look at the current profile at power on, and set the fuse a little longer than that takes.
You don't need extra fast switches after the current sense resistor. At most, they will switch once every two seconds, or whatever you set the fuse recovery time to. You don't want to make the switching time so slow that significant heat is dissipated in one transition, but a few µs as apposed to the more normal few 10s of ns should be fine.
Best Answer
This sounds like a pretty straightforward application of a current sense amplifier. These amplifiers basically measure the voltage across a sense resistor and output a corresponding current. You then feed this current into a resistor to GND so you get a corresponding ground-referenced voltage you can then feed into your ADC.
The nice thing about using a current sense amp is, once you understand the theory of operation, you can easily adjust the design to meet almost any criteria basically using Ohms law (V=IR) and the power equation (P=V^2/R, P=I^2*R). So you sound consider adding it to your bag of tricks.
Here's a simple one:
Simply put, the amplifier drives current into the OUT pin and this same current goes through the 100 Ohm resistor. It will drive enough current so that the voltage across the 100 Ohm resistor is exactly the same as the voltage across the 0.02 Ohm resistor (in other words, so its +IN and -IN are at the same voltage).
So in this example, 1 Amp load current through the .02 Ohms is .02 Volts. So current across the 100 Ohms is .02/100 = 0.2 mA. Same current is pushed to the OUT pin, so voltage at the OUT pin is 0.2 mA * 1k Ohms = 2 Volts.
Power through your .02 Ohm sense resistor is 1A^2 * .02 = 20 milliWatt.
How low can you set the sense resistor? Well, it depends on how much error you can tolerate. Let's say the amp has 200 uV of offset error. This means the +IN and -IN pins might have 200 uV difference (instead of the ideal 0 Volts difference). The 1 Amp load generates .02 Volts, so error term is 200 uV/.02 Volts or +/-1% of error.
So let's say you want even more accuracy, you can 1) calibrate out the error on a per board basis (I actually do this), 2) use a larger sense resistor to generate a larger sense voltage at the expense of dissipating more power, 3) use a sense amp with even lower input offset voltage spec.
If you choose 1), make sure you check the temperature coefficient of the input offset voltage (how it varies over temperature), because even if you calibrate at room temp, it might shift enough at extreme temps to exceed your accuracy spec.
And if you want to filter the signal, you can just put a capacitor across the 1k resistor and it is just a simple RC equation.
So, yes, it is more work on your part, but as I mentioned, once you figure it out, you can adapt the same circuit over and over to many design projects.
One thing I found though, some manufacturers will specify tempco's of various parameters while others will not. The good ones also have better local FAEs (Field Application Engineers) that will actually help you design stuff like this and review your design especially from the manufacturers who are geared for lower volume, but more expensive, higher performance parts. Other manufacturers are geared for low cost parts, high volume, have sloppier performing parts that you'll need to add some design margin and you won't get as much design help. You will need to find what's right for your application.