Tool/software:
I'm confused by the description of hybrid commutation switching in 7.3.15 and Figure 7-30 of the MCT8329 data sheet.
I have a working design that starts up reliably so long as INTEG_ZC_METHOD is set. If I clear it to disable integration-based commutation, my startup sequence is unreliable. I have a value for BEMF_THRESHOLD that works nice and smoothly at low speeds, and if I set a high speed command and clear INTEG_ZC_METHOD then it runs smoothly at high speeds. All good.
But I'm trying to optimise the performance at all speeds, and if I leave INTEG_ZC_METHOD set then it's very unhappy at high speed. If I toggle the flag then high-speed behaviour switches between happy and unhappy.
If I have a high speed command from startup, it starts and runs fast & smooth as expected. The problem is when I'm already running at low speed (with integration) and then set a high speed command. It gets faster but not fast enough and not at all smooth. I don't believe it switches from integration to ZC.
I'm using the following related parameters:
INTEG_CYCL_THR_LOW = 6 samples
INTEG_CYCL_THR_HIGH = 8 samples
INTEG_DUTY_THR_LOW = 20%
INTEG_DUTY_THR_HIGH = 20%
I've read section 7.3.15 several times but I'm struggling to see how these parameters control the switching between the two modes. I believe the general goal is to be in integration mode at low speed and ZC mode at high speed. That matches my experience with toggling the flag while the motor runs. But two of those parameters are defined in terms of duty cycle (with lower duty cycles apparently causing ZC mode) and the other two are defined in terms of the number of BEMF samples, but Figure 7-30 still expresses them as duty cycles. By now my brain is falling out of my head.
I set both INTEG_DUTY_THR_x to 20% hoping that meant it would go to ZC mode as soon as possible and stay there as long as possible, but have I got that the wrong way around? And I can see that by setting both to 20% there's no hysteresis, but in fact the available settings could easily be set for anti-hysteresis.
Is there a worked example that shows how I'm meant to think about this and figure out good settings? Is there a way I can see which mode it's using (other than toggling INTEG_ZC_METHOD and listening to my motor become happy or sad)?
I could resort to toggling INTEG_ZC_METHOD at runtime when I'm changing speed, but that would be a shame when all other parameters are set-and-forget.