A devboard for SAM&WING AI08 8-Channel Capacitive Touch Controller IC
Back in September 2022, I found a category on LCSC about capacitive touch controllers. The touch controller chips come in all sizes (single input to many) and types (I2C, parallel output, etc.) and is a useful chip if you need to add touch support for your projects, so I want to try out one of them, the SAM&WING AI08. (From their website the company name is actually Xiamen Xinwang Electronic Technology. LCSC can be weird sometimes.)
Note: The PCB for this project was sponsored by Aisler using the Beautiful Boards Budget specifications. You may order this board for yourself at this link.
First Revision (Sep 2022)
The chip on standby (no touch)
The chip when a touch event is detected (on channel 5)
The CircuitThe AI08 is an 8-channel capacitive touch controller. (Not to be confused with the AI08B.) This chip requires just a few additional passive components: C1 capacitor, CSEL capacitor, Vcc decoupling capacitor, and series resistors on each input channel.
- C1 capacitor is an "internal balancing capacitor" which is 4.7nF.
- CSEL capacitor selects the input sensitivity. Leaving this floating set the max sensitivity. You can add up to 100pF to lower the sensitivity.
- 1K Ohms Series resistors are there from the datasheet. Not all chips required them but this one does.
- The datasheet also suggests adding a 20 Ohms resistor at the Vcc pin, I don't know why but it is not required for it to work.
The AI08 circuit on my devboard
Touch Sensor DesignFor this part I referred to the Microchip Capacitive Touch Sensor Design Application Note AN2934 and went with the simple 12mm rounded rectangle button sensor design, which is inside the range recommended by the AI08 datasheet (3*3mm to 30*30mm). The pitch between each sensor is 6mm, as suggested in the Microchip appnote for 12mm sensor.
The button sensor I made for the board
Output and Additional Features
The AI08 outputs a 4-bit active-high BCD signal. It outputs 1111 when no touch is detected, and outputs channel number minus 1 when touch is detected. The chip works like a priority encoder. When multiple touch events were detected, it will only output the one with highest priority. The highest priority is channel 1, and lowest is 8.
This chip also features a sleep mode and auto-calibration mode. If no touch event was detected for 80 seconds it will enter sleep mode. The chip will start the auto-calibration process when exiting the sleep mode. Auto-calibration takes 48 seconds but does not affect touch detection. This is very important because without initial calibration the chip will not work correctly. When first powered up (or if the board had been moved to a new location), let the board sit for at least a minute before touching the sensors. The calibration seems to persist between power cycles so that's useful. The datasheet said the chip will output 1011 during calibration but I haven't observed that behavior on my board.
AI08 Function Table (Source: Datasheet)
To make things more useful, I decided to add some cheap logic chips to the board to decode the output further. Check out the KiCad schematic for more info on these.
- U5 is a 74HC138 decoder. The AI08 outputs conveniently allows us to just use this simple chip to decode the BCD output into parallel outputs for each channel. 74HC138 can be replaced by 74HC238 if you want an active-high output. You will need to adjust JP1 jumper and LED soldering direction too.
- U3 is a 74HC11 triple 3-input AND gates and U4 is a 74AHC1G04 NOT gate. These two chips decode output 1011 and 1111 to create a "no detection" and "calibration" flags. The MSB bit of the BCD output is used to disable the 74HC138 decoder while either of the flags are active.
Points for ImprovementThis board turns out pretty good. There are no design bug that I am aware of. However there are still some points for improvement that I might do a revision of them later.
- The board uses 78L05 (either TO-92 or SOT-89) as an LDO. Turns out the 78xx LDO has a different pinout than most of the rest, such as XC6206 or MCP1700 series. I want to change this so more flexible LDO choice is possible.
- I might do another version with more complex sensor designs. I don't know if this would work out with priority encoder output AI08 has though. This might be spun off as a new project with different chip entirely.