Wednesday, December 4, 2019

Open-hardware 4DOF servo controller solution

I know many SFX100 users are hesitant to get on the AMC-AASD15A controller way, therefore I devised a way to give them access to plans to build the 4DOF controller that matches their 100mm actuators for free.

I only provide plans (gerber files) and firmware for the device, and no support. Its totally DIY. This free controller has some limitations but still its plug and play, no need to setup anything, all settings are in the firmware. The only extra parameters needed in the AASD-15A drives are the following:
Pn24 = 100
Pn52 = 1
Pn60 = 2
Pn61 = 6

This is particular useful not only to try Simtools, but to also try the free FlyPT mover software (you can donate to the creator if you like):

For more information on the open-hardware-servo-controller head to Racedepartment thread here:

The limitations of the AMC-Open-Hardware-4DOF-Shield are:

  • 4DOF only
  • 80mm stroke
  • 45kHz pulse rate (max motor speed 2500RPM)
  • 800 times per second updates (3ms delay in Simtools or FlyPT).
  • No LCD for parameters adjustment
  • Only two manual move test buttons
  • Only e-stop that disables the servos

In contrast the AMC-AASD15A servo controller has:

  • Supports up to 7 servos (7DOF)
  • up to 2500mm stroke support
  • adjustable stroke, leadscrew, actuator type inline/foldback
  • Belt ratio calculation option
  • 200kHz pulse updates
  • 2000 times per second updates (latency as low as 1ms in Simtools)
  • Platform Check safety option
  • E-stop, Park/Standby, Force Offline buttons and switches
  • Remote parameters via PC software interface or Terminal.

San Diego, California
USA, 2019

Thursday, October 24, 2019

6DOF platform from PT-ACTUATOR

Here is a quick presentation of a 6DOF platform that can be used for race of flight simulation. You can always use your own recessed frame instead of the one provided but the thing about the existing frame is that is very light and modular for easy shipping in a crate. These new actuators offer huge motion range and speed (800mm/s) and combined with these heavy duty universal joint can support even a full size Cessna cockpit.

Motion controller: AMC-AASD15A

Actuator specifications:
-600mm stroke
-800mm/s speed
-Ball screw 2525, lead pitch 25mm/rev
-Motor 2.5kw

6DOF platform dynamic load specs: 400kg+

The metal structure comes in pieces that you can assemble together for easy shipping via smaller size crate.

For more information check out the PT-ACTUATOR website:

San Diego, California
USA, 2019

Tuesday, October 8, 2019

AMC-AASD15A servo controller development - Completed?

Join the Thanos Discord channel Conversations now!!

AMC-AASD15A and 150mm stroke actuator

After a few months of developing and beta testing the AMC-AASD15A servo controller is now the most safe and comprehensive motion controller for servomotors using direct  Step/DIR control method. At this point it not only support the AASD-15A (and AASD-20A) servo drives, but also Syntron HS servo drives and Dorna M1 Servo drives with custom wiring for 44pin cables.

It features great safety features like, automatic home calibration on power up or hot-plug data cable connection, or Platform Check to constantly check the state of each actuator for failures from over-current or over-torque and if any of the actuators fail and gets disabled, will safely park the rest active actuators to home position to prevent motion with less actuators until the issue is resolved. Additionally there are inputs to hook up emergency stop switch, manual park/standby button and force offline switch to pause the motion without interrupting the simulation game.

While the AMC-AASD15A is plug and play regarding the wiring, you may need to adjust a few parameters in the LCD user menu regarding the actuator model. The control panel has a few controls to allow navigation of the user menu, as well to manually test the motion of the actuators without motion software connection:

The latest firmware v2.07 allows use of actuators of any stroke length, and calculates and sets the model of the servo internally using a few simple parameters by the user that can be set differently for each actuator if needed:
*Leadscrew size (4mm/rev, 5mm/rev, 10mm/rev and 25mm/rev supported)
*Belt Ratio (1:1, 1:1.5 , 1:2 ratios suported)
*Inline or Foldback motor actuator mount methods
*Actuator Stroke

The max actuator stroke calculation depends on the Leadscrew size used and the belt ratio (if belt is used, usually only on Foldback type actuators). See a chart of the possible combinations and their effect on the max available stroke length that the AMC-AASD15A controller can handle.

LeadscrewRatioMax Stroke

If you are looking for custom size actuators, you could inquiry on PT-ACTUATOR, they do custom actuators except the listed stroke sizes on their website.

AMC-AASD15A menu walkthrough - Firmware 2.06

All the recent firmware update history as well additional information can be seen here:

Apart from that, the AMC-AASD15A servo controller now supports 7 servos by adding an extra DB25 connector on the side. Easy to replicate PCB was created and available to order from OSHPark. You can now order that allows easy attachment of the BD25 connector without wiring, just a 2.54mm header (male and female):

The 3D printed enclosure was updated to accommodate for this extra servo port as well.

3D printed enclosure with Servo7-aux DB25 

