2
\$\begingroup\$

I am trying to wrap my head around the working of electronic throttle bodies. So they usually have a brushed Permanent Magnet DC Motor which actuates the throttle plate (butterfly valve) via a gear train. There's also a return torsion spring which keeps the plate closed or almost closed by default when the motor is not energized. There exists closed loop control for the throttle - the TPS (throttle position sensor) senses the current throttle angular position and sends it as feedback to the controller.

Here are some of my doubts that I can't answers for on the internet:

  1. Say we want to hold the throttle the plate at a particular angle - an example that I can think of is a cruising condition of a gasoline engine powered automobile. So to counteract the torsion spring's torque the motor will have to continuously provide torque to hold the plate at any particular position. If there were no spring then when could have simply turned off the motor to hold the plate at that position. But motor is continuously providing torque, and since the plate isn't moving so I believe the motor would be stalling. And I have read that usually operating motors at stall conditions leads to overheating. So why don't the throttle actuator motors get overheated? Is there any particular overheating protection measure provided? So is it that PMDC motors can comfortably handle stalling conditions?

  2. Will there be a linear relationship between the PWM duty cycle % provided as input to the brushed PMDC motor and the output throttle angular position? Let me explain my reasoning. The torque provided by a brushed PMDC motor is given as \$T_m = aV_m - b \omega\$, where \$a\$ and \$b\$ are constants, \$V_m\$ is the motor's supply voltage and \$\omega\$ is the rotational speed of the motor shaft. At the a particular throttle angle the motor is stalling so \$\omega = 0\$ and hence the torque provided by the motor follows \$T_m \alpha V_m\$. Also, this torque will be equal to the return spring's torque \$T_s = k_s \delta \theta\$, where \$k_s\$ is spring's torsional rigidity and \$\delta \theta\$ is the angle turned by the spring. So finally \$T_s = T_m\$, which gives \$V_m \alpha \delta \theta\$. But the motor voltage (average) will be proportional to the duty cycle % it is being provided with. So finally \$\delta \theta \alpha V_m \alpha Duty Cycle\$

Say I want to hold the plate at 55 degrees position. How do I decide what duty cycle % is to be given to the motor? Lets assume for the sake of the question that all physical parameters like motor inductance, armature resistance, spring's torsional stiffness, etc. are known. Will I need to create an experimental look-up by varying the duty cycle and plotting the resultant throttle position data (which I can get from the TPS) vs the duty cycle % ?

Qualitatively speaking, I saw that throttle plate was not opening in proportion to the duty cycle that I was supplying. I controlled the duty cycle by an Arduino UNO which is capable of 8 bit PWM output (0 to 255). I saw that changing duty cycle from 35(out of 255) to 45 had a much weaker effect (much less change in throttle angular position) than changing it from 45 to 55. Is this normal behavior? To what can I attricute this non-linear behavior - spring or friction. Friction is definitely non-linear but I am expecting that spring is linear in nature.

  1. Right now I have two new and unused throttle bodies . One problem that I am currently encountering with both of them is that of repeatability. For a given throttle body, I am getting different TPS output voltages (TPS output is 0 to 5V which can be linearly converted to throttle plate's angular position) for a given duty cycle % every time I run my code. Is the friction to be blamed here which is causing this uncertainity. I am assuming that this does not happen in a real engine's throttle, since it should respond to the same input in the same manner every time.
\$\endgroup\$
2
  • \$\begingroup\$ Why do you expect that "in a real engine's throttle, since it should respond to the same input in the same manner every time"? Surely in a real engine, the ECU will adjust the drive to the motor to achieve the desired throttle position using closed-loop feedback from the TPS and probably a PID control. \$\endgroup\$
    – brhans
    Commented Jun 2, 2022 at 8:07
  • 1
    \$\begingroup\$ closed loop operation was addressed in your other question. Basically you have a control loop like PID that computes a PWM value based on the motor position from the throttle position sensor and the demanded angle. Once the throttle plate is in the required position, only enough current via PWM is applied to the motor to hold it in position. Due to the gearing on the motor, the current involved is fairly low and the motor will not heat up much. There's a few projects using Arduino for electronic throttle control that should get you going. \$\endgroup\$
    – Kartman
    Commented Jun 2, 2022 at 11:58

1 Answer 1

1
\$\begingroup\$

And I have read that usually operating motors at stall conditions leads to overheating

There is a hidden assumption here that the motor in question is not designed for stalling. It's trivial to make the motor bigger so it can handle the stall.

Will there be a linear relationship between the PWM duty cycle % provided as input to the brushed PMDC motor and the output throttle angular position?

No, closed-loop doesn't need linearity.

One problem that I am currently encountering with both of them is that of repeatability. For a given throttle body, I am getting different TPS output voltages (TPS output is 0 to 5V which can be linearly converted to throttle plate's angular position) for a given duty cycle % every time I run my code. Is the friction to be blamed here which is causing this uncertainity.

No, I blame that every spring is bit different.

I am assuming that this does not happen in a real engine's throttle, since it should respond to the same input in the same manner every time.

On the contrary. The entire system (pedal, throttle controller and throttle assembly) should respond to the same human input in the same manner every time. The whole point of closed-loop is that the throttle-spring-motor assembly can respond to the PWM input differently every time, yet the closed loop will adjust it on the fly.

Closed loop doesn't know and doesn't care about exact values. Closed loop keeps adding duty cycle when the actual position is behind desired one and keeps removing when the actual is ahead of desired. That's all. Closed-loop approach removes all the issues of linearity, repeatability and external factors influence.

You're asking open loop questions. It seems that you're inadvertently trying to convert a closed-loop system into an open-loop one. This is IMHO impossible and certainly not feasible.

(On a side note, it's quite possible that the loop is even wider, and it takes the motor output into account. So when the human commands 50% input, the ECU will open the throttle way past 50% until the motor revvs up to desired RPM)

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.