Difference between revisions of "DDSM210"
(27 intermediate revisions by the same user not shown) | |||
Line 27: | Line 27: | ||
#Do not touch the rotating part of the motor during use to avoid injury. | #Do not touch the rotating part of the motor during use to avoid injury. | ||
#When the motor outputs high torque, it will generate heat. Do not touch the motor to avoid burns. | #When the motor outputs high torque, it will generate heat. Do not touch the motor to avoid burns. | ||
− | #Do not disassemble the motor without permission, otherwise, it may cause abnormal operation or damage to the motor | + | #Do not disassemble the motor without permission, otherwise, it may cause abnormal operation or damage to the motor and may bring safety hazards. |
==Features== | ==Features== | ||
Line 39: | Line 39: | ||
*No drive mechanical friction, drive efficiency close to 99.99%. | *No drive mechanical friction, drive efficiency close to 99.99%. | ||
==Parameters== | ==Parameters== | ||
− | *No-load speed: | + | *No-load speed: 210±10rpm |
*No-load current: 0.15A | *No-load current: 0.15A | ||
*Rated speed: 98rpm | *Rated speed: 98rpm | ||
Line 57: | Line 57: | ||
==Motor Interface and Cable Order== | ==Motor Interface and Cable Order== | ||
[[File:DDSM115-A.jpg|200px]] | [[File:DDSM115-A.jpg|200px]] | ||
+ | <div style="margin:2px auto;float:left;"> | ||
+ | |||
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
{| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
Line 66: | Line 68: | ||
|- | |- | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 1 | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 1 | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | UART |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Tx |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | UART_Tx |
|- | |- | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 2 | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 2 | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | UART |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Rx |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | UART_Rx |
|- | |- | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 3 | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 3 | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | GND |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | - |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | / |
|- | |- | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 4 | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | 4 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | VCC | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | + | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | / | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | / | ||
− | |||
− | |||
|} | |} | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
+ | <div class="sep0px"></div> | ||
+ | <br /> | ||
==How To Use== | ==How To Use== | ||
*The simple control method is only used to verify the working principle of the motor and to do some simple tests. For the specific method, please refer to the chapter on the communication protocol. | *The simple control method is only used to verify the working principle of the motor and to do some simple tests. For the specific method, please refer to the chapter on the communication protocol. | ||
− | *It is recommended to use [https://www.waveshare.com/usb-to- | + | *It is recommended to use [https://www.waveshare.com/usb-to-ttl.htm USB to TTL] for the device with a USB interface to control the servo. |
− | * | + | *Signal cable wiring. Wire the signal lines according to the table provided above, which references the motor interface and the wire sequence instructions. Connect the motor's TX to the converter's RX, connect the motor's RX to the converter's TX, and connect the GND of the motor signal line to the GND of the converter. |
− | * | + | *Power cable. You can refer to the above motor interface and line sequence for the pin definition. Connect the VCC of the signal cable to the positive poles of the 12V DCC power (9~28V DC), and connect the GND of the signal cable to the negative poles of the 12V DCC power (9~28V DC). |
+ | |||
*Download OSDA open-source serial port assistant. | *Download OSDA open-source serial port assistant. | ||
− | **[https:// | + | **[https://github.com/leven99/OSDA/releases/download/v3.5.0/OSDA_Windows_Framework_V3.5.0_x86.exe x86 Github download link]<br /> |
− | **[https:// | + | **[https://github.com/leven99/OSDA/releases/download/v3.5.0/OSDA_Windows_Framework_V3.5.0_x64.exe x64 Github download link] |
*Run the OSDA open source serial port debugging assistant, select the serial port of the device, select 115200 for the baud rate, check Hex to accept, check Hex to send, and then open the serial port to send commands to the motor. | *Run the OSDA open source serial port debugging assistant, select the serial port of the device, select 115200 for the baud rate, check Hex to accept, check Hex to send, and then open the serial port to send commands to the motor. | ||
[[File:DDSM115 spec10.jpg]] | [[File:DDSM115 spec10.jpg]] | ||
*Note that the motor will start to rotate after some commands are sent. Do not touch the rotating parts of the motor. If you do not have suitable structural parts to install the motor, be sure to prepare for power failure at any time, and do not give high-speed commands. | *Note that the motor will start to rotate after some commands are sent. Do not touch the rotating parts of the motor. If you do not have suitable structural parts to install the motor, be sure to prepare for power failure at any time, and do not give high-speed commands. | ||
− | *The following is the | + | *The following is the UART communication command set: |
1. Switch to velocity loop (02), <font color="#FF0000">this command has no feedback.</font><br /> | 1. Switch to velocity loop (02), <font color="#FF0000">this command has no feedback.</font><br /> | ||
− | 01 A0 | + | 01 A0 02 00 00 00 00 00 00 <font color="#FF0000">E4</font><br /> |
2. For additional feedback, query the motor mode<br /> | 2. For additional feedback, query the motor mode<br /> | ||
− | 01 | + | 01 75 00 00 00 00 00 00 00 47<br /> |
3. Brake command, valid in speed loop mode.<br /> | 3. Brake command, valid in speed loop mode.<br /> | ||
01 64 00 00 00 00 00 <font color="#FF0000">FF</font> 00 D1<br /> | 01 64 00 00 00 00 00 <font color="#FF0000">FF</font> 00 D1<br /> | ||
− | 4. ID setting(<font color="#FF0000">01</font>), send the command five times | + | 4. ID setting(<font color="#FF0000">01</font>), send the command five times continuously.<br /> |
AA 55 53 <font color="#FF0000">01</font> 00 00 00 00 00 00<br /> | AA 55 53 <font color="#FF0000">01</font> 00 00 00 00 00 00<br /> | ||
5. ID query<br /> | 5. ID query<br /> | ||
C8 64 00 00 00 00 00 00 00 DE<br /> | C8 64 00 00 00 00 00 00 00 DE<br /> | ||
− | 6 | + | 6. Velocity loop command (<font color="#FF0000">-210~210 rpm</font>)<br /> |
− | + | 01 64 <font color="#FF0000">FF CE</font> 00 00 00 00 00 DA (-50rpm) <br /> | |
− | + | 01 64 <font color="#FF0000">FF 9C</font> 00 00 00 00 00 9A (-100rpm)<br /> | |
− | + | 01 64 <font color="#FF0000">00 00</font> 00 00 00 00 00 50 (0rpm)<br /> | |
− | + | 01 64 <font color="#FF0000">00 32</font> 00 00 00 00 00 D3 (50rpm)<br /> | |
− | + | 01 64 <font color="#FF0000">00 64</font> 00 00 00 00 00 4F (100rpm)<br /> | |
− | + | 7. Position loop commands (<font color="#FF0000">0~32767 </font> corresponds to 0~360°)<br /> | |
− | + | 01 64 <font color="#FF0000">00 00</font> 00 00 00 00 00 50 (0)<br /> | |
− | + | 01 64 <font color="#FF0000">27 10</font> 00 00 00 00 00 57 (10000)<br /> | |
− | 01 64 <font color="#FF0000">FF CE</font> 00 00 00 00 00 DA | + | 01 64 <font color="#FF0000">4E 20</font> 00 00 00 00 00 5E (20000)<br /> |
− | 01 64 <font color="#FF0000">FF 9C</font> 00 00 00 00 00 9A | + | 01 64 <font color="#FF0000">75 30</font> 00 00 00 00 00 A7 (30000)<br /> |
− | 01 64 <font color="#FF0000">00 00</font> 00 00 00 00 00 50 | ||
− | 01 64 <font color="#FF0000">00 32</font> 00 00 00 00 00 D3 | ||
− | 01 64 <font color="#FF0000">00 64</font> 00 00 00 00 00 4F | ||
− | |||
− | 01 64 <font color="#FF0000">00 00</font> 00 00 00 00 00 50 | ||
− | 01 64 <font color="#FF0000">27 10</font> 00 00 00 00 00 57 | ||
− | 01 64 <font color="#FF0000">4E 20</font> 00 00 00 00 00 5E | ||
− | 01 64 <font color="#FF0000">75 30</font> 00 00 00 00 00 A7 | ||
− | <br /> | ||
==Communication Protocol== | ==Communication Protocol== | ||
Line 139: | Line 135: | ||
*Reply form: one question and one answer | *Reply form: one question and one answer | ||
*Rate: up to 500Hz | *Rate: up to 500Hz | ||
− | *In | + | *In velocity loop mode: -2100~2100 corresponds to the range -210rpm~210rpm, the data type: signed 16-bit |
− | + | *In position loop mode: 0~32767 corresponds to the range 0°~360°, data type: unsigned 16-bit | |
− | *In position loop mode: 0~32767 corresponds to 0°~360°, data type unsigned 16 | ||
*Steps: | *Steps: | ||
<pre> | <pre> | ||
Line 153: | Line 148: | ||
**Polynomial: x8 + x5 + x4 +1 | **Polynomial: x8 + x5 + x4 +1 | ||
**The verification product stage can use this website to calculate the check digit: https://crccalc.com/ | **The verification product stage can use this website to calculate the check digit: https://crccalc.com/ | ||
− | + | ===Protocol 1: drive motor to rotate=== | |
Send to the motor:<br/> | Send to the motor:<br/> | ||
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
Line 202: | Line 197: | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x64 |
− | |||
− | |||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Velocity high 8 bits | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Velocity high 8 bits | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Velocity low 8 bits | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Velocity low 8 bits | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Current high 8 bits |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Current low 8 bits |
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Acceleration time | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Temperature | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Error code | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Error code | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | ||
Line 216: | Line 211: | ||
*Acceleration time: valid in the speed loop mode, the acceleration time per 1rpm, the unit is 0.1ms. When it is set to 1, the acceleration time per 1rpm is 0.1ms. When it is set to 10, the acceleration time per 1rpm is 10*0.1 ms=1ms. When set to 0, the default is 1, and the acceleration time per 1rpm is 0.1ms. | *Acceleration time: valid in the speed loop mode, the acceleration time per 1rpm, the unit is 0.1ms. When it is set to 1, the acceleration time per 1rpm is 0.1ms. When it is set to 10, the acceleration time per 1rpm is 10*0.1 ms=1ms. When set to 0, the default is 1, and the acceleration time per 1rpm is 0.1ms. | ||
*Brake: 0XFF other values do not brake, valid in speed loop mode. | *Brake: 0XFF other values do not brake, valid in speed loop mode. | ||
− | + | ===Protocol 2: get other feedback=== | |
Send to the motor: <br/> | Send to the motor: <br/> | ||
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
Line 265: | Line 260: | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x74 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Odometer count high 8 bits |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Odometer count second high 8 bits |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Odometer count second low 8 bits |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Odometer count low 8 bits |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Position high 8 bits |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Position low 8 bits |
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Error code | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Error code | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | ||
Line 277: | Line 272: | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
− | *U8 position value: 0~ | + | *Odometer count: -2147483467 to 2147483467, reset to 0 when power on it again. |
− | + | *U8 position value: 0~65535 corresponds to 0~360° | |
*Error code: | *Error code: | ||
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
Line 297: | Line 292: | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Overtemperature error |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save |
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | Overcurrent error | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Overcurrent error | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Save |
|} | |} | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
− | For example, the error code | + | For example, the error code 0x02, that is 0b00000010, means an overcurrent error.<br/> |
− | + | ||
− | + | ===Protocol 3: Motor Mode Switch Sending Protocol === | |
− | |||
− | |||
− | |||
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
{| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
Line 329: | Line 321: | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0xA0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0xA0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Mode Value | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | ||
+ | |} | ||
+ | </div> | ||
+ | <div class="sep0px"></div> | ||
+ | Motor feedback:<br/> | ||
+ | <div style="margin:2px auto;float:left;"> | ||
+ | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
+ | |- | ||
+ | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Data Field | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[0] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[1] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[2] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[3] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[4] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[5] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[6] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[7] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[8] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[9] | ||
+ | |- | ||
+ | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0xA0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Mode Value | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
Line 336: | Line 358: | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 |
|} | |} | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
− | Mode value:<br/> | + | Mode value: <br /> |
− | + | 0x00: set to open loop <br /> | |
− | + | 0x02: set to velocity loop<br /> | |
− | + | 0x03: set to position loop <br /> | |
− | + | ||
− | + | ===Protocol 4: Moto ID Sets Sending Protocol === | |
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
{| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
Line 364: | Line 386: | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0xAA | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0xAA | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x55 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x55 | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x53 | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x53 |
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | ||
+ | |} | ||
+ | </div> | ||
+ | <div class="sep0px"></div> | ||
+ | Motor feedback:<br/> | ||
+ | <div style="margin:2px auto;float:left;"> | ||
+ | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
+ | |- | ||
+ | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Data Field | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[0] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[1] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[2] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[3] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[4] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[5] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[6] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[7] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[8] | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | DATA[9] | ||
+ | |- | ||
+ | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x64 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
Line 372: | Line 422: | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
+ | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | ||
|} | |} | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
− | Note: When setting the ID, | + | Note: When setting the ID, ensure that only one motor is on the bus. Each time power is applied, only one setting is allowed. The motor will execute the setting after receiving the ID setting command five times. |
− | + | ===Protocol 5: Obtain Mode Feedback=== | |
− | Send to the motor: | + | Send to the motor: |
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
{| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
Line 394: | Line 446: | ||
|- | |- | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x75 |
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 | ||
Line 407: | Line 459: | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
− | Motor feedback: | + | Motor feedback: |
<div style="margin:2px auto;float:left;"> | <div style="margin:2px auto;float:left;"> | ||
{| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | {| style="border-collapse: collapse;border:1px solid #cccccc;color: #5e5e5e;margin: auto;" | ||
Line 425: | Line 477: | ||
! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ! style="border:1px solid #cccccc;text-align:center;padding:5px;" | Content | ||
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | ID | ||
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0x75 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | Mode Value |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 |
− | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | | + | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | 0 |
| style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | | style="border:1px solid #cccccc;text-align:center;padding:5px;" | CRC8 | ||
|} | |} | ||
</div> | </div> | ||
<div class="sep0px"></div> | <div class="sep0px"></div> | ||
− | + | Mode value: | |
+ | *0x00: open loop | ||
+ | *0x02L velocity loop | ||
+ | *0x03: position loop | ||
==Protection Rules== | ==Protection Rules== | ||
− | 1. Bus overcurrent protection threshold: | + | 1. Bus overcurrent protection threshold: 2.8A, trigger shutdown protection after overcurrent occurs, and release after 5S.<br/> |
2. Motor over-temperature protection threshold: 80°C, the protection will be released when the temperature is lower than the threshold by 5°C.<br/> | 2. Motor over-temperature protection threshold: 80°C, the protection will be released when the temperature is lower than the threshold by 5°C.<br/> | ||
− | 3 | + | 3. Locked rotor protection: the blocked rotor lasts for more than 5S to trigger the protection, and it will be released after 5S.<br/> |
− | + | ||
==Installation Guide== | ==Installation Guide== | ||
− | * | + | *Please refer to the motor mounting hole dimensions and positions, and mount the motor onto the corresponding equipment. Units: mm |
− | *The mounting threaded hole | + | *The threaded hole on the motor output end is M3 with a depth of 3mm. The center of the mounting hole is evenly distributed at a diameter of 28mm. |
− | [[File: | + | *The mounting threaded hole on the motor mounting end is M2.5 with a depth of 6mm. The center of the mounting hole is evenly distributed at a diameter of 18mm. Please select suitable screws for installation during the mounting process. |
+ | [[File:DDSM210 spec77.png]][[File:DDSM210 spec777.png]] | ||
+ | =Resource= | ||
+ | ==3D Model== | ||
+ | *[https://files.waveshare.com/wiki/DDSM210/DDSM210-STEP.zip DDSM210 STEP model] | ||
+ | ==2D Drawing== | ||
+ | *[https://files.waveshare.com/wiki/DDSM210/DDSM210_2D.zip DDSM210 DXF drawing] | ||
+ | ==Open-source Structure== | ||
+ | *[https://files.waveshare.com/wiki/DDSM210/DDSM210-EXAMPLE_v2.zip 4WD mobile robot STEP model] | ||
+ | =FAQ= | ||
+ | {{FAQ|What is the connectorused by the DDSM210 motor? | ||
+ | | | ||
+ | ZH1.5 4P connector. | ||
+ | ||}} | ||
=Support= | =Support= | ||
{{Servicebox1}} | {{Servicebox1}} |
Latest revision as of 01:14, 28 April 2024
| ||
Overview
Based on an integrated development concept, DDSM210 (Direct Drive Servo Motor) integrates an outer rotor brushless motor, encoder, and servo drive into a high-reliability permanent magnet synchronous motor. Its compact structure, convenient installation, stable operation, small size, and large torque make it particularly suitable for applications in the following direct drive fields: robot joints, small AGV drive wheels, self-balancing vehicle drive wheels, and development vehicle platforms for advanced robot projects.
Through optimization of pole number, slot type, air gap, permanent magnet material, and other related parameters, the motor ensures greater torque output, the smaller torque fluctuations, and achieves direct drive at low speeds with large torque, providing users with high-performance direct drive application solutions.
The driver compatible with this motor utilizes the Field Oriented Control (FOC) algorithm, coupled with the motor's built-in high-precision sensor, to achieve precise control of the motor and better noise reduction. The driver features a complete and reliable motor On-board Diagnostics (OBD) monitoring mechanism and protection functions, ensuring the safe and reliable operation of the motor.
Simultaneously, we provide an open-source structural model for this model of direct drive servo motor, which can be downloaded from the "Resources"-"Open Source Structure" section at the bottom.
Usage Precaution
- Please confirm whether the operating voltage is the voltage specified in this article before use.
- Please make sure the motor is used under the specified environment range (-25℃~45℃), the motor over-temperature protection threshold is 80°C, and the protection is released when the temperature is lower than 5°C.
- Please avoid immersing the motor in water, otherwise, it may cause abnormal operation or damage to the motor.
- Please ensure that the wiring is correct and stable before use to avoid poor contact.
- Please refer to the installation instructions before using the motor to ensure that the motor is installed correctly and firmly.
- Please refer to the installation instructions before using the motor to ensure that the external output part of the motor is installed correctly and firmly.
- Please avoid damage to the wire during use, otherwise, it may cause abnormal operation or damage to the motor.
- Do not touch the rotating part of the motor during use to avoid injury.
- When the motor outputs high torque, it will generate heat. Do not touch the motor to avoid burns.
- Do not disassemble the motor without permission, otherwise, it may cause abnormal operation or damage to the motor and may bring safety hazards.
Features
- Ultra-low noise.
- High precision and zero-backlash.
- Fast response, direct drive without delay.
- Integrated motor and driver, compact structure, and high integration.
- Supports UART communication, for obtaining motor feedback information such as position, speed, current, error code, etc.
- With Hall position detection, over-current protection, etc.
- Supports electric brake.
- No drive mechanical friction, drive efficiency close to 99.99%.
Parameters
- No-load speed: 210±10rpm
- No-load current: 0.15A
- Rated speed: 98rpm
- Rated torque: 0.25Nm
- Rated current: 1.1A
- Locked-rotor torque: 0.85Nm
- Locked-rotor current: ≦3.8A
- Input voltage: 9 ~ 28VDC
- Speed constant: 14rpm/V
- Operating temperature -25~45℃
- Total weight: 216g
- Encoder resolution: 4096
- Relative precision: 1024
- Noise level: ≦40dB(A)
- Single-wheel load: 3kg
Motor Interface and Cable Order
Signal Cable (ZH1.5*4P) | Name | Type | Description |
---|---|---|---|
1 | UART | Tx | UART_Tx |
2 | UART | Rx | UART_Rx |
3 | GND | - | / |
4 | VCC | + | / |
How To Use
- The simple control method is only used to verify the working principle of the motor and to do some simple tests. For the specific method, please refer to the chapter on the communication protocol.
- It is recommended to use USB to TTL for the device with a USB interface to control the servo.
- Signal cable wiring. Wire the signal lines according to the table provided above, which references the motor interface and the wire sequence instructions. Connect the motor's TX to the converter's RX, connect the motor's RX to the converter's TX, and connect the GND of the motor signal line to the GND of the converter.
- Power cable. You can refer to the above motor interface and line sequence for the pin definition. Connect the VCC of the signal cable to the positive poles of the 12V DCC power (9~28V DC), and connect the GND of the signal cable to the negative poles of the 12V DCC power (9~28V DC).
- Download OSDA open-source serial port assistant.
- Run the OSDA open source serial port debugging assistant, select the serial port of the device, select 115200 for the baud rate, check Hex to accept, check Hex to send, and then open the serial port to send commands to the motor.
- Note that the motor will start to rotate after some commands are sent. Do not touch the rotating parts of the motor. If you do not have suitable structural parts to install the motor, be sure to prepare for power failure at any time, and do not give high-speed commands.
- The following is the UART communication command set:
1. Switch to velocity loop (02), this command has no feedback.
01 A0 02 00 00 00 00 00 00 E4
2. For additional feedback, query the motor mode
01 75 00 00 00 00 00 00 00 47
3. Brake command, valid in speed loop mode.
01 64 00 00 00 00 00 FF 00 D1
4. ID setting(01), send the command five times continuously.
AA 55 53 01 00 00 00 00 00 00
5. ID query
C8 64 00 00 00 00 00 00 00 DE
6. Velocity loop command (-210~210 rpm)
01 64 FF CE 00 00 00 00 00 DA (-50rpm)
01 64 FF 9C 00 00 00 00 00 9A (-100rpm)
01 64 00 00 00 00 00 00 00 50 (0rpm)
01 64 00 32 00 00 00 00 00 D3 (50rpm)
01 64 00 64 00 00 00 00 00 4F (100rpm)
7. Position loop commands (0~32767 corresponds to 0~360°)
01 64 00 00 00 00 00 00 00 50 (0)
01 64 27 10 00 00 00 00 00 57 (10000)
01 64 4E 20 00 00 00 00 00 5E (20000)
01 64 75 30 00 00 00 00 00 A7 (30000)
Communication Protocol
- Baudrate: 115200
- Data bits: 8bit
- Stop bit: 1bit
- Parity bit: none
- Data length: 10 bytes
- Reply form: one question and one answer
- Rate: up to 500Hz
- In velocity loop mode: -2100~2100 corresponds to the range -210rpm~210rpm, the data type: signed 16-bit
- In position loop mode: 0~32767 corresponds to the range 0°~360°, data type: unsigned 16-bit
- Steps:
①Set the motor ID (save when power is off) ②Set the motor mode (current loop, speed loop, position loop, the default is speed loop) ③Send the given value
- CRC8 value:
- The value after the CRC8 check is performed on the values DATA[0]~DATA[8].
- CRC algorithm: CRC-8/MAXIM
- Polynomial: x8 + x5 + x4 +1
- The verification product stage can use this website to calculate the check digit: https://crccalc.com/
Protocol 1: drive motor to rotate
Send to the motor:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x64 | Velocity/current/given position high 8 bits | Velocity/current/given position low 8 bits | 0 | 0 | Acceleration time | Brake | 0 | CRC8 |
Motor feedback:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x64 | Velocity high 8 bits | Velocity low 8 bits | Current high 8 bits | Current low 8 bits | Acceleration time | Temperature | Error code | CRC8 |
- Acceleration time: valid in the speed loop mode, the acceleration time per 1rpm, the unit is 0.1ms. When it is set to 1, the acceleration time per 1rpm is 0.1ms. When it is set to 10, the acceleration time per 1rpm is 10*0.1 ms=1ms. When set to 0, the default is 1, and the acceleration time per 1rpm is 0.1ms.
- Brake: 0XFF other values do not brake, valid in speed loop mode.
Protocol 2: get other feedback
Send to the motor:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x74 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | CRC8 |
Motor feedback:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x74 | Odometer count high 8 bits | Odometer count second high 8 bits | Odometer count second low 8 bits | Odometer count low 8 bits | Position high 8 bits | Position low 8 bits | Error code | CRC8 |
- Odometer count: -2147483467 to 2147483467, reset to 0 when power on it again.
- U8 position value: 0~65535 corresponds to 0~360°
- Error code:
Error Code | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0 |
---|---|---|---|---|---|---|---|---|
Content | Save | Save | Save | Overtemperature error | Save | Save | Overcurrent error | Save |
For example, the error code 0x02, that is 0b00000010, means an overcurrent error.
Protocol 3: Motor Mode Switch Sending Protocol
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0xA0 | Mode Value | 0 | 0 | 0 | 0 | 0 | 0 | CRC8 |
Motor feedback:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0xA0 | Mode Value | 0 | 0 | 0 | 0 | 0 | 0 | CRC8 |
Mode value:
0x00: set to open loop
0x02: set to velocity loop
0x03: set to position loop
Protocol 4: Moto ID Sets Sending Protocol
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | 0xAA | 0x55 | 0x53 | ID | 0 | 0 | 0 | 0 | 0 | CRC8 |
Motor feedback:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x64 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | CRC8 |
Note: When setting the ID, ensure that only one motor is on the bus. Each time power is applied, only one setting is allowed. The motor will execute the setting after receiving the ID setting command five times.
Protocol 5: Obtain Mode Feedback
Send to the motor:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x75 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | CRC8 |
Motor feedback:
Data Field | DATA[0] | DATA[1] | DATA[2] | DATA[3] | DATA[4] | DATA[5] | DATA[6] | DATA[7] | DATA[8] | DATA[9] |
---|---|---|---|---|---|---|---|---|---|---|
Content | ID | 0x75 | Mode Value | 0 | 0 | 0 | 0 | 0 | 0 | CRC8 |
Mode value:
- 0x00: open loop
- 0x02L velocity loop
- 0x03: position loop
Protection Rules
1. Bus overcurrent protection threshold: 2.8A, trigger shutdown protection after overcurrent occurs, and release after 5S.
2. Motor over-temperature protection threshold: 80°C, the protection will be released when the temperature is lower than the threshold by 5°C.
3. Locked rotor protection: the blocked rotor lasts for more than 5S to trigger the protection, and it will be released after 5S.
Installation Guide
- Please refer to the motor mounting hole dimensions and positions, and mount the motor onto the corresponding equipment. Units: mm
- The threaded hole on the motor output end is M3 with a depth of 3mm. The center of the mounting hole is evenly distributed at a diameter of 28mm.
- The mounting threaded hole on the motor mounting end is M2.5 with a depth of 6mm. The center of the mounting hole is evenly distributed at a diameter of 18mm. Please select suitable screws for installation during the mounting process.
Resource
3D Model
2D Drawing
Open-source Structure
FAQ
ZH1.5 4P connector.
{{{5}}}
Support
Technical Support
If you need technical support or have any feedback/review, please click the Submit Now button to submit a ticket, Our support team will check and reply to you within 1 to 2 working days. Please be patient as we make every effort to help you to resolve the issue.
Working Time: 9 AM - 6 PM GMT+8 (Monday to Friday)