⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lib.cpp

📁 这是用Visual C++编写的步进电机驱动控制程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#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 + -