diff --git a/api/api.hpp b/api/api.hpp index e45eef8..471fcf0 100644 --- a/api/api.hpp +++ b/api/api.hpp @@ -13,4 +13,6 @@ // #include "zi_a8000_optical_module.hpp" // -#include "zi_pipette_ctrl_module.hpp" \ No newline at end of file +#include "zi_pipette_ctrl_module.hpp" +// +#include "zi_mini_servo.hpp" \ No newline at end of file diff --git a/api/apibasic/cmdid.hpp b/api/apibasic/cmdid.hpp index a10ca02..ce44510 100644 --- a/api/apibasic/cmdid.hpp +++ b/api/apibasic/cmdid.hpp @@ -13,43 +13,14 @@ typedef enum { kboard_reset = CMDID(0, 0), // para:{}, ack:{} kevent_bus_reg_change_report = CMDID(0, 100), // para:{}, ack:{} -#if 0 - virtual int32_t module_get_state(int32_t state_id, int32_t *state_value) { return err::koperation_not_support; } - virtual int32_t module_read_raw(int32_t startadd, int32_t *data, int32_t *len) { return err::koperation_not_support; } - virtual int32_t module_enable(int32_t enable) { return err::koperation_not_support; } - virtual int32_t module_start() { return err::koperation_not_support; } -#endif - kmodule_ping = CMDID(1, 0), // para:{}, ack:{} - // kmodule_stop = CMDID(1, 1), // para:{}, ack:{} - // kmodule_break = CMDID(1, 2), // para:{}, ack:{} - // kmodule_get_last_exec_status = CMDID(1, 3), // para:{}, ack:{4} - kmodule_get_status = CMDID(1, 4), // para:{}, ack:{4} - kmodule_set_reg = CMDID(1, 5), // para:{4,4}, ack:{} - kmodule_get_reg = CMDID(1, 6), // para:{4}, ack:{4}I - // kmodule_readio = CMDID(1, 7), // para:{}, ack:{4} - // kmodule_writeio = CMDID(1, 8), // para:{4}, ack:{} - // kmodule_read_adc = CMDID(1, 9), // para:{4}, ack:{4} + + kmodule_ping = CMDID(1, 0), // para:{}, ack:{} + kmodule_get_status = CMDID(1, 4), // para:{}, ack:{4} + kmodule_set_reg = CMDID(1, 5), // para:{4,4}, ack:{} + kmodule_get_reg = CMDID(1, 6), // para:{4}, ack:{4}I kmodule_get_error = CMDID(1, 10), // para:{}, ack:{1} kmodule_clear_error = CMDID(1, 11), // para:{}, ack:{} -// kmodule_set_inited_flag = CMDID(1, 12), // para:{4}, ack:{} -// kmodule_get_inited_flag = CMDID(1, 13), // para:{}, ack:{4} -// kmodule_factory_reset = CMDID(1, 14), // para:{}, ack:{} -// kmodule_flush_cfg = CMDID(1, 15), // para:{}, ack:{} -// kmodule_active_cfg = CMDID(1, 16), // para:{}, ack:{} -// kmodule_read_raw = CMDID(1, 19), // para:{4,4}, ack:{4} -// kmodule_enable = CMDID(1, 20), // para:{4}, ack:{} -// kmodule_start = CMDID(1, 21), // para:{4}, ack:{} -#if 0 - virtual ~ZIXYMotor() {} - virtual int32_t xymotor_enable(int32_t enable) { return err::koperation_not_support; } - virtual int32_t xymotor_move_by(int32_t dx, int32_t dy, int32_t motor_velocity) { return err::koperation_not_support; } - virtual int32_t xymotor_move_to(int32_t x, int32_t y, int32_t motor_velocity) { return err::koperation_not_support; } - virtual int32_t xymotor_move_to_zero() { return err::koperation_not_support; } - virtual int32_t xymotor_move_to_zero_and_calculated_shift() { return err::koperation_not_support; } - virtual int32_t xymotor_read_pos(int32_t *x, int32_t *y) { return err::koperation_not_support; } - virtual int32_t xymotor_calculated_pos_by_move_to_zero() { return err::koperation_not_support; } -#endif kxymotor_enable = CMDID(3, 1), // para:{1}, ack:{} kxymotor_move_by = CMDID(3, 2), // para:{4,4,4}, ack:{} kxymotor_move_to = CMDID(3, 3), // para:{4,4,4}, ack:{} @@ -58,36 +29,14 @@ typedef enum { kxymotor_read_pos = CMDID(3, 6), // para:{}, ack:{4,4} kxymotor_calculated_pos_by_move_to_zero = CMDID(3, 7), // para:{}, ack:{} -#if 0 - virtual int32_t code_scaner_start_scan() { return err::koperation_not_support; } - virtual int32_t code_scaner_stop_scan() { return err::koperation_not_support; } - virtual int32_t code_scaner_read_scaner_result(int32_t startadd, uint8_t *data, int32_t *len) { return err::koperation_not_support; } -#endif - kcode_scaner_start_scan = CMDID(4, 1), // para:{}, ack:{} kcode_scaner_stop_scan = CMDID(4, 2), // para:{}, ack:{} kcode_scaner_read_scaner_result = CMDID(4, 3), // para:{4,4}, ack:{4} -#if 0 - virtual int32_t pipette_ctrl_init_device() { return err::koperation_not_support; }; - virtual int32_t pipette_ctrl_put_tip() { return err::koperation_not_support; }; - virtual int32_t pipette_ctrl_move_to_ul(int32_t ul) { return err::koperation_not_support; }; -#endif - kpipette_ctrl_init_device = CMDID(5, 1), // para:{}, ack:{} kpipette_ctrl_put_tip = CMDID(5, 2), // para:{}, ack:{} kpipette_ctrl_move_to_ul = CMDID(5, 3), // para:{4}, ack:{} -#if 0 - virtual int32_t a8000_optical_module_power_ctrl(int32_t state) = 0; - virtual int32_t a8000_optical_open_laser(int32_t type) = 0; - virtual int32_t a8000_optical_close_laser(int32_t type) = 0; - virtual int32_t a8000_optical_set_laster_gain(int32_t type, int32_t gain) = 0; - virtual int32_t a8000_optical_set_scan_amp_gain(int32_t type, int32_t gain) = 0; - virtual int32_t a8000_optical_read_scanner_adc_val(int32_t type, int32_t* adcval) = 0; - virtual int32_t a8000_optical_read_laster_adc_val(int32_t type, int32_t* adcval) = 0; - virtual int32_t a8000_optical_scan_current_point_amp_adc_val(int32_t type, int32_t lastergain, int32_t ampgain, int32_t* laster_fb_val, int32_t* adcval) = 0; -#endif ka8000_optical_module_power_ctrl = CMDID(6, 0), // para:{4}, ack:{} ka8000_optical_open_laser = CMDID(6, 1), // para:{4}, ack:{} ka8000_optical_close_laser = CMDID(6, 2), // para:{4}, ack:{} @@ -100,18 +49,29 @@ typedef enum { /*********************************************************************************************************************** * STEP_MOTOR * ***********************************************************************************************************************/ + kstep_motor_enable = CMDID(10, 1), // para:{1}, ack:{} + kstep_motor_read_pos = CMDID(10, 2), // para:{}, ack:{4} + kstep_motor_easy_rotate = CMDID(10, 3), // para:{4}, ack:{} + kstep_motor_easy_move_by = CMDID(10, 4), // para:{4}, ack:{} + kstep_motor_easy_move_to = CMDID(10, 5), // para:{4}, ack:{} + kstep_motor_easy_move_to_zero = CMDID(10, 6), // para:{1}, ack:{} + kstep_motor_easy_set_current_pos = CMDID(10, 7), // para:{4}, ack:{} + kstep_motor_easy_move_to_io = CMDID(10, 8), // para:{4,4}, ack:{} + kstep_motor_active_cfg = CMDID(10, 9), // para:{4,4}, ack:{} + kstep_motor_stop = CMDID(10, 10), // para:{4}, ack:{} + kstep_motor_read_io_state = CMDID(10, 11), // para:{4}, ack:{} - kstep_motor_enable = CMDID(2, 1), // para:{1}, ack:{} - kstep_motor_read_pos = CMDID(2, 11), // para:{}, ack:{4} - kstep_motor_easy_rotate = CMDID(2, 17), // para:{4}, ack:{} - kstep_motor_easy_move_by = CMDID(2, 18), // para:{4}, ack:{} - kstep_motor_easy_move_to = CMDID(2, 19), // para:{4}, ack:{} - kstep_motor_easy_move_to_zero = CMDID(2, 20), // para:{1}, ack:{} - kstep_motor_easy_set_current_pos = CMDID(2, 21), // para:{4}, ack:{} - kstep_motor_easy_move_to_io = CMDID(2, 22), // para:{4,4}, ack:{} - kstep_motor_active_cfg = CMDID(2, 23), // para:{4,4}, ack:{} - kstep_motor_stop = CMDID(2, 24), // para:{4}, ack:{} - kstep_motor_read_io_state = CMDID(2, 25), // para:{4}, ack:{} + /*********************************************************************************************************************** + * MINI_SERVO * + ***********************************************************************************************************************/ + kmini_servo_enable = CMDID(11, 1), + kmini_servo_read_pos = CMDID(11, 2), + kmini_servo_active_cfg = CMDID(11, 3), + kmini_servo_stop = CMDID(11, 4), + kmini_servo_rotate = CMDID(11, 5), + kmini_servo_move_to = CMDID(11, 6), + kmini_servo_set_mid_point = CMDID(11, 7), + kmini_servo_read_io_state = CMDID(11, 8), } cmdid_t; diff --git a/api/apibasic/errorcode.hpp b/api/apibasic/errorcode.hpp index db5094c..f4fd5e5 100644 --- a/api/apibasic/errorcode.hpp +++ b/api/apibasic/errorcode.hpp @@ -114,6 +114,11 @@ typedef enum { kstep_motor_not_enable = ERROR_CODE(600, 5), // 电机未使能 kstep_motor_ioindex_out_of_range = ERROR_CODE(600, 6), // IO超出范围 + /** + * @brief mini servo error + */ + kmini_servo_not_enable = ERROR_CODE(700, 0), // 未找到零点 + } error_t; const char* error2str(int32_t code); diff --git a/api/apibasic/module_type_index.hpp b/api/apibasic/module_type_index.hpp index 02e1e52..8e72e94 100644 --- a/api/apibasic/module_type_index.hpp +++ b/api/apibasic/module_type_index.hpp @@ -7,14 +7,14 @@ typedef enum { khbot_module = 1, // hbot模块 kmotor_module = 2, // 电机控制 ktemperature_ctrl_module = 3, // 温度控制 - kmini_servo_motor_module = 4, // 舵机 kfan_ctrl_module = 5, // 风扇控制 kcode_scaner = 6, // 风扇控制 kpipette_ctrl_module = 7, // 移液体枪控制 ka8000_optical_module = 8, // a8000光学模组 klaster_scaner_module = 9, // a8000光学模组 - ktmc_step_motor = 10, + ktmc_step_motor = 10, // 步进电机 + kmini_servo_motor_module = 11, // 舵机 } module_type_t; } \ No newline at end of file diff --git a/api/apibasic/reg_index.hpp b/api/apibasic/reg_index.hpp index 0e5f712..c6d6463 100644 --- a/api/apibasic/reg_index.hpp +++ b/api/apibasic/reg_index.hpp @@ -122,35 +122,6 @@ typedef enum { kreg_laster_scaner_adc_result_overflow = REG_INDEX(43, 0, 13), kreg_laster_scaner_laster_intensity = REG_INDEX(43, 0, 14), - /******************************************************************************* - * MOTOR_DEFAULT * - *******************************************************************************/ - kreg_step_motor_pos = REG_INDEX(10, 0, 1), // 机器人x坐标 - kreg_step_motor_io_state = REG_INDEX(10, 0, 2), // IO状态 - kreg_step_motor_dpos = REG_INDEX(10, 0, 3), // 执行完上一条指令后的相对位移 - - kreg_step_motor_shift = REG_INDEX(10, 50, 0), // x偏移 - kreg_step_motor_shaft = REG_INDEX(10, 50, 1), // x轴是否反转 - kreg_step_motor_one_circle_pulse = REG_INDEX(10, 50, 2), // x轴一圈脉冲数 - kreg_step_motor_one_circle_pulse_denominator = REG_INDEX(10, 50, 3), // 设置一圈脉冲数的分母 - kreg_step_motor_default_velocity = REG_INDEX(10, 50, 4), // 默认速度 - kreg_step_motor_default_acc = REG_INDEX(10, 50, 5), // 默认加速度 - kreg_step_motor_default_dec = REG_INDEX(10, 50, 6), // 默认减速度 - kreg_step_motor_default_break_dec = REG_INDEX(10, 50, 7), // 默认减速度 - kreg_step_motor_ihold = REG_INDEX(10, 50, 8), // 步进电机电流配置 - kreg_step_motor_irun = REG_INDEX(10, 50, 9), // 步进电机电流配置 - kreg_step_motor_iholddelay = REG_INDEX(10, 50, 10), // 步进电机电流配置 - kreg_step_motor_iglobalscaler = REG_INDEX(10, 50, 11), // 步进电机电流配置 - kreg_step_motor_run_to_zero_max_d = REG_INDEX(10, 50, 21), // x轴回零最大距离 - kreg_step_motor_look_zero_edge_max_d = REG_INDEX(10, 50, 22), // x轴找零边缘最大距离 - kreg_step_motor_run_to_zero_speed = REG_INDEX(10, 50, 23), // 回零速度 - kreg_step_motor_run_to_zero_dec = REG_INDEX(10, 50, 24), // 回零减速度 - kreg_step_motor_look_zero_edge_speed = REG_INDEX(10, 50, 25), // 找零边缘速度 - kreg_step_motor_look_zero_edge_dec = REG_INDEX(10, 50, 26), // 找零边缘减速度 - kreg_step_motor_default_torque = REG_INDEX(10, 50, 27), // 默认扭矩 - kreg_step_motor_max_d = REG_INDEX(10, 50, 28), // 最大限制距离 - kreg_step_motor_min_d = REG_INDEX(10, 50, 29), // 最小限制距离 - /*********************************************************************************************************************** * XYROBOT * ***********************************************************************************************************************/ @@ -181,6 +152,42 @@ typedef enum { kreg_xyrobot_io_state0 = REG_INDEX(100, 50, 11), // IO状态 kreg_xyrobot_io_state1 = REG_INDEX(100, 50, 12), // IO状态 + /*********************************************************************************************************************** + * step_motor * + ***********************************************************************************************************************/ + kreg_step_motor_pos = REG_INDEX(101, 0, 1), // 机器人x坐标 + kreg_step_motor_dpos = REG_INDEX(101, 0, 3), // 执行完上一条指令后的相对位移 + + kreg_step_motor_shift = REG_INDEX(101, 50, 0), // x偏移 + kreg_step_motor_shaft = REG_INDEX(101, 50, 1), // x轴是否反转 + kreg_step_motor_one_circle_pulse = REG_INDEX(101, 50, 2), // x轴一圈脉冲数 + kreg_step_motor_one_circle_pulse_denominator = REG_INDEX(101, 50, 3), // 设置一圈脉冲数的分母 + kreg_step_motor_default_velocity = REG_INDEX(101, 50, 4), // 默认速度 + kreg_step_motor_default_acc = REG_INDEX(101, 50, 5), // 默认加速度 + kreg_step_motor_default_dec = REG_INDEX(101, 50, 6), // 默认减速度 + kreg_step_motor_default_break_dec = REG_INDEX(101, 50, 7), // 默认减速度 + kreg_step_motor_ihold = REG_INDEX(101, 50, 8), // 步进电机电流配置 + kreg_step_motor_irun = REG_INDEX(101, 50, 9), // 步进电机电流配置 + kreg_step_motor_iholddelay = REG_INDEX(101, 50, 10), // 步进电机电流配置 + kreg_step_motor_iglobalscaler = REG_INDEX(101, 50, 11), // 步进电机电流配置 + kreg_step_motor_run_to_zero_max_d = REG_INDEX(101, 50, 21), // x轴回零最大距离 + kreg_step_motor_look_zero_edge_max_d = REG_INDEX(101, 50, 22), // x轴找零边缘最大距离 + kreg_step_motor_run_to_zero_speed = REG_INDEX(101, 50, 23), // 回零速度 + kreg_step_motor_run_to_zero_dec = REG_INDEX(101, 50, 24), // 回零减速度 + kreg_step_motor_look_zero_edge_speed = REG_INDEX(101, 50, 25), // 找零边缘速度 + kreg_step_motor_look_zero_edge_dec = REG_INDEX(101, 50, 26), // 找零边缘减速度 + kreg_step_motor_max_d = REG_INDEX(101, 50, 28), // 最大限制距离 + kreg_step_motor_min_d = REG_INDEX(101, 50, 29), // 最小限制距离 + + /*********************************************************************************************************************** + * MINI_STEP_MOTOR * + ***********************************************************************************************************************/ + + kreg_mini_servo_pos = REG_INDEX(101, 0, 1), // 位置 + kreg_mini_servo_limit_velocity = REG_INDEX(101, 50, 1), // 限制速度 + kreg_mini_servo_limit_torque = REG_INDEX(101, 50, 2), // 限制扭矩 + kreg_mini_servo_protective_torque = REG_INDEX(101, 50, 3), // 保护扭矩 + } reg_index_t; } // namespace iflytop diff --git a/api/zi_mini_servo.hpp b/api/zi_mini_servo.hpp new file mode 100644 index 0000000..36ad5ac --- /dev/null +++ b/api/zi_mini_servo.hpp @@ -0,0 +1,25 @@ +#pragma once +#include + +#include + +#include "apibasic/basic.hpp" + +namespace iflytop { +using namespace std; + +class ZIMiniServo { + public: + virtual ~ZIMiniServo() {} + virtual int32_t mini_servo_enable(int32_t enable) = 0; + virtual int32_t mini_servo_read_pos(int32_t* pos) = 0; + virtual int32_t mini_servo_active_cfg() = 0; + virtual int32_t mini_servo_stop(int32_t breakstop) = 0; + + virtual int32_t mini_servo_rotate(int32_t direction) = 0; + virtual int32_t mini_servo_move_to(int32_t position) = 0; + + virtual int32_t mini_servo_set_mid_point() = 0; + virtual int32_t mini_servo_read_io_state(int32_t ioindex) = 0; +}; +} // namespace iflytop \ No newline at end of file