DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workkloads.

Secure your stack and shape the future! Help dev teams across the globe navigate their software supply chain security challenges.

Releasing software shouldn't be stressful or risky. Learn how to leverage progressive delivery techniques to ensure safer deployments.

Avoid machine learning mistakes and boost model performance! Discover key ML patterns, anti-patterns, data strategies, and more.

Related

  • Keeping Two Multi-Master Databases Aligned With a Vector Clock
  • Event-Driven Order Processing Program
  • Time Synchronization in Distributed Systems: TiDB's Timestamp Oracle
  • Deep Dive Into Apache Flink's TumblingWindow — Part 2

Trending

  • Beyond ChatGPT, AI Reasoning 2.0: Engineering AI Models With Human-Like Reasoning
  • Create Your Own AI-Powered Virtual Tutor: An Easy Tutorial
  • How the Go Runtime Preempts Goroutines for Efficient Concurrency
  • Mastering Fluent Bit: Installing and Configuring Fluent Bit on Kubernetes (Part 3)

World Stepper Clock With NXP LPC845

Learn more about building a stepper clock in this microcontroller tutorial!

By 
Erich Styger user avatar
Erich Styger
·
Nov. 27, 19 · Tutorial
Likes (4)
Comment
Save
Tweet
Share
18.3K Views

Join the DZone community and get the full member experience.

Join For Free

Old timey clock

Learn more about building your own world stepper clock with NXP LPC845!

I really love clocks. I think this may be because I am living here in Switzerland. Besides that, clock projects are just fun! After I have completed my project building a single clock using stepper motors (see " DIY Stepper Motor Clock with NXP LPC845-BRK "), I wanted to build a special one that was able to show up in four different time zones. Below is an example of London (UK), New York (USA), Beijing (China), and Lucerne (Switzerland):

Stepper Clock

Stepper clock

The clock is not only able to show time for up to four different locations on the world; using dual-shaft 360° stepper motors can show patterns beyond the time:


In that video, the minute hand incrementing is changed every two seconds to advance the time faster.

In that project, a microcontroller (NXP LPC845, ARM Cortex-M0) is driving 8 stepper motors, one clock uses two motors, each individually controlled. Because the motors are special 360° motors, the zero position is determined with a magnet and a hall sensor for each hand. Using a serial connection, the clock can be configured. Because the clock can be away from a host PC, the clock uses RS-485.

This time, the clock different concept than the one in "DIY Stepper Motor Clock with NXP LPC845-BRK": instead of normal stepper motors it motors, which are used behind the dashboard in cars. I evaluated different motors, and the VID28.12 dual shaft one was selected for this project. The motors have been tested first with an LPC845-BRK breakout board:

Testing the VID28.05 using NXP LPC845

Testing the VID28.05 using NXP LPC845

Below a short video showing the motor in action:


Each VID28.12 unit includes two stepper motors with a dual shaft. The motor can be easily disassembled and modified as needed (e.g. for 360° operation):

Disassembled VID28.05 Motor

Disassembled VID28.05 Motor

For 360° operation, the end stop has to be removed (e.g. with a sharp knife). Otherwise, the motor is available from the factory without the end stop (this is what I have ordered after the first test unit).

The PCB has been designed in KiCad:

  • NXP LPC845 microcontroller
  • 2 Switec X12.017 quad-stepper motor driver
  • SWD debug port
  • RS-485 interface
  • 8 Hall sensors (AH3572)
  • LED

KiCad Project

KiCad Project

The board has been produced by PCBWay. Below, the first board worked with a few patches.

PCB V0.1 arrived

PCB V0.1 arrived


Reflow

The board only has a few parts on the bottom (clock front) side. Most components are 0603, with the microcontroller using 0.5 mm pitch as the biggest challenge. Below, we have the first board placed in the reflow oven:

Board in Reflow Oven

Board in Reflow Oven

It came out pretty good, with some excess solder (expected) on the microcontroller pins:

Out of the Reflow Oven

Out of the Reflow Oven

Issues

There are many ways to mess up things. As a list of reminders for myself (and maybe everyone else, nobody is perfect!):

1) Carefully check the microcontroller pin alignment before getting it baked. It ended up soldered shifted by one pin.

The image below shows excessive solder on the pin, which is on purpose and will be to be removed later.

LPC shifted by one pin

LPC shifted by one pin

Luckily, I had an infrared heater available in the lab to get it off and on the board again:

