Digital Communication and Control _ USB & UART
Datasheet / UART
One of the ways of commanding and getting feedbacks from SOLO in a completely digital fashion is using USB or UART communication protocols, USB is accessible through a micro USB type-B connector mounted on SOLO which acts as a COM port once connected to PC, and UART is accessible through the “Communication Port” of SOLO as can be seen below, by using any of these two in digital mode, you can fully control SOLO with all the commands and feedbacks sent and received through data packets without the need to send any forms of analog commands like PWMs and so on.

As can be seen, inside the communication port, Pins 17 and 19 are in the TX and RX pins of UART respectively and they are 3.3V level signals. Please notice that these pins are NOT 5 volts tolerant and in case you want to send/receive signals in 5V range you need to use a level shifter module or IC, so that they will shift the 5V leveled signals into 3.3V level suitable for SOLO, in case of connecting 5V leveled signals to these pins, the permanent damage to the board in imminent.
The main settings for UART communication between SOLO and a secondary Modules/PC will be as following, However in case of using the micro USB of SOLO, the baud-rate can be set to any arbitrary value (normally below 1Mbits/s), but we recommend you to keep the USB port settings similar to standard settings mentioned below:

* – SOLO can be commanded in both of these baud-rates, the standard baud-rate is used when the external system supports only standard baud-rates, but for those systems in which the baud-rate can be set manually, it’s better to use the exact baud-rate value due to higher accuracy of data transmission.
Packets formation – Commanding and Feedbacks
To send or receive a command from SOLO in Digital mode, you need to form a data packet combined out of 10 bytes, based on the following format:

A data packet to be sent/received to/from SOLO is divided into 6 different sections and each of these sections are as below:
– INITIATOR: This is a constant two bytes code which indicates the start of a packet, the value is fixed at “0xFFFF ” in Hex format or “65535” in decimal format.
– DEVICE ADDRESS: This is a single byte which stands for the address of the device, as a matter of fact, each SOLO can have an address from 0 to 254, this device addressing is useful when you want to put lots of SOLO’s in a network, so each of them can be assigned to a unique address. The default value of the address is 0.
– COMMAND: This is a single byte, which is a fixed code that defines the type of the command/feedback we are sending/receiving To/from SOLO.
– DATA: This is a 4 bytes space to put the possible data of a command or read the feedback data of a specific phenomenon from SOLO, like the value of the speed of the motor and etc.
– CRC: This is the CRC byte to control the integrity of the data sent through UART, this functionality is inactive in BETA models ( just put 0 instead of it)
– ENDING: Similar to the packet initiator, this is again a constant single byte valued at “0xFE” in HEX format, which stands for the end of a packet sent or received.
After sending a data packet to SOLO, three scenarios will happen:
1. If the packet is correctly formed and acceptable, SOLO will echo-back the exact same packet that it received as a sign of acknowledgement of a correct receipt and settings.
2. If the packet is correctly formed, but the value inside the “DATA” part is out of range or there is an issue with it, SOLO will send back the following packet which is an indication of an Error.
Error Packet:

3. If the packet is wrongly formed in terms of bytes, initiators and endings, there will be no response coming back from SOLO, until you send a correct packet.
In General, to communicate with SOLO, there are two types of commands:
1- Commands to Write or Set something, these commands as their name suggests, will allow the user to tune a parameter inside of SOLO or set a value for the controllers like the desired speed or torque and so on.
2- Commands to Read a value from SOLO, using these types of commands, you’ll be able to read various types of parameters and feedback from SOLO, in real-time or in Monitoring Mode which will be explained later in this chapter.
READ commands table


