Winter 2025 Course Journal: EECS 461

Course Title: Embedded Control Systems

Motivation

I enrolled in this course because of two reason:

  • I checked the list of upper-level courses I must pick one from and this is one of the only three options that don't mess up my schedule
  • Mark Brehob recommended it so it must be good

The other two courses are EECS 491 (distributed systems) and 483 (compilers). I have 491 in my backpack right now, but am thinking of dropping it because workload. It really hurts me to drop a course offered by one of my favorite professors. But compared to 461, it's less relevant to my career, so I need to let go if I have to. 483 is another matter. I doubt I have the math background.

The funny thing is, each of these courses teaches a different language:

  • 461: C
  • 491: Go
  • 483: Rust

I'm stuck with the worst of the worst, aren't I. floofmug

First lecture

The professor is Jeffrey Cook. He carries a suitcase, which ranks him at 2nd place on my "coolest thing to carry to lecture" leaderboard (1st place is Robert Dick with his Panasonic Toughbook).

The course involves a haptic wheel (motorized steel wheel, ~10 cm in diameter), some NXP ARM MCU, C, MATLAB, Simulink, and Stateflow.

Cook said in lecture that you can't declare variables in the middle of a block, only in the beginning. I was like, no way that's true, that must be an outdated version of C. I tried a counterexample on my gcc, and it worked all the way back to C99. He said, "well, at least it's like that on the lab compiler."

It turns out the rule dates back to C89. Which means? I'll be working with C89 for the rest of the semester.

mosfet_grub

First lab

I hate that the first lab is about MMIO and GPIO, which means I have to relive 373. It's like having to beat a tedious game level that you already passed one year ago with 28 tries. I went from MMIO to digitalWrite, and now the rock is rolling down the hill. floofmug

Giving up

Once a homework question asked me to derive some sort of transfer function, find the steady state response, plug in some values, and compare it with Matlab simulations. Somehow I couldn't manage to get them to agree. So I just put in "I have failed to replicate an answer consistent with 2(d)."

Haptic wheel

The centerpiece of our lab is the haptic wheel. In lab 4 and 6 we built the so-called "virtual worlds", which are just functions that, given the position of the wheel and optionally the velocity, returns the torque that should be applied. With them you can simulate all kinds of stuff like a spring, a wall, a damped spring, a wheel connected to a virtual wheel via a spring, and a control knob with detents. It's crazy how realistic it can be. Human interfaces are an interesting topic.