Chaining RC Responses: Learning with PSPICE and Matlab/Octave


October 2008, Josť Gaspar


Main objectives of this page:

- Building an analytical expression for the response of a first order circuit (RC series) given a step voltage source. Using the fact that the form of the expression is well known, one just needs to find (i) the time constant t, (ii) the initial voltage vc(0), and (iii) the voltage after infinite time vc(inf), for each step in the voltage source.

- Using the continuity of the capacitor's voltage to chain several analytical expressions (responses), considering that the voltage source changes its value from time to time.




Fig.1 The RC series circuit, having three different time constants: (left) 1KOhm Resistor and 1 micro Farad Capacitor, (middle) 1KOhm Resistor and 1 mili Farad (1mF) Capacitor, (right) 2KOhm Resistor and 1mF Capacitor. The voltage source value along time is encoded in a data file under the label "my_vstim".



Given the resistance and capacity values of a RC circuit, the time constant, t is immediately determined. For example t=1KOhm*1mF=1ms. The general shape of response to a constant source voltage is given by:

††††††††††† (Eq.1)

For instance, if the capacitor starts discharged and the voltage source changes from 0V to 5V at t=0s, then the capacitor's voltage along time is simply:

†† (Eq.2)


In case the voltage source changes its value at various moments, than the response shown in the previous equations, needs to be adapted accordingly to the changes of the source. Each step of the source motivates one response, the various responses have to be "chained" guaranteeing that the final value of one response is equal to the initial value of the next response.


For instance, if the voltage source is 0V for t<0ms, 5V for t in [0ms..5ms], and gets to 6V for t in [5ms..10ms], then the capacitor charges to 5V till t=5ms and then charges a little more, till 6V, for t=10ms. Then you would have two parts for the capacitors voltage:

††††††††† (Eq.3)


In general, whenever there is a change of the source, a new RC response must be computed, considering the state where the capacitor was left with the previous source value.


Lets say that the voltage source changes at the times t=t00, t10, t20, ... ti0, then one has to compute the responses v0(t), v1(t), v2(t), ... vi(t), considering the states where the capacitor was left in the previous step, vi-1(ti0) and the values to where the capacitor will run, vi(inf) if the current source value remains till infinity. In summary, the chaining rule is:

†††††† (Eq.4)



1. Simulation of the RC circuit


In this section we assume that you have installed: (i) the circuit simulator PSPICE (the student version 9.1 is freeware), and (ii) a matrices computations tool as Matlab (commercial product) or Octave (freeware; 52Mb for octave-3.0.1 windows binary).


The simulation of the circuit and visualization of the results is as follows:


a) Uncompress to a folder the next file (click to download):




b) Open the file "rc_resp.opj" with the program Capture included in PSPICE


c) Simulate the circuit in the Capture's menu "pspice -> run" or click in the icon named "Run pspice". Before starting the simulation, make sure that the window which is selected is the project's window (".opj") and not the circuit window.


d) Visualization of the response using Matlab or Octave:


††††††††††† >> cd c:\directory\where\the\zip\was\decompressed

††††††††††† >> rc_resp_show


e) Choosing other stimulus (source) signals, can be done also in Matlab / Octave:


††††††††††† >> rc_choose_vs(1); % alternatively to 1, there are also 2, 3 and other choices you can see by editing rc_choose_vs.m


f) After choosing other stimulus, run again (c) and (d).



Fig.2 Example of an RC-series response to two steps displayed with Matlab. In this example tau=1second.



2. Plotting tool to help checking the chained responses obtained analytically


The analytical response of an RC-series circuit is obtained simply by filling the constants in Eq.4, assuming that the source signals are described by rectangular pulses (sequences of steps). In other words, one just has to find (i) the time constant of the circuit, (ii) the times where the source changes, and (iii) the voltage values of the source. In this section we show how to use the "rc_resp_guess" function to compare the graphics of PSPICE simulations with the analytical derivations.


Example of a novel source signal composed by two rectangular pulses, 1[V] and 3[V], changing at t=5s:


††††††††††† >> rc_choose_vs(1)


Runing as before the simulation with PSPICE, one obtains the response graphic with:


††††††††††† >> rc_resp_show


Guessing the response involves inputting a number of values:

††††††††††† >> rc_resp_guess('2step')

††††††††††† -- input first pulse response:

††††††††††† start time [sec] = 0

††††††††††† tau [sec] = 1

††††††††††† Vc(t=ini) [Volt] = 0

††††††††††† Vc(t=inf) [Volt] = 1

††††††††††† -- input second pulse response:

††††††††††† start time [sec] = 5

††††††††††† tau [sec] = 1

††††††††††† Vc(t=ini) [Volt] = 1

††††††††††† Vc(t=inf) [Volt] = 3


The result of the previous input of data is a graphic that is superimposed on the active figure (if you do not want the overlapped graphics, just create a new figure: >> figure). See Fig.3.


Fig.3 RC-series circuit, PSPICE response and user guess of the response.



3. Further testing


Making short charging or discharging cycles, e.g. cycles during just one time constant, makes more challenging the derivation of the analytic responses, since in these cases the capacitor never gets close to the steady state. Computing the values at the end of each charge / discharge is therefore necessary to complete the chaining of the RC responses.


The function rc_choose_vs helps these kind of tests by allowing to define interactively source signals having 2 rectangular-pulses or 3 rectangular-pulses. For example defining two pulses with 3V and 0.5V amplitudes, changing at t=1sec, is done interactively as:


††††††††††† >> rc_choose_vs('2step')

††††††††††† -- input values to define two pulses (0..t1 and t1..10s)

††††††††††† t1=1

††††††††††† Vs(0..t1)=2

††††††††††† Vs(t1..10s)=3


Similarly for 3 rectangular-pulses

††††††††††† >> rc_choose_vs('3step')

††††††††††† -- input values to define three pulses (0..t1, t1..t2 and t2..10s)

††††††††††† t1=2

††††††††††† t2=3

††††††††††† Vs(0..t1)=5

††††††††††† Vs(t1..t2)=2

††††††††††† Vs(t2..10s)=4


Alternatively, one can write single command with all the information:

††††††††††† >> rc_choose_vs('2step', [1 3 0.5])

††††††††††† >> rc_choose_vs('3step',[2 3 5 2 4])


In case you just want to display the signal before outputting it to PSPICE, you can add a configuration structure, and obtain the results shown in Fig.4:

††††††††††† >> rc_choose_vs('2step', [1 3 0.5] , struct('sh_signal',[]))

††††††††††† >> rc_choose_vs('3step',[2 3 5 2 4] , struct('sh_signal',[]))


Fig.4 Two source signals, composed by two or three rectangular-pulses, shown by the rc_choose_vs function.


Testing the analytical RC-responses can be done once more using

††††††††††† >> rc_resp_guess('2step')

††††††††††† >> rc_resp_guess('3step')


Alternatively, the rc_*.m functions include also a basic simulator of the response, freeing from the need of running the experiments using PSPICE. Note that in particular the simulator only handles rectangular pulses, and is therefore not an option to simulate general piecewise linear signals as PSPICE. The syntax to ask for a simulation is compactly packed into a configuration structure (note the extra 's' in the string "sh_signals"):


††††††††††† >> rc_choose_vs('3step',[2 3 5 2 4],struct('sh_signals',[]))



Fig.5 A simulation result for three rectangular-pulses.



Note: in case some equations become to hard to read, click here to see these page in PDF.