“32路舵机控制-高级指令”的版本间的差异
来自YFRobotwiki
(→1 - 外部EEPROM 读写指令 -- EEW / EER) |
|||
第1行: | 第1行: | ||
== 1 - 外部EEPROM 读写指令 == | == 1 - 外部EEPROM 读写指令 == | ||
+ | <pre > | ||
=== 存储数据 -- EEW / EER=== | === 存储数据 -- EEW / EER=== | ||
EEW/EER 指令是用来写、读外部EEPROM 数据的。使用这些指令的前提是舵机控制器上有 EEPROM 芯片及固件支持。我们使用的芯片为 IIC 24C256(实际,根据到手控制板决定),它有32768字节空间。 | EEW/EER 指令是用来写、读外部EEPROM 数据的。使用这些指令的前提是舵机控制器上有 EEPROM 芯片及固件支持。我们使用的芯片为 IIC 24C256(实际,根据到手控制板决定),它有32768字节空间。 | ||
第18行: | 第19行: | ||
<font color="red">注意:</font>使用读写指令,格式必须严格遵守,否则读写失败!了解即可! | <font color="red">注意:</font>使用读写指令,格式必须严格遵守,否则读写失败!了解即可! | ||
<br> | <br> | ||
+ | <pre > | ||
=== 控制指令集 === | === 控制指令集 === | ||
以下这些指令可以允许用户播放动作组,程序提供了两个“播放器”可以各自单独播放动作组。两个“播放器”可以同时使用,并且当“播放器”在播放动作组时,其他舵机指令也可以使用! | 以下这些指令可以允许用户播放动作组,程序提供了两个“播放器”可以各自单独播放动作组。两个“播放器”可以同时使用,并且当“播放器”在播放动作组时,其他舵机指令也可以使用! |
2021年1月5日 (二) 15:57的版本
1 - 外部EEPROM 读写指令
=== 存储数据 -- EEW / EER=== EEW/EER 指令是用来写、读外部EEPROM 数据的。使用这些指令的前提是舵机控制器上有 EEPROM 芯片及固件支持。我们使用的芯片为 IIC 24C256(实际,根据到手控制板决定),它有32768字节空间。 '''1、写指令格式 -- EEW (该指令对应上位机软件的“下载”功能)''' :EEW -<addr>,<byte>,<byte>,<byte>,...,<byte><cr> :*<addr> = 写指令起始地址位,十进制 :*<byte> = 被写入的一个字节数据, 十进制 '''2、读指令格式 -- EER''' :EER <addr> ; <nbytes> :*<addr> = 读数据起始地址位,十进制 :*<nBytes> = 读取数据的字节数,十进制 <font color="red">注意:</font>使用读写指令,格式必须严格遵守,否则读写失败!了解即可! <br> <pre > === 控制指令集 === 以下这些指令可以允许用户播放动作组,程序提供了两个“播放器”可以各自单独播放动作组。两个“播放器”可以同时使用,并且当“播放器”在播放动作组时,其他舵机指令也可以使用! <font color="red">'''但需要注意下面两点:'''</font> :*<font color="red">同时播放两个动作组时,确保动作组中使用的舵机不重复,否则结果不可预测。</font> :*<font color="red">播放动作组中的舵机,不能向其再发送其他舵机指令,否则结果不可预测。</font> '''1、播放动作组 ''' :PL <p>SQ <s> [SM <m>] [IX <i>] [PA <pa>] [ONCE] <cr> -- 符号<X> 中的为参数的数字,[] 中为可选参数 :*PL <p> 播放器 p 值, 0 或 1 :*SQ <s> 序列号 s 值, 从 0 到 127 :*SM <m> 速度百分比 m 值, 从 -200 到 200 单位:% 默认 100% :*IX <i> 开始执行步 i 值, 从 0 到 255 默认 0 :*PA <a> 步骤之间停顿 a 值, 从 0 到 65535 单位:ms 默认 0 :*ONCE 指定播放动作组只执行一次 :*<cr> 结束回车符,ASCII码中的13。 '''2、停止播放 ''' :PL <p><cr> :立即停止播放 '''3、改变播放速度 ''' :PL <p>SM <m><cr> :改变播放速度。 <font color="red">注意:</font> ::已经播放某个有效的动作组该指令才能有效。 ::速度值可以设置为0,这时,舵机将会停止运行,但是动作组仍然在播放(相当于暂停)。 '''4、改变播放间隔时间 ''' :PL <p>PA <pa><cr> :指令改变了播放动作组时,每个动作之间的停顿时间。 <font color="red">注意:</font> ::已经播放某个有效的动作组该指令才能有效。 '''5、跳转至动作组中的某个动作 ''' :SQ <s> [IX <i>] [T <t>]<cr> :指令可以直接跳转至动作组中的某个动作 <font color="red">注意:</font> ::该指令独立于两个播放器,在两个播放器都在播放动作组时,仍然可以发送。 ::和其他舵机移动指令一样,该指令<font color="orange">不可以使用正在使用中的舵机</font>;若使用,结果不可预测 '''6、查询一个播放器 ''' :QPL <p><cr> :指令用以查询某个播放器的状态信息 :指令将返回4字节的信息: ::1.正在播放的动作组序列号(如果没有播放,返回255) ::2.现在所在步数 ::3.将要执行到哪一步 ::4.正在执行的动作剩余时间,单位100ms(例如 还剩下700ms,返回值将为 7) <br> '''控制指令例子 ''' :PL 0 SQ 5 <cr> 播放器0播放动作组5。从0步开始,100%运行速度,步骤之间没有间隔,往复不间断执行。 :PL 0 SM -50 <cr> 设置播放器0反方向播放 50%的运行速度。 :PL 0 SM 0 <cr> 设置播放器0播放速度为0 (暂停播放) :PL 0 SM 200 <cr> 设置播放器0正方向播放 200%的运行速度。 :PL 0 PA 1000 <cr> 设置播放器0播放的动作组,每个动作之间间隔(停顿)1000ms 。 :PL 0 <cr> 停止播放器0。 :SQ 20 IX 3 <cr> 跳转至序列20动作组中的第3步动作。 :SQ 20 IX 5 T2000 <p><cr> 跳转至序列20动作组中的第5步动作,耗时2s。 :PL 1 SQ 15 IX 2 SM -70 ONCE <cr> 播放器1播放动作组15。从2步开始,反向70%运行速度,步骤之间没有间隔,执行一次。 <br> ----------------------------------------------------------------- == 2 - 芯片内部寄存器控制及EEPROM读写指令 == === 寄存器常规信息 === ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |- |align="center"|Number |align="center"|Name |align="center"|Minimum |align="center"|Maximum |align="center"|Default |align="center"|Description |- |align="center"|0 |align="center"|Eable |align="center"|0 |align="center"|65535 |align="center"|0 |align="center"|A bit field() that enables various features of the SSC-32. |- |align="center"|1 |align="center"|Transmit Delay |align="center"|0 |align="center"|65535 |align="center"|600 |align="center"|The delay,in microseconds,before transmitting the first byte of a response from the SSC-32. |- |align="center"|2 |align="center"|Transmit Pacing |align="center"|0 |align="center"|65535 |align="center"|70 |align="center"|The delay,in microseconds,between bytes in a response from the SSC-32. |- |align="center"|3-31 |align="center"|(Reserved) |align="center"|--- |align="center"|--- |align="center"|--- |align="center"|--- |- |align="center"|32-63 |align="center"|Initial Pulse Offset |align="center"|-100 |align="center"|100 |align="center"|0 |align="center"|The initial value of the pulse offset(P0) for each servo. Register 32 corresponds to servo #0, register 33 to servo #1,etc. |- |align="center"|64-95 |align="center"|Initial Pulse Width |align="center"|0 |align="center"|65535 |align="center"|1500 |align="center"|The initial value of the pulse width for each servo. Register 64 corresponds to servo #0, register 65 to servo #1, etc. A value of 0 leaves the servo output at a continuous logic '0'; a value of 65535 leaves the servo output at a continuous logic '1'. All other values are clipped to the range 500 - 2500 microseconds. |- |align="center"|96-255 |align="center"|(Reserved) |align="center"|--- |align="center"|--- |align="center"|--- |align="center"|--- |} :<font color="red">注意:</font>寄存器 0-15 是全局使用的,影响着控制板的所有操作; 32-255是用于每个舵机的配置,所以都是32位一组。 <br> === 使能寄存器位定义 === ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |- |align="center"|Bit |align="center"|Name |align="center"|Definition |- |align="center"|15(msb) |align="center"|Global Disable |align="left"|If '1',disables all of the featured controlled by the Enable register. If '0',the individual bit values will be used to enable or disable the features. |- |align="center"|14-4 |align="center"|(Reserved) |align="center"|--- |- |align="center"|3 |align="center"|Initial Pulse Width Enable |align="left"|If '1',disables all of the featured controlled by the Enable register. If '0',the individual bit values will be used to enable or disable the features. |- |align="center"|2 |align="center"|Initial Pulse Offset Enable |align="left"|If '1',disables all of the featured controlled by the Enable register. If '0',the individual bit values will be used to enable or disable the features. |- |align="center"|1 |align="center"|TX Delay/Pacing Enable |align="left"|If '1',disables all of the featured controlled by the Enable register. If '0',the individual bit values will be used to enable or disable the features. |- |align="center"|0(1sb) |align="center"|Startup String Enable |align="left"|If '1',enables execution of the startup string when power is applied to the SSC-32. If '0',the startup string will not be executed. |} <br> === 寄存器读写 === ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |- |align="center"|Command |align="center"|Argument |align="center"|Description |align="center"|Examples |- |align="center"|Register write: R<r> = <n><cr> |align="center"|r = reg number,0-255 n = value |align="center"|Programs the value of a register. Spaces are optional around the register number and value. |align="left"|R0=1023 <cr> R32 = -50 <cr> |- |align="center"|Register read: R<r><cr> |align="center"|r = reg number,0-255 |align="center"|Displays the value of a register, followed by a carriage return.The displayed value is in ASCII format, and is terminated with a carriage return. |align="left"|R0<cr> :result:1023<cr> R32<cr> :result: -50 <cr> |- |align="center"|Set to defaults: RDFLT <cr> |align="center"|none |align="center"|Sets all of the registers to their default values. When the command is complete the SSC-32 will transmit the string OK<cr>. |align="left"|RDFLT<cr> :result:OK<cr> |} :<font color="red">注意:</font>寄存器 0-15 的配置 -- 在熟悉后再下使用,否则使用简单的 R = 1/0 即可(主要使用的是使能上电自动执行)。 <br> === 其他寄存器指令 === ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |- |align="center"|Command |align="center"|Argument |align="center"|Description |align="center"|Examples |- |align="center"|STOP<n><cr> |align="center"|0-31 |align="center"|Immediately stops the specified servo at its current position.A space is optional before the servo number. |align="center"|STOP0<cr> STOP31<cr> |} :停止某个舵机。如果该舵机正在执行,其他舵机将继续运行,该舵机停止直到该动作完成。 :<font color="red">注意:</font> :*EER and EEW 指令不适用于内部的EEPROM. 仅用于外部存储EEPROM. :*寄存器读写指令和启动字符串指令是适用于内部EEPROM的(控制芯片的EEPROM)。 <br> === 启动字符串 === ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |-align="center" |Command |Argument |Description/Examples |- |align="center"|Delete characters: SSDEL<n><cr> |align="center"|0-255 |align="left"|Deletes <n> characters from the end of the startup string. If <n> is greater than the length of the startup string, then SSDEL deleter the entire string. SSDEL 5 <cr> :-Deleted the last 5 characters of the startup string SSDEL 255 <cr> :-Deletes the entire startup string |- |align="center"|Concatenate: SSCAT <string> <cr> |align="center"|Up to 100 ASCII characters |align="left"|Concatenates <string> to the current startup string. The blank space immediately following "SSCAT" is ignored, but all other spaces are part of the string. The string is terminated by a carriage return, and may not contain embedded carriage returns. Commands in the startup string are terminated with a semicolon (including the last command). SSCAT #0P1000#1P2000T3000;<cr> SSCAT PL0 SQ5 SM50;<cr> |- |align="center"|Display startup string: SS <cr> |align="center"|none |align="left"|Displays the entire startup string, surrounded by quotation marks and followed by a carriage return. SS <cr> :result: "#0P1000#1P2000T3000;PL0 SQ5 SM50;"<cr> |} :停止某个舵机。 :<font color="red">注意:</font> :*启用字符串是需要控制板重新上电的,当然使能启动字符串寄存器位也需要设置。重新上电之后,启用字符串指令需要再其他寄存器指令执行结束后才执行(例如:初始化舵机角度) :*启用字符串的最大字符串长度为100 ,超过这个部分的做忽略处理。 :*在启用字符串指令中不能使用以下指令: EER, EEW, R=, SSCAT, SSDEL. :*SS 查询指令和SSCAT 设置字符串指令的执行都需要数百毫秒的时间,根据波特率决定。在舵机运行或者播放动作组过程中不应该使用这两个指令。 :*执行SSDEL 或者 SSCAT指令时,控制板不能掉电。确定指令执行完成后,使用 SS 指令查询等待回应。 :*<font color="orange">每次启动字符串的改变了都是需要消耗主芯片的EEPROM。EEPROM 典型的最大可写次数 100000 。所以在使用中不能快速改变启动字符串,这将可能导致 ATmega 处理器的EEPROM 永久性的损坏。</font> <br> '''启用字符串例子 ''' <br> ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |-align="center" |Command |Result |-align="left" |SSDEL 255 <cr> SS <cr> |""<cr> |-align="left" |SSCAT #0P2000T5000;<cr> SS <cr> |"#0P2000T5000;"<cr> |-align="left" |SSCAT XXXX<cr> SSC <cr> |"#0P2000T5000;XXXX"<cr> |-align="left" |SSDEL 4 <cr> SS <cr> |"#0P2000T5000;"<cr> |-align="left" |SSDEL 6 <cr> SS <cr> |"#0P2000"<cr> |-align="left" |SSCAT #1P1000T4000;PL0SQ5;<cr> SS <cr> |"#0P2000#1P1000T4000;PL0SQ5;"<cr> |} <br> '''附加例子 ''' <br> ::{|border="1" cellspacing="0" align="center" cellpadding="4" width="700px" |-align="center" |Command |Result |-align="left" |RDFLT |Set all registers to default values |-align="left" |SSDEL 255 |Erase the startup string |-align="left" |R0 |Display register 0 |-align="left" |R0=2 R1=2000 R2=1000 |Set TX delay to 2000uS and TX pacing to 1000uS. (R0=2: Bit 1 of R0 enables TX delay/pacing.) |-align="left" |R0=12 R32=50 R64=1000 |Set the pulse offset for servo 0 to 50 and the initial pulse width to 1000. (Bits 2 and 3 of R0 enable pulse offset and pulse width.) |-align="left" |R0=13 SSDEL 255 SSCAT #0P1500T5000; |Move R0 slowly to a pulse width of 1500 at startup. Assume the initial pulse width is set as in the previous example. (Bit 0 of R0 enables the startup string.) |-align="left" |SS |Display the current startup string. |} ---- [[首页 | 返回首页]] 更多建议和问题欢迎反馈至 [http://www.yfrobot.com YFRobot论坛] 购买方式:[http://yfrobot.taobao.com/ YFRobot 电子工作室]