I'm currently working on my master thesis and therefore need to simulate a solar cell in LTSpice.

I've already modeled and simulated some examples with constant values. But for a more accurate model, I want to make the whole system temperature dependent since the solar cell will heat up from 15°C to roughly 70°C. The problem I'm facing is implementing the temperature dependency.

As far as I know, there is no way of using a temperature curve (just temp sweeps) for the simulation. The only way to get around this problem is using a voltage dependent current source (Iph) and varistors for the series and shunt resistor (Rs and Rsh). But when I'm using varistors instead of resistors, I get totally different results which are nothing like I'd expect them to be. I attached two plots showing the difference.

Expected solar cell results
Figure 1: Expected solar cell results

Solar cell results with varistors
Figure 2: Solar cell results with varistors

Do you have any ideas what I'm doing wrong with the varistors, or is there a better way to implement the temperature dependency?

The schematics are attached. If you have any questions, feel free to ask. Thank you for the time and knowledge you are investing! I really appreciate it.

Figure 3: Schematics

  • 1
    \$\begingroup\$ Varistors smells almost XY problem. Could you use a current dependent voltage source as your resistor instead? \$\endgroup\$
    – winny
    Commented Feb 19, 2019 at 9:55
  • 1
    \$\begingroup\$ Varistors have hard clamping, there is no resistance normally, and it suddenly jumps to its clamping value. You can see that by placing one in parallel with a current source, it will fail if not clamped. Use VCSW for that, with negative hysteresis, but you're on your own to accomodate the nonlinear variation. Or modify the circuit to include some RC ladder to mimic the thermal variations, again, how you do that... \$\endgroup\$ Commented Feb 19, 2019 at 10:05
  • \$\begingroup\$ Hello @winny and thank you for your quick response. I could give it a try but don't know how. Could you be a little bit more specific on how to use a current dependent voltage source as a resistor? \$\endgroup\$
    – Daniel H.
    Commented Feb 19, 2019 at 10:08
  • \$\begingroup\$ Hello @aconcernedcitizen thank you for your answer. I understand the problem with using a varistor. Using a VCSW is interesting but as you said, accomodating the nonlinear variation would be quite hard and probably not as scientific as I would like to. But it's a good step forward to finding a solution. \$\endgroup\$
    – Daniel H.
    Commented Feb 19, 2019 at 10:20
  • \$\begingroup\$ Or can you cheat and have your temperature correspond to a voltage and have your resistor respond to said voltage? Look here: electronics.stackexchange.com/questions/3623/…. More good read: vishay.com/docs/29170/ltspice.pdf \$\endgroup\$
    – winny
    Commented Feb 19, 2019 at 11:23

1 Answer 1


Here is an attempt at a dynamic solution (everything below is some mock-up, tinkered values):


V1 is the reference voltage. E1 serves as a feedback error amplifier that ultimately acts as a source for the load, too. At its negative input, is what would be the variation of the temperature as a function of the load current: Vx is the current sensor, F1 takes this, attenuates it by some value (here 100x), and then feeds it to a simple lowpass RC (can add a ladder afterwards for finer control), whose values make up the thermal constant you're interested in.

Note that I used Rpar=20 and ic=25. These two values represent the temperature at "rest" (I(F1)*Rpar) and the initial temperature (ic). This is what comes up:


If you look at the separate, red V(temp), it starts at a value and decreases, that's because the effect of the imposed initial condition is higher than the "rest" voltage, and, since the load sees little current drawn, the temperature slowly decreases to the equilibrum. The black voltage, V(Vin), starts a bit lower due to the initial warm conditions, but then rises towards the value given by reference-rest.

Then the current ramps up, temperature goes up, and here's the not-so-nice part: the plateau should exponentially rise as a 1-exp(-x), more than it's in the simulation, but not ad infinitum, thats why an RC ladder would have been nicer since you can add series RC, too.

Then the current drops, the temperature slowly decreases, to reach equilibrum. All this time, the voltage drops or rises according to the temperature variation.

Now, I realize this is probably less than a bare-bones show, but it's a start to show how to use the temperature in a feedback loop, seeing as you already have a VCCS in there, which can be put to good use. If you use primitives such as V+F for current sensor, and VCCS or VCVS plus RC elements, your simulation will fly, so the inclusion of such a circuit will barely hinder the rest of the schematic.

  • \$\begingroup\$ Dear @aconcernedcitizen, thank you for the detailed explanation and example you have provided. I will try your method and provide some feedback with the results I'm able to get. It might take a little while since I'm fairly new to this kind of software and am more into mechanical engineering but I'll keep you up to date! \$\endgroup\$
    – Daniel H.
    Commented Feb 20, 2019 at 6:48
  • \$\begingroup\$ @DanielH. By all means, I'll help however I can. EE.SE can accomodate a chat window, I see no problems other than possible waiting times for each to get online (I might not be quite available each day, these days, but I will be). \$\endgroup\$ Commented Feb 20, 2019 at 10:24

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.