Infrared Heat Gun

Infrared Heat System

Selected Heat Profile

Selected Heat Profile

While the area (in red) is heated up, it gets monitored by a temperature sensor:

Heating it up

Heating it up

Heat Gun

Heat on the focal point

Running the Heat Profile

Running the Heat Profile

That way, I was able to get it off the board easily:

Removed LPC Microcontroller

Removed LPC Microcontroller

With the help of flux, solder wick, solder paste, and the heat gun, the LPC was placed correctly the second time.

2) Don’t miss adding solder paste to a pad. Otherwise, don’t wonder why a motor is not able to change direction:

Solder Paste

Missing Solder Paste

3) There is no ‘standard’ footprint and pin numbering for SOT-23 packages. Carefully, double-check the footprint and pin numbering used in the CAD tool. Or, be prepared for painful board ‘fixes’. Luckily, I had through-hole footprints added to the design as a backup.

Wrong Footprint

Wrong Footprint

3) Carefully, check the marking and orientation of polarized capacitors. It is not a good idea to populate tantalum capacitors reversed. It might ‘work’ for a week or so. But it will end with magic smoke:

Tantalum blew up

Tantalum capacitor blew up

First Test Runs

After populating the parts, it was time to develop the firmware. I added an SWD debug header on the board and used that to debug it with a SEGGER J-Link EDU Mini. The design includes RS-485 connector with 5V/GND so it can be powered from USB. I’m using a SparkFun USB-to-RS-485 converter board to connect it with the host PC to configure the board settings:

Board with RS-485

Board with RS-485

The first board assembled with motors and debug connector:

Board with motors

Board with motors

Below, the front of the board with an initial set of clock hands:

Front of PCB with clock hands

Front of PCB with clock hands

The video below shows one of the early tests with the motors:


Enclosure

The enclosure has been designed in Inkscape and then produced with a laser cutter. Below is the first version. The sides and back are made of laser-cut 4mm plywood. The front is using 1 mm balsa wood. That way, everything is inside 17x17x2 cm.

StepperClock

Stepper Clock

The hands for the clocks are 3D printed with PLA and include special sockets for the magnets on the bottom side of each hand:

3D Hands

3D Hands

Firmware

The firmware has been developed with the NXP MCUXpresso IDE V11.0.1 using the NXP MCUXpresso SDK and the McuLib.

MCUXpresso IDE

MCUXpresso IDE

The firmware includes a command-line interface through the Segger RTT:

SEGGER RTT Command Line Interface

SEGGER RTT Command Line Interface

The same command-line interface can be used over the RS-485 connection too. Configuration data like the clock hand offsets or RS-485 device addresses are stored in the microcontroller flash at runtime if reconfigured.

Summary

The result of the project is a versatile world clock with four clocks make of automotive dashboard dual-shaft stepper motors. The clock is 17x17x2 cm in size and requires a 4-wire connection (5V, GND, A, B). It intentionally does not include a battery backed-up RTC (yet), as the idea is to connect multiple clocks to a bigger clock system. The clock can be used as a single clock; in that case, it gets configured through the RS-485 connection.

The design allows using custom front covers, for example, to show logos or landmarks for each time zone. For my first design, I used London, New York, Beijing, and Lucerne. The cover can be removed and replaced with a different one:

Stepper Clock

Stepper Clock

I plan to work on a new revision of the board. Until then, you can find the current firmware and design files on GitHub (see links below).

Happy Time-Zoning!

Resources

  • NXP MCUXpresso IDE V11.0.1
  • McuOnEclipse Library: https://github.com/ErichStyger/McuOnEclipseLibrary
  • LPC845-BRK: Unboxing the NXP LPC845-BRK Board
  • Stepper Clock project on GitHub: https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/MCUXpresso/LPC845-BRK/LPC845-BRK_StepperClock
  • SparkFun RS-485-to-USB converter: https://www.sparkfun.com/products/9822
  • World-Clock project on GitHub: https://github.com/ErichStyger/mcuoneclipse/tree/master/Examples/MCUXpresso/LPC845-BRK/LPC845-WorldClock
Clock (cryptography)

Published at DZone with permission of Erich Styger, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Keeping Two Multi-Master Databases Aligned With a Vector Clock
  • Event-Driven Order Processing Program
  • Time Synchronization in Distributed Systems: TiDB's Timestamp Oracle
  • Deep Dive Into Apache Flink's TumblingWindow — Part 2

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!