– In the tables as you see, each command has a unique code that is mentioned both in decimal and HEX format inside the brackets.
– There are three different data types used to fill the DATA section as mentioned below:
1. Uint32 which stands for standard unsigned integer with 32 bits
2. Sfxt(32-17) which stands for signed fixed-point data type with 32 bits combined as :
– 1 Sign bit
– 14 integer bits
– 17 floating-point bits
3. Int32 which stands for signed 32 bits integer values
– There are two types of parameters in “WRITING” mode:
– Volatile parameters: They are shown with “V” inside the Storage section of the writing table, these are the parameters that you should write in them whenever you want to change them or after power recycling ( turn ON/OFF), they will not be stored in a long-term memory and after a power rest they will be reverted back to their default values.
– Memory stored Parameters: These parameters are shown with “M” inside their storage section of the writing table, after writing in them, their final values will be stored in a non-volatile long term memory and they will be remembered after power recycling, The memory used to store these values is a precious resource and the number of Writings are limited to a couple of Million times ( 1,000,000 times guaranteed). So for these types of values which are basically one time settings for a long period ( as long as the Motor is the same ), the users should avoid to write in them every-time if their values has not been changed with respect to the past. In the example sections down below you’ll see in some of the examples how to propperly treat them.
– “The Monitor Mode” enables you to keep monitoring the top 10 variables continuously without the need to send a read command every time, so by enabling the Monitor mode you will receive continuously the sampled values for:
1. VA: 3 phase Motors phase A voltage (BLDC, PMSM, ACIM)
2. VB: 3 phase Motors phase B voltage (BLDC, PMSM, ACIM)
3. IA: 3 phase Motors phase A Current (BLDC, PMSM, ACIM)
4. IB: 3 phase Motors phase B Current (BLDC, PMSM, ACIM)
5. VBUS : The power supply voltage ( BUS / Battery voltage )
6. IM: The DC motor Current
7. VM: The DC motor Voltage
8. Iq: The quadrature Current in 3 phase motors ( current acting in torque generation)
9. Id: The direct Current in 3 phase motors
10. Speed: The speed measured or estimated by SOLO both in Sensorless and in Sensor-based methods
These values are sampled all at the same time instant, and the Monitoring will continue until you disable it. This is a very interesting feature for those of applications in which keeping track of all the vital parameters is necessary.
Convert Fixed-point data read from SOLO into real world floating point data type
As mentioned before, the data that comes as a feedback or sent to SOLO as a command can have the fixed-point format, which is a replication of floating point format for digital systems. Here we want to convert the data read from SOLO in case they are from the fixed-point format to their real world floating point format as following steps:
– If the data read from SOLO is less than or equal to 0x7FFE0000 (Hex) or 2147352576 (decimal), This means the data is positive, so follow the following steps
1) Convert the hex data read from SOLO into Decimal format
2) The float number = data read from SOLO (in Decimal format) / 131072
– If the data read from SOLO is greater than 0x7FFE0000 (Hex) or 2147352576 (decimal), This means the data is negative, so the conversion will be as :
1) Subtract the data from 0xFFFFFFFF and then add a 0x1 to it (add 1 to it)
2) Convert the result of step “1” into Decimal format
3) The float number = (data in Decimal format taken from step “2” /131072 ) * -1
Example: Positive Numbers Conversion (the data read from SOLO is less than or equal to 0x7FFE0000)
Data read from SOLO : 0x00030000
Since the data is less than 0x7FFE0000 Conversion:
1) Decimal (0x00030000) = 196608
2) 196608 / (131072) = 1.5
Example: Negative Numbers Conversion (the data read from SOLO is greater than 0x7FFE0000)
Data read from SOLO : 0xFFFCCDD2
Since the data is greater than 0x7FFE0000
1) (0xFFFFFFFF – 0xFFFCCDD2 ) + 0x1 = 0x0003322E
2) Decimal ( 0x0003322E ) = 209454
3) (209454 / (131072) )* -1 = -1.598
Convert float data to fixed-point for SOLO to be sent in a data packet
some times you need to send a float number in a data packet to SOLO, for example for setting the current limit value or the Kp, Ki gains and so on, here you need to convert your float number into a fixed-point format data type as below:
If the float number is Positive
1) Multiply the float number into 131072
2) Round down the result into the nearest integer value
3) Convert this value to HEX
If the float number is Negative
1) Multiply the float number into 131072
2) Round up the result into the nearest integer value
3) Ignore the sign of the integer and convert this value to HEX
4) Subtract data from “0xFFFFFFFF”
Example: Positive Float number conversion into Fixed-Point data type
Data to convert : 4.2
Conversion:
1) 4.2 * 131072 = 550,502.4
2) Round(550502.4) = 550502
3) Hex (550502) = 0x0086666
Example: Negative Float number conversion into Fixed-Point data type
Data to convert : -14.36
Conversion:
1) -14.36 * 131072 = -1,882,193.92
2) Round(-1,882,193.92) = -1,882,193
3) Hex (abs (-1,882,193) )= 0x001CB851
4) 0xFFFFFFFF – 0x001CB851 = 0xFFE347AE
If you’d like to learn more about fixed point data types, you can read the following articles.
– Introduction to Fixed-Point Numbers
– Fixed_point Data types and their conversions to floating points
– Fixed-Point Data Types
– The “DATA” part of a packet must always contain 4 bytes (32 bits) even if you are not sending anything special as data. So in general the size of a packet must always be strictly 10 bytes with initiator and ending bytes and a correct command code as well as a correct device address.
Convert Hex data read from SOLO to signed Int32
– If the data read from SOLO is less than or equal to 0x7FFFFFFF(Hex) or 2147483647 (decimal), This means the data is positive.
When the data is positive, we can treat it like a normal unsigned value, so you can just directly convert the Hex value to decimal
– If the data read from SOLO is greater than 0x7FFFFFFF(Hex) or 2147483647(decimal), This means the data is negative, so the conversion will be as :
1) Subtract the data from 0xFFFFFFFF and then add a 0x1 to it (add 1 to it)
2) Convert the result of step “1” into Decimal format
3) Multiply the result of step 3 to “-1”
Example: Positive number
Data read from SOLO is “0x0003F393”
– The data is smaller than 0x7FFFFFFF so it becomes : Dec (0x0003F393) = 258963
Example: Negative number
Data read from SOLO is “0xFFFCA8AD”
– The data is bigger than 0x7FFFFFFF so we will have:
1. (0xFFFFFFFF – 0xFFFCA8AD ) + 1 = 0x00035753
2. Dec(0x00035753) = 218963
3. 218963 * -1 = -218963
Convert signed Int32 to Hex for sending to SOLO
If you want to send signed Int32 values in form of Hex numbers to SOLO which are normally used for position controlling purposes, you can use the following to convert you data:
If the data is positive:
If the number you want to send is positive, the only thing you need to do is converting the integer into HEX like an unsigned value
If the data is Negative:
For sending negative Integers with Hex format to SOLO, you need to follow the following steps:
1. Subtract the absolute value of your number from 4294967295(Decimal) or 0xFFFFFFFF(Hex)
2. Add 1 to the result of step 1
3. Convert the result of 2nd step to Hex
Example: Positive number
Data to be sent: 1536
– Hex (1536) = 0x00000600
Example: Negative number
Data to be sent: -56329
– Hex (4294967295 – Abs (-56329) + 1 ) = 0xFFFF23F7
Connection to ARDUINO
You can connect SOLO to ARDUINO UNO similar to image below

