NXP LPC1500 Motion Control Kit - Review

Table of contents

RoadTest: NXP LPC1500 Motion Control Kit

Author: migration.user

Creation date:

Evaluation Type: Independent Products

Did you receive all parts the manufacturer stated would be included in the package?: True

What other parts do you consider comparable to this product?: Texas Instruments: Instaspin

What were the biggest problems encountered?: Disorganised and cryptic documentation, demo software very limited and not structured as per example projects.

Detailed Review:

Hello & thank you for accepting my Road Test application. This is my first Element14 review, and my first hands-on encounter with ARM based MCU’s.


Review of: OM13068 LPC1549 LPCXpresso Motor Control Kit (BLDC)

Why I selected the NXP OM13068: I have an application where I wish to co-ordinate the motion of up to 6 axes, each axis is driven by a PMSM with encoder, and I require motion control elements that may be synchronised, allowing precise 3d positioning.



NXP market the "OM13068 LPC1549 LPCXpresso Motor Control Kit (BLDC)" as a motor control prototyping platform, on the surface this appeared to me as a potential candidate for the basis of my application, with the OM13056 LPCXpresso1549 as the core, in addition working motor control software projects for BLDC and PMSM motors are available for the Motor Control kit, this made the kit seem very attractive.

The best place to start is by reviewing the NXP introduction webpages.


1.      LPCXpresso boards.

2.      'LPC1500 Motor Control Solutions - Motion Control Simplified!'


NXP have created an ecosystem termed ‘LPCXpresso’ that comprises target MCU boards and the LPCOpen software development platform. LPCOpen is an Eclipse based IDE, with integrated debug support for a number of target MCU boards. LPCXpresso target boards are supported by Kiel and IAR development platforms however this review will only consider the LPCOpen platform.


The LPCXpresso LPC1549 (aka OM13056) provided as the MCU element of the Motor Control kit hosts an 72MHz ARM Cortex-M3 MCU with 256kB flash and 36kb SRAM plus an impressive set of on chip peripherals, the PCB includes support for SWD & JTAG debug.  LPCOpen is available in both 'free' and Pro versions, the LPC1549 MCU falls inside the scope of the free platform.


‘LPCOpen 2.xx’ is the second major release (starting August 2013) of this platform, and apparently many changes have been made compared to the earlier version, the LPCOpen 1.xx release history begins sometime before March 2013, so product evolution is reasonably quick, Note also that LPCOpen 2.xx includes the ‘Red State Machine file generator’, (from within the IDE follow these steps: File > New > Other > (Select a Wizard) > Red State > Red State Machine file generator’)


Each LPCXpresso target board within LPCOpen 2.xx has an associated software package that comprises Board & Chip libraries, constituting an API plus additional working examples, supplied to demonstrate the capabilities of the target.


What's in the Box.

    • LPCXpresso Motor Control Board rev. B
    • LPCXpresso Evaluation Board LPC1549 (OM13056)
    • Micro USB type B to USB type A
    • Mini USB type B to USB type A
    • 24v 2.5A universal power brick
    • BLDC motor type 42BLF01.


The information below is derived from scattered sources; unfortunately I could find no single NXP webpage that gathered all data and software resources for this product.

If you are new to ARM and Eclipse, beware there is much to learn, this platform is a significant step in complexity to say the Arduino IDE however the capabilities and rich peripheral set are awesome.


Documentation: Hardware

The OM13068 essentially comprises two parts

1.     OM13056 the LPCXpresso1549 daughter board: (Farnell order code = 2399914) -  this is a LPC1549 ARM Cortex-M3 based microcontroller PCB at the heart of the motor control kit, it plugs into the prototyping platform (pcb)

2.     LPCXpresso Motor Control Board rev. B:  - (prototyping platform)


It appears that the 'Motor Control Board rev B' is common to both OM13067 (BLAC) & OM13068 (BLDC) kits, with only the supplied motor type changed.

In addition both PCB’s in the kit are designed by Embedded Artists; you can search for additional relevant information on their website.


Documentation: Software

An introduction to LPCOpen development environment can be found here: LPCXpresso Platform I found the following useful links:

Misc. Links/Info.


