Hi,
if there would be an issue with the timing, you would probably get an ADCError. Another question, however, is if your double-switching algorithm timing is set correctly. This can be verified using PTU trigger debug pins displayed against current signal on the opamp output. Using this technique, you can also check the signal quality (e.g. ringing, which is a usual issue in DC link sensing - see https://ieeexplore.ieee.org/document/8398266)
If your algorithm is running well up to certain speed and then it fails, I would suspect the controller settings. My first guess would be the speed PI controller, but in sensorless mode, it can be also the BEMF observer and/or tracking observer tuning. First of all, please make sure your motor parameters are correct. Not just the Rs, Ld, Lq, but also ke, kt and J, which play significant role in speed loop tuning.
Regarding the algo timing, typically we can run 2pp motors with 10kHz sampling up to 10,000 RPM. In case of fans, I suppose your motor is 4pp or 5pp. Then 3,000RPM is still in the range of acceptable speed for standard FOC. You may also consider to add some small negative D current to reduce cogging torque and get smoother operation - it is not the "field weakening" as such, but it helps to smoothen the performance.
Going down to 5kHz would significantly limit the bandwidth you can use for controller settings. Recommended ratio between the sampling frequency and cut-off frequency of the fastest controller is 20, thus, with 5kHz, you can go up to 250 Hz with the current loop settings. For some low-resistance motors, it might be insufficient. A step response in current loop would give you the insight to the controller performance.
In our examples, we use SVM, which is very similar to the 3rd harmonic injection. It works well even with the double-switching algorithm. I believe you can get reasonable results thanks to 1,15x increase in 1st harmonics.
I hope it helps,
Best regards,
Matej