– NOTE: The UART_TX and UART_RX Lines of SOLO are 3.3V, so if you are going to use it with ARDUINO boards with 5V level UART lines (like Arduino UNO), you need to use circuitry similar to image above, otherwise, if your ARDUINO has 3.3V UART lines (TX and RX) you can connect them directly to SOLO.
CONNECTION SOLO Beta To ARDUINO UNO

– NOTE: The UART_TX and UART_RX Lines of SOLO BETA are 3.3V, so if you are going to use it with ARDUINO boards with 5V level UART lines (like Arduino UNO), you need to use circuitry similar to image above, otherwise, if your ARDUINO has 3.3V UART lines (TX and RX) you can connect them directly to SOLO, however SOLO UNO is compatible to both 3.3V or 5V logics for UART.
Connection to PC
You can connect SOLO to your PC in two ways:
1- Just simply use the USB port available on SOLO! Once you connect that port to your PC, it will turn into a COM port and you can send or receive all the digital commands or feedbacks through that easily. To get the best performance out of that, we recommend you to download the latest Windows driver from here, although Microsoft will install a driver automatically for that, but the best is to use our standard driver.
** Once you downloaded the driver, just Unzip it and go inside of the folder, then right click on “usb_dev_serial.inf” and select install. This will install the device driver for you, and after power recycling SOLO, you’ll see a new COM port will appear on your device manager under the name of “TivaWare USB serial port” associated to SOLO.
2- For what ever reason, you might want to send your commands through UART port of SOLO from PC, in that case , the only thing you will need is a “UART to USB convertor with 3.3V logic level” which are commercially available in various types and usually very cheap, their action will be to convert the USB (COM port) signals to TTL signals for UART communication, in general their configuration to be used with SOLO can be done as below:

