Page 1 of 1

X27.168 Low Power Stepper Motor

Posted: Thu Oct 28, 2021 9:30 pm
by parkview
Back in early October 2021, Stephen put me onto a rather nifty little Stepper Motor, behold the: X27.168.
X27.1-front.jpg (31.63 KiB) Viewed 221 times
and the backside, with the two coil connectors:
X27.1-back.jpg (22.89 KiB) Viewed 221 times
It's about 30mm across and about 9mm tall. The spindle can rotate reputably at 600 degrees/second at 5V and drawing around 22mA. As you can imagine, there is little to no torque, and only good at driving an indicator needle. These stepping motors are used in a few car dash indicator dials.

There isn't much info available out there, however a kind person has written an Arduino driver software and collected datasheets etc (, so that's a handy kick off to my project. You can buy these from Aliexpress and a controller IC, the: AX1201728, which is a replacement for the: X12.017 controller IC. This IC can drive up to four X27.168 stepper motors. You can reportable drive the stepper motor directly from a 5V based ATMEGA, like the Nano or Uno.
X27-controller.jpg (11.94 KiB) Viewed 221 times
My stepper motors and controller IC's arrived this week, so I immediately created a CAD model in Design Spark Mechanical, exported it as a OBJ file, and then used FreeCAD to turn that into a nice STEP file suitable for importing into KiCAD (See: viewtopic.php?f=12&t=2427). I then created a KiCAD footprint for the stepper motor and created a simple single motor PCB and uploaded it to JLCPCB for manufacture. Here it is as a KiCAD model:
X27_PCB.jpg (15.14 KiB) Viewed 221 times
The Chinese version of the X28.168 motor is not quite physically up to spec, compared with the X27 datasheet I found online, but it should (hopefully), fit the PCB I designed up for it.

Re: X27.168 Low Power Stepper Motor

Posted: Thu Oct 28, 2021 10:01 pm
by parkview
So, with the motor mount PCB off being manufactured, it's time to ponder making a controller PCB to connect to the motor PCB's. My thinking at the moment is to have the AX1201728 IC being controlled by a cheap MCU that will be incorporated on the controller PCB. The MCU will act as an i2C slave device, so essentially it will publish a list of 'Registers' to the master MCU. For example, some of these might be:

1) a register for each of the four motors that will set it's position
2) a register that for each motor that contains a 'Default' initial position. Powering on the controller, or resetting the motor will set the motor to this position.
3) one register that by setting a bit, will reset the corresponding motor back to a default position.

This is 2021 - with the world being impacted by a shortage of silicon and this also effects the MCU market.

Initially I was going to use a ESP8266 12F module, or it's replacement, the ESP32-C3. However, I need more pins than they have available, but they are cheep and available.

I would love to do another project with a STM32 MCU, however, it's practicably unobtainium, or well out my my price range for this project.

For an ATMEGA328 MCU, LCSC only have them in the humongous DIP through hole for factor. Far to large for this project, but they are around US$2 to US$3. Oh, and you would need a crystal and a large programming port for it.

That leaves the ESP32-Pico-D4 MCU thats around 7x7mm in size and incorporates a crystal and flash etc. and is only US$3.61 and has built in WiFi (when used with a Chip Antenna). Way over powered for what it's going to do, but I do have a few in stock, and LCSC have over 10K in stock.

It didn't take long to whip up a quick schematic and then a long day to place and route out the components. It's a four layer PCB, as it includes my first attempt at using a WiFi chip antenna, the AN9520:
X27_controller.1.jpg (51.55 KiB) Viewed 169 times
I find it very handy when debuging a PCB, to have all the programming info at my finger tips, so I have placed all the GPIO info on the backside:
X27_controller.2.jpg (55.07 KiB) Viewed 220 times
It's not the prettiest board and it would have helped to make the 46mm x 36mm PCB a bit larger so it had more room for clearer documentation etc. But this is the first Beta version of the board, so I am just happy if I can boot it up and program it to work.

Re: X27.168 Low Power Stepper Motor

Posted: Tue Nov 23, 2021 11:37 am
by parkview
The controller PCB arrived the other day. I laser cut a paste solder stencil out and made up the PCB. It turned out rather well:
controller_sml.jpg (65.35 KiB) Viewed 66 times
Above, I am testing out the software. My first version based on my understanding of the datasheet it didn't turn out well. It says the Max Frequency is 1.1MHz, or 7.2KHz for 600 degrees/second movement. I tried setting a ESP32-Pico PWM clock at 1.2KHz with a 50% duty cycle and got no movement.

I ended up following the code here: ... ver-tests/ which is just bit-banging the pules out to the controller IC. Good enough for the moment.

Only two design errors with the PCB. 1) the buzzer is wired wrong, but fixed with some thin wire. 2) One datasheet note I missed was a power up timing sequence, in that the controller IC needs to be kept low for the first 100nSec . They recommend the reset line to be pulled low, so it was easy to retro-add one to the PCB.

Re: X27.168 Low Power Stepper Motor

Posted: Tue Nov 23, 2021 10:25 pm
by parkview
So my ESP32 Arduino program was using the ledcWrite() function to output 1.2KHz PWM at a 50% duty cycle. There was nothing listed in the datasheet about maximum pulse length, only the that it had to be at least 450nSec. At 1200Hz with a 50% duty cycle, my negative going pulse was something like 417uSec long - nearly 1000 times longer than the minimum. Anyway, I found that if I adjusted the duty cycle to 99%, then it started to work.

Thanks to StephenE, for recommending me to examine circuitry using a logic analyser. I have a cheap Chinese 8 port probe and have installed PulseView to record the sessions:
pulseview.jpg (26.87 KiB) Viewed 62 times

Much easier to decode and measure waveforms and more precise than a oscilloscope, at least in analysing logic waveforms.
logic.sml.jpg (54.98 KiB) Viewed 62 times

Re: X27.168 Low Power Stepper Motor

Posted: Thu Nov 25, 2021 9:22 pm
by parkview
One thing I noticed playing around with ESP32 PWM channels is that they seem to effect each other. I noticed this when I set a 4KHz on channel 0 for the on board buzzer. I played a the tone, then set a 1KHz PWM frequency on channel 1. The motors move ok (now), but when I played the buzzer tone again, it was now 1KHz. Reading the docs, it sounds like there should at least be a bank of 0-7 channels on the high side timers and channels 8-15 for the low side timers.

But no, it's apparently worse than that. There are only 4 timers on each bank of 8 channels:
timer-matrix.jpg (32.11 KiB) Viewed 43 times
(from chapter 14.2: ... ual_en.pdf)

Which is why when I set the 1KHz tone on channel 1, it also fed that into my channel 0 buzzer. I wonder what the PWM restrictions are on a STM32 MCU?
buzzer.jpg (79.96 KiB) Viewed 45 times
This small buzzer (LH side), is only 5.2mm x 5.2mm and is the smallest and cheapest mag buzzer I can find (so far). It's not as loud as a piezo buzzer, but it's loud enough for my purposes, and more importantly, it's small. The resonant frequency is 4KHz, however it kind of works ok at other frequencies as well:
buzzer-freq.jpg (17.17 KiB) Viewed 45 times

Oh, and if you look carefully, you will see the 0.1mm thin bodge fix wire skirting around the buzzer to the correct pad.