Driving Small DC Motors With Altium

November 8, 2019 Mark Harris

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.

Part Selection

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.

Schematic Design

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 Designer screenshot showing right click menu on the CSR1206FKR250 with the add supplier link and parameters to part option highlighted.

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.

 

Screenshot of the starting schematic with just the components laid out showing the Allegro A4954 IC along with some passives.

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.

Screenshot of the schematic after it has been connected showing both IC, motor connectors, and passives connected.

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.

Screenshot of the Allegro A4954 IC and all the passives connected to it before annotation.

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.

Screenshot of the Allegro A4954 IC and all the passives connected to it after annotation.

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.

PCB Routing

As with any PCB project, our first task is getting the components into the PCB with an Engineering Change Order (ECO).

 

PCB layout of the motor driver showing surface mounted components with no traces joining them.

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.

Cross Select Mode Shift+Ctrl+X

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.

Screenshot of PCB layout of a motor driver in Altium Designer showing certain components selected.

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.

Right click menu -> Component Placement -> Arrange Within Rectangle

 

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.

 

Screenshot of PCB layout of a motor driver in Altium Designer showing various components arranged inside clusters that represent the logical blocks in the schematic.

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.

 Screenshot of PCB layout of a motor driver in Altium Designer showing various components arranged  to be routable, logically organized, and compact.

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.

 

Altium Designer 3D view of the motor driver board before the tracks were added.

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.

Altium Designer screenshot of the motor driver board after it has been routed, ground pours were added, and polygon cutouts were made, and showing top layer in red and bottom layer in blue.

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.

Altium Designer 3D view of the motor driver board after the tracks were added.

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.

Altium Designer 3D view of the motor driver board after the tracks were added and the top overlay silk was printed.

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.

Altium Designer 3D view of the bottom motor driver board  featuring the bottom overlay silk showing various dates and a barcode.

The bottom of the board.
 

 

This quickly takes the board from simple and plain, to looking sharper, more complete and more functional.

Next Steps

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.

Would you like to find out more about how Altium can help you with your next PCB design? Talk to an expert at Altium or find out more about Altium’s PDN analyzer.

 

 

 

 

About the Author

Mark Harris

Mark Harris is an engineer's engineer, with over 12 years of diverse experience within the electronics industry, varying from aerospace and defense contracts to small product startups, hobbies and everything in between. Before moving to the United Kingdom, Mark was employed by one of the largest research organizations in Canada; every day brought a different project or challenge involving electronics, mechanics, and software. He also publishes the most extensive open source database library of components for Altium Designer called the Celestial Database Library. Mark has an affinity for open-source hardware and software and the innovative problem-solving required for the day-to-day challenges such projects offer. Electronics are passion; watching a product go from an idea to reality and start interacting with the world is a never-ending source of enjoyment.

More Content by Mark Harris
Previous Article
OnTrack Newsletter: Altium Designer 20 Sneak Peek, Impedance Measurement, Food for Thought - November 2019
OnTrack Newsletter: Altium Designer 20 Sneak Peek, Impedance Measurement, Food for Thought - November 2019

In this month's newsletter we bring you Altium Designer 20 Sneak Peek, Impedance Measurement and Food for T...

Next Article
How to Add an RGB Matrix Display to Your Board in Geppetto
How to Add an RGB Matrix Display to Your Board in Geppetto

Here’s how the modular design tools in Geppetto can help with adding RGB matrix display to your next system.