The information you provided is perfect, thank you!
Is there a way to increase the electrical frequency to reach a higher maximum RPM
Yeah, the 667Hz is a bit hand wave-y and back of the napkin. You can honestly double that without seeing many issues – the current just might get a bit more ripple-y.
10,000 RPM (assuming you meant that and not 100,000 ) is 1167Hz which I’d bet is just fine.
S1 will theoretically be able to get the motor up to 9672 RPM at no load (16V * 775 RPM/V * 0.78 for the S1’s max modulation depth).
Looking at their performance graph, they say 0.31 Nm for the 10k RPM 12.5" prop, which according to my back-of-the-napkin math and the ODrive’s calibrated phase resistance in your config, is just barely possible even assuming 100% modulation depth. For the S1’s 78% modulation depth, this’ll be more like around 7300 RPM at 16V.
Looking at the config you posted, it seems you’re limiting the motor current to 10A. Given the motor’s theoretical torque constant of 8.27/775 = 0.0106 Nm/A, this corresponds to 0.106 Nm, which I’d bet is the issue here – you’re just not giving the motor enough current.
On the motor page it specifies 36A continuous for 180 seconds, which is probably very optimistic and assumes a good amount of airflow from the fan, but you should be OK to raise your current limit to about 30A, which will give you the performance you’re looking for.
Note that DC current sensors really aren’t going to be helpful here – the motor current is different from the DC bus current (good blog post on it: Things in Motion: How to select the right power source for a hobby BLDC (PMSM) motor). The motor current (which is directly proportional to the torque) will be reported by the ODrive as odrv0.axis0.motor.foc.Iq_measured
and the bus current will be odrv0.ibus
.
Overall, I’d recommend
- raise the motor current limit to 30A, and
- raise the S1’s bus voltage higher if possible, 24V or 48V will provide much better control since there’s more voltage overhead. With controllers like the ODrive, the bus voltage doesn’t actually matter in terms of protecting the motor – it’ll control the current to the motor, so more is better as long as you don’t spin the motor faster than the maximum speed the manufacturer allows (assuming 775 RPM/V * 21.8V == 16895 RPM, so you’d want to set velocity limit to 16895/60 = 281.58 rev/)
To raise the max electrical frequency, you can set axis0.config.motor.wL_FF_enable
and axis0.config.motor.bEMF_FF_enable
both to true. Note the latter assumes the manufacturer’s reported KV is accurate (which it frequently is not), so if you get poor/weird performance let me know and I can give you the steps to tune/characterize it.