Hey Mark,
Apologizes for the delay, I think I've compiled your settings into the picture below, let me know if something doesn't agree.
![]()
We'll shelve the current limit issue for now and talk about your PI Loop. So if I understand you correctly, you control the input speed command to the motor using I2C. You do this by enabling the override bit which is SpeedCtrl2[7] (to enabled I2C speed control), and the write some value in the SpeedCtrl1 register and maybe use bit 0 in SpeedCtrl1 if you go fast enough.
If this is true, then, this amount is translated into a speed command percentage which is pushed to SpeedCmd[7:0]. After looking at your settings (more on this later) it eventually pushed to the the speed command buffer (spdCmdBuffer[7:0]) which is then translated to an electrical frequency in Hz (Motor Speed1 and 2). Then, the electrical frequency is then transferred to RPM using the equation RPM = 60*f_electrical/(n_pole_pairs_motor). Hopefully this gives you some insight why I don't think updating the SpdCtrl Register that quickly will be a problem.
The max speed command that should be used to control I2C is 0xFF in SpeedCtrl1 with "1" in the SpeedCtrl2[0]. This would look like 0x1FF for SpdCtrl[8:0]. Hopefully this answers your max speed you can write into the registers.
Now for you current limit problem. I noticed that you closed loop accelerate rate is rather high; this can lead to the speed command buffer changing rapidly which leads to current being surged very quickly if the new speed command much higher than the original one (something that a PI loop might do). Try lowering it 0.091 VCC/s, for example, and see if the current limit still occurs (and if it does, let's see at what level).
Let me know if this helps,
-Cole