« first day    last day (33 days later) » 

3:15 PM
In v9.0.1, when uPWN=12, I only get pdord warning, and this can be suppressed by adding SolveDelayed->True to NDSolveValue
This is the result:i.stack.imgur.com/kzXl1.png
I use the same parameters as @Tschibi
As to the 2nd problem, I think it's because the DAE solver of NDSolve isn't strong enough.
A possible solution is to modify the equation set a bit i.e. add a very small derivative term of vdiode to the equation
With[{eps = 10^-3},
 res = NDSolveValue[{l i'[t] ==
     u[t, PWMFreq, PulseDuration] - r i[t] - (i[t] - 10^-14 Exp[vdiode[t]/(25/1000)]),
    eps vdiode'[t] + vdiode[t] + l i'[t] + r i[t] == 0, vdiode[0] == 0,
    i[0] == -1/2*10^-14}, {i, vdiode}, {t, timeStart, timeEnd}]]
If you feel worried, just try e.g. eps = 10^-6, the resulting graph doesn't have any significant change.
 
 
8 hours later…
11:56 PM
@Tschibi I have modified your original u[t] to remove the discontinuities. It doesn't work. The simulation totally miss the 5ms spike at t=4 second (for example). Then I have tried MaxStepSize-> 10^-4, but it only brings other problems ( NDSolves send complaining errors and the result is not right). At the contrary @xzczd approach gives credible results. Sadly I don't understand the magic of "+eps vdiode'[t]" effect.
 

« first day    last day (33 days later) »