Since Chapter 20 of Matter and Interactions deals with RC time constants, and we’re behind on physics (the Spring Hill Science Fair judging took up most of my day, and the AMC-12 exam took up my son’s time before Java class), today we did a simple RC time constant lab, charging a capacitor to 5V, then discharging it through a resistor, recording the discharge with my son’s DataLogger program (the one he wrote for my circuits class).
The circuit we used for the discharge of the capacitor. Our first version used 4.7µF and 1MΩ, but we got some anomalous results and redid it with these values.
The data looked pretty good when plotted, but we had a bit of a surprise when we tried fitting exponential decays to the data:
The initial fit for the first 5 seconds after flipping the switch behaves pretty much as expected, but the discharge slows down, and has a much larger time constant after a while.
We are at a loss to explain this gradual slowing of the discharge.
I tried inserting a unity-gain buffer between the capacitor and the Arduino pin A0, to make sure that the Arduino was not disrupting the capacitor discharge. This did not change the behavior, other than at the very low end, where we ran into the limits of the “rail-to-rail” output of the MCP6002 op amp chip, which is supposed to be able to get within 25mV of the power rails, but which seemed to be stopping at 100mV. I think that this particular copy of the chip may be fried, though, as the other op amp on the chip was taking a huge current through the input pins. I replaced the MCP6002 op amp and got down to within 5mV of the rail—better than the spec. The other chip was definitely fried, and I’ll discard it. The stretching of the RC time constant as the capacitor discharges is still present, but to a much smaller extent:
The RC decay curve as seen after a unity-gain buffer made from an MCP6002 op amp. The fit for the first few seconds has the RC time constant we expect, but fitting later in the discharge gets a longer RC time constant, though not as badly as when directly connected to the Arduino.
I’m still looking for a convincing explanation for why the RC time constant is not constant in the discharge. The power supply voltage was not changing, nor was there enough power anywhere for significant self-heating. I’m having trouble believing in enough inductance to cause any measurable effect, especially as that would have had the biggest effect at the beginning of the discharge, not the end.
I suppose I could be seeing non-ideal conversion in the Arduino ADC (different Arduino boards were used for the two plots on this page: the first one was done by my son on a Leonardo board, the second one by me on an Arduino Uno board, so the difference in the fits may be from different non-ideal conversions in the board, rather than from the unity-gain buffer. Indeed, taking out the unity-gain buffer, but still using the Uno board gets very similar results:
With no unity-gain buffer, the results are not changed much, which means the buffer is not really needed (a good thing, since I don’t usually want to add an amplifier every time I use the DataLogger).
I suppose that the most likely explanation is that the gain and offset errors in the Arduino ADC may be throwing things off. They are only supposed to cause errors of 2LSB (about 10mV with a 5V reference voltage). I can get a better fit if I add a constant offset error of about 10mV, though that doesn’t quite explain all the error. It looks, though, like what I’m seeing is limitations in the Arduino ADC as a measuring device, and not interesting physics or electronics in the capacitor.
I wonder whether the circuits course should have a capacitor discharge lab early in the quarter next year, as a refresher of physics thinking about RC time constants, before we do impedance and low-pass filters.