# Gas station without pumps

## 2019 January 8

### Struggles with Canvas

Filed under: Circuits course — gasstationwithoutpumps @ 11:30
Tags: ,

Yesterday (2019 Jan 7) was a crazy day for me.

I got up early to walk my son down to the bus station for his trip back to college, then bought groceries, walked home, had breakfast, and cycled to work. It was the first day of class, so I had meetings with my teaching team (5 undergrads, but one was snowed in at Tahoe and unable to make the meetings—there were two meetings, because no time worked for all five students).

I spent most of the day struggling with “Canvas” the learning management system that the campus makes us use. Setting up courses on it is a major pain, even if all you use it for is turning in assignments and grading them. My course has 12 homeworks, 6 prelab reports, and 5 design reports, plus about 10 quizzes.  One of the problems is that each assignment takes many mouse clicks to create— setting the name, the due date, the number of points, the grace period for submission, whether it is a group assignment, what group set it is associated with … .  Setting up lab groups the way I wanted turned out to be impossible in Canvas.  I wanted random pairs, respecting section boundaries, with no pair of students working together twice.  Even the simplest version of this (doing random pairings without the no-repetition constraint) didn’t work in Canvas, which tried creating one group of 3 and one singleton, for a section with an even number of students.

I figured that it would be easiest for me to create the pairings on my own computer and upload them to Canvas. But Canvas doesn’t have any way to upload group assignments! The only way it supports instructor-assigned groups would have required about 1000 mouse clicks. I ended up doing the assignments on my computer and posting them on the class bulletin board, telling the students to enter themselves into the assigned lab groups. I hope that this did not violate any FERPA rules (I checked the summary provided to faculty and it looked ok, but it would have been better for Canvas to have permitted uploads, so that I didn’t need to worry).

Lecture went ok, but afterwards I found that one of the figures in my book had gotten messed up between the Dec 15 and Dec 30 releases, and I had to come up with a new way to create the figure and re-release the book. LeanPub is nice in that anyone who has bought the book can pick up the new releases for free.  I think some of my students haven’t figured this out yet, as there have been more uses of the free coupon I issued than there are students in the course.

So I was continually busy from 6am when I got up to midnight when I got to bed. This morning I went for a 1.5km run in light rain before breakfast, created the quiz for tomorrow’s class, and cycled up to campus for office hours, faculty meeting, and 4 hours of instructional lab. Today is (probably) not going to be as hectic as yesterday was.

The new complex-number exercises in the book have prompted a couple of students to come in for help, as they did not really understand Euler’s formula.  I ended up redrawing and re-explaining the figure from the book, and that seemed to help them.  I’m hoping that this complex-number review will make it easier for them when we get to complex impedances.

### One figure has been giving me grief for a long time

Filed under: Circuits course — gasstationwithoutpumps @ 09:22
Tags: , , ,

There is one figure in my book that has been giving me trouble for a long time:

A Moiré pattern figure for the sampling and aliasing chapter that was giving me trouble.

The figure itself is very simple, and it should have been no trouble at all. I created the figure in hand-written SVG, and all the SVG readers (Inkscape, Preview, and browsers) had no trouble rendering it on the screen. But when Inkscape converted it to PDF (using the Cairo library, I believe), it threw away the black bars in the background. When I asked Inkscape to print the image to PDF, it rotated the image.

For a while, I got away with rerotating the image in Preview and saving the result, but the file got damaged or deleted at some point, and redoing the rotation in Preview no longer worked—pdflatex seemed to have no idea that there was a rotation nor a bounding box any more.  (I think Preview changed when I upgraded the mac OS on my laptop.) This change happened between the 2018 Dec 15 and 2018 Dec 30 releases of the book, so the Dec 30 release had a messed-up figure without my realizing it.

Yesterday evening, I noticed the problem and set about trying to fix it.  Nothing I could do with Inkscape or Preview seemed to work—I either ended up with no black bars or with the image rotated and scaled wrong.  (Viewing the individual image with Preview sometimes worked—but the inclusion by pdflatex was failing in those cases.)

