I have question about calculating pull-up and pull-down resistors to my CAN transceivers.

I want to my TJ1048 work always on NORMAL mode, so to do that, I need to pull-up STBY high. I know, that resistors with lower resistance will draw more current, than resistors with higher value, but it is important to choose not too high or too low value of resistor, just right for appliaction. Also I know idea of using pull-up or pull-down resistor

I read a lot of information about this topic, but this is still a mystery for me about choosing properly. For most of time, there is common resistors to pull high, like 10k or 4k7 ohm, but I would like to know why.

On SparkFun website I saw, how to calculate pull-up resistor based on Ohm laws.

From Ohm Laws: V = R * I -> R=V/I

So to calculate R, I need to rearrange above equation. But here is a problem for me. From datasheet, Vih min is 0,7VIO and Vih max is Vio+0.3, Iih is from 1 to 10uA. Microcontroller is powered using 3.3V power supply. VIO pin is connected also to 3.3V. In this case, chip will interpreting high level on STBY pin from range of 2,31V to 3,6V? Is this correct?

Let's assume, that my way of thinking is correct. For V I am taking 3.3V, for I 5uA. After calculation, resistor value is 660k Ohms. Is this correct?

Can someone explain me. how to calculate resistor for pull-down, based on following data: Vil between -0,3 to 0,3Vio, Iil between -1 to 1uA. The same way as above, when I calculated value for pull-up?

Thanks for help!

Best regards


1 Answer 1


Actually, your calculation has worked out how to choose a very bad pull-up resistor for your application. Let's draw a simplified version of your circuit.


simulate this circuit – Schematic created using CircuitLab

First, let's analyse what happens when NO current flows through R1. If no current flows, then the voltage across that resistor is 0V (\$I \times R = 0\$). Since one end is at 3.3V and the voltage across the resistor is 0V, the other end (at STBY_VOLTAGE) must be at the same voltage (3.3V). This is true for all values of R1 (because anything multiplied by 0 is 0).

Realistically, there is going to be some current flow from the input impedance of the INPUT pin (which can't be infinite in the real world). You have quoted this at 1uA to 10uA from the datasheet. For a fixed resistance, the higher the current flowing through it, the higher the voltage dropped across it (\$V = I \times R\$ again). So the worst case (which we should design for) is 10uA current. \$V = I \times R = 10\mu A \times 660k \Omega = 6.6V !!\$

Interesting result. The implication is that STBY_VOLTAGE is 6.6V lower than 3.3V - i.e. -3.3V. This isn't going to happen for several reasons, not least because the only path for current through the TJA1048 is to 0V, so for a linear circuit we're constrained between the 3.3V rail and 0V.

Moreover, it illustrates how your calculation was valid, but incorrectly applied. You were trying to calculate a resistor that would drop 3.3V at 5uA - but we don't want that. We want it to drop as little voltage as possible while still providing some current limiting to that pin.

Let's recalculate. At the worst case scenario (10uA input current) we want to be no lower than \$0.7 \times V_{IO} = 2.31V\$. That means we drop \$3.3V - 2.31V = 0.99V\$ across the resistor. \$R = {V \over I} = {0.99V \over 10 \mu A} = 99k \Omega\$. This places an upper limit on the pullup value that you should use - no more than 99k. Also, this is right at the limit and higher values are worse for us (again, \$V = I \times R\$). We should choose something smaller.

Based on this and giving myself plenty of margin I would choose something between 10k and 47k depending on what I had close to hand (or in a commercial design, what I had already designed in elsewhere on the board). Funnily enough, if you just asked me to choose a general pullup value that works for most low-speed signals like this... I would have suggested the exact same range.

We can use the same logic to calculate a value for your pulldown. This time, we're working up from the 0V rail (rather than down from the 3.3V rail) so the calculations are even easier. The voltage at the top end of the resistor is just the voltage dropped across it plus the rail voltage. Think about the direction of current flow in each resistor to work out why it's minus for the pullup and plus for the pulldown. Since the rail voltage is 0V anything plus 0 is itself and so we just have to keep the voltage drop across the resistor within bounds.

\$ {V \over I} = R = {{0.3 \times 3.3V} \over {1 \mu A}} = 990 k \Omega \$

This is the absolute maximum value - larger than that you can get away with for the pullup. We'll want to reduce the value to keep it away from the calculated limit, and since the value we choose for the pullup will be less than 990k. I would simply use the same value for both.

My vote - 10k pullup, 10k pulldown.


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.