Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The drive generates heat on the side opposite the logo engraving. If attaching the drive to a heat sink body such as a metal chassis, heatsink, water block, etc. the heatsink should attach to the side opposite the logo. If attaching the drive to a thermal insulator such as a plastic chassis, the drive should be mounted with the heat generating side out so air will flow over the hot side. In this case the logo should mount to the plastic body. The drive mounts using 3mm hardware which is included with the Arc200.
Thermal paste or quality thermal pad should be used for proper thermal transfer into the heatsink.
If you need additional mounting hardware you can find many options here
3D model of Arc200 (STEP file): ARC200_Block.STEP
Hot side (Mount this to a heatsink or metal body through thermal pad or paste - preferred mounting method):
Cold side (Mount this to a plastic enclosure or any thermally insulating material if no heatsinking surface is available and leave the other side exposed to air):
Drive Specs:
Input Voltage: 4S (13.6v) - 12S (50.4v)*
Max peak phase current: 200A
Continuous current with little to no heatsinking (hot-side facing upwards and unobstructed): 60A
Continuous current when bolted to a typical EV aluminum chassis: 100-150A
Continuous current with infinite aluminum heatsink or water cooling, and forced air cooling on phase wires: 200A
Control Inputs: PWM, Analog (1x combined throttle/brake or independent throttle and brake), UART/CAN (for advanced users to interface through the Freefly API's QX protocol)
DC-Input: XT90
Phase-Output: 8mm Female Bullet
Sensor support: Fully sensorless, digital hall sensors, PWM
Operating modes: Torque mode (EV), speed mode (Multirotor, requires advanced user tuning), angle/servo mode (experimental, requires advanced user tuning and high-resolution motor encoder)
23.4kHz switching frequency for zero audible PWM noise
Integrated 5A 5V BEC (Recommended continuous-current draw to be kept less than 3A)
Water resistant and splash proof - integrate into your application to avoid continuous water exposure
* (motor inductance must be above 12uH line-to-neutral when operating over 6S battery voltage or damage may occur and warranty void!)
This page covers some common installations of an Arc drive. Before you even worry about hooking these up, it is highly recommended to get your motor spinning successfully through the GUI. Get that done first, then start thinking about setting up control inputs and sensors.
Before you start setting up the throttles, it is recommended to set the Control Mode to 'No Control (Safety State)' until you are happy with the throttle configuration. Otherwise the motor may receive commands mid-way through throttle setup! After you have setup your throttle and motor wiring, go to the Control tab of the general setup helper for more information on setting up your throttle, then launch the throttle wizard.
This is a popular configuration for something like a scooter where you want to have just one hand throttle. This can be a bit awkward for regenerative braking as these hand throttles usually spring-reset all the way one way which would put you in full braking when you take your hand off. It works out alright though if you want to get started with one throttle or really want to keep one hand free!
This is the easiest to control and makes your electric vehicle behave much like a typical car. One hand controls throttle, the other controls braking. If you let off both hands, then it coasts much like when you take your foot off the gas in a car.
For PWM control, you can use the included PWM cable. This connects to the 'PWM' wire on the drive and converts it to the industry-standard hobby servo connector. This can be connected to something like an RC receiver, or really anything that outputs a PWM with high-time controlling the signal (not duty cycle).
If you want to do your own wiring and not use the provided adapter cable follow this diagram. There are two possible ways to hook up a PWM cable, select whichever makes the most sense for your wiring! In a very poor EMI environment, using the 'Encoder PWM Input' option will be somewhat more robust (this is what the provided adapter cable uses).
With any of these configurations, you can always add a sensor to the motor if you want true zero-speed torque. Although you can usually tune sensorless to give you great performance, it's not the same as a real sensored configuration for low speed torque performance.
Most people running an electric vehicle will want to add hall sensors. It is industry standard within the hobby ESC community and many motors can be purchased with sensors already built into the motor.
The Arc200 was conceived as a universal motor drive that allows a variety of use cases. Our priorities in designing the Arc200 were:
Robustness
Performance
Ease of setup
Ease of integration
Arc 200 features sensorless field oriented control which allows for low torque ripple over the full speed range, and most importantly no 10-16khz screeching!
When powering on the drive, if the USB cable is connected to the drive and a computer, the drive will enter bootloader mode indicated by a solid blue LED. This mode will exit within 10-15 seconds if no firmware update command is received and enter normal operating software. If powering with the USB cable disconnected, the drive will immediately bypass the bootloader and enter normal operating software.
After first power up, you will need to connect to the GUI using the supplied USB cable. The drive needs to be configured for your motor and application before it can operate. See the ARC GUI section for information on this software.
The Arc200 handles a disconnected or broken throttle input in the following ways as a safety measure:
PWM: If no PWM edge is detected in the timeout period of 50ms, the drive will command 0A if in torque mode, or 0RPM if in speed mode (keep in mind in speed mode, going to 0RPM may involve high torques and a rapid change in motion!).
Analog: If an analog cable is disconnected, there is an internal pull-down resistor that will make the drive think the throttle is set at 0. Make sure this is a safe state! This could present hazards if the drive would start accelerating in either direction for this throttle command.
GUI/QX API: If no QX packet is received in a 1-second period (any QX packet, does not need to be a command packet), the drive assumes the user has disconnected and commands 0A if in torque mode, or 0RPM if in speed mode.
After configuring your drive, you should test out the throttle disconnect safety! Get the motor spinning then manually unplug the throttle and make sure you are satisfied with what happens from a safety standpoint.
This sections provides and overview of the components and concepts that you need to understand in order to use the Arc200 successfully.
Basic Concepts - Brief introduction into Freefly Robotics and the Arc200
Drive Mounting - Mounting the Arc 200
Wiring Quickstart - Wiring process and diagrams for the Arc200
Powering On and Throttle Safety - Tips for 1st power on
Sample Configurations - examples of how we have used Arc200
"Slow" flashing = 1hz, "fast" flashing = 4hz
Solid Blue: In bootloader mode, unplug USB cable to bypass (or power cycle if a manual indefinite bootload cycle was initiated). If you drive remains solid-blue after power on without a USB cable connected, the drive's firmware somehow went corrupt. Try loading the latest firmware, if it still fails, contact Freefly support to report the issue.
Slow Flashing Blue: Drive's EEPROM could not be loaded. This usually indicates some corruption. Try using the Erase Flash button in the GUI's Configuration tab to reset the memory chip.
Fast Flashing Blue: Loss of signal, out of range (CAN, PWM), or safety state awaiting neutral throttle position before starting after re-configuration (PWM). If this is reporting a loss-of-expected-signal, then this state persists for 2 seconds minimum for any trigger, or permanently if loss is more than 0.5 second. This indicates an unreliable communication between the drive and whatever is commanding it.
Solid Green: Normal operating mode, no persistence
Slow Flashing Green: under voltage in range of potential foldback or so far under voltage that the drive has completely disconnected phase outputs.
Fast Flashing Green: over voltage in range of potential foldback or so far over voltage that the drive has completely disconnected phase outputs.
Solid Red: Overheat foldback
Slow Flashing Red: Self-test failed at boot time. This usually indicates your drive suffered internal damage. The only other way to make this happen is trying to power the drive from a DC voltage outside the absolute max capabilities called out in the drive specs.
Fast Flashing Red: --unused--
Rapid White Flicker: The internal memory chips are being erased after receiving a wipe command from the user. This state should automatically clear in a few seconds when the erase operation is complete.
Always connect the motor and any wiring with the DC power disconnected! Never attach or disconnect a motor when the drive is powered up. Damage to the hardware may occur.
See the Sample Configurations for some diagrams showing connections to the drive for a few popular configurations you might find on a typical electric vehicle, RC car, etc.
If you are connecting any drive to a controller that is externally grounded and/or powered (might be typical for a flight controller), make sure to read the section titled "1+ Drives connected to a receiver that is externally grounded or powered:" on the Multiple Drives page to avoid damaging your motor drive!
USB Cable
PWM Cable (accessory purchase, not included with drive): Connect this to the PWM port on the drive and use 'PWM Throttle on Encoder Line' as the input mode
Flying Lead (accessory purchase, not included with drive): Available accessory cable to allow connecting to any pin on the drive for a custom integration into an application
Warning: Updating firmware will often make your saved motor configuration become invalidated. If you care about the settings loaded on the drive, make sure you use 'Save To File' on the configuration tab of the GUI so you can load the settings back onto the drive when done! When you update the firmware, the parameters will only be invalidated and lost if the new firmware has a different parameter definition set. Most major firmware releases change this but if an update has the exact same parameter definition, you will notice your parameters are retained.
Launch the updater EXE and select the .ENC file for the firmware you want to update to. You can downgrade or upgrade from and to any version you want.
Connect the USB cable with the drive powered off, then connect the ESC to a power source (such as a battery or lab supply). The LED on the drive should be solid blue. When it is solid blue, click load (you might need to wait a few seconds for the computer to recognize the drive). The drive will exit this solid-blue bootloader mode after 10-15 seconds so you need to get the timing right.
An alternate way to enter the bootloader to keep it in bootloader until the next power cycle is clicking 'Bootload and Reboot' on the configuration tab of the GUI. After clicking this, the drive will reboot and be in the solid-blue bootloader state. Now it will remain in bootloader forever until the next power cycle so you have all the time you need if you are struggling to use the timed bootloading method.
Windows GUI can be downloaded here.
June 27, 2019 - v1.1.10 April 1, 2019 - v1.1.9 January 10, 2019 - v1.1.8 November 15, 2018 - v1.1.7 (see comment in release notes about PWM scaling if using PWM input!) October 9, 2018 - v1.1.5 October 3, 2018 - v1.1.4 August 23, 2018 - v1.1.2 August 17, 2018 - v1.1.1 July 17, 2018 - v1.1.0 July 12, 2018 - v1.0.100
November 1, 2018 - v1.0.1 increases output power 4dB for increased range.
v1.1.10:
Adds support for erasing the log memory chip
v1.1.9:
Adds a parameter that allows you to disable BTLE so that there are no security risks of people changing parameters while a drive is operating.
v1.1.8:
Re-enable data logging
v1.1.7 (note v1.1.6 was unreleased so this is a change log since 1.1.5):
The scale for PWM commands was changed in 1.1.7 to represent milliseconds rather than previous arbitrary units. This means if you use PWM input, you will need to re-adjust the throttle min/max/neutral points.
Fix math error in DC current estimate where the value would falsely increase when the PWM magnitude is railed.
Fix bug where regen torque is not available when a drive is configured in forward-only torque mode using hall sensors on a relatively slow motor (such as a bicycle hub motor).
Flash data logging has been disabled while an issue with the system is being investigated (in most cases, it didn't work in the previous releases either). We hope to re-enable this in the near future in a new firmware update.
Revise safety system on PWM so that there's no way updating settings can make the drive start up even if entering PWM mode and/or assigning invalid PWM ranges. PWM must pass through neutral before it'll start even after parameter updates.
Correct behavior to take away torque or speed command when PWM-on-encoder-line signal is disconnected from the drive as a safety if throttle is lost.
v1.1.5:
Bug fix which caused CAN re-transmission to fail in 1.1.4.
Direction reversal capability is now available from within the Motor Settings section of configuration.
Bug fix which prevents certain motors from stopping when spinning in jitter-start speed mode with a low slew rate command.
Bug fix where a motor with speed-dependent regen current that falls to zero-current at zero-RPM in hall-sensor mode may get stuck thinking it's spinning very slowly in reverse and not be able to accelerate forward.
v1.1.4 (note v1.1.3 was unreleased so this is a change log since 1.1.2):
Corrected major bugs in the current command offset system which previously prevented reaching full regen when the motor was spinning forwards in torque mode.
Corrected issue with integrator runaway during jitter start modes that created over-current faults and popping noises on certain motors and configurations.
Improved performance of undervoltage and overvoltage foldbacks to avoid tripping a hard fault during normal operation
Make Q-current request be buffered in mtr->q_request_pre_foldback so that logging tasks asynchronous with the fastloop can't sometimes pick up pre-foldback values
Add filtering to the PWM-out magnitude before it is fed into the foldback-regen-current-in-torque-forward-only system to fix an instability
Add filtering to the signed current magnitude used in jitter start current loops to avoid excessive acoustic noise during startup
Tero tuning added (compiled when built using the Tero Keil target)
Fix a divide-by-zero vulnerability if regen or accel current limit is set to 0A (or speed-dependent with a minimum of 0A).
Improvements to under-voltage performance decreasing the odds of false-tripping an under voltage fault.
Add support for CAN networking for command forwarding
Add support for throttle expo
Independent throttle/brake now smoothly transition between throttle and brake. No more step-change in torque request when you tap the brakes.
Change foldback-below-PWM-torque-forward-only default to 5% (previously 2%).
v1.1.2:
Major reliability bug fixes in the absolute encoder calibration algorithm.
Fix flash logging which was broken in v1.1.1.
Add raw brake input to the log
v1.1.1:
Remove current HPF parameter. Confusing and un-utilized.
Improved current command offset which is now just one parameter rather than being a speed-dependent setup requirement.
Bug-fix where the Q-axis integrator was allowed to run away when in torque-mode jitter-start-mode and a zero current command was received with the motor not spinning. This resulted in a large current spike when a command was received as the integrator was railed to a high voltage.
Add ability to set regen current foldback at low PWM widths when in torque forward only mode to avoid motor jerking at very low speeds with high regen commands.
Remove current HPF parameter. Confusing and un-utilized.
Improved current command offset which is now just one parameter rather than being a speed-dependent setup requirement.
Bug-fix where the Q-axis integrator was allowed to run away when in torque-mode jitter-start-mode and a zero current command was received with the motor not spinning. This resulted in a large current spike when a command was received as the integrator was railed to a high voltage.
Add ability to set regen current foldback at low PWM widths when in torque forward only mode to avoid motor jerking at very low speeds with high regen commands.
v1.1.0:
Turn on MCU pull-down on UART RX line for increased safety against noise-induced QX messages.
Update QX protocol to accept '...QQX...' beginning of message to allow for sending many Q's to clear the parser state machine.
Corrected feed-forward KV math on a ramp-start in speed mode to decrease the speed jump when transitioning from ramp to run.
Bug fix where the first time performing resistance might give different (incorrect) results compared to subsequent resistance measurements.
If you purchased your drive as an Arc200, you will need to change the firmware on the drive to the Tero variant. If you purchased your drive as a pre-configured drive specifically for Tero use, it should come from the factory with Tero firmware installed. In that case, you only need to update the firmware if you want the latest version.
To update the firmware on the drive, follow the same as for the Arc200, except use the firmware on this page.
- Initial Release April 1, 2019
The Tero drive is compatible with 4S and 6S Lipo batteries. Do not use this drive on a Tero with more than 6S or damage may occur to the drive! At boot-up, the drive should beep either 4, or 6 times. Make sure this matches up to the expected cell count to ensure that under-voltage thresholds are appropriately established.
Simply remove the Castle ESC taking note of what port it plugs into on the receiver, and connect the Freefly Arc200 ESC's servo connector to the same port. Connect that cable to the 'PWM' port of the Arc200 drive.
On first power-up, have the wheels lifted off the ground. Power up the radio and ensure the throttle-zero (knob on the receiver) is set such that the Tero does not accelerate. The Arc200's throttle is set to a different zero-point than the Castle ESC so you will most likely find the tires accelerating on first power-up until you change the throttle zero point.
Now you're ready to go! No software configuration or drive tuning is required for the Tero version.
Early Arc200 drives shipped with a PWM cable that doesn't work well with the receiver that came with Tero. You can try it, but most likely there will be no throttle control. If it does not work, contact Freefly to receive the correct replacement cable.
When you first get your drive, you will need to teach the motor drive about the motor so that the Field Oriented Control (FOC) can run properly. For a beginner user, the recommended method is to run the auto-setup wizard. This will guide you through a process of steps that makes the drive automatically measure important parameters such as resistance, inductance, and KV. Next it will guide you in setting up the drive's configuration such as operating point limits and how you will control the drive.
To launch this wizard, click 'Auto Setup Wizard' from within the Configuration tab:
This will launch the auto-setup wizard which guides through the process of setting up a motor and drive. Each step of this procedure has in-program instructions within the pop-ups so there is no further instruction provided here.
If the battery is fully charged and near the drive's over-voltage limit, there will be a limited amount of regenerative braking current available. If you use the regenerative braking for long, it will charge up the battery all the way to the absolute over-voltage cutoff limit and you will lose all regenerative braking. This is a safety feature to avoid over-charging the battery and potentially damaging or overheating it but presents a safety issue to be aware of. If you went to the top of a huge hill with a fully charged battery, by the bottom there would be little to no braking available (even at the top you may notice significantly decreased braking capability depending on your over-voltage foldback start and cutoff configurations). You should always have mechanical brakes installed on your vehicle in good working condition in case the electrical system is unable to brake due to battery charge, incorrect configuration, or hardware damage.
Always test what happens when your throttle becomes disconnected in case the wire becomes unplugged or the throttle breaks while you are riding your vehicle. For more information on what to expect, see the page.
If multiple drives are connected to the same DC power source, care must be taken to avoid damaging the drives when setting up the control interface.
The one rule that must always be obeyed is that you cannot connect ground or power supply output pins of any of the drives together! Doing so may cause permanent hardware damage to the drives and voids your warranty.
This naturally makes controlling the drives slightly more difficult because the PWM and analog inputs are ground referenced. Two solutions are outlined on this page.
For PWM input, you can connect the PWM controller to each drive in parallel but you must use the correct cables for each drive.
Freefly sells two PWM accessory cables: primary and secondary cables (store links coming soon). The primary cable connects opto-GND and GND together so that you can still get BEC power output to power a receiver, steering servo, etc. The secondary cable leaves the input opto-isolated (opto-GND and GND are not connected), but there is no BEC power available on the connector.
By using either zero or one primary cables and all other drives using secondary cables, you can safely wire the PWM lines in parallel to the receiver, flight controller, etc. as long as that receiver/controller is not grounded anywhere else in the system! Never use more than one PWM primary cable in any network of drives, and never use any PWM primary cables if the receiver/controller is externally grounded, or hardware damage may occur to the drives and your warranty will be void.
2-Drive network with receiver not externally grounded or powered
1+ Drives connected to a receiver that is externally grounded or powered:
If the controller receives external ground connection, then you cannot safely use the master cable as you would create a ground loop that may damage the drive. In this instance, all drives must use the secondary PWM cable.
If each drive will be receiving the same command (for example, a skateboard with one hand controller and two motors) then you can use CAN networking to safely command two or more drives from a single PWM source.
If only two drives are in the network, you can use the Freefly CAN link cable (not yet released for purchase as of 9/21/2018, link coming soon). If connecting three or more drives, you will have to wire up your own CAN network following the directions below.
2-drive using CAN link cable:
3+ drives using your own CAN network wiring:
Do not connect the ground wires between the CAN ports! Only CAN-L and CAN-H.
In either case, setup the drive that connects to the controller (master drive) as you normally would if that were the only drive in the system. In the Drive-Specific Functions section of the Configuration, set "Retransmit Commands via CAN As Primary?" to "Yes". This makes any command received over its standard input mode (PWM, Analog, etc.) get re-transmitted over the CAN network:
For all the other drives that connect only over CAN, this retransmission flag should be left at 'No'. On these drives, just set the "Input Throttle Mode" to "CAN Secondary". On these drives, there is no need to setup the throttle configuration as values are transmitted over CAN in their native unit (amps, RPM, degrees).
Note this parameter list may change over time. The parameter set is defined within the firmware and as the motor algorithm continues development the exact set of parameters may be updated. If your firmware is newer or older than this documentation, the parameter selection and names may not exactly overlap.
Some parameters can be setup to change value based on a dependent variable (in most cases, measured speed). These will look like this:
If set to a constant value such that there is no dependence:
If set to a dependent mode:
When you click Setup on a dependent parameter, you will see a setup box like this:
This will guide you through setting up the dependent parameter and provides a graph showing the dependence for the variable.
This section establishes how the user will command a speed, torque, or angle to the drive. This is mandatory to understand and setup to control an EV with anything other than the GUI.
When setting the min, max, or deadband, it is easiest to have your controller connected with the ESC in control mode: safety state. Go to the telemetry tab of the GUI and observe the Raw Throttle Level. This will guide you on what absolute levels you should be entering. See parameter definitions below for more guidance.
Control Mode:
No Control (Safety State): This puts the drive into a safety state where nothing will control it to spin. The control loop is not running in this state. Never change to this state while the motor is running as it will act as shorting the phases and do a very high current brake that could damage things mechanically or electrically!
Speed Mode (RPM): Drive is commanded in RPM, commands can come in as either positive or negative numbers for the two directions. Note that as of June 4, 2018, there is no autotune for the speed outer loop so some skill is required to use this mode.
Torque with Reverse (+-A): Torque command mode that smoothly transitions between forward and reverse. Positive current commands make the motor spin forward, at which point negative commands make it brake. It smoothly transitions between zero and the negative currents make it spin backwards. When spinning backwards, positive current commands then make it brake. Positive current is forward acceleration or backwards braking, and negative current is forward braking or backwards acceleration.
Torque Forward Only (+-A): Positive current commands make the motor accelerate and negative make it brake. The motor will never command torque to start spinning backwards. This mode is good for EV's which should not start driving backwards upon reaching zero speed while braking (negative torque). Currently there is no way to make the motor spin backwards but eventually implementations may be made to allow for a forward/reverse switch (such as shifting your car into reverse vs. drive - you don't want it to just start driving backwards when you hit the brake!)
Torque With Smart Reversal: Torque mode where in order to switch directions, the ESC must observe that the motor has stopped after a braking event in the forward direction, then the user must return the throttle to a zero-current command, then push the throttle in the reverse direction again in order to get the vehicle to start going backwards. The opposite procedure occurs to get the vehicle moving forward again. It creates a distinct event required to "switch gears" into the other direction so that you can't brake and then have the vehicle start going the opposite direction immediately upon stopping.
Angle, sensored only, PIV Control (deg): Acts as an absolute position mode. You must have an absolute encoder installed and calibrated before attempting to use this mode. Hall sensors are not good enough. Although this mode does work, as of June 4, 2018, it has minimal testing and should still be considered to be in a mostly experimental state. Note that as of June 4, 2018, there is no autotune for the speed inner loop or angle outer loop so some tuning skill is required to use this mode.
Current Command Offset: Current command offset adds a PWM-width dependent (mostly speed dependent) current to the user command when the drive is operating in any torque mode. This can be used to overcome any zero-bias errors in the current measurement so that when you command zero current, the motor will slow down while otherwise it may continue spinning or accelerate due to an offset error in the current measurement. If the motor doesn't stop with zero command, use a more negative current command offset. Using approximately -0.15 A/(VDC * PWMdec) is recommended and is the default value. Most motors will quickly stop when commanded with zero current using this setting. PWMdec represents the PWM width as a value from 0 to 1.
Torque-Forward-Only Regen Foldback Start-Below PWM: This parameter is used to make the regen brake command fold back below the programmed PWM width.Usually you want this to be a few percent, default is 2%. This only applies in torque-forward-only mode, in all other operating modes this parameter has no effect on drive operation. Without this, when the motor regens and reaches zero speed, the regen command will make it want to start spinniing backwards. The moment it does, the torque command is cancelled because it is in forward only mode. Then it can start rolling forward again and then the regen torque command comes back. This creates an oscillation that results in stuttering torque. This foldback eliminates this phenomenon by avoiding regen current when the motor is approaching zero speed.
Input Throttle Mode: Note you should setup your throttle in 'No Control (Safety State)' mode!
GUI: Motor is commanded in RPM, amps, or degrees (depending on operating mode) from the GUI. All other control methods such as throttles or hand controllers are disabled.
Analog Throttle: An analog connection (0-5v maximum sense range) is connected to the analog input pin to control the ESC.
PWM Throttle: A PWM input is used on the throttle input pin.
PWM Throttle on Encoder Line: A PWM input is used on the encoder input pin. This is provided for convenience in case that pin is more accessible in your wiring harness configuration. This mode cannot be used if you are using a PWM encoder.
Independent Analog Throttle and Brake: Independent brake and throttle exist on the separate analog input pins for brake and throttle. If brake is pressed, it overrides the throttle.
Smart Reversal Threshold/Time: Only relevant when using Torque mode with smart reversal. These thresholds are used for the ESC to detect when the motor has stopped. The difference in currents between any two phases must be below the Smart Reversal Threshold for a duration of Smart Reversal Time before the ESC believes the motor has stopped spinning.
In GUI control mode:
Input throttle and input brake settings have no effect. Only the GUI function generator controls the motor.
In Analog Throttle or PWM Throttle:
Input Throttle Min: This is the input command which will result in maximum negative torque (Peak Decel Current), speed (Max RPM Reverse Direction), or angle (Not yet implemented). If you want to hold your throttle at full negative (safest to do this with Control Mode in Safety State!) and check the Raw Throttle Level on the Telemetry page, that'll tell you what to type in here, and use the same logic for setting the remaining settings in this section.
Input Throttle Max: Same as min, but now for max accelerating current or maximum speed.
Input Throttle Zero Neutral: The throttle level which corresponds to either zero speed or zero torque. If you are using a spring-return throttle as most hobby EV's do, this is the setting where you're not pushing the throttle either direction and want coasting.
If you want to disable reverse current or speed command, make sure Input Throttle Min is exactly equal to Input Throttle Zero Neutral and the drive won't command those quadrants. Similarly, if you only want reverse current or speed command, set Input Throttle Max exactly equal to Input Throttle Zero Neutral to disable positive current or speed command!
Input Throttle Deadband: How much deadband should exist at the middle of the throttle. If this is zero, then the throttle would have to perfectly return to an exact known setting to get zero torque. Since this is not realistic, add a small dead-band so that an EV or RC car won't stutter with small amounts of current error when the throttle is released.
In this mode, Input Brake Min and Input Brake Max have no effect.
In Independent Analog Throttle and Brake Mode:
You can use this mode in speed mode, although it doesn't make a lot of sense. This is really designed for torque mode. In speed mode, this results in the brake input commanding negative speeds and the throttle commanding positive speeds. If you were spinning a motor fast in the forward direction and feather the brake, it would do a full-power deceleration to hit the negative speed command given by the brake input.
Input Throttle Min: The minimum throttle value where an accelerating torque (in torque command) or speed command (in speed mode) starts being produced. Below this, the throttle current or speed command is zero (or negative if the separate brake is pressed).
Input Throttle Max: The maximum throttle value for positive command. The torque command (in torque mode) or speed command (in speed mode) is proportional to the throttle input level between Input Throttle Min and Input Throttle Max.
Input Brake Min: Similar to throttle min, below this there is no reverse command (in torque mode braking, in speed mode negative speed command). Above this reverse command starts to work.
Input Brake Max: The maximum input reverse command. The reverse input command is proportional to the brake input level between Input Brake Min and Input Brake Max.
In this mode, Input Throttle Zero Neutral and Input Throttle Deadband have no effect.
This section sets up whether the motor is in sensored or sensorless configuration. If in sensored mode, this is where you will setup the encoder type and perform calibration on it. After you have selected the sensor type and succeeded at making the motor spin sensorlessly, it is possible to use the "Auto Encoder Cal" button to setup the sensored offset and min/max encoder values.
Sensored vs. Sensorless:
Sensorless: The motor will run only in sensorless mode. Any connected encoder will be completely ignored. In this mode.
Sensored: The motor will run in sensored mode. It may transition into sensorless mode if you setup the transition zones appropriately as described in the parameters below
The following values only have relevance in sensorless mode:
Sensorless Speed-Mode:
Ramp Mode: Open-loop ramp which is easiest to configure but least useful. This mode works great if the load has a small well known inertia and is always starting without being locked up or stalled. This is generally not going to be a sufficient start-up mode for an EV. This is a great way to easily start up a stand-alone motor for calibration or test purposes.
Jitter Start: Runs the proprietary Freefly jitter-start algorithm. This is a good choice for EV's or for loads that need a high-speed start into an unknown or variable inertia. This is difficult to configure and as of June 4, 2018, there is no autotune or easy-to-write guide on how to set this up. Some details exist later on this page for configuring this mode.
Sensorless Torque-Mode:
Kick Start Mode: This is a great easy way to get your EV started. This is especially perfect on scooters, pedal bikes, etc. where it is easy to get the vehicle started yourself. In this mode, providing throttle from a stand-still will do nothing. Once you get the vehicle started rolling at even a very slow speed, the ESC provides torque if commanded. It is highly recommended to start out your EV in this mode and get everything dialed in before attempting to setup jitter start mode
Jitter Start: Runs the proprietary Freefly jitter-start algorithm. This is a good choice for EV's or for loads that need a high-speed start into an unknown or variable inertia. This is difficult to configure and as of June 4, 2018, there is no autotune or easy-to-write guide on how to set this up. Some details exist later on this page for configuring this mode. In most cases, this can be configured to allow an EV to start relatively seamlessly even on an incline.
The following values only have relevance in sensored mode:
Sensored Mode:
3 Hall Sensor: Uses three hall sensors
PWM Absolute: A PWM signal applied whose ontime is proportional to the absolute shaft angle
SPI Absolute: The exact meaning of this may vary from drive to drive. Check your exact drive model's documentation to figure out exactly what is supported as an SPI encoder.
Quadrature (With Boot Autocal): Generally only a good idea for angle mode, and a very good solution for that. Since quadrature is not absolute without some calibration, this will perform boot-time calibration where it spins the motor a quarter electrical cycle to calibrate the encoder to phase. As of April 2, 2018, you can't really use this if the motor is incapable of performing a low current open-loop auto cal on boot up.
Sensored Offset: This sets the offset between the phase angle and the sensor angle. It is necessary to use the 'Auto Encoder Cal' system unless you are an advanced user who can manually setup the phase angle offset.
Sensored Hall Code: This tells the drive what configuration and placement the three hall sensors are in. It is necessary to use the 'Auto Encoder Cal' system to establish this unless you are an advanced user who can figure out which code to use by referencing other designs.
Sensored Abs. Encoder Min: Auto Encoder Cal can set this parameter. This sets the minimum encoder value the drive expects to see. For example if when spinning the absolute encoder value goes from 400 to 800, this value would be set to 400.
Sensored Abs. Encoder Max: Auto Encoder Cal can set this parameter. This sets the maximum encoder value the drive expects to see. For example if when spinning the absolute encoder value goes from 400 to 800, this value would be set to 800.
Sensorless Transition Start: Upon reaching this speed, the drive will start transitioning to sensorless. It is a smooth transition between 'Sensorless Transition Start' and 'Sensorless Transition End'. It is recommended to have at least 100RPM of window between start and end in these parameters. If you want to run sensored at all speeds, set both this start and end value to extremely large numbers far above the maximum speed you'd ever expect to reach. That way it'll never reach the transition point and be stuck sensored.
Sensorless Transition End: The end point that goes with the above parameter. Above this speed, the drive is entirely in sensorless mode.
Quadrature Cal Current: This value only has relevance when the drive is booting up in quadrature mode. This is the current with which the drive will spin open-loop to establish the quadrature offset. Even in quadrature mode, this value does not affect run-time, only bootup.
Pole Pairs: Sets the number of pole pairs of the motor. See autotune documentation for more information on how to automatically measure this.
Resistance: Sets the resistance of the motor. See autotune documentation for more information on setting this.
Inductance: Sets the inductance of the motor. Note that this parameter is not necessarily best set to what you'd measure with an inductance multi-meter. Many unusual controller behaviors get wrapped up into this parameter so it is best measured using the autotune system within UMD. See autotune documentation for more information on setting this.
KV: Sets the KV of the motor (phase voltage per RPM). See autotune documentation for more information on setting this.
Current HPF: This is an obsolete parameter that remains for engineering experimentation. Its value is irrelevant on released firmware.
Overvoltage Cutoff: This sets the voltage above which the drive will enter a fault state and cut off gate drive. This should be set at least a few volts higher than the most charged battery voltage you expect to connect. Note that the ESC may have built in limits lower than the value you can type into this.
Overvoltage Foldback Start: Above this voltage, fold-back will start which limits regenerative current in an attempt to not hit the hard cutoff. For best user experience, this should be at least a few volts below cutoff. For example on a 6s battery pack where 25.2v is the maximum expected voltage, you might set foldback start to 24v and cutoff to 25.2v, To disable the soft foldback, just set cutoff and foldback start to the same value. Remember that above this foldback start, you will start to lose regen! This could present a safety hazard if your vehicle has no backup mechanical brakes. If you are counting on the regen, you should not fully charge your batteries as there's no capacity left to charge into. You should also re-evaluate your life if you're trusting a small consumer electronic device with your immediate survival.
Undervoltage Cutoff: Below this voltage, the ESC will enter a fault state and cut off gate drive to protect the battery pack from critical under-voltage. You should set this to the absolute minimum voltage you'd ever want your motor drive to run at.
Undervoltage Foldback Start: Below this voltage, fold-back will start which limits forward current draw in an attempt to not hit the hard cutoff. For best user experience, this should be at least a few volts above cutoff. For example on a 6s battery pack where you don't want to ever go below 3.2v/cell, you could set your cutoff to 19.2v and foldback to start at 20.2v.
Max Battery Draw: This sets a limit on how much current can be drawn from the battery during acceleration events. This is calculated from phase current and duty cycle, there is no sensor performing this limiting. As a result, this is only an estimate and may have significant error. This should not be used as a precision cutoff. If you do not want to use battery current limiting and instead want to only limit the phase current commands, just set this to a number more than twice as high as the peak accel current configured below.
Max Battery Regen: This should be a positive number. This sets a limit on how much current can be regenerated back into the battery during regenerative braking events. This is also calculated with no direct sensor, so there may be significant errors. If you do not want to have a limit at the battery end, just set this to a number more than twice as high as the peak decel current configured below. Note that if you set this to a smaller value, you will have full regen at low speeds but at high speeds the regenerative current will be greatly reduced since the regen current at the battery is proportional to speed for a constant phase current. This could present a safety hazard if braking is less powerful than expected at speed.
Max Phase Accel Current: This sets the maximum phase current that will ever be commanded as a positive acceleration. This is speed dependent if you want this to vary with speed. Note the drive has built in limits on this value that may be lower than the GUI accepts, so just because you set this to 1000 doesn't mean you're getting 1000A.
Max Phase Accel Current Available With Throttle: Sets the max acceleration current that can be commanded with the control throttle. This does not affect QX or CAN commands. This is intended to limit the range of an analog or PWM throttle.
Max Phase Regen Current: This should be a positive number. This sets the maximum phase current that will ever be commanded as a regenerative braking event. This is speed dependent if you want this to vary with speed. Note the drive has built in limits on this value that may be lower than the GUI accepts, so just because you set this to 1000 doesn't mean you're getting 1000A.
Max Phase Regen Current Available With Throttle: Sets the max regen current that can be commanded with the control throttle.
Temp Cutoff: Sets the temperature at which the drive will turn off entering a fault condition
Temp Foldback Start: Sets the temperature above which the drive will reduce current linearly up to Temp Cutoff in an attempt to never hit that cutoff. For best user experience, this should be set approximately 10C lower than Temp Cutoff to give a wide foldback region.
Forward RPM Foldback Start/End: Runs a current command foldback between start and end. This is especially useful in torque mode, because the 'Max RPM Forward Direction' doesn't do anything unless you're in speed mode. For best user experience, make sure there are at least a few hundred RPM between the start and end
Reverse RPM Foldback Start/End: Same as forward except acts on the reverse direction in case you want a different speed limit in that direction.
Used for setting up how the drive starts. In sensored mode, none of this matters.
RPM Closed Loop 1: In speed modes, this sets the minimum command speed. Below this speed, an RPM command does nothing and the motor does not attempt to start.
RPM Closed Loop 2: In speed modes, this sets the speed below which the motor may stop spinning and wait until the command again exceeds RPM Closed Loop 1 before re-starting. RPM Closed Loop 1 must be larger than RPM Closed Loop 2.
When running in ramp mode, it usually works well to set Closed Loop 1 to around 2000eRPM for ramp startup and Closed Loop 2 to about 20% of that value.
Jitter Speed 1 (Introduced in firmware 1.1.2+, previously RPM Closed Loop 1 functioned as this when in jitter modes): This is one of the speeds that jitter mode runs at open loop. It is usually best to set these jitter speeds in the low double-digit range, although you can fine tune these values for the best startup. It's really just a matter of trial and error to get the best jitter startup parameters for a particular motor and vehicle inertia.
Jitter Speed 2 (Introduced in firmware 1.1.2+, previously RPM Closed Loop 2 functioned as this when in jitter modes): This is the second speed that jitter mode runs open loop. Usually it's best to have this very close to the same value as speed-1, although for some motors (especially low inertia loads like propellers) it may work well to have the two jitter speeds quite different.
Jitter Frequency: This only matters in sensorless jitter start. It sets the frequency which the drive jitters between the two previously mentioned frequencies. It's difficult to say what works best for a given motor and experimentation is required. Typically something in the 5-100Hz is found to work well but that could vary for atypical motors or loads!
Jitter Current Multiplier: When in jitter mode, the command current is multiplied by this amount. This gives a good strong jitter to get the motor started when it is under significant load. Usually 2-4x is a good figure here, although in some cases you might just want 1x.
Jitter Advancement Time: How long minimum-differential-flux must be met continuously before advancing out of jitter mode into run mode. This avoids spurious signals from making the drive exit jitter mode which creates a poor user experience. Usually this should be in the 1-100ms range. Any longer, and you'd probably actually notice a long amount of time the drive is sitting around jittering before starting. Any less, and those spurious events will make a poor experience.
Ramp Current: In ramp mode, this sets the current of the open-loop spin. In jitter speed mode, this sets the current of the jitter. This does not matter in kick start or jitter torque mode (where the torque command times the current muliplier is instead used)
Ramp Rate: In ramp mode, this sets how fast the drive ramps. If the load inertia is too high then the drive will lose sync because the open loop spin will be too fast at the ramp current to get the inertia going. If the drive enters siren mode during a ramp start, it probably lost sync due to too much inertia, too low ramp current, and/or too much ramp rate.
DQ Park Filter/Super DQ Park Filter: This sets the time constant of the D and Q axis current measurements. The DQ Park Filter acts upon the D and Q currents, while the Super DQ filter acts upon the super-transformed D and Q currents. In general, you want DQ park filtering for sensorless operation, and super-DQ filtering for sensored operation (especially if running at a very low speed). Set the other to zero.
Q-Current Int: Sets the integral gain of the Q current controller. This can be tuned using the 'I-Loop Wizard'.
Q-Current Proportional: Sets the proportional gain of the current controller. This presents a phase boost to raise crossover frequency and allow for a significantly faster current loop.
D-Current Int: Sets the integral gain of the D current controller. This can be tuned using the 'I-Loop Wizard'.
D-Current Proportional: Sets the proportional gain of the current controller. This presents a phase boost to raise crossover frequency and allow for a significantly faster current loop.
Q-Current Int Startup: The integral gain of the Q current controller when performing ramp and jitter starts. Sometimes this works better with a slower current loop, especially jitter start.
Q-Current Int Proportional: Sets the proportional gain for startup jitter or ramp.
RPM Deriv Filt: Filter applied to the derivative of the RPM.
Super-Diff: You should just leave this zero unless Freefly customer support tells you to do otherwise.
Max RPM Forward Direction: Sets the maximum RPM that can be commanded in the forward direction. This is just a clamp on command and does not affect the control loop. This means this is only having an effect in speed mode where there is a speed command. In torque mode, there is no speed mode so this setting does nothing. In that mode you should be using 'Forward RPM Foldback Start/End' in the Speed Limiting section below. Any command above this limit will be ignored and replaced with this limit.
Max RPM Reverse Direction: This should be a positive number. Sets the maximum RPM that can be commanded in the reverse direction. This is just a clamp on command and does not affect the control loop. Any negative speed command beyond this limit will be ignored and replaced with this limit.
Slew Up: Sets the maximum slew rate for increasing RPM command. This only affects the command, not the operation of the control loop. If you want speeds to change slowly, set this to a lower number. Conversely if you want high accelerations such as you might on a multirotor, set this as high as you can while keeping the motor stable. Extremely high slew rates may cause instabilities in the speed controller so this is one method of mitigating instabilities. This is a speed dependent parameter if you want this to change with speed. Sometimes at very low speeds, having a lower slew rate is helpful to maintain stability since the controller struggles more at low speed while at higher speeds a fast slew rate is fine.
Slew Down: Sets the maximum slew rate for decreasing RPM command.
KP Up: Sets the proportional gain of the speed controller for increasing speeds. As of April 4, 2018, there is no auto-tune for this.
KP Down: Sets the proportional gain of the speed controller for decreasing speeds. Often, this would be set to the same value as KP Up. As of April 4, 2018, there is no auto-tune for this.
RPM Integrator: Sets the integral gain of the speed controller. In many cases, you should just set this to 0. You only need this if you must have nearly zero error between measured speed and commanded speed. It is much more difficult to stabilize the control loop and get desirable step responses when including integral gain.
RPM Integrator Max: Sets the maximum current that can be added to the output of the outer-speed-loop as a result of the RPM integrator. useful to prevent major wind-up of the integrator if you don't want it to be able to output huge integral currents. If the integral gain is zero, then the value of this parameter is irrelevant.
Thrust Drag: Sets a feed-forward thrust drag. This parameter is largely experimental and has almost no testing or practical use history although it theoretically could improve transient response when using a propeller load.
Angle P Gain: Sets the proportional gain of the angle controller.
Angle D Gain: Sets the derivative gain of the angle controller.
Flux VIR HPF: This is the high-pass filter that is applied within the calculation of the integral of V-IR in the flux calculator. It is recommended to leave this at 1000ms unless you are an advanced user who knows how to tune this.
Flux VIR LPF: This is the low-pass filter applied in the integral calculation. It is recommended to leave this at a fixed 10ms value unless you are an advanced user. This is a speed-dependent parameter so to set it for 10ms set both the '<' min and '>' max both to 10ms.
Sensorless Angle Filter: Time constant of the angle filter. A good starting point for this is 4ms. It is very rare you would ever want it higher. If tuning the speed loop aggressively you may want to lower this. General motor instability may also be improved by lowering this.
Speed Filter: Time constant of the speed measurement filter. This is also good to start at 4ms. Again, very rare you'd want to go higher and lowering it may improve stability.
Minimum Differential Flux: Use the 'Flux Wizard' to set this (only after KV is correctly set). If the difference between any two fluxes is lower than this, then the ESC will register the motor as not spinning and set the speed measurement to zero. This is also used as the transition point in jitter start mode to trigger the ESC on when to advance from jitter mode to standard FOC run mode. The value of this parameter is irrelevant in fully sensored modes, but it is mandatory for any sensorless operation.
Check out the bill of materials below to build your own like ours!
My motor drive disconnects a lot when I'm trying to work on it over USB. What's wrong?: The motor drive can produce a high EMI environment, especially when spinning motors at high currents, during fault situations, etc. The USB protocol is very susceptible to this noise and it can be difficult to keep reliable connections. You should try to avoid using USB extension cables to connect the drive to a computer as this is going to make connection integrity much worse. Also try using a USB port on the back of the computer (directly on the motherboard) as the extension to a front port on a desktop computer can degrade signal integrity. If you need to use an extension, make it as short as possible and if possible place some ferrite rings on it. When extensions must be used, reliability can be improved by placing a USB hub at the end of the extension and plugging the drive into that. This acts as a repeater and can mitigate much of the EMI issues, although it's still ideal to be plugged directly into a computer. An even better option is using an isolated USB repeater (we've had pretty good luck with these: https://buy.advantech-bb.com/USB-Communications/USB-Isolators/BBC13251.products.htm). Ultimately, USB should really only be used for drive configuration and testing rather than control of an installation. Even with an isolator and no extension cables, it will still not be a perfectly robust system. You should be able to get it good enough to easily perform configuration and test sessions without much stress though!
When configured in Torque Forward Only mode, the motor makes popping noises instead of effectively braking at low speeds or when the tire locks up (either sensored or sensorless): The drive is actually doing what it should, but an undesirable natural oscillation occurs near zero speed with high regen braking. When the tire stops spinning, the braking torque makes it want to start spinning backwards. The forward-only mode prohibits this and cuts torque if the motor isn't spinning forward. Once torque is cut, the inertia of the vehicle starts the motor forward again, and once again there is regen braking. This cycle repeats with the motor constantly starting to spin backwards then have torque cut off. The result is a series of popping noises while the ESC is preventing reverse tire spin (much like the vibration you feel in the brake pedal when a car's ABS becomes activated). This is a pretty undesirable behavior as it's a loud and unpleasant pop, plus you lose much of the power of the regen brakes when the wheels lock.
As of firmware version 1.1.1, there is an easy fix for this. Just set the Torque-Forward-Only Regen Foldback Start-Below PWM parameter to a higher value. For most motors, about 2% will get rid of this behavior, which is the default value for a reset Arc200 drive. This parameter makes the max regen command linearly fold back from the programmed maximum to zero over the range from 0% PWM width up to the parameter's programmed value. By creating this region where the regen command is being reduced, a steady-state operating point is found when full regen commands are given near low speed. In fact if you watch closely you will be able to see the tire very slowly spin forward when it locks up on a low-traction surface. This operating point of braking stability eliminates the popping and reduction in braking effectiveness.
When I push my throttle full acceleration or full braking, it doesn't feel like I'm getting anywhere near the programmed max acceleration or regen current. Make sure your throttle ranges are configured correctly in the throttle setup section of configuration! You can use the throttle setup wizard to help set the end-points. A mis-configured throttle will not necessarily ever reach the programmed max acceleration current. After you configure your throttle, it's a good idea to connect to the GUI and make sure that when you push your throttle all the way forward or brake, that the commanded Q-axis current on the telemetry window is roughly equal to the programmed maximum (it might just barely not reach it due to rounding errors throughout a variety of current foldback and limiting systems).
When I'm commanding zero current in torque mode (neither acceleration nor braking), the motor either accelerates or feels like it is excessively braking. How do I set the bias-point of a zero current command so that zero current command is as close to true coasting as possible? Due to the switching nature of a motor drive coupled with imperfections in a motor's physical construction, there is always some error between the motor drive measuring zero-current, and the motor actually carrying zero current. Usually, this is no more than a few amps and is typically speed dependent such that the error gets higher as the motor spins faster. As of firmware version 1.1.1 and later, there is a Current Command Offset parameter in the Control section of the drive configuration. If your motor accelerates when commanded with zero current (usually, this will only happen with no drive train connected since even the slightest mechanical damping would stop it), then you need a slightly more negative value for this. If your motor rapidly stops and feels like it has too much braking when commanded with zero current, you need a value closer to zero. The default value is -0.15A/(VDC * PWMdec) since most motors need a little bit of offset to stop when provided with a zero current command at higher speeds.
When I have a high max torque command (usually you run into this at 150A or greater commands) sometimes it just pops when given high throttle instead of giving torque. A few things to try:
Increasing the inductance setting by around 50-75% higher than what the autotune process gives can help reduce this effect. If you go too far on this, you may notice a loss of acceleration.
Using a faster current loop tuning can help. Try the 'Fastest with Current Filtering' option in the Current Loop Tuning Wizard. If you have experience tuning control loops you can try going for an even higher crossover frequency than this tuning results in but in most cases you can't get much faster.
Try reducing the DQ Park Filter/Super-DQ Park Filter in the configuration (unless it's already zero). Most autotune results will give 5ms here, but try something like 0.5ms, it may help.
If you're running sensors (especially hall-sensors), the sensor might not work well at higher speeds. Make sure you setup the "Sensorless Transition Start" and "Sensorless Transition End" parameters to appropriately low values. Usually a few hundred RPM. Below the "start" parameter, the motor is fully sensored. Above the "end" parameter, the motor is fully sensorless. Between the two, it linearly transitions between sensored and sensorless to avoid a discrete mode change.
Ultimately, once you've done both of the above your best bet is to just reduce the 'Max Phase Accel Current' parameter until the problem goes away. For example many motors will run into this problem when you set the max phase accel current to 200A, but are totally fine at 180-190A.
When a motor is trying to start in Jitter mode, it just shakes but never actually goes into normal closed-loop operation no matter what, or struggles to exit jitter mode even when no mechanical load is holding it back: Try either increasing the Jitter Speed 1 and 2 parameters and/or reducing the Minimum Diff Flux parameter slightly (Not by much! It's rare you need to lower the min diff flux from the suggested value in the autotune pop-up).
When coming to a stop in torque mode, the motor makes a very brief pop as the shaft stops spinning: If in torque-forward-only mode, increase the "Torque-Forward-Only Regen Foldback Start-Below PWM" parameter. Default is 2% but going as high as 5-10% may be helpful in some cases. If that doesn't fix it or you're not in that operating mode, try slightly increasing the Minimum Diff Flux parameter (no more than 2x what the autotune pop-up suggests for that parameter at the most).
Why can't I see my motor drive as a BTLE device?
Starting in Arc200 firmware v1.1.9, there is an option in the drive-specific functions section of configuration to disable BTLE. This may be used if there are concerns about security with having an open BTLE device for configuration. By default from the factory, this is set to 'No' which leaves BTLE enabled. If you changed this to 'Yes', then your drive will be silent on BTLE and you need to connect to the drive to re-enable BTLE. You will need to power-cycle the drive after saving this setting to flash to complete the enable or disable of the BTLE feature.
Movi Pro API: https://freeflysystems.com/support/movi-pro-support
At this time there is no API software written specifically for the Motor Drive project. The QX protocol is the same as that used in Movi Pro's API so that QX module can be used for motor drive. This page outlines the QX messages that you will want to send to control or monitor the drive.
You can communicate with Freefly motor drives over the QX Protocol, a custom communication protocol outlined on this page. This will allow for basic control of the drive as well as monitoring telemetry.
Freefly's customer support team prioritizes end-user support and will not be able to answer API support requests. Please visit the Freefly Forum API Section for FAQs, additional resources, and bug reports.
Each drive model may feature slightly different communication channel configurations:
Arc 200:
CAN-bus, 1mbps
USB over ST virtual serial port driver: baud rate, parity, etc. do not matter over this emulated layer
External UART: 115,200kbps, 8 bits, no parity, 1 stop bit (8N1)
Freefly’s custom communications protocol that provides this interface is called the “QX Protocol”. This is a compact, lightweight binary messaging protocol that minimizes the size and complexity of messages, making it efficient for transmission on bandwidth constrained communications links.
Source code that allows building and parsing messages with this protocol is provided as a portable pure C language library that can be included in C/C++ projects directly, and used as a template in projects of other languages.
The QX protocol uses a client - server model where clients send read or write requests and receive current values, and servers send current values and receive read or write requests. In the Freefly API, the device connected to a COM port acts as the client and the MōVI Pro acts as the server.
To use the API on any of these channels, the drive just needs to be set in QX command mode. Set the 'Input Throttle Mode' configuration field to 'QX (GUI, UART, CAN, BTLE, or API)' and it will accept commands over this channel.
You can still use the QX communications over any channel to monitor drive telemetry even if the command mode is not in this mode. For example if you want to use an analog throttle but monitor drive temperature over QX, just set the input throttle mode to Analog and you can still monitor the temperature. You would not be able to command torque over QX anymore as the drive will only be listening to the analog throttle for commands.
To send a QX message over the CAN bus, you just need to send CAN message ID 0x78 with a payload length of 1 to 8 bytes. These bytes will be sequentially read into a QX parser. If a QX message is longer than 8 bytes (as most are), then you just send it in multiple 0x78 packets. For example if your message to send is 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, you would send a 0x78 ID CAN message of length 8 with payload 0, 1, 2, 3, 4, 5, 6, 7, followed by another 0x78 ID CAN message of length 2 with payload 8, 9.
There is nothing special about matching your QX messages to the frames of the 0x78 message. This is really just acting as a virtual UART layer on the CAN bus. Any 0x78 message is merely bytes coming in through the virtual UART stream which are then processed in the order received by the QX parser.
Here are the contents of the QX protocol. If you are using the QX submodule included with the Movi Pro API, you probably won't need to craft these messages at the byte-level. If you are implementing your own QX handler you will need to send a message that follows this structure. The response will come back from the drive in the same structure appearing as another QX message of the same attribute ID.
Offset
QX Purpose
Value/Range
Data Function
0
Header 'Q'
'Q' = 0x51
Header
1
Header 'X'
'X' = 0x58
Header
2
Length
Do not exceed 0x7F
Number of bytes between LENGTH and CHECKSUM
Start counting LENGTH and contribute to CHECKSUM below this line
3
Attribute ID
0x80 | (Attribute & 0x7F)
LSB's of attribute
4
Attribute ID
(Attribute & 0x3F80) >> 7
MSB's of attribute
5
Options
0x42
Reserved, set to 0x42 for API communications (sets to absolute-write mode which can be used for polling telemetry too)
6
TRID
0x0
Reserved transmit request ID
7
RRID
0x0
Reserved reply request ID
8 - N
Payload
Payload contents
Stop counting LENGTH and stop contributing to CHECKSUM now
N+1
Checksum
255 - (SUM(Checksum-bytes) % 256)
Message verification checksum
For each message ID, the bytes in the payload are shown as well as the code you would use to generate the message using the QX protocol provided by Freefly.
UC As UC, US As US, and UL As UL are 8, 16, and 32 bit unsigned binary values transmitted on the wire. FL As FL is a 32-bit floating point number transmitted in raw binary following standard C floating point conventions.
This command is only applicable if the drive is in speed-mode. In all other modes this command will be ignored.
Payload Offset
Contents/Description
Length (bytes)
Type
0
Motor Identifier (set to 0)
1
UC As UC
1-4
RPM Command
4
FL As FL
Example QX code:
This command is only applicable if the drive is in torque-mode. In all other modes this command will be ignored.
This command follows the same structure as the RPM command, except the RPM command is replaced by a torque command (in amps).
Angle Command (Attribute ID 1012):
This command is only applicable if the drive is in angle-mode. In all other modes this command will be ignored.
This command follows the same structure as the RPM command, except the RPM command is replaced by an angle command (in degrees support decimal precision).
This packet can be polled at any time over QX regardless of what control or output mode the device is set in. It provides basic real-time monitoring potential for logging or displaying to the user on a dashboard.
When sending this message, you can optionally send dummy contents for all the data. The values will be ignored. You can also just send one byte. The only one that actually matters for polling is the motor identifier (which should be set to 0). The remaining bytes are ignored by the drive and need not be present. The response from the drive includes the telemetry in these fields.
Payload Offset
Contents/Description
Units
Length (bytes)
Type
0
Motor Identifier (set to 0)
1
UC As UC
1-4
DC Voltage
Volts
4
FL As FL
5-8
DC Current (sensor not present on all drive models)
Amps
4
FL As FL
9-12
Phase A Current
Amps
4
FL As FL
13-16
Phase B Current
Amps
4
FL As FL
17-20
Phase C Current
Amps
4
FL As FL
21-24
Phase A Flux
Wb
4
FL As FL
25-28
Phase B Flux
Wb
4
FL As FL
29-32
Phase C Flux
Wb
4
FL As FL
33
Reserved, Ignore
1
UC As UC
34
Reserved, Ignore
1
UC As UC
35
Reserved, Ignore
1
UC As UC
36-39
Throttle Input Raw (As telemetry, not command)
N/A
4
FL As FL
40-43
DC Current, Estimated
Amps
4
FL As FL
44
Reserved, Ignore
1
UC As UC
45
Reserved, Ignore
1
UC As UC
46
ESC Fault State
1
UC As UC
47
ESC Soft Fault State
1
UC As UC
48-41
Brake Input Raw (As telemetry, not command)
N/A
4
FL As FL
Example QX code:
Follows the same concepts as Telemetry Packet 1.
Payload Offset
Contents/Description
Units
Length (bytes)
Type
0
Motor Identifier (set to 0)
1
UC As UC
1-4
Q-Axis Current Command
Amps
4
FL As FL
5-8
Q-Axis Current Measured
Amps
4
FL As FL
9-12
D-Axis Current Command
Amps
4
FL As FL
13-16
D-Axis Current Measured
Amps
4
FL As FL
17-20
RPM Measured
RPM
4
FL As FL
21-24
PWM Out Magnitude
LSB's
4
FL As FL
25-28
Phase (Voltage to BEMF Offset)
Degrees
4
FL As FL
29-32
BEMF Absolute Angle
Degrees
4
FL As FL
33-36
Drive Temperature
Deg C
4
FL As FL
37-40
Q-Axis Integrator Loop Output
Volts
4
FL As FL
41-44
D-Axis Integrator Loop Output
Volts
4
FL As FL
45-48
Sensored Shaft Angle
Degrees
4
FL As FL
Example QX code:
The Arc GUI is designed and tested for Windows 10. It may work on previous versions of Windows but it is untested.
Just unzip the package into one folder and run the EXE. No installation is necessary, this will directly launch the GUI.
July 16, 2019 - v1.1.11 June 27, 2019 - v1.1.10 April 1, 2019 - v1.1.9 November 15, 2018 - v1.1.8 October 11, 2018 - v1.1.6 October 9, 2018 - v1.1.5 October 3, 2018 - v1.1.4 August 23, 2018 - v1.1.2 August 17, 2018 - v1.1.1 July 17, 2018 - v1.1.0 July 12, 2018 - v1.0.100
For USB connectivity, you may need to install the STLink Virtual COM port driver: https://www.st.com/en/development-tools/stsw-stm32102.html
The GUI is mostly self documented within so you should be able to understand the use and functions of the GUI from within.
If you want a bit more guidance on how to start the auto-setup wizard for a beginner user, look here.
For a detailed list of definitions and discussions on all tuning parameters for advanced users, look here.
When operating the configuration tab, realize that what's displayed is not real-time synchronized with the configuration on the drive. When you first connect, a 'Download' operation is performed which pulls the configuration from the drive and displays it on the Configuration tab. Any change you then make is not immediately sent to the drive until you press 'Send'. Using the 'Send' button sends it to the drive's active memory and it immediately affects the operation of the drive, but it is still stored temporarily and would be lost at a power cycle. To store a configuration indefinitely, press 'Write to Flash' after pressing 'Send' (it writes what's on the drive to the flash memory, not what's on the screen so you must first use 'Send' to load your configuration to the drive, then 'Write to Flash' to load what's on the drive into long-term memory). If you ever want to revert the drive to a factory configuration, you can use Erase Flash then power-cycle the drive (disconnect and re-connect is not sufficient, drive must actually reboot).
v1.1.10
Adds support for erasing the log flash memory chip
v1.1.9
Adds support for latest v1.1.9 Arc200 firmware
v1.1.8 (v1.1.7 was unreleased so this is a change log since 1.1.6)
Correct math error in the DC current foldback graph generation of the general setup pop-up.
Fix bug where a divide-by-zero hard fault may occur if clicking "Setup Wizard" on a drive that hasn't yet successfully completed an initial parameter download.
Bug fix where on rare occasion, the function generator tab says the drive is in safety state on initial connection even though the drive is really configured in a controllable mode.
Reliability improvements in parameter send/download when multiple drives are connected to one GUI simultaneously.
If you open the current tune wizard and click save-and-close without pressing run, a warning pops up confirming that you really intend to save-and-close.
Now operates cleanly on a 720p monitor with scrolling implemented where windows previously didn't fit.
Bug fix where loading a UMDS2 preset file that included a combo-box driven parameter that does not exist in the currently connected drive firmware previously caused a hard-fault exception.
v1.1.6
Correct units of slew up/down to be in RPM/s instead of the previously incorrect RPM
Add new "Max Phase Accel Available With Throttle" and "Max Phase Regen Available With Throttle" in case you want to limit your throttle's maximum range compared to the drive's configured max phase current.
Bug fix where max phase accel and regen were not properly set after pressing save and close in the general setup pop-up
Fix bug where connecting to an old drive firmware using a new GUI version may cause a hard-fault crash in the GUI
v1.1.5
The AutoFOC pop-up no longer requires interacting with the function generator tab, user can instead use the built-in speed control slider
Fix bug where encoder autotune pop-up still appears in quadrature mode
Fix bug where the title of the groupbox for encoder calibration is not updated when changing the type of calibration
If there is any general drive fault (such as over-current, under-voltage, etc.) at any point during an autotune of R, L, or FOC/KV, the autotune process is aborted and the user is informed of the problem (usually power supply related).
v1.1.4 (note v1.1.3 was unreleased so this is a change log since 1.1.2):
Adjusted the current loop tuning levels to improve the robustness of a loop tune when running the advanced fastest-with-current filter.
Rearranged the UI of the current loop tuning pop-up
Changed the programmable over-voltage cutoff level maximum from 54v to 52v for Arc200 drives
Add new separate Jitter Speed 1 and 2 parameters so that they are separate from RPM Closed Loop 1 and 2
Remove the need for selecting between sensored and sensorless when tuning the current loop
When loading a preset, if it uses DQ-filtering, a pop-up suggests changing this to Super-DQ-filtering since it has superior performance on the latest firmwares.
Encoder calibration pop-up now in step-by-step wizard format which allows user to select the encoder type, set the drive configuration to speed mode/sensorless/QX, send, then spin the motor from within the setup pop-up.
Auto-tune wizard merged with the general setup helper pop-up. Now the auto-tune wizard is just the first tab of the setup helper improving user work-flow and making the system easier to understand.
Items in the general setup helper now disappear if they are not relevant to the selected mode of operation.
Throttle setup pop-up now in step-by-step wizard format which allows the user to select the input type, set the drive configuration to No Control (safety state), send, then perform throttle setup based on the selected mode.
Auto-tune wizard and applicable pop-ups now have built-in send buttons so you no longer have to do it from the configuration tab.
Reliability of sending-configuration greatly reduced so you should now almost never see a notice about transmission verification failing on parameters.
Logs can no longer be downloaded over a bluetooth connection. Note is displayed informing the user to re-connect over USB to download logs.
Add support for CAN networking for command forwarding
Add support for throttle expo
v1.1.2:
General improvements to button and instruction text in the UI.
v1.1.1:
Add support for new definition of a QX121 packet with new byte offsets. GUI supports either new or legacy QX121 packet for backwards compatibility.
Correct the axis labels on the X and Y axes in the dependent parameter pop-up.
Re-order the parameter groups so that they appear in a more logical order (advanced filter parameters at end, loop tuning in the middle, basic setup beginning). This change only applies for latest comms rev or newer.
Improved current command offset which is now just one parameter rather than being a speed-dependent setup requirement. Also added this parameter to the general setup helper wizard.
Change "Temp Cutoff" and "Temp Foldback Start" parameter names to "ESC Temp Cutoff" and "ESC Temp Foldback Start" for clarity.
Autotune task buttons are only enabled after the previous task is complete. Makes it nearly impossible to get out of order.
Bug fix in presets pop-up where clicking in a blank space in the listbox previously caused an out-of-bounds array index hard fault.
Autotune wizard now has an added step after loading pre-FOC autotune preset which requires sending the config to the drive before starting pole pair measurement.
Add ability to set regen current foldback at low PWM widths when in torque forward only mode to avoid motor jerking at very low speeds with high regen commands.
Improved in-app documentation on the encoder auto calibration process.
v1.1.0:
Improved robustness of the flash log download system including additional error messages if the drive can't list all logs.
Bug fix makes several pop-ups no longer cause the motor to time-out if OK is not clicked within a few seconds.
Add details to inductance and resistance measurement pop-ups to discuss what variation from run to run is concerning.
Move warning text about wattages to the end of the text block in the resistance and inductance measurement pop-ups.
Improved function generator tab with adjustable scale labels on the slider and +- fixed value buttons.
Improved in-program documentation on setting RPM Closed Loop 1 and RPM Closed Loop 2.
Added a display of the GUI software version above the plot window and a display of the drive model and firmware version at the top of the telemetry tab.
Send, download, and flash buttons are now greyed out and disabled until the currently-requested send or download operation completes. Improved user experience.
Send and download now perform significantly faster over bluetooth and hopefully reliably now.
Log save-as button is now only enabled after a log is successfully downloaded leading to an improved user experience.
Telemetry updating is limited to 5hz when connected over Bluetooth, and a Bluetooth logo is displayed when in this state to inform the user.
Send many 'Q's before the first QX when connecting to a drive to clear the parser state machine on the drive in case the last connection closed inelegantly and left the parser mid-message.