# SIM900 Power On/Off Circuit

I'm designing a board on which I'll connect a microcontroller with the SIM900 module. The recommended circuit for powering on the module (from the manufacturer datasheet) is given below.

The module is powered on/down by setting the power key to low logical level. I guess that transistor should saturate in order to do that. But, last time I used transistors was long ago and now this circuit looks completely strange to me. So I have a few questions.

1. Will the transistor saturate if my microcontroller has 3.3v logic level? My guess is that it won't since 3.3v is higher than 3v for 0.3v, not 0.6v. But I'm not sure about that at all.

2. For what is the second resistor (47k) used? How are the resistor values calculated? I could probably figure it out for resistor 1, but would like to hear opinion of others. I still can't remember all of the equations I learned at high school.

EDIT: Well, here is a part of my schematic.

On the right you can see that that the project will be battery powered. A typical li-po battery voltage is 3.7 v. On the board, there will be other devices (the screen) that will require 3.3v logic level. So I decided to wire the battery to a 3.3v voltage regulator, so it can power the mcu on the left. The SIM900 module is powered directly from the battery without any voltage regulators, as SIM900 can take up to 2A of current. The MCP73831T is there for battery charging, and the ch340g for serial communication with a computer. Hope this clarifies things a bit, and sorry for me not mentioning it earlier.

• OK, couple of things. First, a lithium-ion battery is nominally 3.7V, but it can drop as low as 3V. Since you have 3.3V devices on your board, and a 3.3V LDO, as a voltage of 3.3V + the dropout voltage of the regulator, it will stop regulating and you'll start getting Vin - (some diode voltage) out. So when your battery hits 3.3V, your 3V3 rail may actually be 3.1V or so. If this is a problem, you need to find a buck-boost module such that it can deliver a constant 3.3V regardless of Vin. Commented Dec 31, 2015 at 20:08
• I plan to use a low dropout voltage regulator, check the battery voltage every x seconds by software, and if it reaches 3.4v, power down the sim900 module. Battery voltage can be checked by sending an AT command to the SIM900. Commented Jan 1, 2016 at 17:36

The choice of external transistor is up to you -- it's added here (as in, on the datasheet) in case you are driving this module with some other I/O voltage besides 3.3V.

(I've edited this portion of the answer now that we know more about the SIM900 power-level).

1. For a BJT (as they've drawn), you will still be fine as your goal is to supply current to the base of the transistor for it to turn-on; it's a current-based device. I've suggested a MOSFET based solution below as I think that may be easier to understand. You will be fine with a 3.3V output; across 4.7K as they've drawn, you can source ~700uA to the base of the transistor, which should be more than enough. You could drop to a 1K resistor here with ease.

2. In this case, I believe that 47K is simply there to bias the base of the transistor to an inactive state in the absence of an active signal from the MCU. This is protecting against a floating base that could spuriously enable your module.

If it makes it easier for you to understand, you could easily replace that transistor with a BSS138 small-signal MOSFET and think of things purely in the voltage domain. For example, if you have a 2.5V MCU signal, when you drive that high, you will turn on the MOSFET and pull PWRKEY_B to '0', turning on the module. Here is a BSS138 implmentation:

simulate this circuit – Schematic created using CircuitLab

Once 'MCU_SIM900_ENABLE' is at least 1.5V (from datasheet margin), M1 will turn on and bring PWRKEY_B low, turning on the module. If you implement this, you can swap your power enable signal from any I/O voltage from 1.8V up through 5V.

R1 simply limits the amount of current that can flow out of the MCU I/O pin -- it's not strictly necessary, but it's good practice. If I placed a screwdriver from the right-side of R1 to GND, a maximum of 33mA will flow which is still quite a bit, but within spec for newer MCUs. Making R1 1k would only allow 3.3mA to flow, which is safe for almost any MCU.

R2 serves the same purpose as the 47k resistor from the datasheet -- if your MCU is in reset or otherwise floating that I/O pin, it biases M1 off and prevents the module from turning on. A net cost of 330uA is required to turn on the module now -- a trivial amount.

• I edited the question so I can clarify how is the circuit powered. Commented Dec 31, 2015 at 18:15
• Can you clarify the power rails on your schematic? I see +5V, 3V3, V+ and VCC. Which connector is the SIM900 interface, the CH340G? In the datasheet, PWRKEY is pulled up to VDD_EXT, which if you leave unconnected, is around 3V or so. So the solution with the BSS138 will work -- the SIM900 will run off your battery, but not fully turn on all logic until your micro actively triggers the BSS138 to pull PWRKEY low. Please see my warning comment under your question though re: 3.3V behavior. Commented Dec 31, 2015 at 20:12
• @ Krunal Desai VCC is the output voltage of one voltage regulator, connected to the microcontroller. +5v is from the usb port (on the left). +5v is connected to other voltage regulator, which ones output (3v3) is connected to the ch340 chip. I use different voltage regulators, as the ch340g chip should not be turned on all of the time, while the microcnotroller should. The v+ is the battery power, connected to the sim900. Commented Jan 1, 2016 at 17:33
• OK -- the transistor based solution is ideal in this case as it separates your MCU from the rails relating to the SIM900. I think you are fine implementing what I have drawn. As a general comment on your schematic though, I don't see many decoupling caps, and for the ones on there, don't see any values. Commented Jan 1, 2016 at 18:47
• Thank you anyway. My schrmatics is still work in progress, and I generaly like to draw the schematics first, and put values later. Commented Jan 2, 2016 at 0:11