AK80-64 AK Series Actuator Driver Manual V1.0.8

Table Of Contents
https://www.cubemars.com/
50 / 52
Position
(rad)
-12.5f-12.5f
Speed
(rad/s)
-50.0f-50.0f
-45.0f-45.0f
-50.0f-50.0f
-76.0f-76.0f
-50.0f-50.0f
-8.0f-8.0f
Torque
(N.M)
-65.0f-65.0f
-15.0f-15.0f
-25.0f-25.0f
-12.0f-12.0f
-18.0f-18.0f
-144.0f-144
.0f
Kp range
0-500
Kd range
0-5
Sends routine code
void pack_cmd(CANMessage * msg, float p_des, float v_des, float kp, float kd, float t_ff){
/// limit data to be within bounds ///
float P_MIN =-95.5;
float P_MAX =95.5;
float V_MIN =-30;
float V_MAX =30;
float T_MIN =-18;
float T_MAX =18;
float Kp_MIN =0;
float Kp_MAX =500;
float Kd_MIN =0;
float Kd_MAX =5;
float Test_Pos=0.0;
p_des = fminf(fmaxf(P_MIN, p_des), P_MAX);
v_des = fminf(fmaxf(V_MIN, v_des), V_MAX);
kp = fminf(fmaxf(Kp_MIN, kp), Kp_MAX);
kd = fminf(fmaxf(Kd_MIN, kd), Kd_MAX);
t_ff = fminf(fmaxf(T_MIN, t_ff), T_MAX);
/// convert floats to unsigned ints ///
int p_int = float_to_uint(p_des, P_MIN, P_MAX, 16);
int v_int = float_to_uint(v_des, V_MIN, V_MAX, 12);
int kp_int = float_to_uint(kp, KP_MIN, KP_MAX, 12);
int kd_int = float_to_uint(kd, KD_MIN, KD_MAX, 12);
int t_int = float_to_uint(t_ff, T_MIN, T_MAX, 12);
/// pack ints into the can buffer ///
msg->data[0] = p_int>>8; // Position 8 higher
msg->data[1] = p_int&0xFF; // Position 8 lower
msg->data[2] = v_int>>4; // Speed 8 higher
msg->data[3] = ((v_int&0xF)<<4)|(kp_int>>8); //
Speed 4 bit lower KP 4bit higher