Driving Small DC Motors With Altium Designer
In this article, we’re going to run through the actual implementation of a driver IC from schematic creation to PCB layout. You will find this project on GitHub, released under an open-source license if you simply want to grab it to copy and paste into your own design.
I have two small, high-speed motors that I want to drive, which will draw about 1 amp each under load, and I’ll need to run off a 30 volt power source in an industrial machine. The original electronics burned out and are now obsolete, so a new control board needs to be developed. For now, I’m just going to discuss the motor driver in this project.
Given the requirements and the limited board area I’ll have to work with on the final circuit board, I have chosen to use the Allegro A4954 for its 2 amp / 40 volt ratings and TSSOP-16 package with a thermal pad. It’s also very affordable, almost the same price as a single motor driver, such as the Allegro A4953, and other low-cost single motor drivers you might use if you only had a single motor to drive.
The major advantage of using the single IC driver for our application is that it reduces the number of additional components required to complete the schematic. The only additional components we require are a few resistors, capacitors, and a 3.3v regulator. I would also like to add a diode and capacitor across each motor terminal, however, to reduce transient spikes that could damage the H-Bridge or cause electromagnetic compatibility certification issues.
Typically, I would work with a database library, but for the purposes of this article, that wouldn’t create a very portable solution for you to work from. Therefore, I’ve added the relevant pcblib and schlib files to the project, and I’ve included the footprints to the schematic symbols to get started. This, however, means we’re placing generic passives instead of library ones, which is something I’m not a fan of. Placing generic parts leads to mistakes, so this is a great place to use Concord Pro in order to help manage the library, but without adding all my readers to my Concord Pro team, none of them would be able to make use of the library I would create. Therefore, to place parts I know are sourceable, I’m going to search for each required component in the Manufacturer Part Search panel, and then Add Supplier Link and Parameters To Part on each schematic symbol. This will also help when generating a bill of materials as well as when ordering components from a supplier.
Altium allows you to add supplier links, making things easier later on.
I find that managing components as you add them is critical to ensuring each part is a valid, orderable component. It’s much easier to ensure each part is valid as you place them than it is to find at the end of a design phase that a component can’t be sourced and that the design needs to be reworked to make way for a substitute component.
We start by adding all our valid sourceable components and generic passives to the schematic.
I’m starting off my design with the connectors, current sense resistor, TVS diode, and main IC specified.
I also have the generic capacitor, resistor, and potentiometer symbols added, which I’ll copy and paste as needed during the design process, then specify once they are in the correct place in the schematic. When rapidly laying out a schematic with generic parts on simple designs, I find this faster than having to go back to the library panel each time to collect another copy of the same component. You can shift-drag the symbol to clone it, which is the quickest way I have found to place another generic component of the same footprint.
We then connect all the parts that we laid out to make a complete schematic.
The schematic fully filled out is fairly simple—as it should be with a fully integrated driver IC. I have some 33ohm resistors to protect the microcontroller from the inputs to the driver IC, which, in case anything terrible happens to the driver, should limit the current flowing to the microcontroller to tolerable levels. I have added a 100nF capacitor and a TVS diode to the motor outputs, which will help mitigate ESD and transient flyback voltages from the motor, as mentioned earlier. I’ve also added a resistive voltage divider with a variable resistor for the top leg to allow the motor current to be set as required. The voltage divider is powered by a simple linear voltage regulator, which I typically wouldn’t want to use with a 27v drop. In this case however, the current draw will be sufficiently low that the regulator will not overheat.
The Allegro A4954 IC and all the passives connected to it before annotation.
Finally, once the schematic is fully laid out, I annotated the schematic to complete the designator numbers. I personally prefer to do this at the end of schematic capture, as I find it typically gives me designator numbers that are more clustered together than if I had constantly annotated right after adding new components. This can give us an idea of where on the schematic a component might be based on its designator.
Note how all the parts clustered around the driver get annotated with close designator numbers.
Because I assigned real parts to each component in the schematic, I now have an ActiveBOM in the project which can be used for both evaluating the cost of the schematic and validating that all components are available in volume production. The ActiveBOM makes it very easy to quickly evaluate cost per board at different production quantities. At the time of writing, my component cost per board for a single board would be 7.99 USD, dropping to just 3.42 USD per board at 1000 boards. From a budgetary perspective, this can allow me to determine whether I need to perhaps look at alternative options for the schematic to bring the price down at my expected production volume. This can greatly enhance my productivity, as I am able to make this determination before I’ve spent any time routing a PCB.
As with any PCB project, our first task is getting the components into the PCB with an Engineering Change Order (ECO).
PCB layout after all the components have been added.
There are a couple of things I like to do after transferring the schematic data to the PCB, firstly I put all the designators onto a mechanical layer I called Designators so they don’t take up any PCB real estate. In the PCB Filter panel, I use the filter:
IsDesignator AND OnLayer('Top Overlay')
This selects all my designators and I’m able to quickly edit them in the properties window to change the layer, and also make them true type and Autoposition them to the centre of the component which makes for nicer PCB drawings later, if required.
Next, I can turn on Cross Select Mode from the Tools menu (or Shift-Ctrl-X) to select logical groups of components in the schematic. Even with a small, simple schematic like this, it saves me time to group components on the circuit board.
By selecting the driver IC and it’s supporting components in the schematic, then switching back to the PCB, I have picked out those components from the jumble of newly added parts.
Selecting components from the schematic saves time over trying to find them and select them one by one in the PCB layout.
I can then use the Tools -> Component Placement -> Arrange Within Rectangle (also available on the old Utilities toolbar under the Alignment Tools icon) and draw a rectangle off the board to group these parts together.
This gives me nice little blocks of components to layout by themselves in the most optimal way possible. With larger, more complex projects, I find that by laying out each logical block by itself, I’m then able to bring them all to the circuit board at once to find an optimal rotation and position for that block, and also determine what sacrifices may need to be made in the component placement to optimise board real estate usage. For me, this saves a lot of time and typically gives me a better layout than just building out a component layout from one component.
Component placement features allow the components to be arranged inside clusters that represent the logical blocks in the schematic.
Within a few minutes, this turns into a board that is relatively compact and should be routable.
Final component placement is routable, logically organized, and compact.
A quick check of the 3D view and the board looks like it will also be easy to hand assemble, which is a great check to make for low volume parts.
3D view of the board before the tracks were added.
The routing of this board is quite simple, as it’s such a simple schematic! The only point to note is that the motor driver datasheet suggests providing a ground path from the current sense resistors directly back to the IC ground, with polygon cutouts to make this star ground. I added full board ground pours both top and bottom to start things off, and then used the polygon cutout tool (under the Place menu) to add the suggested cutouts.
The board after it has been routed, ground pours were added, and polygon cutouts were made.
Electrically, this board now looks complete, however, it isn’t very visually appealing in the 3D view.
3D view of the board after the tracks were added still feels a little lacking.
I like my boards to look sharp, even if they are only for personal use. As an engineer, I see all circuit boards as a work of art, they’ve had as much thought and care put into them as any masterpiece in a museum, so they should look the part!
With a few regions on the Top Overlay layer and some inverted text, I have added some style and labels to make using the board a little easier.
Features on the top overlay make the board easier to use and better looking.
The bottom of the board gets a similar treatment, with a little ESD logo, a barcode to identify the board model/version/revision, and a couple of areas the quality checker can add their initials, plus a couple of boxes to write the date of manufacture and installation.
The bottom of the board.
This quickly takes the board from simple and plain, to looking sharper, more complete and more functional.
If you’re looking to implement a single IC DC motor driver, this project could be a good starting point for you. You can download the project on GitHub and use it freely as you wish. The schematic is based off a production-proven schematic and layout, however, you should still be sure to confirm the design meets your requirements and the schematic/pins are correct.
Next time, I’ll be looking at this board in PDN Analyser to determine if the traces are suitably sized for the current demands of the H-Bridge IC and the two motors. If you haven’t used PDN Analyser before, this will be an introductory project that you can follow along with to learn how to setup the tool for analyzing your circuit board.