Welcome back to the Digilent blog!
Today we’re going to compare two different ways of increasing the functionality of a system board: Pmods and shields. Those of you have that have been following the Digilent Blog know that Pmods are Digilent’s series of peripheral modules with 6-12 pins that can easily be connected to appropriate pins on a system board to provide extra functionality and include audio amplifiers, GPS receivers, USB to UART interface, seven-segment displays, accelerometers, H-bridges with input feedback, analog-to-digital converters, and much more. For the rest of you who have been in this sector of the electronics industry, you know that shields are a type of board that you can plug directly on top of your microcontroller in a nice pin-to-pin fashion for expanded functionality. Although you might suspect which of these two items I prefer, we’ll check out the advantages of both of them.
Let’s start out with shields. There are many shields that are available for microcontrollers including some that provide WiFi, network, and motor driving capabilities. To get them connected to a microcontroller, all you need to do is to find a microcontroller with the same form factor and plug the shield directly onto the pin headers, allowing for a very compact modular package without any extra wires (unless you are attaching something to the shield, such as a motor). In principle, it is also possible to stack shields directly on top of each other since the electrical signals will pass through the pins on one shield to another.
In practice, this isn’t always feasible; a network shield with an RJ45 connector for Ethernet is physically too tall to conveniently have another shield connected on top of it. Additionally, some shields reroute the pin signals coming from the system board to a different pin entirely, potentially causing shields above it that are expecting a certain pin configuration to work incorrectly. Granted, it is possible to change the libraries associated with top shield so that it expects a signal to be coming from the correct location, but this defeats the purpose of making the stacking of shields convenient. Shield stacking can also be limited by the current that the microcontroller can provide — it’s simply not possible to have an overall current draw of 1500 mA if the voltage regulator on the microcontroller can only provide a maximum of 800 mA.
But naturally, these potential issues such as the pin assignments and the current limitation can easily be avoided, especially if you are only using one shield to begin with. There is only one potential issue with the shields then — their functionality. More specifically, too much functionality. An example of this is the Basic I/O Shield. While it has a lot of great features, it also effectively uses up many of the general purpose input/output pins, forcing them to be just inputs or just outputs. This inherently limits your options if you want to be able to use more outputs than you have available or, taking the motor shield as an example, only want to run two motors instead of the potential seven motors, but are unable to simply “ignore” that some of the pins are dedicated to driving the other motors. Don’t get me wrong; it’s easy to run out of GPIO pins even without a shield, but at least you were able to choose what function all of those pins served.
What about Pmods? Unlike shields, Pmods are not able to plug directly into the microcontroller headers, simply because the power and ground supplies on a system board are not directly next to the GPIO pins in the standard 100 mil spacing pattern, forcing the user to connect them to the board either through a cable or a specialized header. This makes the combination of Pmods and the system boards less compact than the shield and microcontroller combination, but with careful planning, it is possible to keep the real estate usage to a minimum. With each Pmod only designed to perform a single function, it is also far easier to purposefully choose the desired operation of each pin on the system board.
But like shields, the number of Pmods that you can support on a system board is limited by both the number of pins are available on the microcontroller in the first place as well as the amount of current that the system board can provide. Most Pmods do not require very much current, but some, such as the PmodWiFi, may need more current than the system board uses for itself. Additionally, since the Pmods are all separate components, they each need their own tie-in the the power and ground supply of the system board, which usually results in forcing the user to have a breadboard for power buses.
So which one is better? In all honesty, I like both of them. Shields require very little extra hardware since you plug them directly into the microcontroller allowing all of the shield components to receive power from the system board without any external wiring and are a great way to have a compact environment where multiple components of the same type are required, such as motors. On the other hand, it is a lot easier to implement a large variety of custom functionalities that shields are simply not able to encompass.
Tell us which you prefer!