– The UART_TX of SOLO which is the UART output should get connected to the RX of the module which is the UART input of the module
– The UART_RX of SOLO which is the UART input should get connected to the TX of the module which is the UART output of the module
– There must be a connection between the grounds of SOLO and the ground of your module through the GND pins which can be taken from either of pins 3,4 or 20 of the communication port of SOLO, you can also use the GND of the Analogue port which are basically the same.
– SOLO also provides +3.3V or +5V outputs at the “Communication Port” which you can use to supply your modules if needed.
Here there are some sample modules which you can use, just keep in mind the TTL voltage level of these modules must be 3.3V, you can use any other modules with the same functionality as you like:
Form RS:
– TTL to USB 3.3V wire
– module 1
– module 2
From Mouser:
– TTL to USB 3.3V wire
– module 1
– module 2
Examples
In below, you find a number of examples on how to form packets for different purposes for sending to SOLO or receiving feedback from it.
– NOTE : The SPACE in between the bytes below, is just for readability purposes and you shouldn’t send the ASCII code of SPACE, all the bytes (characters) should be sent to SOLO one after another with nothing in between, so in the examples below please ignore the SPACE in between each byte.
– NOTE: The device address in all the packets below is considered as “0”, since this is the default device address. If you change the device address you must also change the device address value in these packets as well.
Changing the Direction of Rotation
Change the direction of rotation CCW
FF FF 00 0C 00 00 00 01 00 FE
Change the direction of rotation CW
FF FF 00 0C 00 00 00 00 00 FE
Stop the Motor [Emergency]
FF FF 00 08 00 00 00 00 00 FE
Set the Motor Number of Poles
Note: in SOLO you set the Number of Poles of the motor, and this is a parameter useful for 3 phase Motors and their accurate speed calculation. Notice that this is different with the number of pole-pairs and the relation is as below:
Motor Number of Poles = Number of Pole-pairs * 2
Set the Number of Poles at 8:
FF FF 00 0F 00 00 00 08 00 FE
To check the written value:
Read the number of Poles:
FF FF 00 8F 00 00 00 00 00 FE
Enable/Disable Monitoring Mode
By enabling the Monitor mode you will receive continuously the sampled values for:
1. VA: 3phase Motors phase A voltage (BLDC, PMSM, ACIM)
2. VB: 3phase Motors phase B voltage (BLDC, PMSM, ACIM)
3. IA: 3phase Motors phase A Current (BLDC, PMSM, ACIM)
4. IB: 3phase Motors phase B Current (BLDC, PMSM, ACIM)
5. VBUS : The power supply voltage ( BUS / Battery voltage )
6. IM: The DC motor Current
7. VM: The DC motor Voltage
8. Iq: The quadrature Current in 3 phase motors ( current acting in torque generation)
9. Id: The direct Current in 3 phase motors
10. Speed: The speed measured or estimated by SOLO both in Sensorless and in Sensor-based methods
These values are sampled all at the same time, and the Monitoring will continue until you disable it. This is a very interesting feature for those of applications in which keeping track of all the vital parameters is vital.
Start Monitoring:
FF FF 00 19 00 00 00 01 00 FE
If you want to stop the monitoring, use:
FF FF 00 19 00 00 00 00 00 FE
SET the PWM Frequency
NOTE: By default there are two types of PWM frequencies available on SOLO before you overwrite them, 20kHz and 80kHz ( look at the piano switch settings), but if you overwrite the PWM frequency by using the following method, , it will make it the same for all the motor types as long as you haven’t done the “Reset factory”, so after doing the reset factory, you’ll go back to the initial setting with two different switching frequencies.
Set switching frequency on 30Khz
FF FF 00 09 00 00 00 1E 00 FE
To check the written value and read the switching frequency
FF FF 00 8B 00 00 00 00 00 FE
Reset the Device to Factory Mode
This is a packet to reset the device into factory default mode; after this action, all the parameters saved in the memory will be reset into their default values. After this action, a power recycle is recommended.
FF FF 00 14 00 00 00 01 00 FE
Change or Set/Reset the Device address
The default device address on each SOLO upon delivery is 0, but you can change this value to anything in between 0 to 254 or [0xFE]. For example in below you can see an example of how to change the device address from 0 to 1, and then for reading it, as you see inside the packet to read the device address after setting it, instead of zero, we put 1, because now our device address is set at 1 .
Set Device Address to 1
FF FF 00 01 00 00 00 01 00 FE
Read Device Address
FF FF 01 81 00 00 00 00 00 FE
By putting “0xFF” inside the device address using the command code “0x12” you can reset any device address back to ZERO whenever you want
Reset the Device Address to ZERO
FF FF FF 12 00 00 00 00 00 FE
To check the correct reset, read the Device Address
FF FF 00 81 00 00 00 00 00 FE
Digital sensorless Torque Control of a BLDC motor
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
As long as the piano switch number 5 is DOWN, you can send the following commands in order to control the torque of your brushless Motor. Also after power recycling you don’t need to repeat this part again, just keep the Piano switch Number 5 Down as long as your motor and the system is the same.
1. Set the Motor Type (Normal Brushless, type 1)
FF FF 00 15 00 00 00 01 00 FE
2. Set control Mode on Torque
FF FF 00 16 00 00 00 01 00 FE
3. Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
4. Set the Torque ref at 1.8A [Sfxt(32-17)]
FF FF 00 04 00 03 99 99 00 FE
All commands together:
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 16 00 00 00 01 00 FE
FF FF 00 04 00 03 99 99 00 FE
FF FF 00 02 00 00 00 01 00 FE
Note : the steps 1 to 3 are needed to be done only once since you don’t want to change them, so for varying the torque you can keep sending different values only by using the step number 4 from now on. Remember, after power recycling, you need to send all the first 3 commands to set back the parameters which are Volatile and will be forgotten after power recycling or reset.
Digital sensorless Speed Control of a Brushless motor
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
As long as the piano switch number 5 is DOWN, you can send the following commands in order to control the speed of your brushless Motor. Also after power recycling you don’t need to repeat this part again, just keep the Piano switch Number 5 Down as long as your motor and the system is the same.
First Time settings:
1. Set Motor Type (Normal Brushless)
FF FF 00 15 00 00 00 01 00 FE
2. Set control Mode on SPEED
FF FF 00 16 00 00 00 00 00 FE
3. set the speed Kp gain on 0.003 [Sfxt(32-17)]
FF FF 00 0A 00 00 01 89 00 FE
4. Set the speed ki gain on 0.001 [Sfxt(32-17)]
FF FF 00 0B 00 00 00 83 00 FE
5. Set the Motor No of Poles at 8 (Uint32)
FF FF 00 0F 00 00 00 08 00 FE
6. Set the Speed Control Mode on Sensor-less
FF FF 00 13 00 00 00 00 00 FE
7. Set the speed ref at 1000 rpm (Uint32)
FF FF 00 05 00 00 03 E8 00 FE
8. Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
For the First time settings, All the above commands together:
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 16 00 00 00 00 00 FE
FF FF 00 0A 00 00 01 89 00 FE
FF FF 00 0B 00 00 00 83 00 FE
FF FF 00 0F 00 00 00 08 00 FE
FF FF 00 13 00 00 00 00 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 02 00 00 00 01 00 FE
After the first time setting is done, now even after power-recycling you can only send those parameters which are volatile and didn’t change, like Ki, Kp, Motor poles, etc as below:
Second Time settings after power recycle and having the same system:
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 13 00 00 00 00 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 02 00 00 00 01 00 FE
Now by using step number 7 only, you can keep changing the speed of your motor to any arbitrary value.
Digital sensor-based Speed Control of a Brushless motor using Encoders
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
As long as the piano switch number 5 is DOWN, you can send the following commands in order to control the speed of your brushless Motor. Also after power recycling you don’t need to repeat this part again, just keep the Piano switch Number 5 Down as long as your motor and the system is the same.
First Time settings:
1- Set Motor Type (Normal Brushless, Type 1)
FF FF 00 15 00 00 00 01 00 FE
2- Set control Mode on SPEED
FF FF 00 16 00 00 00 00 00 FE
3- set the speed Kp gain on 0.001 [Sfxt(32-17)]
FF FF 00 0A 00 00 00 83 00 FE
4- Set the speed ki gain on 0.0008 [Sfxt(32-17)]
FF FF 00 0B 00 00 00 68 00 FE
5- Set the Motor No of Poles at 8 (Uint32)
FF FF 00 0F 00 00 00 08 00 FE
6- Set the Speed Control Mode on Encoder
FF FF 00 13 00 00 00 01 00 FE
7- Set the Number of Encoder Lines on 1000 lines (Uint32)
FF FF 00 10 00 00 03 E8 00 FE
8- Set the speed ref at 1000 rpm (Uint32)
FF FF 00 05 00 00 03 E8 00 FE
9- Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
Notes:
– Better to put the “Go to Digital Mode” as the last command, when all the settings are done before, so the motor doesn’t get unstable during the settings.
– The Encoder lines are just the physical number of slots of your quadrature encoder for each line.
For the First time setting All the commands together:
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 16 00 00 00 00 00 FE
FF FF 00 0A 00 00 00 83 00 FE
FF FF 00 0B 00 00 00 68 00 FE
FF FF 00 0F 00 00 00 08 00 FE
FF FF 00 13 00 00 00 01 00 FE
FF FF 00 10 00 00 03 E8 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 02 00 00 00 01 00 FE
For The next runs after power recycling, as long as the values of kp, ki, poles, encoder lines and control type have not been changed you can only send the following commands for the same example.
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 16 00 00 00 00 00 FE
FF FF 00 13 00 00 00 01 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 02 00 00 00 01 00 FE
– In any of the conditions above, after sending once the setting commands, by only sending the speed command ( step number 8) you can alter the value of the speed in real-time
Digital sensorless Speed Control of a DC Brushed motor
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
As long as the piano switch number 5 is DOWN, you can send the following commands in order to control the speed of your DC brushed Motor. Also after power recycling you don’t need to repeat this part again, just keep the Piano switch Number 5 Down as long as your motor and the system is the same.
First Time settings:
1. Set Motor Type (Brushed DC)
FF FF 00 15 00 00 00 00 00 FE
2. Set control Mode on SPEED
FF FF 00 16 00 00 00 00 00 FE
3. set the speed Kp gain on 0.003 [Sfxt(32-17)]
FF FF 00 0A 00 00 05 1E 00 FE
4. Set the speed ki gain on 0.04 [Sfxt(32-17)]
FF FF 00 0B 00 00 14 7A 00 FE
5. Set the Speed Control Mode on sensor-less
FF FF 00 13 00 00 00 00 00 FE
6. Set the speed ref at 200 * (read below)
FF FF 00 05 00 00 00 C8 00 FE
7. Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
Notes:
– Better to put the “Go to Digital Mode” as the last command, when all the settings are done before, so the motor doesn’t get unstable during the settings.
– * The speed reference in Sensorless DC control here is not in RPM, but it’s a quantitative value depending on the BEMF constant of your DC motor, you need to send different values and find out the best numbers for you specific motor, in future we will publish more information on how to exactly calculate the speed of your brushed DC motor using this method. In General values from 0 to 500 for most of the motors are the range from 0 speed to max speed.
For the First time setting All the above commands together:
FF FF 00 15 00 00 00 00 00 FE
FF FF 00 16 00 00 00 00 00 FE
FF FF 00 0A 00 00 05 1E 00 FE
FF FF 00 0B 00 00 14 7A 00 FE
FF FF 00 13 00 00 00 01 00 FE
FF FF 00 05 00 00 00 C8 00 FE
FF FF 00 02 00 00 00 01 00 FE
For The next runs, as long as the values of kp, ki and control type have not been changed you can only send the following commands after power recycle.
FF FF 00 0C 00 00 00 00 00 FE
FF FF 00 13 00 00 00 01 00 FE
FF FF 00 05 00 00 00 C8 00 FE
FF FF 00 02 00 00 00 01 00 FE
Digital sensored Speed Control of a DC Brushed motor using Encoder
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
As long as the piano switch number 5 is DOWN, you can send the following commands in order to control the speed of your DC brushed Motor. Also after power recycling you don’t need to repeat this part again, just keep the Piano switch Number 5 Down as long as your motor and the system is the same.
1- Set Motor Type (Brushed DC)
FF FF 00 15 00 00 00 00 00 FE
2- Set control Mode on SPEED
FF FF 00 16 00 00 00 00 00 FE
3- set the speed Kp gain on 0.003 [Sfxt(32-17)]
FF FF 00 0A 00 00 01 89 00 FE
4- Set the speed ki gain on 0.001 [Sfxt(32-17)]
FF FF 00 0B 00 00 00 83 00 FE
5- Set the Number of Encoder Lines on 500 lines(Uint32)
FF FF 00 10 00 00 01 F4 00 FE
6- Set the Speed Control Mode on Sensored using Encoder
FF FF 00 13 00 00 00 01 00 FE
7- Set the speed ref at 1000 rpm (Uint32)
FF FF 00 05 00 00 03 E8 00 FE
8- Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
Notes:
Better to put the “Go to Digital Mode” as the last command, when all the settings are done before, so the motor doesn’t get unstable during the settings.
For the First time setting All together:
FF FF 00 15 00 00 00 00 00 FE
FF FF 00 16 00 00 00 00 00 FE
FF FF 00 0A 00 00 01 89 00 FE
FF FF 00 0B 00 00 00 83 00 FE
FF FF 00 10 00 00 01 F4 00 FE
FF FF 00 13 00 00 00 01 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 02 00 00 00 01 00 FE
For The next runs, as long as the values of kp, ki, poles, encoder lines and control type have not been changed you can only send the following commands after power recycle.
FF FF 00 15 00 00 00 00 00 FE
FF FF 00 13 00 00 00 01 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 02 00 00 00 01 00 FE
Digital Open-loop Control of a Brushless motor
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in open-loop by pushing Piano switch number 5 in UP position
As long as the piano switch number 5 is UP, you can send the following commands in order to control the speed of your brushless motor in open-loop mode.
1. Set Motor Type (Normal Brushless)
FF FF 00 15 00 00 00 01 00 FE
2. Set the Motor No of Poles at 8 (Uint32)
FF FF 00 0F 00 00 00 08 00 FE
3. Set the speed ref at 1000 rpm (Uint32)
FF FF 00 05 00 00 03 E8 00 FE
4. Set the power ref at 30.5 (similar to analog PWM duty cycle percentage) [Sfxt(32-17)]
FF FF 00 06 00 3D 00 00 00 FE
5. Set the Speed Control Mode on sensor-less
FF FF 00 13 00 00 00 00 00 FE
6. Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
Notes:
-Better to put the “Go to Digital Mode” as the last command, when all the settings are done before, so the motor doesn’t get unstable during the settings.
For the First time setting All the above commands together:
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 0F 00 00 00 08 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 06 00 3D 00 00 00 FE
FF FF 00 13 00 00 00 00 00 FE
FF FF 00 02 00 00 00 01 00 FE
For The next runs, as long as the number of Poles has not been changed you can only send the following commands after power recycle.
FF FF 00 15 00 00 00 01 00 FE
FF FF 00 05 00 00 03 E8 00 FE
FF FF 00 06 00 3D 00 00 00 FE
FF FF 00 13 00 00 00 00 00 FE
FF FF 00 02 00 00 00 01 00 FE
Digital sensor-less closed-loop speed Control of an AC Induction Motor
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
As long as the piano switch number 5 is DOWN, you can send the following commands in order to
control the speed of your DC brushed Motor. Also after power recycling you don’t need to repeat
this part again, just leave the Piano switch Number 5 Down as long as your motor and the system
is the same.
1- Set Motor Type (ACIM)
FF FF 00 15 00 00 00 02 00 FE
2- Set the Motor No of Poles at 4
FF FF 00 0F 00 00 00 04 00 FE
3- set the speed Kp gain on 0.008 [Sfxt(32-17)]
FF FF 00 0A 00 00 04 18 00 FE
4- Set the speed ki gain on 0.005 [Sfxt(32-17)]
FF FF 00 0B 00 00 04 18 00 FE
5- Set the Speed Control Mode on sensor-less
FF FF 00 13 00 00 00 00 00 FE
6- Set control Mode on SPEED
FF FF 00 16 00 00 00 00 00 FE
7- Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
8- Set the Magnetizing current reference (Id) at 1.8A [Sfxt(32-17)]
FF FF 00 1A 00 03 99 99 00 FE
9- Set the speed ref at 1000 rpm (Uint32)
FF FF 00 05 00 00 03 E8 00 FE
– Using the command set in step 9, you can define any arbitrary speed for your motor to
reach and follow in real-time
– The magnetizing Current for AC induction motors set at step 8, is in charge of generating
flux on the stator, so the higher this value the more will be the flux but you need to find a
proper balance based on your Motor.
Digital Position Control of a Brushless Motor using Encoder
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
Now you can proceed to send the commands with following orders, notice that commands that are saved in
memory will be remembered after power recycle, and you don’t need to send them every time.
1. Set Motor Type (fast Brushless)
FF FF 00 15 00 00 00 03 00 FE
2. Set control Mode on Position
FF FF 00 16 00 00 00 02 00 FE
3. set the speed Kp gain on 0.0001 [Sfxt(32-17)]
FF FF 00 0A 00 00 00 0D 00 FE
4. Set the speed ki gain on 0.0005 [Sfxt(32-17)]
FF FF 00 0B 00 00 00 41 00 FE
5. Set the Motor No of Poles at 8 (Uint32)
FF FF 00 0F 00 00 00 08 00 FE
6. Set the Number of Encoder Lines on 1000 lines (Uint32)
FF FF 00 10 00 00 03 E8 00 FE
7. Set the position controller Kp gain at 0.15 [Sfxt(32-17)]
FF FF 00 1C 00 00 4C CC 00 FE
8. Set the position controller Ki gain at 0.16 [Sfxt(32-17)]
FF FF 00 1D 00 00 51 EB 00 FE
9. Reset the position to zero
FF FF 00 1F 00 00 00 01 00 FE
10. set the motor current Limit at 7.8 A [Sfxt(32-17)]
FF FF 00 03 00 0F 99 99 00 FE
11. set the speed limit at 6000 RPM (Uint32)
FF FF 00 11 00 00 17 70 00 FE
12. Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
Now after this step you can start sending Position commands like below:
13. set the desired position to go at +2560 pulses (Quad pulses) (Int32)
FF FF 00 1B 00 00 0A 00 00 FE
After a while when the Motor reached to the goal:
14. set the desired position to go at -45000 pulses (Quad pulses) (Int32)
FF FF 00 1B FF FF 50 38 00 FE
Digital Position Control of a DC Brushed Motor using Encoders
Before sending the following commands you must do the following steps at least once:
1. Turn ON SOLO
2. Put SOLO in closed-loop by pushing Pian switch number 5 Down
3. Make sure the motor Identification is done.
Now you can proceed to send the commands with following orders, notice that commands that are saved in
memory will be remembered after power recycle, and you don’t need to send them every time.
1. Set Motor Type (DC brushed)
FF FF 00 15 00 00 00 00 00 FE
2. Set control Mode on Position
FF FF 00 16 00 00 00 02 00 FE
3. set the speed Kp gain on 0.03 [Sfxt(32-17)]
FF FF 00 0A 00 00 01 89 00 FE
4. Set the speed ki gain on 0.001 [Sfxt(32-17)]
FF FF 00 0B 00 00 00 83 00 FE
5. Set the Number of Encoder Lines on 500 lines (Uint32)
FF FF 00 10 00 00 01 F4 00 FE
6. Set the position controller Kp gain at 0.15 [Sfxt(32-17)]
FF FF 00 1C 00 00 4C CC 00 FE
7. Set the position controller Ki gain at 0.16 [Sfxt(32-17)]
FF FF 00 1D 00 00 51 EB 00 FE
8. Reset the position to zero
FF FF 00 1F 00 00 00 01 00 FE
9. set the motor current Limit at 18.5 A [Sfxt(32-17)]
FF FF 00 03 00 25 00 00 00 FE
10. set the speed limit at 4000 RPM (Uint32)
FF FF 00 11 00 00 0F A0 00 FE
11. Go to digital Mode
FF FF 00 02 00 00 00 01 00 FE
Now after this step you can start sending Position commands like below:
12. set the desired position to go at +2560 pulses (Quad pulses) (Int32)
FF FF 00 1B 00 00 0A 00 00 FE
After a while when the Motor reached to the goal:
13. set the desired position to go at -45000 pulses (Quad pulses) (Int32)
FF FF 00 1B FF FF 50 38 00 FE