Very interesting. The PWM supply I tried switches at ~ 25 kHz, so the smoothing cap would not be large. I experimented with a 15V supply in front of that ( a cheap, universal laptop PS replacement), so ~14.3 V peak at the smoothing cap after the diode, plus a bit of line loss. Even the AC Train transformer I have that is a couple decades old, uses an SCR or TRIAC, so there is still a peak voltage available - but at 60 Hz, the cap would be larger, but not crazy - a very rough estimate of a 5V delta V over 20 mSec with a 1.5A draw would be 6,000uF. I see those are about 1.4" x .7" or there-bouts. A simple constant current transistor circuit would help smooth that further, if a resistor didn't cut it.Random thought, depending on how accessible everything is and how risk adverse you are, you could try to convert it to an external or shunt excited DC machine.
If you have two supplies you can test it, if you can separate the field winding, trying powering it from one DC supply (be gentle!), and then use another DC supply to power the brushes/rotor. This way field strength is no longer dependent on load current and should run more like a PM DC machine.
If it works you can wire it up so you half wave rectify and put a smoothing capacitor on your PWM signal to supply the field, ie your field maybe via a current limiting resistor, would see essentially constant voltage, and the raw PWM signal would be applied to the rotor, which would now see the average DC from the PWM.
This way peak PWM voltage sets the field current and PWM duty cycle sets the rotor voltage, and presumable no more self field weakening and crazy speed changes!
This may or may not be worth the effort...
I'll try to find time to make some measurements on how much voltage the field drops, versus the armature. Then I could design from that.
Too bad I don't have an O-Gauge dynamometer :) Now I'm picturing my meter strapped to the train while I try to read it as it goes around, or strapping my phone to that to record a video! Hmmm, maybe I do need a Bluetooth meter? Or another Arduino project?