The ts100 is a portable DC powered soldering iron released by minidso. The unit offers between 25-70W of output power at the tip depending on the input voltage, and has removable tips (Not compatible with other irons as far as I know).
Sadly the unit is crippled with their system for changing settings, while the unit supports nice options such as a customizable cutoff voltage; wake on motion, and automatic sleep times. They decided to make these options only available to be changed using the USB connection to the computer.
On the bright side, they have published all the source on both their forums and github, along with schematics for the unit.
(02/10/2016) minidso appear to have pulled the source code from github, however it is still available at this time on their forums.
The unit is driven on a stm32f103 series MCU with 64K of flash and 20K of ram. This is mounted on a small pcb along with the accelerometer. This board is held in place by the board to board interconnect. On the underside of this small daughter board are 4 pads for programming (VCC,GND,SWDIO,SWCLK).
The MCU (STM32F103) drives the OLED screen and the accelerometer via the internal I2C1 interface at 100Khz. The OLED appears to be a 16x96 pixel display. The accelerometer in the unit is a MMA8652FC from NXP.
A TMP36 is used for cold junction compensation for the thermocouple in the irons tip, this also allows for calibration of the thermocouple as required.
I began with their provided source code, which to be honest is a complete mess, it had software implementations of the I2C and systemTick timer base. It relied heavily on the compiler making optimizations to fix up some of the bad coding used. Such as having a if…else if…else if… structure in a for loop to run commands sequentially ???
The first stage was setting up their code into the System Workbench software from openstm32.org, which once compiling fine worked almost exactly the same as the original… Except for the boot-up logos I had to cut to get it to fit onto the chip…
After reading through the provided code for the system design I began the process of a complete re-write from scratch. This kept a similar system for the operating mode, where one function manages changing the modes based on the buttons pressed, and the other purely handles the GUI for displaying the screen data at that time.
This separation of work allows for easy configuration of the system for both testing and also keeps the watchdog only being reset in one location only.
The output drive for the iron tip is run through a capacitor, then to a NPN transistor that switches the P MOSFET’s on/off to allow power to run through to the heating element directly from the DC IN. This is of note as it means that should the output be left HIGH or LOW the iron tip will be off, preventing any software errors from causing damage. The system uses Timer3 IRQ to toggle the pin state in software while ever the iron tip should be on. This is achieved by a decrementing counter that is set via the PID controller for the tip temperature.
The new implementation
All the source code, and release builds ready made are available over on my github account.
The new implementation does not use the both-button hold to navigate the menu anymore. Instead I have replaced this with a simpler menu system.
This can be seen in the attached picture.