Software Installation: (Win7 Pro x64)

First make sure you have a free NXP account so that you can activate your LPCXpresso IDE.

Follow the quick start guide: LPCOpen v2.xx LPCXpresso quickstart guide for all platforms, I installed in the root of my local HDD as recommended.

Installation proceeded and then stopped with the following error.



On the assumption that the driver would install successfully when I connected a target board, I OK'd the error and installation continued (this proved correct).


This is a required step, so allow access.

Additionally the following window appears – this is where your free NXP account is required to activate the IDE, it’s straightforward.


Complete the installation & register your product.

Getting started:

Using the getting started guide: download the example software, chip and board libraries zip archive: currently v2.08c and documentation.  (Link:  LPCOpen software development platform (USB driver, documentation, debugger, example/libraries).

Since this is a review of the Motor Control Kit, I downloaded the AN11523: BLDC motor control using the LPC15xx SCTimer/PWM (application & app note).

This is now where the challenges began; there are two micro USB sockets on the LPCXpresso1549 board & two mini USB sockets on the Motor control board, which one do you connect your PCB to enable debugging and code download? Use:

LPCXpresso1549:          J5           (micro USB) to connect the target to your development environment.

Motor Control Board:    J6           (mini USB) to connect a serial console session for UART0 debug output (115200 board 8/n/1 XON/XOFF)


This set the tone for much of my exploration of the development environment, documentation, and hardware.


Firstly the PCB quality of both the PCB’s is very good, the layout and electronics design are excellent, the only thing lacking is a solid low impedance ‘True Ground’ terminal (the ground terminals on the plug-in connectors are not good enough). I encountered significant noise pickup when powering an optical encoder from the Motor board, grounding the motor frame to the JP15 test point solved this problem, however I suggest replacing or duplicating this ground point with a large through-hole plated pad or screw terminal would be an improvement.


I coupled an optical encoder to the supplied motor, fully intending to develop a simplistic motion control idea however a number of issues conspired to prevent further progress in this area.


The motor board user manual, which seems to be available from Embedded Artists and not the NXP www.lpcware.com site is useful, but again lacks some information, e.g. a good description of the function of PCB jumpers, a set of tables describing each electrical terminal on the board (this should be right at the start of the manual) AND how to use the UART0 debug feature employed while “semi-hosting” – You need to connect a USB serial terminal to J6 on the Motor control board, fortunately the schematics are provided, so you can work all this out – if you have the patience and time.


Before continuing, I must point out that the LPCXpresso1549 and motor control boards are impressive, the ARM core and peripheral capabilities in my opinion are excellent.


It is my view that when a manufacture develops and markets a development and prototyping solution, the intention is to primarily bring in new users and then to encourage existing users to adopt, one hope’s by providing tools (hardware, software & documentation) demonstrating how to shorten the product development cycle, additionally the manufacturer wants to gain market share (typically at the expense of a competitor), in this case there are serious competitors for this product. I began with this expectation.


I strongly recommend that you look at the YouTube video “rapid embedded development with lpcxpresso” this is an excellent quick introduction to the IDE and its capabilities.


I began my exploration by importing the examples, chip and board libraries as outlined in the getting started guide, this was no problem, and everything I tried worked ‘out of the box’, the LPC-Link 2 feature had a few minor hiccups where it failed to connect to the target, I latter determined that the most reliable action sequence was to always terminate the current debug session before attempting a code download; However when attempting to relate the example code with the IDE help documentation, there was no LPC15xx specific help, rather a link to further online documentation – where was the API information?


The trick here is to open the HTML documentation you hopefully downloaded from the link above (LPCOpen software development platform (USB driver, documentation, debugger, example/libraries)). I anticipated that I would be able to import this documentation into the Help system, but could find no way to do this in the time I had available, instead I simply loaded it through my web browser. On my Win7 x64 PC, the windows help file (chm) would not open.


The documentation of the API can be described as cryptic, for an ARM/LPC beginner like myself it was not of great utility, so my frustration level increased, but I pushed on. The inline code of the chip and board API’s is somewhat helpful when read in conjunction with the ‘user manual’ (In my experience this should be called the datasheet), but occasionally the context sensitive help refers to an earlier function declaration.


I hooked up the supplied motor to the board & imported the uni-directional version of BLDC motor project, quickly reviewed the source code to get an idea of how things were setup, then compiled the project and started a debug session. Using information from the Motor Control Board clarified the joystick directions. My first and second attempts failed to get the motor moving! So I used an oscilloscope to probe a single motor phase, and could clearly see the expected drive voltages changing by command of the joystick, I checked all connections, all OK! I powered down and tried turning the motor shaft by hand it was difficult to turn however after a few revolutions it became appreciably easier to turn. I again powered on the board and tried again, now the motor ran as expected under command from the joystick.


Connecting a logic analyser to the motor control board J8 pin header allowed the drive waveforms to the power stage to be visualised.


Full Commutation cycle(s) – Hall sensor & phase drive voltages


Low Speed


High Speed


Phase current waveform. (Phase A)


I carried out a few quick measurements at a fixed PWM of 64% 21.1 kHz and observed the following at different points of the waveform:

    • Hall A sensor period = 12.44ms duty cycle 53.2%
    • Hall A sensor period = 12.81ms duty cycle 50.4%
    • Hall A sensor period = 12.53ms duty cycle 51.8%


This translates to some variation in motor speed for a given PWM duty cycle and frequency; there are many possible explanations, some being:


    • Variations in motor load due to mechanical eccentricity in the motor (encoder is decoupled)
    • Asymmetry in the motor phase windings
    • Noise in Hall sensor and circuitry
    • Software not as expected


In general the probed signals are as expected, and in principle many characteristics of your motor & control system behaviour can be investigated.


I now investigated the code of the BLDC motor control project; LPCOpen 2.xx has introduced a structured model for board and chip API’s, however as far as I am able to determine the BLDC motor control project does not conform to the new paradigm, which is disappointing. The motor control project is fairly basic and does not comprise a collection of motor control related libraries.


I discovered that creating and subsequently importing a library component I wrote using the LPCOpen 2.xx platform into the motor control project to be inordinately time consuming and clumsy, some new thinking needs to be applied to this process.


As a newcomer to the ARM MCU/NXP peripheral set wishing to quickly prototype a motor control scheme I find the lack of a cohesive library of motor control function blocks a disadvantage. It is my view that NXP need to consider what the completion is doing in this area and decide if they wish to compete. The motor control board and LPC1549 look like very good candidates, but in my view the available software is not yet suitable.


Users with more experience with the LPCXpresso eco-system may have a different view however I speak as a newbie to both the ARM MCU and the LPCOpen development environment.


Tips: things I discovered or wished for:

    • After modifying source code that has currently set breakpoints, it is possible for a breakpoint to exist where valid code does not. This can cause the GDB debugger to crash during upload to the target. I suggest deleting all breakpoints if you encounter this problem.
    • You should be able to export a project directly as a zipped archive, I could not find a way to do this.
    • The HTML help system should allow new Help files to be integrated.
    • A useful in project documentation tool would enable a developer to create an HTML document where images, tables, text and possible other media may be linked to the source code through use of special symbols, parsed to be invisible to the compiler.
    • The motor control board should provide an additional analogue input channel say for a tachometer, although this could be accomplished through the Arduino headers on the LPCXpresso1549.
    • A cohesive suite of libraries for motor control.
    • A more comprehensive quick start guide that includes hook-up details.
    • A user manual for the LPCXpresso1549 target board, such that a user does not have to refer to the schematics for pin function and availability.
    • Less cryptic API documentation.
    • The LPCOpen platform is very comprehensive; however it’s not always intuitive and some operations for example: creating a static library should be streamlined. I suggest that before release a developer who has never encountered the LPCOpen platform road tests the environment.


I am quite familiar with Atmel’s ATmega and Atmel Studio environment and it is a dream to use and navigate by comparison. I guess those familiar with Eclipse would have a happier time and quite reasonably claim that Eclipse offers excellent control of the software development process from start to finish, given enough time I may even take the same position.


In Conclusion:

I re-iterate that the LPCXpresso1549 and motor control boards appear to be excellent products, the MCU is quite impressive however the software ecosystem and documentation need some work.

Parents Comment Children
No Data