Voltage-level-shifter voor Arduino projecten
Arduino kan een krachtig en veelzijdig hulpmiddel zijn in amateurradiotoepassingen (hamradio). Het open-source hardware- en softwareplatform maakt een breed scala aan op maat gemaakte projecten mogelijk. Ook zijn er veel extra hardware opties beschikbaar die te gebruiken zijn in zelf te ontwikkelen projecten. Je kunt denken aan temperatuur sensoren, gyroscopen, bewegingsdetectoren, temperatuur, Maar ook SI5351 VCO breakout printjes. Echter is dit niet altijd direct aan elkaar te koppelen en heb je een aanpassing nodig van bijvoorbeeld 3,3V naar 5V hardware. Hiervoor gebruik je een Voltage-level-shifter.
Waarom een voltage-level-shifter
Ideaal om snel met Arduino aan de gang te gaan zijn toch wel de grote beschikbaarheid aan producten die in combinatie met de Arduino gebruikt kunnen worden. Vaak maakt een dergelijk breakout printje gebruik van I2C. En zoals in het voorbeeld het SI5351 board dat op 3,3V werkt en een Arduino Uno op 5V is dit niet direct op elkaar aan te sluiten. Daarvoor komt de Voltage-level-shifter om de hoek kijken. Vaak is er al een Voltage-level-shifter op het breakout printje aangebracht zoals in het voorbeeld hierboven. Waar je duidelijk de 2 mosfets ziet zitten naast de SI5351.
De Voltage-level-shifter
Natuurlijk zijn voltage-level translators zoals deze ook wel genoemd wordt gewoon beschikbaar. Bijvoorbeeld de TXS101 van Texas Instruments. Maar bij het gebruik van deze chips zit er een addertje onder het gras. In de omschrijving geeft de fabrikant vaak aan wat de maximum data rates zijn. Echter dit is vaak alleen de push-pull configuratie. Maar I2C gebruikt open-drain en als je dit opzoekt in de datasheet zie je dan een veel lagere maximum data rate. In het voorbeeld van de TXS0101 is dit 24 Mbps in push-pull en 2 Mbps in open-drain. Dus wil je gebruik maken van een dergelijk ic dan wel even controleren of dit voor jouw schakeling toepasbaar is.
Toepassing met MOSFET
Een veelgebruikte toepassing voor de voltage-level-shifter is met MOSFETS en vaak zie je daar de BSS138 met smd code J1. Misschien nog even vermelden dat deze schakeling 2 kanten op werkt. Voor de uitleg gaan we beginnen aan de linkerkant de LV (lage spannings kant – 3,3V). De schakeling maakt gebruik van 2 voedingsspanningen. LV in dit geval 3,3V en HV 5V. Hierdoor is LV1 omhoog getrokken naar 3,3V en HV1 is op het niveau van 5V. De Vgs van Q1 is hierdoor 0V waardoor de mosfet niet in geleiding is. Dus een 1 van SDA of SCL is aan beide kanten hoog. Is de SCL of SDA laag (0V) aan LV1 dan ontstaat er een Vgs van 3,3V waardoor Q1 gaat geleiden. Hierdoor komt HV1 op het niveau van LV1 en gaat HV1 naar een 0.
Nu vanaf de 5V (HV1) kant gerekend. Ook hier is het zo dat indien HV1 hoog is de MOSFET niet gaat geleiden en dus LV1 ook hoog blijft. Maar gaat de HV1 naar laag (0V) dan gaat de parasitaire diode in de MOSFET geleiden (3,3V anode, 0V kathode). Hierdoor gaat LV1 omlaag tot het niveau van 0V plus de diode overgang van ongeveer 0,7V. Dus de Vgs van Q1 komt op het niveau van 3,3 – 0,7 = 2,6V. In het geval van de BSS138 die al bij een lage Vgs gaat geleiden gaat de LV1 naar 0V (laag).
Gebruik I2C
Om in dit artikel uitgebreid in te gaan op de I2C poort, ook wel Two Wire (TWI), en het protocol gaat in dit artikel een beetje ver. Maar let bij gebruik van dit soort aanpassing wel even op dat je dit niet ongelimiteerd kunt doen. Zorg dat de pull-up weerstand die nodig is voor de I2C niet te laag wordt.
Meer informatie
- Arduino officiële website
- SI5351 breakout print
- SMD codebook