Finally, I decided that since Inkscape was incapable of rendering in PDF the pattern-fill I was using to create the bars, that I would give up on pattern fill to create them.  Instead I used a Python program to generate separate rectangles.  Inkscape had no trouble converting that longer but less sophisticated SVG program to PDF, and I was able to fix the figure.

Because this figure was messed up in the “final” release of 30 Dec 2018, I did a quick re-release last night, fixing this figure and a bunch of typos students had found.  Yesterday was the first day of class, and students have already reported 7 errors in the book (one reported after yesterday’s release, so it is still in the current version at LeanPub).

This year’s class seems to be very diligent, as all the students had the book downloaded by the first day of class, and some had started on the homework.

## 2019 January 6

### OpenScope MZ review: Bode plot

Filed under: Circuits course,Data acquisition — gasstationwithoutpumps @ 14:47
Tags: , , ,

Continuing the review in OpenScope MZ review, I investigated using the OpenScope MZ for impedance analysis (used in both the loudspeaker lab and the electrode lab).

Waveforms Live does not have the nice Impedance Analyzer instrument that Waveforms 3 has, so impedance analysis is more complicated on the OpenScope MZ than on the Analog Discovery 2.  It can be done well enough for the labs of my course, but only with a fair amount of extra trouble.

There is a “Bode Plot” button in Waveforms Live, which performs something similar to the “Network Analyzer” in Waveforms, but it uses only a single oscilloscope channel, so the setup is a little different. I think I know why the Bode plot option uses only one channel, rather than two channels—the microcontroller gets 6.25Msamples/s total throughput, which would only be 3.125Msamples/s per channel if two channels were used. In contrast, the AD2 gets a full 100Msamples/s on each channel, whether one or two is used, so is effectively 32 times faster than the OpenScope MZ.

We still make a voltage divider with the device under test (DUT) and a known reference resistor, and connect the waveform generator across the whole series chain.  Because there is only one oscilloscope channel, we have to do two sweeps: first one with the oscilloscope measuring the input to the series chain (using the “calibrate” button on the Bode panel), then another sweep measuring just across the DUT.  The sweeps are rather slow, taking about a second per data point, so one would probably want to collect fewer data points than with the AD2.  Also there is no short or open compensation for the test fixture, and the frequency range is more limited (max 625kHz).

The resulting data only contains magnitude information, not phase, and can only be downloaded in CSV format with a dB scale.  It is possible to fit a model of the voltage divider to the data, but the gnuplot script is more awkward than fitting the data from the impedance analyzer:

load '../definitions.gnuplot'
set datafile separator comma

Rref=1e3

undb(db) = 10**(db*0.05)
model(f,R,C) = Zpar(R, Zc(f,C))
div(f,R,C) = divider(Rref, model(f,R,C))

R= 1e3
C= 1e-9
fit log(abs(div(x,R,C))) '1kohm-Ax-Bode.csv' skip 1 u 1:(log(undb($2))) via R,C set xrange [100:1e6] set ylabel 'Voltage divider ratio' plot '1kohm-Ax-Bode.csv' skip 1 u 1:(undb($2)) title 'data', \
abs(div(x,R,C)) title sprintf("R=%.2fkohm, C=%.2fnF", R*1e-3, C*1e9)


The fitting here results in essentially the same results as the fitting done with the Analog Discovery 2.

Although the Bode plot option makes the OpenScope MZ usable for the course, it is rather awkward and limited—the Analog Discovery 2 is still a much better deal.

## 2019 January 5

### OpenScope MZ review

During the CyberWeek sales I bought myself an OpenScope MZ USB scope from Digilent, to see how it compared with the Analog Discovery 2, which I use frequently.  I particularly wanted to see whether I could recommend it as a low-cost alternative ($89 list) for the AD2 ($279 list, but \$179 with academic discount).

I’ve not had a chance to do much testing yet, but the short answer is that I would recommend saving up for the Analog Discovery 2—the OpenScope MZ is nowhere near being a professional instrument, but the AD2 is close.

