Short: Add a 1 ohm resistor in series with the transformer :-).
Longer:
A "perfect" transformer and 'perfect" capacitor will have infinite current spikes, as I know you realise.
While real world results will vary with transformer maker's 'ethos and philosophy', the real world experience is that you wil usually get superior results by adding a small "conduction angle spreading resistor" in series with the transformer winding feed to the capacitors. This is counter intuitive to what you may expect from an efficiency point of view and is often not done in practice. Theoretical calculation of the effect of such a resistor is surprisingly annoying but simulation will show the effects instantly.
Given that the mean DC level under load is 0.7071 ( = sqrt(2) ) of V peak, you have quite a lot of headroom to work with and can afford a modest amount of drop in the series resistance. There are several scondary effects which may be useful depending on environment. Spreading the conduction angle improves the power factor of the otherwise very peaked load - but probably not enough to make a difference in meeting or failing formal power factor requirements. Sometimes more importantly, spreading the conduction angle greatly reduces peak loads on the diodes and reduces EMC issues (ie less radiated electromagnetic noise) - probably not an intuitive effect of adding a few ohms of series resistance.
Lets have a play with some figures:
You have 15 VAC secondary voltage and are aiming at 12VDC at 2A.
Assume for now that about 15VDC minimum on the filter caps is acceptable 9giving the regulator 3V headroom minimum).
Vpeak is 15 x 1.414 = 21.2 V
Load power is VI = 12 x 2 = 24 Watts.
If you managed to filter this well enough to achieve say about 20VDC on the cap you would dissipate Vdrop x I = (20-12)x 2 = 16 Watts in the regulator and "as a bonus" achieve massive ripple CURRENT in the caps but little ripple VOLTAGE. This does not seem like a marvellous idea :-).
If you can manage to spread conduction over 25% of the voltage cycle you will get mean current during conduction down to 4 x Iavg = 8A.
Assuming 21V peak, 25% conduction occurs at about 19V transformer output, and a very useful 50% conduction happens at just under 15V. See graph below.
This suggests that inserting even one ohm series resistance is going to have a substantial effect. If the 8A mean that is required for 25% conduction is dropped across 1 ohm the 8 volt voltage drop is going to ensure that the 8A does not happen (as 21-8 = 13V which is lower than the 15V DC target this was based on).
If 50% conduction occurs then mean current during this period will be 4A and mean drop across 1 ohm would be 4V so this may be "about right" as if the filter cap was at about 15V you'd get (21-15)/1 = 6A peak at waveform peak - and as the cap will have "rippled up" in voltage by then you'll get less than 6A). And so on.
Yes, you can analytically work out what happens. But, just put 1 ohm in the simulator and see what happens.
This has the effect of putting MORE ripple voltage on the capacitor(s), LESS ripple current, less regulator losses and less transformer losses, less diode EMI.
The series resistnce could be in the transformer but then addes to heat generatoion inside a relatively costly component where you'd rather be trying to optimise power transfer rather than heat loss. A 5 Watt 1 ohm resistor will probably work OK here. 10W would be safer due to peaks. eg 4A at 50% = I^2R x 50% = 15=6W x 0.4 = 8W BUT waveform is complex so actual heating needs to be calculated.
Note that in many cases the ripple current rating of two capacitors is superior to that of a single capacitor of equal total capacitance.
Use 105C (or better) caps as a matter of course in this sort of application. 2000 hours+ a good idea. Cap life ~~~ 2^((Trated-tactual)/10) x Rated_life
Surely the transformer's magnetics couldn't handle these spikes as I'd
expect the core would saturate.
Core saturation has nothing to do with load VA rating. It has everything to do with the magnetization current flowing in the primary. This current is largely constant irrespective of secondary load current.
In short, the ampere turns on the secondary winding (caused by the load) are exactly equal (but opposite in sign) to the ampere turns on the primary due to that secondary load current. Neither of these currents are the magnetization current that can saturate the core.
Imagine a simplified core with a single turn primary: -
At the moment it's just a single turn inductor. With V applied, Im flows and inductance, frequency and voltage all determine how much current (Im) flows. OK so far?
Now imagine that single turn were replaced by 2 closely coupled parallel turns like this: -
You would find that Im/2 flows in each or, in other word,s the same overall current flows. A nice side effect of this is that each individual coil must have twice the inductance of the single coil and, if you happened to make a two turn inductor this way (by wiring them in series) it would have 4x the inductance. Just think about it for a while.
Next scenario: -
So, you drive one of those closely coupled coils and look at the voltage on the other coil. The driving voltage and the secondary voltage are in phase and of equal amplitude (1:1 turns ratio). Do you see why? If not, consider what would have happened in the 2nd scenario if (say) the voltages were out of phase - you'd get a fire and you wouldn't get the inductance rising with turns squared - you'd get zero inductance. This doesn't happen.
Final scenario: -
You've applied a load to that 2nd winding and because in the 3rd scenario you (hopefully) recognized that the voltages were in phase, you have to admit that the currents are COMPLETELY antiphase.
From here, it's a minor leap of faith to recognize that the ampere.turns on the primary (due to the secondary load) are equal and opposite to the ampere.turns on the secondary. As I said earlier, neither of these currents are the magnetization current that can saturate the core - this is due to Im.
It's magnetic field strength that drives the magnetism. It's called "H" and H is measured in ampere.turns per metre. The "per metre" part is irrelevant because it's a core physical dimension and applies equally to primary and secondary.
Basically H never alters one bit due to loading effect. In fact that's not quite true; it gets lower with more load because the copper losses lower the actual terminal voltage and reduce the magnetization current a little bit.
Best Answer
Well done!. You have identified a real world effect that many people are unaware of and that can cause significant problems. As well as the undesirable effect of the current spikes on capacitor ripple current (causing reduced lifetime) and possible transformer heating, the sudden current peaks cause RFI (Radio Frequency Interference) from the diodes. Power supplies with too low a primary DC resistance can be RF noise sources! Who would have thought ? :-).
The solution is easy but counterintuitive.
You need "spreading resistance" to increase the capacitor charging resistance. This adversely affects supply "regulation", as Vout drops with increasing load due to the resistor, but a compromise resistor value greatly improves results without too much effect on the regulation. If you are supplying an electronic regulator with this circuit then the drop caused by the resistor can be designed to have no effect at all on Vout, as it simply reduces regulator "headroom" slightly.
Add a small series resistor in the bridge to capacitor lead.
When the bridge voltage rises above Vcap, the higher the current would have been, the greater the drop in the resistor which raises the apparent value of the capacitor voltage temporarily.
Assuming you have about 15VDC peak and want 12 VDC out you have 2V or 3 V headroom. If Ipeak_usual is 300 mA then to drop say 0.5V in the resistor at 300 mA it would have a value of R=V/I = 0.5V/0.3A = 1.66 Ohms. Say 2 Ohms for convenience.
Clearly the prior 2.5A peak is now impossible.
At 2.5A the 2 Ohm resistor would drop V=IR = 2.5 x 2 = 5V and once the capacitor is at working voltage, there is not 5V of "headroom" to drive it.
By changing the R value and looking at the resultant current waveform you can choose a value which is large enough to "spread the conduction angle of the diodes, and small enough to limit the voltage drop as load current increases.
Long long ago undergraduates were given this problem to solve with capacitor value and desired peak diode current as parameters. Without 'modern aids' it was a nasty iterative problem and a good introduction to the real world. Ask me how I know :-).