Dynamixel  2.9.5
RoadNarrows Robotics Dynamixel Package
EX.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////////////
2 //
3 // Package: Dynamixel
4 //
5 // Library: librnr_dynamixel
6 //
7 // File: EX.h
8 //
9 /*! \file
10  *
11  * $LastChangedDate: 2015-01-12 10:56:06 -0700 (Mon, 12 Jan 2015) $
12  * $Rev: 3845 $
13  *
14  * \ingroup dyna_lib_hdrs
15  *
16  * \brief RoadNarrows EX Series Dynamixel Declarations.
17  *
18  * \note Only deltas from base values found in Dynamixel.h are defined here.
19  *
20  * \author Robin Knight (robin.knight@roadnarrows.com)
21  *
22  * \copyright
23  * \h_copy 2011-2017. RoadNarrows LLC.\n
24  * http://www.roadnarrows.com\n
25  * All Rights Reserved
26  */
27 /*
28  * @EulaBegin@
29  *
30  * Unless otherwise stated explicitly, all materials contained are copyrighted
31  * and may not be used without RoadNarrows LLC's written consent,
32  * except as provided in these terms and conditions or in the copyright
33  * notice (documents and software) or other proprietary notice provided with
34  * the relevant materials.
35  *
36  * IN NO EVENT SHALL THE AUTHOR, ROADNARROWS LLC, OR ANY
37  * MEMBERS/EMPLOYEES/CONTRACTORS OF ROADNARROWS OR DISTRIBUTORS OF THIS SOFTWARE
38  * BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
39  * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
40  * DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN
41  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42  *
43  * THE AUTHORS AND ROADNARROWS LLC SPECIFICALLY DISCLAIM ANY WARRANTIES,
44  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
45  * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN
46  * "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO
47  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
48  *
49  * @EulaEnd@
50  */
51 ////////////////////////////////////////////////////////////////////////////////
52 
53 #ifndef _EX_H
54 #define _EX_H
55 
56 #include "rnr/rnrconfig.h"
57 #include "rnr/units.h"
58 #include "rnr/log.h"
59 
60 #include "Dynamixel/Dynamixel.h"
61 
62 #ifndef SWIG
63 C_DECLS_BEGIN
64 #endif // SWIG
65 
66 // ---------------------------------------------------------------------------
67 // EX Models and Specifications
68 // ---------------------------------------------------------------------------
69 
70 /*!
71  * \addtogroup dyna_servo_model_num
72  *
73  * \{
74  */
75 #define DYNA_MODEL_NUM_EX106P 0x006b ///< EX-106+
76 /*! \} */
77 
78 /*!
79  * \ingroup dyna_spec
80  * \defgroup dyan_spec_ex106p EX-106+ Specification
81  *
82  * \{
83  */
84 #define DYNA_EX106P_SPEC_WEIGHT_G 154.0 ///< weight (grams)
85 #define DYNA_EX106P_SPEC_WIDTH_MM 40.2 ///< width (mm)
86 #define DYNA_EX106P_SPEC_HEIGHT_MM 65.1 ///< height (mm)
87 #define DYNA_EX106P_SPEC_DEPTH_MM 46.0 ///< depth (mm)
88 
89 #define DYNA_EX106P_SPEC_POS_RES_DEG 0.06 ///< resolution (degrees)
90 #define DYNA_EX106P_SPEC_GEAR_RATIO 184.0 ///< gear reduction ratio : 1
91 
92 #define DYNA_EX106P_SPEC_STALL_TORQUE_KGF 107.0
93  ///< maximum stall torque (kgf) at optimal power
94 
95 #define DYNA_EX106P_SPEC_MAX_SPEED_RPM 91.0
96  ///< maximum no-load speed (rpm) at optimal power
97 
98 #define DYNA_EX106P_SPEC_ANGLE_MIN_DEG 0.0
99  ///< minimum rotation angle in servo mode (deg)
100 
101 #define DYNA_EX106P_SPEC_ANGLE_MAX_DEG 251.0
102  ///< maximum rotation angle in servo mode (deg)
103 
104 #define DYNA_EX106P_SPEC_MODES (DYNA_MODE_SERVO|DYNA_MODE_CONTINUOUS)
105  ///< supported modes (see \ref dyna_servo_mode)
106 
107 #define DYNA_EX106P_SPEC_HAS_360_POS true
108  ///< servo does provide 360\h_deg position data
109 
110 #define DYNA_EX106P_SPEC_TEMP_MIN_C (-5.0)
111  ///< minimum recommended operational temperature (C)
112 
113 #define DYNA_EX106P_SPEC_TEMP_MAX_C 80.0
114  ///< maximum recommended operational temperature (C)
115 
116 #define DYNA_EX106P_SPEC_VOLT_MIN_V 12.0
117  ///< minimum operational voltage (V)
118 
119 #define DYNA_EX106P_SPEC_VOLT_MAX_V 18.5
120  ///< maximum operational voltage (V)
121 
122 #define DYNA_EX106P_SPEC_CTL_METHOD DYNA_CTL_METHOD_COMPLIANCE
123  ///< position control method (see \ref dyna_ctl_method)
124 /*! \} */
125 
126 
127 // ---------------------------------------------------------------------------
128 // EX-106+
129 // ---------------------------------------------------------------------------
130 
131 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132 // EX-106+ Common Parameters
133 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
134 
135 /*!
136  * \ingroup dyna_common
137  * \defgroup dyna_common_ex106p EX-106+ Parameters
138  *
139  * \{
140  */
141 /*! \} */
142 
143 /*!
144  * \ingroup dyna_common_ex106p
145  * \defgroup dyna_common_ex106p_pos EX-106+ Position Common Parameters
146  *
147  * \{
148  */
149 #define DYNA_EX106P_POS_MASK 0xffff ///< valid data mask
150 #define DYNA_EX106P_POS_MIN_RAW 0 ///< minimum raw angular position
151 #define DYNA_EX106P_POS_MAX_RAW 4095 ///< maximum raw angular position
152 #define DYNA_EX106P_POS_MODULO 4096 ///< continuous position mod [0-max]
153 #define DYNA_EX106P_POS_MIN_DEG 0 ///< minimum angular position
154 #define DYNA_EX106P_POS_MAX_DEG 250.92 ///< maximum angular position
155 #define DYNA_EX106P_POS_RES_DEG \
156  ((double)DYNA_EX106P_POS_MAX_DEG/(double)DYNA_EX106P_POS_MAX_RAW)
157  ///< 0.06\h_deg (servo mode) resolution
158 /*! \} */
159 
160 
161 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
162 // EX-106+ Servo Control Table
163 // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
164 
165 /*!
166  * \ingroup dyna_memmap
167  * \defgroup dyna_memmap_ex106p EX-106+ Control Table Memory Map
168  *
169  * EX-106+ EEPROM and RAM memory map.
170  * \{
171  */
172 /*! \} */
173 
174 /*!
175  * \ingroup dyna_memmap_ex106p
176  * \defgroup dyna_memmap_ex106p_layout Address Layout
177  * \{
178  */
179 #define DYNA_EX106P_EEPROM_MIN_ADDR DYNA_EEPROM_MIN_ADDR
180  ///< EX-106+ minimum EEPROM address
181 #define DYNA_EX106P_EEPROM_MAX_ADDR DYNA_EEPROM_MAX_ADDR
182  ///< EX-106+ maximum EEPROM address
183 #define DYNA_EX106P_RAM_MIN_ADDR DYNA_RAM_MIN_ADDR
184  ///< EX-106+ minimum RAM address
185 #define DYNA_EX106P_RAM_MAX_ADDR 57
186  ///< EX-106+ maximum RAM address
187 #define DYNA_EX106P_MEM_MAX_SIZ 58
188  ///< EX-106+ maximum control memory size
189 /*! \} */
190 
191 
192 // . . . . . . . . . . . . . . . . . . .
193 // EEPROM. All values are read/write (RW) unless otherwise noted.
194 // . . . . . . . . . . . . . . . . . . .
195 
196 /*!
197  * \ingroup dyna_memmap_ex106p
198  * \defgroup dyna_memmap_ex106p_lim_cw EEPROM Clockwise Angle Limit.
199  *
200  * Minimum angle (goal position) limit.
201  *
202  * \sa \ref dyna_common_ex106p_pos for valid values.
203  *
204  * \par Mode: RW
205  * \{
206  */
207 #define DYNA_EX106P_ADDR_LIM_CW_MASK 0x0fff ///< valid data mask
208 /*! \} */
209 
210 /*!
211  * \ingroup dyna_memmap_ex106p
212  * \defgroup dyna_memmap_ex106p_lim_ccw EEPROM Counterclockwise Angle Limit.
213  *
214  * Maximum angle (goal position) limit.
215  *
216  * \sa \ref dyna_common_ex106p_pos for valid values.
217  *
218  * \par Mode: RW
219  * \{
220  */
221 #define DYNA_EX106P_ADDR_LIM_CCW_MASK 0x0fff ///< valid data mask
222 /*! \} */
223 
224 /*!
225  * \ingroup dyna_memmap_ex106p
226  * \defgroup dyna_memmap_ex106p_drive_mode EEPROM Drive mode.
227  *
228  * Place to servos in a dual joint drive mode.
229  *
230  * \par Mode: RW
231  * \{
232  */
233 #define DYNA_EX106P_ADDR_DRIVE_MODE 10 ///< EEPROM drive mode (RW)
234 
235 #define DYNA_EX106P_ADDR_DRIVE_MODE_MASK 0x03 ///< valid data mask
236 
237 #define DYNA_EX106P_DRIVE_MODE_MS_MASTER 0x00 ///< dual joint master
238 #define DYNA_EX106P_DRIVE_MODE_MS_SLAVE 0x02 ///< dual joint slave
239 #define DYNA_EX106P_DRIVE_MODE_NR_NORM 0x00
240  ///< dual joint normal rotation
241 #define DYNA_EX106P_DRIVE_MODE_NR_REV 0x01
242  ///< dual joint reverse rotation
243 
244 #define DYNA_EX106P_DRIVE_MODE_DFT \
245  (DYNA_EX106P_DRIVE_MODE_MS_MASTER | DYNA_EX106P_DRIVE_MODE_NR_NORM)
246 /*! \} */
247 
248 
249 // . . . . . . . . . . . . . . . . . . .
250 // RAM. All values are read/write (RW) unless otherwise noted.
251 // . . . . . . . . . . . . . . . . . . .
252 
253 /*!
254  * \ingroup dyna_memmap_ex106p
255  * \defgroup dyna_memmap_ex106p_goal_pos RAM Goal Position
256  *
257  * Move to new goal position. The servo will move at the current goal speed
258  * under the current torque limit. These fields are ignored in continuous mode.
259  *
260  * \sa \ref dyna_ex106p_servo_pos for valid values.
261  *
262  * \par Mode: RW
263  *
264  * \{
265  */
266 #define DYNA_EX106P_ADDR_GOAL_POS_MASK 0x0fff ///< valid data mask
267 /*! \} */
268 
269 /*!
270  * \ingroup dyna_memmap_ex106p
271  * \defgroup dyna_memmap_ex106p_cur_pos RAM Current Position
272  *
273  * Current servo position. These fields are invalid in continuous mode.
274  *
275  * \sa \ref dyna_ex106p_servo_pos for valid values.
276  *
277  * \par Mode: R
278  *
279  * \{
280  */
281 #define DYNA_EX106P_ADDR_CUR_POS_MASK 0xffff ///< valid data mask
282 
283 #define DYNA_EX106P_CUR_POS_S_MASK 0x0fff ///< servo mode positiion mask
284 
285 // In continuous mode, delta position = current position - last position
286 // modulo 0xffff.
287 #define DYNA_EX106P_CUR_POS_C_MASK 0xffff ///< continuous mode position mask
288 /*! \} */
289 
290 /*!
291  * \ingroup dyna_memmap_ex106p
292  * \defgroup dyna_memmap_ex106p_sense RAM RAM Sensed Current
293  *
294  * \par Mode: RW
295  *
296  * \{
297  */
298 #define DYNA_EX106P_ADDR_CURRENT_LSB 56 ///< sensed current draw (lsb)
299 #define DYNA_EX106P_ADDR_CURRENT_MSB 57 ///< sensed current draw (msb)
300 
301 #define DYNA_EX106P_ADDR_CURRENT_MASK 0x3ff ///< valid data mask
302 
303 #define DYNA_EX106P_CURRENT_RES_M_AMP 10 ///< 10mA resolution
304 
305 #define DYNA_EX106P_CURRENT_MAG_MASK 0x01ff ///< current magnitude field mask
306 #define DYNA_EX106P_CURRENT_MAG_SHIFT 0 ///< current magnitude field shift
307 #define DYNA_EX106P_CURRENT_ZERO_RAW 512 ///< 0 Amp draw
308 
309 /*!
310  * \brief Current(mA) / 10.
311  *
312  * \param val Raw field value.
313  *
314  */
315 #define DYNA_EX106P_CURRENT_M_AMP(val) ((val) & DYNA_EX106P_CURRENT_MAG_MASK)
316 
317 /*!
318  * \brief Torque direction.
319  *
320  * \param val Raw field value.
321  */
322 #define DYNA_EX106P_CURRENT_TORQUE_DIR(val) \
323  ((val) < DYNA_EX106P_CURRENT_ZERO_RAW? DYNA_DIR_CCW: DYNA_DIR_CW)
324 /*! \} */
325 
326 
327 #ifndef SWIG
328 C_DECLS_END
329 #endif // SWIG
330 
331 
332 #endif // _EX_H
RoadNarrows Dynamixel Top-Level Package Header File.