The first thing I tested was the function generator.  The OpenScope MZ does not have a real DAC, but uses digital output pins and a resistor ladder to generate analog voltages.  The result is a “DAC” that is non-monotonic.  The non-monotonicity can be observed by generating a sawtooth waveform and observing the result with an Analog Discovery 2.

The non-monotonicity is worst when the DAC switches from 0x1ff to 0x200 (from 511 to 512 out of 1024 steps). This was a 3Vpp sawtooth at 10Hz. The OpenScope MZ also has a much larger offset than the AD2.

To get clean measurements, I set the AD2 to average 100 traces.  I also did 16-fold oversampling, so that I could get good time resolution while recording the whole period.

The steps are not of uniform duration, but don’t seem to be a simple pattern of single or double clock pulses:

The step durations vary here from 64µs to 136µs in this small sample, but with 1024 steps in 0.1s, I would expect 97.66µs.

The step heights are not completely consistent either, but seem to average to roughly the right value:

The step size should be 3V/1024=2.93mV, but in this range the average step size is a little high. (but the first step at the bottom left is too small).  The variable duration of the steps is also very visible here.

The speed limitations of the amplifier for the OpenScope’s function generator are also quite clear:

There seems to be a 12V/µs slew rate limitation, and the large step at the end of the sawtooth has a 258ns fall time. By way of contrast, the AD2 has about a 40ns fall time for the same 10Hz ramp up and a slew rate of about 120V/µs.

I found the Analog Discovery 2 falling edge rather interesting—the stepwise descent may be an artifact of recording the waveform with the same instrument used for generating it (so that the oversampling does not work correctly), but it might also indicate that the ramp edge is digitally pre-filtered to keep it from overshooting.

### Series-parallel and parallel-series indistinguishable

Filed under: Circuits course — gasstationwithoutpumps @ 00:52
Tags: ,

I was looking at 3-component circuits for the impedance tokens, to make more challenging targets for students to identify than the 2-component RC ones.  Here are two of the circuits I was looking at:

Series-parallel : R1+(R2||C2) and Parallel-series: R4||(R3+C3)

I realized over the past couple of days that these two circuits are indistinguishable with an impedance spectrum, if you don’t know any of the R or C values.

The series-parallel circuit has impedance $R_1 + \frac{R_2}{1+j\omega R_2 C2}$, which can also be written as $\frac{R_1+R_2 + j\omega R_1 R_2 C_2}{1+ j\omega R_2 C_2}$.

The parallel-series circuit has impedance $\frac{R_4 \left(R_3 + 1/(j \omega C_3)\right)}{R_4 + R_3 + 1/(j \omega C_3)}$ which can be written as $\frac{R_4 + j \omega R_3 R_4 C_3}{1 + j \omega (R_3+R_4) C_3}$.

If we are given R1, R2, and C2, we can set $R_4 = R_1+R_2$ and $R_3 = R_4 \frac{R_1}{R_2}$ to get the same impedances for both circuits at DC and infinite frequency. If we set $C_3 = C_2 \frac{R_1 R_2}{R_3 R_4}$, then the impedances are identical for the two circuits at all frequencies.

There is one way that we can distinguish between the circuits, but it is pretty subtle, relying on thermal effects. The overall power dissipation is the same for both circuits with any given input voltage waveform, but the heat will be distributed differently. At high frequencies, the energy is dissipated in R1 and in both R3 and R4, but at low frequencies the energy is dissipated in both R1 and R2 or in R4. The thermal masses will be different in the two cases, and so the temperature rise will be different, which can theoretically be detected by differences in the noise spectra of the thermal noise from the resistors.

If the resistors were mounted on a sufficiently thermally conductive substrate, so that the temperature rise was the same for both resistors in each circuit, then even this subtle detection would not be possible.

A similar analysis of the impedances can be made if R1 and R4 are replaced by capacitors C1 and C4, so there are really only two distinguishable 3-component RC circuits: R1+ (R2||C2) and C1 + (R2||C2). Others either reduce to one of these or reduce even further to 2-component or 1-component circuits.

« Previous PageNext Page »