What is Pi1541 anyway?
Pi1541 is an Open Source project by Steven White. It's a Commodore Disk Drive Emulator based on Raspberry Pi, originally on Raspberry of the Model 3 series: 3B, 3B+ or 3A+. More recently the Raspberry Pi Zero series is also somewhat supported, but in my opinion the emulation is not on the same level as the aforementioned ones. This article will focus on the Pi1541 based on the 3B+ model, but I'm certain that the information contained here is equally valuable for anyone having stability issues with their Pi1541 because of thermal throttling.
So what are we trying to solve here?
Being an Open Source project, Mr White published the circuit diagrams of the Pi1541. Naturally, being such an extremely useful thing as a replacement for the aging mechanical drives for the popular Commodore computers, a lot of enthusiasts have created and published a plethora of different circuit board designs, cases, modifications and so on. So many people today have Pi1541's out there but how they are built or look is very diverse. And they experience very different levels of success with it. Many are complaining about stability.
Pic 1: (The model I bought, with a OLED display and an encoder based disk selector)
The main problem with Pi1541 stability when made on basis of a Raspberry Model 3B+ is that it overheats in normal operation, in normal room temperatures unless we actively take action to handle cooling. To make a long story short: once the Raspberry Pi 3B+ reaches 60 degrees Celsius, it's firmware will start throttling the CPU, and since the Pi1541 relies on very exact timing is will start misbehaving and will cause I/O errors.
I will take you through, documented with pictures, what I did to stabilize my Pi1541 drives.
The initial bad assumption
My naive first bad assumption was that a passive radiator would be enough to cool the Pi1541. So that's how I assembled it first:
Pic 2: As you might guess from this post, this was not enough. The Pi1541 would chug along happily for sometimes 30 minutes sometimes slightly longer, but the end result was always the same: after some time powered on it would hang or stop loading or saving files properly.
To be clear, for the fix I'm proposing in this article, you certainly need the radiator on the Raspberry 3B+, so make sure you get one. Either you can buy radiators with thermal tape already attached, or you can buy the radiator and the double sided thermal tape (important: it must be tape specifically designed to conduct heat)
Pic 3: This is a picture of the roll of thermal tape I used.
Adding active cooling
Since the cooling from the radiator didn't fully fix the issue with overheating over time, I decided to add active cooling, i.e. a fan. The fan I opted for is a very small model measuring 20x20mm and with a height of only 6mm. I wanted it to be almost silent and to fit completely inside the case I have.
Pic 4: As you see it's for 5V and very low effect 0.11W, which was chosen for low RPM and therefor very low noise.
Pic 5: It's hard to see on Pic 4, but as you see here this thing is really tiny.
So I opened up the Pi1541 and started looking around for a sensible place to mount the fan.
Pic 6: This was the most promising place I found for it. I wanted it to go sandwiched between this particular Pi1541s 'back plane' that you see here and the Raspberry Pi 3B+ when mounted on top this back plane. The pic below shows how it looks when the Pi is installed on the back plane:
Pic 7: The CPU is also sandwiched between the back plane and the Raspberry Pi itself, which led me to the conclusion that I wanted to create an airflow between these two if possible. Which is the reason for the placement of the fan on the previous pic.
Please note: apart from the normal IO pins of the Raspberry Pi there is another jumper (visible on Pic 2) that I needed to take care not to collide with in my planned placement of the fan.
Pic 8: I used some strong double sided tape to install the fan by cutting small triangles and placing them on the 4 corners of the fan
Pic 9: You can certainly use any double sided tape that is strong enough for this step, but I can highly recommend this 3M brand double sided tape for the installation.
Pic 10: The fan is now installed with the double sided tape. Please note that I didn't do any modifications to the Pi1541 back plane or the fan itself. it's just taped right on there. Also note the gap I left between the IO-pin header to accommodate for those jumpers mentioned earlier.
The wiring
Since I didn't want to solder on the Pi1541 back plane I thought about where I could take 5V to power the fan. As you can see on Pic 10 above the logic level converter (5V <-> 3.3V) was mounted leaving quite long pins sticking upwards on this particular model. Even better it turned out that the 5V and GND pins were adjacent. So I decided to go for 2-pin a female gold-pin header to get the power for the fan.
Pic 11: I didn't have a 2 pin female gold-pin header, so I did the classic trick or just creating one by using side cutters on pin #3 from one of the sides of a longer one.
Pic 12: Now I had the header I needed to connect to the pins of the logic level converter.
Pic 13: I cut the original header from the fan, which didn't fit my purpose here, and prepared the red(+) and black(-) wires for soldering onto the header from Pic 12.
Pic 14: (purely optional) I added a heat shrink tube around the cables before installing the header. This allowed me to hide the cut of end of the yellow cable which is not used i this application.
Pic 15: then I soldered the header onto the cable.
Pic 16: the header connected nicely on the pins of the logic level converter. Important: Make sure you connect red(+) to HV (+5V from the board) and the black (-) to the GND pin. Double check, please!
Pic 17: since I added a fan, albeit very silent, I wanted to reduce possible vibrations from the Pi1541 enclosure, so I used some small plastic feet.
Pic 18: Plastic feet installed
Pic 19: Raspberry Pi board mounted on the back plane, and making sure everything works before final reassembly.
Pic 20: it's the fan back there behind the heat sink of the CPU with the unit reassembled and the fan is running.
Pic 21: from another view we see that the header leaves enough headroom and is not touching the top of the case once assembled.
Conclusion
We installed heat sink and a fan into a Pi1541 to make it stable.
Pic 22: the assebled unit up and running and stabilized at a temperature of 49-50 degrees Celsius.
A 1541 drive or an drive emulator is not really that practical if you only can run it for half an hour at a time. Sometimes you want to binge-watch demos/trackmos. Sometimes you want to play Maniac Mansion. Regardless having a stable unit is what actually makes this peripheral useful.
I hope you found the images and information useful for making your Pi1541 reliable.
Pro-tip: Deus Ex Machina is a very good demo to run on your Pi1541 to ensure it's stable. The demo end part continuously loads new pictures for as long as the machine is running.