Probing mains powered schematics is hard. Most oscilloscopes are earth referenced, so connecting ground probe to random spot of mains connected device will make a small explosion. Also there is the risk of electric shock by touching wrong part of the schematic while being in contact with something grounded like a desktop computer case.
To combat these dangers I built an isolator box. I took an 1:1 transformer rated for 230 VAC 50 Hz mains voltage used in Europe. With 0.76 A current output capability it gives me ~170 W to play with. To make it even more useful I added a second output that goes through a diode bridge and has bunch of filter capacitors. This gives me rectified DC voltage to use, since most schematics rectify it anyway.
For electronic construction I didn't use any PCBs. There was only a handful of components and all of them are really big and chunky so I just wired everything together. For front panel I used colour coded 4 mm with 19 mm pitch and illuminated power switch. I added fuse holder to the back, since I like to not die when working. First I tried quick acting fuse, but transformer inrush current blew it, so I settled with slow acting one.
Mechanical construction was done quite hastily. Front and back panels are made out of 15 mm polyethylene sheets. I cut the sides out of 2 mm acrylic sheets I had lying around and screwed to front and pack panel. Heavy transformer is screwed to back panel and lies on its side to provide support.
First test were successful, powered some schematics and probed random parts of it happily. After turning on high power portion of the schematic the fuse blew and no smoke escaped. So win for protection.
I designed couple of vocoder encoders. Vocoders are devices that encode sound by chopping it up by frequency bands and express each frequency band only by its amplitude. This kind of representation allows to mix all the frequency bands with each other. This have been used as a method of speech encryption in the past. I build one part of the system - relay board that took analog voltages and mixed them up with each other to provide encoding/decoding.
Board itself had 12 inputs and 12 outputs. To switch the combinations between them there was 144 FRA3C-DC12 open case relays and indicator LEDs. 144 relays are needed because every channel has to have the ability to switch to every output. There would probably be smaller relays or even smaller solid state solution. But this went to an art installation it had to have relay clicking sound and see-through/open relays so user would see the movement happening. To drive all of these relays I used driver chips and for communication with central controller - a circuit with nrf24l01 chip. For communication I had to put the chip on the board because there was no good RF modules with external antennas available. External antenna was needed to reach out of the metal case it was mounted in.
First version of the board used TLC5940 LED drivers to drive the relays. Relays were rated 100mA @ 12V so I put in current limiting resistors to limit TLC current to 120 mA, just to be safe. Control circuit had Atmega168 with Arduino bootloader. Board was manufactured from 2 layer 1.6 mm FR4. After building it up problems started to appear. The code was working well and radio links were working, but switching wasn't so reliable. It turned out that led drivers with current limit at 120 mA couldn't switch some of the relays. Switching current was probably higher than 120 mA, combine that with 288 different relays that I had and some of them were bound to be a little out of spec. Secondly - the voltage regulator couldn't handle all the power needed from 5V rail. Every LED driver used tens of mA from the rail and since I had 9 of them - it added up to too much.
Final problem - that finally killed the board - was mechanical in nature. Board - with the size of about A4 paper, had about 1.3 kg of relays on it. When taking the PCB from the sides and rising it up from the table to move it to next one - you could hear copper tracks braking apart. Each move destroyed some tracks. Shipping with courier probably broke tens. When LEDs and relays didn't light up because of that I subsidized failing tracks with wires. But in the end, it was all wires and all broken.
Version 2
Since there was still need for a working board I designed a new board. It had the same relays, LEDs and control circuit. I used industrial hot air gun to desolder all 288 relays from the old board. But I used new driver chips - TPL9202 8 channel relay drivers. These were rated at 200 mA, which gave me a 100 mA of safe zone. And testing showed no problems. They were 8 channel so I needed 18 of them per board, but no big deal. I also moved control circuitry to a separate add-on board to make the design more modular and easier to debug. To drive all the SPI slave select pins I used CD54HC154 4- to 16-line decoder chip. Voltage regulator issue also fixed itself - the motor controllers had their own 5V regulators built in so I just took one of those 5V lines and used it to power control circuit.
For mechanical stability - many changes were made. All the tracks going to relays were as wide as possible. I used as big teardrops for all through hole components. Also - to make soldering easier I had red LEDs with 12V rating. This how I didn't need to solder 288 small SMD resistors that could potentially fail. But the most important mechanical difference - I went to 2.4 mm thick PCB. There were some weird problems with it - like through hole headers didn't want to reach through. But the mechanical strength that came with it - amazing.
All source files are free and available. PCB design was done in Altium Designer, code with Arduino IDE.
Went to hardware hackaton Tehnohack this weekend. It's a hardware oriented hackaton that local hackerspace Skeemipesa organises. Different from hackatons I have been before this was pleasantly not business oriented, I would say less than 10% of people there weren't engineers. Most projects had some kind of business case behind it, but no big work was done on this end.
I was in team called Players-tracking. We designed a device that would track football players in real time on the field. It uses radio wave time-of-flight measurement to measure distance between radio modules. For prototype we used Arduinos and DWM1000 radio modules.
I have lately been doing bunch of different LED matrices. One of the most interesting one is an infrared matrix, made out of old Soviet infrared light that was used for data transmission (if I remember correctly - in studios). We repurposed it to LED screen that is visible only through cell phone camera.
We stripped out the insides of the device and mounted in our stackable led controller boards (link to github source). These two boards are designed to convert random amount of LEDs to Arduino controlled matrix. There is high side controller - 8 P-channel mosfets per board. And low side controller uses TI TLC5940 16 channel led controller. Low side board is stackable sideways, since I originally used it to control 8x70 matrix made out of cell phone backlights.
Everyone likes LEDs. I like when I have a bunch of them. So one day I realised that I have about 15 big 32x16 RGB LED matrices in my lab. They are cheaper versions of Adafruit's led matrixes. Both matrices use standard HUB75 pinout. The pinout is same, LED count is the same, but display doesn't work - it is wired differently inside.
Driving matrices
Most simple way to do a led matrix is to drive low side columns with sinking driver chips and rows with high side mosfets. When you have bigger display - let's say 24 driver chips in total, then usually you will make multiple parallel lines of data to clock information faster.
HUB75
HUB75 is a standard interface to control matrices like that. It has binary inputs for mosfet control: A, B, C and D. So you can have up to 16 rows. Also, you have 6 data buses: R1, G1, B1, R2, G2, B2. Now, to control a matrix you have to know two things: how many virtual rows and columns does your matrix have and how are they mapped with reality.
Differences from device to device
The Adafruit matrix has 12 driver chips and 8 rows controlled by mosfets. Mine have 24 driver chips and 4 rows. Also, Adafruit's one seems to be mapped quite straightforward way. Mine in the other hand.. rows are separated to eight banks that are all in different directions. Still - no problem. Mark Laane, a programmer in my lab, sat down with the matrix and soon we had a working library. You can find it from here:
https://github.com/zidik/LedMatrix16x32-Alternative
Electrical wiring
I soldered my matrices directly to Arduino Micros. Since the pinout is slightly different from Uno, the connection diagram got hurt a bit. This library works with following connections:
HUB75 | Connect to | On Micro |
R1 | PB2 | MOSI |
G1 | PB3 | MISO |
B1 | PB4 | 8 |
GND | GND | |
R2 | PB5 | 9 |
G2 | PB6 | 10 |
B2 | PB7 | 11 |
GND | GND | |
A | A0 | |
B | A1 | |
C | A2 | |
D | GND | |
CLK | A3 | |
LAT | A4 | |
OE | A5 | |
GND | GND |
I needed a computer controllable 32 channel light dimmer for an art installation. After looking around a bit I found out that there isn't even a Arduino shield for the work. So I made a quick 4 channel stackable board to control lights.
The board uses SHARP thyristor based solid state relays to switch mains voltage. As normal with thyristors - all the outputs can be used as dimmers through zero-crossing detection.(Edit: It turns out since these have built in zero crossing detection, dimming is not possible) All outputs are able to handle 0.9 A / 200 W. We connected 40 W incandescent light bulbs to it but you can control whatever with it - lights, electronics, computers, motors etc.
The end device has Arduino as a controller, so all the lights can be switched from computer over USB. And since all the outputs are optically isolated from controller, the USB side is quite safe even in error situations. Also the Arduino can be reprogrammed for any preset pattern.
Get the controller source code from github: https://github.com/jaanuskalde/light-controller
Or buy it from my open source webshop: http://tech-thing.org/usb-controller-light-dimmer/
I'm building quite high power (for me) buck-boost converter for a friend. It takes in 12-45 V and has to output regulated 24 V. Total output power has to be more than 300 W. I don't understand switching regulators well enough to build more than 100 W regulators from 555 timer (that is basically how your computer power supply is built). Just too much phase shifting and output oscillations and whatever else to take into account. You know, the things you learn in electronics classes (which there was none in my school).
So I took the highest power buck-boost controller I could find - LT3791-1. It satisfied all my specifications so I calculated what parts would I need to make a 300 W board out of it. After ordering stuff and soldering it together it looked awesome. But after some playing around I couldn't get it to boost more than 100W, buck worked well but boost didn't. After lots of debugging and bunch of fried chips I finally figured out that the MOSFET drivers are too weak. My big and high power mosfets didn't even get warm at 300W output, but the chips internal voltage regulator fried all the time.
So, lessons learned from high power:
- Every watt adds problems to MOSFET driving
- Don't over specify parts three times
Next prototypes will be smaller and there will be several of them in parallel. Maybe some pictures soon.
My old lab was in the corner of my dorm room and as projects proceeded I needed a bigger lab. So, I got one. I teamed up with couple of my friends and we got 80m2 of space in nearly industrial building. It is nice to have room big enough to have 7m Yagi antenna indoors. In the same room there is EDM OÜ making small CNC machines and soon, couple of more startups.
I needed a bicolor LED cube, so I designed one. One coloured cubes are useful only as toys so bicolor one seemed like the easiest to make. I used Atmega8u2 to control two TLC5926 and high side switching was done with four small mosfets. As a bonus feature I used NCP3170 to convert USB 5V to 2.2V more suitable for red and green LEDs. Using a switching regulator let me use power from USB more efficiently.
My second led cube was much more ambitious - 6x6x4 RGB led cube. I planned to use one big Atmaga and charlieplex all the pins. I did the easy part - calculations, designing the system, routed and soldered the circuit board. Then I faced with the killer part - soldering 144 small surface mount three color LEDs to thin wires to form a cube. I tried couple of different racks but it was too time consuming to do even one. Some day when I think of a better way I will build a dozen, but for now it goes on my Out of Development wall.
I looked at commercial reflow ovens and saw that they are expensive. That is a pity, because the hardware in them doesn't cost anything (Yea, I know, the development costs).
So I made a board controller that allows you to temperature control anything with minimum components. It has 4A TRIAC to control the heater, temperature sensor and attiny13 to control the heating. Also a red button, LED and on line regulator. The BOM cost was about 6$ in single quantities from Farnell.
Debugging the prototype was quite "fun". On line regulator meant that my ground was actually quite close to line voltages, so the probing was pretty dangerous. To use oscilloscope I used one channel as a virtual ground and divided two channels with math.
I got the regulator and zero volt crossover detection working but the TRIAC drive circuitry didn't work. The code was finally working, but I managed to blow the TRIAC somehow. I used small pulse after each zero volt crossover to turn on the TRIAC for the next half cycle. It brought the projects energy consumption quite low, only couple of mA. This allowed me to use quite small (100 nF) mains rated capacitor for the regulator.
At some point I decided to stop this project. Debugging it was too dangerous and I had made couple of bad design decisions. Like believing screw terminal over 300 V rating. Line voltages and 3.5 mm pitch screw terminals shouldn't go together.
Get the source files from GitHub
Since I still needed a reflow oven: I took a sandwich grill, added a thermistor, a small 5V relay and simple atmega32u4 devboard. Half an hour of coding later and now I have a reflow oven. PID controllers and thermal profiles are overrated, everything works perfectly with "go to 220 degrees then shut down" logic.
My circuit board with MSP430FR normally took ~ 3 mA from 3.3 V line. But one evening, it started taking 200 mA. It seemed to function correctly but the power had to go to somewhere. 200 mA * 3.3 V = 660 mW. It is not enough power to burn the fingers so how can to track it down - use drying solvent. Normally I clean my boards with acetone (but isopropanol is better) so I just wiped that to random components until I noticed that the die part of the MCU was drying much faster than other bits of the board. After replacing the MCU the current consumption dropped back to 3 mA. The resistivity of acetone is in the order or megaohms so no problem with misoperation.
We all love solder paste reflow soldering. Of course we do: its the fastest way to solder boards and can also be used to produce more than one of them. But getting stencils has been a pain: smtstencil.co.uk sells them for 20€ and a week of waiting. A bit too much for playing around. And I broke couple of school's endmills trying to mill out stencils so no more of that.
A week ago Kalle showed me a blog post about cutting stencils with plotter. So I have a plotting machine now. Cuts pretty stencils from polyester sheets. KiCad exports SVG files that is useable with minimal modification. Polyester stencils are transparent - aligning is easy even without aligning holes. It is strong enough so I can use it more times than I ever will. Also it it soft enough to modify it with scalpel.
While trying to solder some 10x10 cm CubeSat 4 layer boards at home I found out that it is really hard. In school we have hot plate and infra-red preheater, so soldering big boards and components is easy. Preheater heats whole board up to about 120 degrees and this makes soldering of any kind much simpler. The amount of heat needed to warm up a joint is much smaller. Soldering big ground pad, massive heatsink tabs and big center pads becomes a piece of cake.
So, I wanted a preheater too. Preferably hot plate one, because it is cheaper, easier to use and good enough in most cases. I searched and no shop could sell me table stove small enough. The cheapest hot air ones were about 50€. So - I made one myself.
The Blazing Track - PCB preheater from PCB. It is 10 x 10 cm big hot plate. Top side is filled with 4 Ω worth of 1.1mm track. On the bottom side there is 5.5 x 2.1 mm barrel connector, red led to indicate if it is powered or not and some unpopulated bonus tracks. The PCB is inspired by Sick of Beige standard PCB sizes, but bigger. Standard should be DP100100, if there ever will be it. In all four corners there are legs, made from countersunk bolts so the top side is totally flat.
Power it with 12 V and it will take a bit under 3 A and will settle down to 2 A when hot. At 12 V it will get about 90°C. For other temperatures, try other voltages. This temperature is pretty good and helps with soldering.
There are extra pads on the bottom to solder SMD pinheader and 0603 thermistor, so you can make your own daughter board which measures and controls temperature.
Since LT3572 outputted only digital signal and I needed analog, I found some new chips. I was targeting class D piezo speaker amplifiers. Piezo speakers are used in places where there are not enough space for normal speakers. They are harder to drive and control (high voltage, capacitive), but have much more output power in smaller volume. Class D amplifiers use high frequency digital switching to make lower frequency analog signals.
Next in line were LM48580 and LM4960. Both had boost converters and worked from single cell lipo.
The LM48580 is in BGA package. Fortunately only 12 balls and all the middle ones can be shorted with neighbouring balls. I tried to solder it with reflow oven but school's stupid oven has ventilators in it that blew the chip away from the board. After trying to solder it for couple of times I finally got it on good enough. Large amount of solder paste and hot air was needed. And since it is BGA, every desoldering destroys your chips - so I destroyed about 3-4 chips in the progress.
While debugging I noticed that the boost converter isn't working. I got a little freaked out, but while explaining the problem to a friend I remembered that this is class H amplifier. Meaning that the boost converter output is as low as it can be to be more efficient. Since I was not driving it with signal the boost converter was in standby. After applying some signal it all started to work magically.
As I learned - both of these chips are differential output chips - meaning that they will reverse the outputs to get two times as much peak to peak output to speaker. It can be a good thing for speakers but since my motor cannot be reverse biased I didn't end up using these chips.
Schematic of LM49590 testboard (PDF)
When designing piezo motor controller I tested a lot of ceramic loudspeaker control chips. Now I'm uploading all the design files and pictures.
The first chip I tried was LT3572. It has a 0.9A 40V boost converter and 0.6A 2 channel h-bridge made from BJT transistors. This QFN package chip works with voltages 2.7 V up to 10V - classical one cell lipo targeting chip. Although it looked good, I didn't use it because I had an partly inductive load and voltage spices killed all output transistors. It is good for generating digital signals into a high voltage capacitive only load.
The first board was small and had only necessary components. The second one is quite application specific and has some weird design decisions like series capacitors and stuff like that.
With this board I learned that wrong soft start capacitor will blow your circuit, tens of times.. Also that soldering a QFN to self made board is nearly impossible.
- Only passive you didn't triple check blows up your circuit five times
- Code in the interrupts don't work - forgot to initialize the interrupts
- Resistor you soldered was for compatibility with other chip, but with your one it works as a disable
- Quadrotor is uncontrollable: can't find bugs from code, the motors and propellers were wrong way
- You forgot battery powered thing on, your last battery died
- Mosfet's drain and source are swapped, everything goes up in flames because of body diode
- 20x microscope I bough magnifies too much, I can't see bigger chips than 1206
- You use delay in interrupt.
- You use interrupt in your interrupt.
- Programming doesn't work, pinouts are correct, device was turned off
- Transistor pinout is wrong - as always. Rotate you resistor 120 degrees.
- Software PWM behaves erratically - interrupts were enabled in time critical loop
- You have two main loops
In summer I got a job to build a column heater for local biomedicine laboratory. They basically bought it from me so I can release all the design to open source. You can build one yourself or if you don't want to, I can build more of these. There are commercial ones available but they are much more expensive than an university student.
Column heater itself is needed for ion trap mass spectrometry. Basically it is a process used to determine composition of biomolecules. They had Thermo LTQ XL (datasheet) machine for this. Their machines couldn't accept long columns. Workaround to this is to heat the column, so that is what I had to build.
I built PCB heater, because this was the easiest idea to heat a surface. The idea came from PCB heated bed for RepRap. I milled out the heater from 18µm/0.5oz PCB. The track length is 37cm, width 0.5mm and resistance about 4Ω. Whole plate is covered with heat resistance lacquer CPL200H and heated side is covered with cheap ebay thermal glue. The lacquer was advertised to have up to 100°C operating temperature, the same as my machine, but it started to smell at bit at 50°C.
Control circuit consists of small THT thermistor soldered to heater PCB. Electronics is in small plastic box and attaches to computer with USB. I used Erik's U4 devboard and soldered P-channel mosfet to it to switch the heater. The heating power comes from random 19V laptop power supply. The software is simple proportional PWM control that accepts numbers over virtual serial and reports back temperature it is at. I used teensy virtual serial example as a base.
The C source and KiCad design files.
UPDATE:
Half a year or so later I talked with the people in the lab and they said it worked as it should. Got one picture of the ready made thing.
- Tantalum capacitor blows up because they mark it the other way than electrolytics
- Potentiometer is routed in the wrong way - output is logarithmic where it should be linear
- Potentiometers next to each other work opposite ways
- Pinheaders are so close that you can't plug into both of them at the same time
- You accidentally deleted the file and forgot to backup... again
- There is no pullup on reset
- HWB leg on atmega8u2 is pulled high, not low
- SCK from programmer is routed one pin left
- Two row connector is soldered on wrong side of the board
- Forgot to solder ferrite beads - no power on your chip
- Cold joint on your chip - pressure from test lead makes contact, so you don't detect it with measuring
- Regulator in unstable because you haven't soldered most of the circuit in place
While testing fourth revision of my power supply board, I noticed that it was buzzing, couple of cycles of power later it stopped. After some research I discovered that the output of the 5V LDO voltage regulator was outputting 0.5V triangle wave at 800Hz. Well, this is awkward, nothing like this happened with the old board. I have like 10µF of ceramic capacitance on the output to make this not happen.
A bit of reading later and I found out that ceramic capacitors on output of low dropout linear regulators cause instability. To combat this, you can put resistors in series with your capacitors or add more load. I powered only one low power opamp from there. Adding 100Ω resistor to ground really fixed it. From the last revision I moved decoupling caps closer to the regulator so that lowered the ESR even more. In the datasheet of the regulator it says nothing about choosing output capacitor. The only place in mentions capacitors is: "Cout = 680 nF in series with 1Ω". So, everybody knows that you are supposed to put resistors in series with your ceramics?
I expect the problem to go away when adding all the other load to 5V load, but still an interesting problem.
Couple of years ago when XMega microcontrollers came out, me and couple of my friends thought that it would be fun to make a PC style board out of it. We had programmed AtMega series and knew that it could be fast enough for many of the PC peripherals. So I routed the MegaOS board. I had it manufactured and because none had time to program, it just sat in the box. Now I bought all the necessary components, soldered it together and tested a bit. It passed the smoke test and the programmer could program the chip. Fine enough for me – back to “no time & motivation” box.
- 5.5mm jack for regulated 5V DC input at maximum of 800mA. This is used for powering external peripherals and as well as the board. Low dropout voltage regulator makes 3.3V for AVR.
- ATxmega16A4 chip as its hearth. External 16MHz crystal that with internal PLL would run the chip at 32MHz – faster than most of early personal computers.
- SD card socket for storing your applications and data.
- 3.5mm jacks are connected to 6 of the 1 MSPS analog to digital converter channels for audio, simple oscilloscopes or data logging. Two of those channels can also work as 1 MSPS digital to analog converter.
- VGA port. Its control lines attached to I2C and color lines connected to 8 bit resistor ladder DAC.
- 2x PS/2 ports so you could control your programs with keyboard and mouse, using hardware UART.
- Standard ISP header for programming.
- For debugging – a extra UART header and a LED.