Regarding the motion software support, Simtools 2.4 release has now included a "AMC" interface plugin that includes the AMC-AASD15A in the supported devices allowing to use 7 axis. Also there is available a AMC config tool to access and modify the parameters in the AMC-AASD15A that you can download here:

There is an expensive playlist on YouTube with all videos regarding the AMC-AASD15A, that includes tutorials and many demonstrations on actual motion platforms:

If you are interested in the AMC-AASD15A Servomotor Motion controller please visit:
And feel free to join my Discord for latest news, or ask questions!


San Diego, California
USA, 2019

Monday, May 27, 2019

New firmware for easy AASD-15A Servomotor interfacing


After years to integrating many different type of motors in the AMC1280USB, in 2017 I added support for servomotors via Servo signal conditioner and Encoder2position modules. These worked good converting the complex signals required for the servomotors to simple inputs/outputs that the standard AMC1280USB firmware can handle (speed control, PID position feedback etc).

But recently I had inquiries from SFX100 users for possibility to use the AMC1280USB to be able to have Simtools compatibility. The SFX100 system is using AASD-15A servo drives that lack some extra outputs that can be used for limit switches so it didn't seem easy to be adapted using the standard AMC1280USB + Servo circuitry. It is too expensive too anyways and complex to make.

So I followed a new route. I decided to completely rebuild the firmware to control the AASD-15A drives via Pulses and implement local position index in the memory of the AMC1280USB controller. But I needed a way to also be able to calibrate the actuators on power up so I can properly set the position of the index to match the actuator position otherwise, if the actuator is powered in middle position it might exceed the total stroke and damage possibly the actuator mechanics and even damage the servo drive electronics if torque limits does not catch it.

So I went above and beyond and made it so it will automatically detect the presence of a AASD-15A drive connection and calibrate it without using limit switches. As soon its detected it will move slowly the motor until a hard stop is detected. It will then set that as home position and will calculate automatically the position index for all the rest functions. The new functions include Automatic Park position and Automatic Standby position that will move to slowly when needed. No more jumping to center on power up.

So to keep it short, you can now interface the AASD-15A servos on the AMC1280USB main board using the standard PWM outputs and some extra inputs on the analog connectors. A few resistors and capacitors are needed to filter out some noise from the servo drives, but the rest of the wiring is simple:

See below example wiring to a DB25 Breakout. I soldered the resistors/capacitors on two little protoboards on the analog input headers to save space:

If you want to follow the development of this and more information behind it have a read here:

Here are some videos of the early testing and development:

The new firmware that supports the AASD-15A servos has now different menu options:

Here is a performance test with Simtools:

So after implementing all in the AMC1280SUB controller, I decided I wanted a single board that you can plug these AASD-15A servos directly without having to make custom wiring and breakout connectors etc... Thus the AMC-AASD15A servo controller was born.

The unique design allows direct plug of these AASD-15A servos using off the shelve DB25 male-male cables (Straight). A truly plug and play system at last!

Closer look of the AMC-AASD15A servo controller:

Plug and play calibration feature:

Here is testing two servos:

Some explanation of the new options for the LCD menu:

And how to set individual strokes/screw lead pitch/Inline and Foldback actuator types...

3D printed enclosure was also designed for the AMC-AASD15A servo controller:

The latest firmware for this is same for both AMC1280USB and the AMC-AASD15A boards and can be found here:


San Diego, California
USA, 2019

Saturday, December 15, 2018

AMC1280USB Firmware v3.5 release


After some issues with the firmware release v3.0 I had to do some major rework on the serial communications for the AMC1280USB new firmware. This rework also included changes in the motion software side. The new v3.5 firmware changes, now prevent non motion data packets to enter the AMC entirely and it uses a combination of counting and checks for presence of LF/CR bytes in the end to prevent wrong ID detection.

The data packet string now is 20 bytes long and includes additional spare motion data slots for up to 8axis ( applicable to newer Servomotor controllers variations only ).
The ID is byte values 0xFF + 0xFF
Each Axis is 16bit wide.
LF+CR is required in the end (0x0A + 0x0D)


There was already verification from many beta testers verifying the stability of the new firmware, but as always, if there is anything that was missed, let me know to fix asap.

Download the 7z file that contains the latest AMC1280USB_v3.5_rev1a Firmware:

*UPDATE 2/16/2019* Newer release is the v3.5_rev1b:

In the 7z file there are also updates for the following motion software:
Ian's BFF 6DOF
Hexpod driver

The software updates are also separate available here:

Here are some instructions for the software fixes:

1. Ian's BFF 6DOF:

Copy the "BFF_6DOF_Background_v102.exe" into the BFF motion driver folder
and remove the existing "BFF_6DOF_Background_v100.exe"

Make sure to enter these settings in the ".bff" profile file you use:

Port=COM7   (or any other COM port number your AMC has, MUST be COM1 to COM9)

2. Simtools:
Simply drag and drop the "AMC1280USB_InterfacePlugin.dll" into the Simtools PluginUpdater
Start Simtools, you should see 8axis available now for the AMC1280USB interface plugin.

