📄 lib.cpp
字号:
#include <stdio.h>
#include <conio.h>
#include "lib.h"
/* global variables */
short int DATA_PORT_ADDRESS;
short int COMMAND_PORT_ADDRESS;
short int STATUS_PORT_ADDRESS;
short int INTERRUPT_PORT_ADDRESS;
short int RESET_PORT_ADDRESS;
short int check_sum_err = FALSE;
long set_1(void)
{
WORD axis_status, scratch;
send_chipset_cmd(SET_1, CHIPSET_REQUEST, 1, &scratch, &axis_status);
return((long) axis_status);
}
long set_2(void)
{
WORD axis_status, scratch;
send_chipset_cmd(SET_2, CHIPSET_REQUEST, 1, &scratch, &axis_status);
return((long) axis_status);
}
long set_3(void)
{
WORD axis_status, scratch;
send_chipset_cmd(SET_3, CHIPSET_REQUEST, 1, &scratch, &axis_status);
return((long) axis_status);
}
long set_4(void)
{
WORD axis_status, scratch;
send_chipset_cmd(SET_4, CHIPSET_REQUEST, 1, &scratch, &axis_status);
return((long) axis_status);
}
long set_i(void)
{
WORD axis_status, scratch;
send_chipset_cmd(SET_I, CHIPSET_REQUEST, 1, &scratch, &axis_status);
return((long) axis_status);
}
long set_base_address(long address)
{
DATA_PORT_ADDRESS=address;
COMMAND_PORT_ADDRESS=address+1;
STATUS_PORT_ADDRESS=address+2;
INTERRUPT_PORT_ADDRESS=address+0xc;
RESET_PORT_ADDRESS=address+2;
return 0;
}
/*
----------------------------------------------
PROFILE GENERATION
----------------------------------------------
*/
long set_prfl_s_crv(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_PRFL_S_CRV, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_prfl_trap(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_PRFL_TRAP, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_prfl_vel(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_PRFL_VEL, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_prfl_gear(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_PRFL_GEAR, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_pos(long the_value)
{
WORD data[2], scratch;
data[HIGH] = (the_value >> 16) & 0xffffL;
data[LOW] = the_value & 0xffffL;
send_chipset_cmd(SET_POS, CHIPSET_SET, 2, data, &scratch);
return(0L);
}
long set_vel(long the_value)
{
//the_value的意义是65536倍的脉冲数/采样周期
//the_value的数据范围是0-16383*65536即0-1073676288
WORD data[2], scratch;
data[HIGH] = (the_value >> 16) & 0xffffL;
data[LOW] = the_value & 0xffffL;
send_chipset_cmd(SET_VEL, CHIPSET_SET, 2, data, &scratch);
return(0L);
}
long set_acc(long the_value)
{
//the_value的意义是65536倍的脉冲数/采样周期/采样周期
//the_value的数据范围: 在梯形模式下为(0,16383*65536)即(0,1073676288)
// 在速度模式下为(-16384*65536,16383*65536)即(-1073741824,1073676288)
WORD data[2], scratch;
data[HIGH] = (the_value >> 16) & 0xffffL;
data[LOW] = the_value & 0xffffL;
send_chipset_cmd(SET_ACC, CHIPSET_SET, 2, data, &scratch);
return(0L);
}
long set_max_acc(long the_value)
{
//the_value的意义是65536倍的脉冲数/采样周期/采样周期
//the_value的数据范围为(0,32767)
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_MAX_ACC, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_jerk(long the_value)
{
//the_value的意义是4294967296倍的脉冲数/采样周期/采样周期/采样周期
//the_value的数据范围为(0,2147483647)
WORD data[2], scratch;
data[HIGH] = (the_value >> 16) & 0xffffL;
data[LOW] = the_value & 0xffffL;
send_chipset_cmd(SET_JERK, CHIPSET_SET, 2, data, &scratch);
return(0L);
}
long set_ratio(long the_value)
{
//the_value的意义是65536倍的齿轮比
//the_value的数据范围为(-32768*65536,32767*65536)
WORD data[2], scratch;
data[HIGH] = (the_value >> 16) & 0xffffL;
data[LOW] = the_value & 0xffffL;
send_chipset_cmd(SET_RATIO, CHIPSET_SET, 2, data, &scratch);
return(0L);
}
long stop(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(STOP, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long smooth_stop(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SMOOTH_STOP, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long synch_prfl(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SYNCH_PRFL, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long zero_pos(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(ZERO_POS, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long get_pos(void)
{
WORD data[2], scratch;
long pos;
send_chipset_cmd(GET_POS, CHIPSET_REQUEST, 2, &scratch, data);
pos = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(pos);
}
long get_vel(void)
{
WORD data[2], scratch;
long vel;
send_chipset_cmd(GET_VEL, CHIPSET_REQUEST, 2, &scratch, data);
vel = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(vel);
}
long get_acc(void)
{
WORD data[2], scratch;
long acc;
send_chipset_cmd(GET_ACC, CHIPSET_REQUEST, 2, &scratch, data);
acc = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(acc);
}
long get_max_acc(void)
{
WORD max_acc, scratch;
send_chipset_cmd(GET_MAX_ACC, CHIPSET_REQUEST, 1, &scratch, &max_acc);
return((long) max_acc);
}
long get_jerk(void)
{
WORD data[2], scratch;
long jerk;
send_chipset_cmd(GET_JERK, CHIPSET_REQUEST, 2, &scratch, data);
jerk = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(jerk);
}
long get_ratio(void)
{
WORD data[2], scratch;
long ratio;
send_chipset_cmd(GET_RATIO, CHIPSET_REQUEST, 2, &scratch, data);
ratio = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(ratio);
}
long get_desired_pos(void)
{
WORD data[2], scratch;
long target_pos;
send_chipset_cmd(GET_TRGT_POS, CHIPSET_REQUEST, 2, &scratch, data);
target_pos = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(target_pos);
}
long get_desired_vel(void)
{
WORD data[2], scratch;
long target_vel;
send_chipset_cmd(GET_TRGT_VEL, CHIPSET_REQUEST, 2, &scratch, data);
target_vel = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(target_vel);
}
/*
----------------------------------------------
DIGITAL FILTER
----------------------------------------------
*/
long set_kp(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_KP, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_kd(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_KD, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_ki(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_KI, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_kvff(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_KVFF, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_i_lm(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_I_LM, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_mtr_lmt(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_MTR_LMT, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_mtr_bias(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_MTR_BIAS, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long set_pos_err(long the_value)
{
WORD data, scratch;
data = the_value & 0xffffL;
send_chipset_cmd(SET_POS_ERR, CHIPSET_SET, 1, &data, &scratch);
return(0L);
}
long get_kp(void)
{
WORD kp, scratch;
send_chipset_cmd(GET_KP, CHIPSET_REQUEST, 1, &scratch, &kp);
return((long) kp);
}
long get_kd(void)
{
WORD kd, scratch;
send_chipset_cmd(GET_KD, CHIPSET_REQUEST, 1, &scratch, &kd);
return((long) kd);
}
long get_ki(void)
{
WORD ki, scratch;
send_chipset_cmd(GET_KI, CHIPSET_REQUEST, 1, &scratch, &ki);
return((long) ki);
}
long get_kvff(void)
{
WORD kvff, scratch;
send_chipset_cmd(GET_KVFF, CHIPSET_REQUEST, 1, &scratch, &kvff);
return((long) kvff);
}
long get_i_lm(void)
{
WORD i_lim, scratch;
send_chipset_cmd(GET_I_LM, CHIPSET_REQUEST, 1, &scratch, &i_lim);
return((long) i_lim);
}
long get_mtr_lmt(void)
{
WORD mtr_lmt, scratch;
send_chipset_cmd(GET_MTR_LMT, CHIPSET_REQUEST, 1, &scratch, &mtr_lmt);
return((long) mtr_lmt);
}
long get_mtr_bias(void)
{
WORD mtr_bias, scratch;
send_chipset_cmd(GET_MTR_BIAS, CHIPSET_REQUEST, 1, &scratch, &mtr_bias);
return((long) mtr_bias);
}
long get_pos_err(void)
{
WORD pos_err, scratch;
send_chipset_cmd(GET_POS_ERR, CHIPSET_REQUEST, 1, &scratch, &pos_err);
return((long) pos_err);
}
long get_intgr(void)
{
WORD integration_value, scratch;
send_chipset_cmd(GET_INTGR, CHIPSET_REQUEST, 1, &scratch, &integration_value);
return((long) integration_value);
}
long get_actl_pos_err(void)
{
WORD actl_pos_err, scratch;
send_chipset_cmd(GET_ACTL_POS_ERR, CHIPSET_REQUEST, 1, &scratch, &actl_pos_err);
return((long) actl_pos_err);
}
long set_auto_stop_off(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_AUTO_STOP_OFF, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_auto_stop_on(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_AUTO_STOP_ON, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
/*
----------------------------------------------
PARAMETER UPDATE
----------------------------------------------
*/
long set_time_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_TIME_BRKPNT, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_pos_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_POS_BRKPNT, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_neg_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_NEG_BRKPNT, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_actl_pos_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_ACTL_POS_BRK, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_mtn_cmplt_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_MTN_CMPLT_BRK, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_ext_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_EXT_BRK, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_actl_neg_brk(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_ACTL_NEG_BRK, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_brk_off(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_BRK_OFF, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_brk_pnt(long the_value)
{
WORD data[2], scratch;
data[HIGH] = (the_value >> 16) & 0xffffL;
data[LOW] = the_value & 0xffffL;
send_chipset_cmd(SET_BRK_PNT, CHIPSET_SET, 2, data, &scratch);
return(0L);
}
long update(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(UPDATE, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long multi_update(long the_value)
{
WORD mask, scratch;
mask = the_value & 0xffffL;
send_chipset_cmd(MULTI_UPDATE, CHIPSET_SET, 1, &mask, &scratch);
return(0L);
}
long set_auto_update_on(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_AUTO_UPDATE_ON, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long set_auto_update_off(void)
{
WORD scratch1, scratch2;
send_chipset_cmd(SET_AUTO_UPDATE_OFF, CHIPSET_SET, 0, &scratch1, &scratch2);
return(0L);
}
long get_brk_pnt(void)
{
WORD data[2], scratch;
long breakpoint_value;
send_chipset_cmd(GET_BRK_PNT, CHIPSET_REQUEST, 2, &scratch, data);
breakpoint_value = ((data[HIGH] & 0xffffL) << 16) | (data[LOW] & 0xffffL);
return(breakpoint_value);
}
/*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -