Monday 3 August 2015

switches - Control 5 V load with transistor 3.3 V - Raspberry Pi


I'm currently having this project where I put a Raspberry Pi, batteries and a touch screen inside a book that can fit my pocket. This screen is constantly on, and I want to be able to turn it on and off with a transistor.


I'll be controlling the 5 V instead of ground because it is also getting ground over HDMI. The base will have 3.3 V, and the output should be 5 V.


I've tried many things with both NPN and PNP.


I'm running a Python script that outputs 0.02 V as LOW and 3.3 V as HIGH.


I'm ending up with the screen being either on/blinking, grey/grey, grey/off or off/off. It stays totally off with 5 V with PNP transistor.


This is curcuit that has almost worked (grey/off):



PNP - 2N3906


When GPIO is HIGH (3.33 V):



  • Monitor: Grey

  • Base: 4.32 V

  • Collector: 2.21 V

  • Emitter: 5 V


When GPIO is LOW (0.02 V)




  • Monitor: off (no back-light)

  • Base: 4.38 V

  • Collector: 1.6 V

  • Emitter: 5 V


Current state picture taken (HIGH)


I tried with two 2N3906 transistors to make sure it wasn't broken.


I'm kind of confused over this circuit and it seems that my knowledge doesn't match.


What can I do to make this work? What am I missing?



Answer




enter image description here


Figure 1. In this example Vss is greater than the 5 V supply of the micro-controller. The protection diodes keep the transistor always on.


Figure 1 shows the internal schematic of a 5 V powered GPIO in "output" mode. A pair of transistor switches pulls the output high or low. (Only one can be turned on at a time.) Note the internal protection diodes.


The protection diodes on most logic chips creates a sneak-path to positive supply. This will keep the PNP transistor permanently turned on and may damage the chip.


In your case your micro is powered from +3.3 V and Vss is +5 V. The result is the same, as you have discovered.


enter image description here


Figure 2. To drive a high-side transistor from a GPIO pin we need a level translator. An NPN transistor does the job nicely.


Note that Q2 inverts the logic so you may need to modify your code to suit.


Links:


The images are mine and more on the topic can be found in the article GPIO high-side driver fail.



No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...