3. Hexpod Driver:
Copy and paste over the "6DOF.exe" into the Hexpod driver directory.
Drag and drop the "AMCHexpod_InterfacePlugin.dll" into the Simtools PluginUpdater.
Start Simtools, you should see the Axis7 and Axis8 to also appear in the interface page.

San Diego, California  2018

Tuesday, February 6, 2018

Using linear AC Servomotor actuators without external position sensor - Encoder2Position

Update 2/19/2019: 
Scroll to the end of the post...

We all dream of using those powerful industrial linear servomotors we keep seeing around being used on 6dof motion platforms. Their prices are dropping and are getting more and more wide available. But they can be hard to use as they do not provide any easy way of reading the position feedback from them...

Some of the solutions the past years for adding position sensors to the control loop needed for the AMC1280USB included Linear Potentiometers or String potentiometers. The linear potentiometers a great stable solution that can be placed in parallel to the actuator but may cost too much at times with prices range from $90 to $300 depending on the length they can extent! The String Potentiometers on the other hand, although are in the same cost range as the linear ones, you can easily make your own using inexpensive 10-turn or 5-turn potentiometers and 3dprint your own case for it.

After many requests I indulged to create my own solution of reading instead the actual servomotor encoder signals (quadrature pulses) and convert them to normal analog 0-5v position signal that the AMC1280USB can read easily. The culprit is that Encoder2Position it needs more than just reading the quadradure signals as they only provide reference information. It needs to know the limits of the actuator to now where is the low position of the rod (fully retracted) and the high position of the rod (fully extended) to be able to assign correctly the 0-5v output to the full stroke of the actuator. This is done using magnetic reed switches attached on the actuator cylinder that inform the Encoder2Position module that the actuator reached low or high position and it can set these readings of the quadrature signal counter to 0% or 100%. Some automatic calibration is also needed during power up so the Encoder2Position can get familial with the actuator that is attached to.  This allows the use of the Encoder2Position module to any length of actuator or type of encoder that the servomotor may have (from 32 CPR to 2500CPR).

After a few iterations of the Encoder2position module board, I made some tests on actual linear servomotor set that was lent to me by a customer.

That unit included brake function which I didn't activate properly on my first videos so excuse any loud screeching noises you may hear... In the first two videos I do some manual movement of actuator, to observe the counter values of the quadrature encoder of the servomotor, displayed on a small OLED attached on the Encoder2Position.

Manual testing at 25% speed

PID loop motion testing at 75% speed

More servomotor testing... wiring fixed and all functions enabled

Fast acceleration setting for servomotor - 20ms to full speed

How well it works when connected to motion software? See this video:

Test on motion software


Setting up the Servo drive was easy, only a few parameters needed to be adjusted in its operation panel. One setting that enables external commands on the CN2 connector, one to set the servo in analog input speed mode, one setting to enable the external CWL and CCWL limit inputs, and last set the acceleration ramp up/down timing to 20ms (can be lower but 20ms gives a good space for safe braking). Extra settings I'll be using is the automatic enable of the external electromagnetic brake when the motor is in zero speed to hold position without the load back-driving it down.

Simplified representation of the position control loop

The wiring before the CN2 connector however might look a little intimidating, but its not so bad. The AMC1280USB provides only 3 outputs, Analog speed control (-11v to +11v using the Signal Conditioner), Sink output Servo Enable signal and Zero Speed signal to completely stop the motors when the "Kill motors" emergency switch is pressed.

This is a different servo example that uses C-mode to select analog input

Generic schematic of connections between servomotor and the AMC1280USB controller

The Encoder2Position module however has lots of connection to the CN2 connector like the four connections to the Differential Encoder Outputs and two more Sink outputs that connect to the CWL and CCWL (Forward or Backward rotation prohibited inputs of the CN2). Also the Encoder2Position encoder is interfaced to the two magnetic reed limit switches that needed for the automatic calibration of the actuator during power up. The sink inputs are reversed logic that means they need to be HIGH to detect that the limit switch was activated.

Simplified schematic of the Encoder2Position inputs-outputs
The R1 potentiometer checks and sets the calibration speed once on power up.

The Encoder2Position module features a STM32 F1 processor running at 72Mhz, allowing capture of the fast quadrature encoder pulses, and handles automatically the limit switches of the actuator so you don't have to worry for much except just use the 12-bit analog position signal it outputs (0-5v). On the current linear servomotor I have it measures about 30000 positions for the 200mm stroke, and with the actuator having 500mm/s speed, it means it can capture about 60000 pulses in 500ms time with no problem,

The Encoder2Position module will be available soon on Tindie as soon I finalize the firmware on the test unit. Working on getting the 12-bit (or 16bit) SSI output faster without blocking the quadrature encoder counter interrupts.

For often updates you can subscribe to my YouTube channel:

You could also contact me by email, although you may have to wait sometimes for days for reply (depending on my spare time and the backlog of messages). If you keep it short to one or two questions I might be able to answer right away:


San Diego, California  2018