Advice needed on current tracking
T Chap
Posts: 4,223
In an application with a BLDC motor, there is a motor driver that controls the speed via the Prop DAC. On the driver, there is a current sense IC that outputs a voltage back to the main Prop board. It goes to a comparator, the other input of the comparator is a Prop pin with a dynamic reference voltage(DAC). As seen in the graph in RED, as the motor ramps up to running speed, the current rises. There is a section of travel that is flat, and a deceleration where the current falls off again. I created a formula that reads a temperature IC on board, which gets factored into the Dynamic threshold value that is intended to hover just above the current level, and this dynamic level has a user settable component to allow raising and lowering the sensitivity. With the Dynamic Tracking adjusted based on the previously programmed load and speed, the sensitivity can set to allow the slightest strain on the motor to trip the comparator, stopping the motor. The formula originates in the PID method tracking the PWM output to the motor driver, then combines with the Temperature Bias value plus the user defined Trip Level.
iTrip = PWM + TempBias + UserTripLevel
The problem I have is at lower RPM's, it gets much harder to track the current, and the Dynamic Threshold is always too high at low speeds, and the sensitivity to an over-load is greatly reduced. I drew a Static Trip threshold in GREEN to show why a static level is not usable except at a fixed speed, so it must be dynamic. Temperature must be considered, but the formula tracks the temp very well and that is not a concern.
I have considered other methods, such as taking a running average of the current trip point, but there are reasons that the running average presents problems. Another though was to 'learn' the current at some resolution, maybe capture X samples of current over a revolution(using encoder to reference points), store the info, then track accordingly with Temp and User sensitivity values added to the BASE(learned samples). This again requires the user extra steps, and
I am sure there are industrial applications that have to track current similarly, but I do not have a reference for a better method. The program is very large and the parts of the formula are spread out over multiple methods, so posting it would be a mess. I was more hoping for someone with experience in this to possibly have any advice on how to track a known voltage. One more observation: It appears that at higher revolutions, a higher threshold is tolerated, whereas at lower speeds, a narrower threshold is required. This complicates the dynamic process a bit.
Any suggestions appreciated
iTrip = PWM + TempBias + UserTripLevel
The problem I have is at lower RPM's, it gets much harder to track the current, and the Dynamic Threshold is always too high at low speeds, and the sensitivity to an over-load is greatly reduced. I drew a Static Trip threshold in GREEN to show why a static level is not usable except at a fixed speed, so it must be dynamic. Temperature must be considered, but the formula tracks the temp very well and that is not a concern.
I have considered other methods, such as taking a running average of the current trip point, but there are reasons that the running average presents problems. Another though was to 'learn' the current at some resolution, maybe capture X samples of current over a revolution(using encoder to reference points), store the info, then track accordingly with Temp and User sensitivity values added to the BASE(learned samples). This again requires the user extra steps, and
I am sure there are industrial applications that have to track current similarly, but I do not have a reference for a better method. The program is very large and the parts of the formula are spread out over multiple methods, so posting it would be a mess. I was more hoping for someone with experience in this to possibly have any advice on how to track a known voltage. One more observation: It appears that at higher revolutions, a higher threshold is tolerated, whereas at lower speeds, a narrower threshold is required. This complicates the dynamic process a bit.
Any suggestions appreciated