MW22-02A/BSP/Driver/tmc2160/tmc2160.c

1800 lines
58 KiB
C
Raw Normal View History

2025-05-21 01:55:40 +00:00
#include "ptz_type_select.h"
#include "ptz_struct.h"
#include "ptz_default_value.h"
#include "tmc2160.h"
#include "w25q128.h"
#ifdef TMC2160
TMC2160Parameter tmc2160_parameter;
TMC2160Regis hori_regis;
TMC2160Regis vert_regis;
unsigned long int version_hori=0;
unsigned long int version_vert=0;
static BSP_OS_SEM ptz_tmc2160_mutex;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
static void delay_time(int time)
{
for(int i = 0; i < time; i ++)
{//<2F><>Ƶ200MHZ
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
}
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>λ<EFBFBD><CEBB>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void h_tmc2160_power_on()
{
//<2F><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
TMC2160_H_POWER_ON;
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//====<3D><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmc2160_data_init();
TMC2160_HORI_CSN_DISABLE;
TMC2160_HORI_DISABLE;
//====<3D>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>״̬<D7B4><CCAC>־
tmc2160_write_register(TMC2160_HORI, TMC2160_GSTAT, 0);
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
//====<3D>Ĵ<EFBFBD><C4B4><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ˮƽ
tmc2160_write_register(TMC2160_HORI, TMC2160_GLOBAL_SCALER, tmc2160_parameter.hori_global_scaler);
tmc2160_write_register(TMC2160_HORI, TMC2160_GCONF, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_PWMCONF, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_DRV_CONF, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_TPOWERDOWN, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_CHOPCONF, TMC2160_1_16_STEP);//ϸ<><CFB8>Ĭ<EFBFBD><C4AC>16
tmc2160_write_register(TMC2160_HORI, TMC2160_IHOLD_IRUN, tmc2160_parameter.hori_work_torque);//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=20/32*2.3A
tmc2160_write_register(TMC2160_HORI, TMC2160_TPWMTHRS, 0);
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
tmc2160_write_register(TMC2160_HORI, TMC2160_SHORT_CONF, 0);
#endif
}
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>λ<EFBFBD><CEBB>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void v_tmc2160_power_on()
{
//<2F><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
TMC2160_V_POWER_ON;
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//====<3D><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmc2160_data_init();
TMC2160_VERT_CSN_DISABLE;
TMC2160_VERT_DISABLE;
//====<3D>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>״̬<D7B4><CCAC>־
tmc2160_write_register(TMC2160_VERT, TMC2160_GSTAT, 0);
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
//====<3D>Ĵ<EFBFBD><C4B4><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ֱ
tmc2160_write_register(TMC2160_VERT, TMC2160_GLOBAL_SCALER, tmc2160_parameter.vert_global_scaler);
tmc2160_write_register(TMC2160_VERT, TMC2160_GCONF, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_PWMCONF, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_DRV_CONF, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_TPOWERDOWN, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_CHOPCONF, TMC2160_1_16_STEP);//ϸ<><CFB8>Ĭ<EFBFBD><C4AC>16
tmc2160_write_register(TMC2160_VERT, TMC2160_IHOLD_IRUN, tmc2160_parameter.vert_work_torque);//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=20/32*2.3A
tmc2160_write_register(TMC2160_VERT, TMC2160_TPWMTHRS, 0);
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
tmc2160_write_register(TMC2160_VERT, TMC2160_SHORT_CONF, 0);
#endif
}
///===== <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> =====
///<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>λ<EFBFBD><CEBB>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void tmc2160_init()
{
BSP_OS_SemCreate(&ptz_tmc2160_mutex,1u,"ptz_tmc2160_mutex");
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_GPIOD);
rcu_periph_clock_enable(RCU_GPIOE);
//GD<47>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸ġ<DEB8><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķϵ縴λ<E7B8B4><CEBB>
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0);//ˮƽ<CBAE><C6BD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);//<2F><>ֱ<EFBFBD><D6B1>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_0| GPIO_PIN_1);
//<2F><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
TMC2160_H_POWER_ON;
TMC2160_V_POWER_ON;
OSTimeDlyHMSM(0u, 0u, 0u, 100u);
//====<3D><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmc2160_data_init();
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//SPI
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_13);//CLK
gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_14);//SDI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15);//SDO<44><4F><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>
gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_13| GPIO_PIN_14);
//====ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);//H_CSN
gpio_mode_set(GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_14);//DIAG1
gpio_mode_set(GPIOD, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13);//DIAG0
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_10);//DRVEN
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);//DIR
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10| GPIO_PIN_11| GPIO_PIN_5);
//====<3D><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);//V_CSN
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_8);//DIAG1
gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_9);//DIAG0
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, GPIO_PIN_7);//DRVEN
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8);//DIR
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7| GPIO_PIN_8);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_11);
TMC2160_HORI_CSN_DISABLE;
TMC2160_HORI_DISABLE;
TMC2160_VERT_CSN_DISABLE;
TMC2160_VERT_DISABLE;
//====<3D>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>״̬<D7B4><CCAC>־
tmc2160_write_register(TMC2160_HORI, TMC2160_GSTAT, 0);
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
tmc2160_write_register(TMC2160_VERT, TMC2160_GSTAT, 0);
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
//====<3D>Ĵ<EFBFBD><C4B4><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ˮƽ
tmc2160_write_register(TMC2160_HORI, TMC2160_GLOBAL_SCALER, tmc2160_parameter.hori_global_scaler);
tmc2160_write_register(TMC2160_HORI, TMC2160_GCONF, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_PWMCONF, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_DRV_CONF, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_TPOWERDOWN, 0);
tmc2160_write_register(TMC2160_HORI, TMC2160_CHOPCONF, TMC2160_1_16_STEP);//ϸ<><CFB8>Ĭ<EFBFBD><C4AC>16
tmc2160_write_register(TMC2160_HORI, TMC2160_IHOLD_IRUN, tmc2160_parameter.hori_work_torque);//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=20/32*2.3A
tmc2160_write_register(TMC2160_HORI, TMC2160_TPWMTHRS, 0);
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
tmc2160_write_register(TMC2160_HORI, TMC2160_SHORT_CONF, 0);
#endif
tmc2160_write_register(TMC2160_HORI, TMC2160_COOLCONF, 0);
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//<2F><>ֱ
tmc2160_write_register(TMC2160_VERT, TMC2160_GLOBAL_SCALER, tmc2160_parameter.vert_global_scaler);
tmc2160_write_register(TMC2160_VERT, TMC2160_GCONF, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_PWMCONF, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_DRV_CONF, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_TPOWERDOWN, 0);
tmc2160_write_register(TMC2160_VERT, TMC2160_CHOPCONF, TMC2160_1_16_STEP);//ϸ<><CFB8>Ĭ<EFBFBD><C4AC>16
tmc2160_write_register(TMC2160_VERT, TMC2160_IHOLD_IRUN, tmc2160_parameter.vert_work_torque);//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=20/32*2.3A
tmc2160_write_register(TMC2160_VERT, TMC2160_TPWMTHRS, 0);
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
tmc2160_write_register(TMC2160_VERT, TMC2160_SHORT_CONF, 0);
#endif
tmc2160_write_register(TMC2160_VERT, TMC2160_COOLCONF, 0);
// vert_regis.g_conf = tmc2160_write_hori_data(TMC2160_HORI,TMC2160_DRV_STATUS,0,0,0,0);
}
///===== <20><>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>SPIλ40λ<30><CEBB><38><CEBB>ַ<EFBFBD><D6B7>32λ<32><CEBB><EFBFBD><EFBFBD>
unsigned long int tmc2160_write_hori_data(char choice, unsigned char x1, unsigned char x2, unsigned char x3,unsigned char x4,unsigned char x5)
{//choice<63><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>x2/x3/x4/x5<78><35><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SPIpacka packa;
unsigned long int dat=0;
unsigned char datak[5] = {0};
char i,j,k;
unsigned char temp=0;
packa.data[0] = x1;//<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַλ
packa.data[1] = x2;//<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
packa.data[2] = x3;//<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
packa.data[3] = x4;//<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
packa.data[4] = x5;//<2F>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
for(k = 0; k < 2; k++)
{//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32>д<EFBFBD>һ<EBA3AC><D2BB><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD>ǰSPIд<49><D0B4>ʱ<EFBFBD><CAB1>ͬʱ<CDAC>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><E1B7B5><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ɴ<EFBFBD>ʵ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ǰд<C7B0><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TMC2160_VERT_CSN_DISABLE;
TMC2160_HORI_CSN_ENABLE;
delay_time(2);
TMC2160_SCLK_HIGH;
delay_time(2);
// //Ƭѡ
// if(choice == TMC2160_HORI)
// {
// TMC2160_HORI_CSN_ENABLE;
// }else{//TMC2160_VERT
// TMC2160_VERT_CSN_ENABLE;
// }
delay_time(2);
TMC2160_SCLK_LOW;
delay_time(10);
for(j = 0; j < 5; j++)
{
for(i = 0; i < 8; i++)
{
TMC2160_SCLK_LOW;
if((packa.data[j] & 0x80) != 0)
{
TMC2160_SDATI_1;
}else{
TMC2160_SDATI_0;
}
packa.data[j] = packa.data[j] << 1;
delay_time(2);
TMC2160_SCLK_HIGH;
temp = TMC2160_SDATO_READ;
datak[j] = datak[j] | (temp << (7-i));
delay_time(2);
}
}
TMC2160_SCLK_HIGH;
delay_time(2);
//Ƭѡʧ<D1A1><CAA7>
TMC2160_HORI_CSN_DISABLE;
dat = datak[0];
dat = (dat << 8) | datak[1];
dat = (dat << 8) | datak[2];
dat = (dat << 8) | datak[3];
dat = (dat << 8) | datak[4];
// dat = datak[4];
}
return dat;
}
///===== SPIλ40λ<30><CEBB><38><CEBB>ַ<EFBFBD><D6B7>32λ<32><CEBB><EFBFBD><EFBFBD>
unsigned long int tmc2160_write_vert_data(char choice, unsigned char x1, unsigned char x2, unsigned char x3,unsigned char x4,unsigned char x5)
{//choice<63><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>x2/x3/x4/x5<78><35><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SPIpacka packa;
unsigned long int dat=0;
unsigned char datak[5] = {0};
char i,j,k;
unsigned char temp=0;
packa.data[0] = x1;//0x90;
packa.data[1] = x2;//0xAB;
packa.data[2] = x3;//0xef;
packa.data[3] = x4;//0xCD;
packa.data[4] = x5;//0xbc;
for(k = 0; k < 2; k++)
{//<2F><><EFBFBD><EFBFBD>3<EFBFBD><33>д<EFBFBD><D0B4>
TMC2160_HORI_CSN_DISABLE;
TMC2160_VERT_CSN_ENABLE;
delay_time(2);
TMC2160_SCLK_HIGH;
delay_time(2);
// //Ƭѡ
// if(choice == TMC2160_HORI)
// {
// TMC2160_HORI_CSN_ENABLE;
// }else{//TMC2160_VERT
// TMC2160_VERT_CSN_ENABLE;
// }
delay_time(2);
TMC2160_SCLK_LOW;
delay_time(10);
for(j = 0; j < 5; j++)
{
for(i = 0; i < 8; i++)
{
TMC2160_SCLK_LOW;
if((packa.data[j] & 0x80) != 0)
{
TMC2160_SDATI_1;
}else{
TMC2160_SDATI_0;
}
packa.data[j] = packa.data[j] << 1;
delay_time(2);
TMC2160_SCLK_HIGH;
temp = TMC2160_SDATO_READ;
datak[j] = datak[j] | (temp << (7-i));
delay_time(2);
}
}
TMC2160_SCLK_HIGH;
delay_time(2);
//Ƭѡʧ<D1A1><CAA7>
TMC2160_VERT_CSN_DISABLE;
dat = datak[0];
dat = (dat << 8) | datak[1];
dat = (dat << 8) | datak[2];
dat = (dat << 8) | datak[3];
dat = (dat << 8) | datak[4];
// dat = datak[4];
}
return dat;
}
///===== ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char tmc2160_set_hori_dir(char dir)
{
if (dir == TMC2160_MOTOR_DIR_FWD)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
TMC2160_HORI_DIR_F; return 1;
}
if (dir == TMC2160_MOTOR_DIR_REV)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
TMC2160_HORI_DIR_R; return 1;
}
delay_time(2);
return 0;
}
///===== <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char tmc2160_set_vert_dir(char dir)
{
if (dir == TMC2160_MOTOR_DIR_FWD)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
TMC2160_VERT_DIR_F; return 1;
}
if (dir == TMC2160_MOTOR_DIR_REV)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
TMC2160_VERT_DIR_R; return 1;
}
delay_time(2);
return 0;
}
///===== ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
char tmc2160_hori_motor_enable(char state)
{
if (state == TMC2160_MOTOR_ENABLE)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TMC2160_HORI_ENABLE; return 1;
}
if (state == TMC2160_MOTOR_DISABLE)
{//<2F>رյ<D8B1><D5B5><EFBFBD>
TMC2160_HORI_DISABLE; return 1;
}
delay_time(2);
return 0;
}
///===== <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
char tmc2160_vert_motor_enable(char state)
{
if (state == TMC2160_MOTOR_ENABLE)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TMC2160_VERT_ENABLE; return 1;
}
if (state == TMC2160_MOTOR_DISABLE)
{//<2F>رյ<D8B1><D5B5><EFBFBD>
TMC2160_VERT_DISABLE; return 1;
}
delay_time(2);
return 0;
}
///===== д<>Ĵ<EFBFBD><C4B4><EFBFBD>,modeΪ<65>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ,dataΪ<61><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>ֵȼ<D6B5><C8BC><EFBFBD>choiceΪƬѡ
char tmc2160_write_register(char choice, unsigned char mode, unsigned char data)
{
u_int8_t buff[5] = {0x00,0x00,0x00,0x00,0x00};
BSP_OS_SemWait(&ptz_tmc2160_mutex, 0u);
switch (mode)
{
case TMC2160_GCONF:
buff[0] = TMC2160_GCONF + 0x80;
buff[1] = 0x00;
buff[2] = 0x00;
#ifdef PTZ_SUPER_LIGHT_WORM_STEP_TMC2160_AS5047D_24V
buff[3] = 0x01;//01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1/16
#endif
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
buff[3] = 0x41;//41<34><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1/32
#endif
buff[4] = 0x4c;//DIAG0<47><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>DIAG1<47><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>źţ<C5BA><C5A3>͵<EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7>Ԥ<EFBFBD><D4A4>ʱָʾ<D6B8><CABE><EFBFBD><EFBFBD>48
if(choice == TMC2160_HORI)
{//<2F><><EFBFBD><EFBFBD>д
hori_regis.g_conf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.g_conf = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_GSTAT://ȫ<><C8AB>״̬<D7B4><CCAC>־<EFBFBD><D6BE>д1<D0B4><31><EFBFBD><EFBFBD>
buff[0] = TMC2160_GSTAT +0x80;
buff[1] = 0xff;
buff[2] = 0xff;
buff[3] = 0xff;
buff[4] = 0xff;
if(choice == TMC2160_HORI)
{
hori_regis.gstae = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.gstae = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_DRV_CONF://<2F><><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȵ<C2B6>
buff[0] = TMC2160_DRV_CONF +0x80;
buff[1] = 0x00;
#ifdef PTZ_SUPER_LIGHT_WORM_STEP_TMC2160_AS5047D_24V
buff[2] = 0x0c;//3c;//0x24;//0x24;//28,08
buff[3] = 0x04;//04
#endif
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
buff[2] = 0x38;//0x24;//38,
buff[3] = 0x02;//0x04;//02
#endif
buff[4] = 0x00;//0x10;//0x10;//00
if(choice == TMC2160_HORI)
{
hori_regis.drv_conf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.drv_conf = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_GLOBAL_SCALER://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
buff[0] = TMC2160_GLOBAL_SCALER +0x80;
buff[1] = 0x00;
buff[2] = 0x00;
buff[3] = 0x00;
buff[4] = data;//ȡֵ255
if(choice == TMC2160_HORI)
{
hori_regis.global_scaler = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.global_scaler = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_IHOLD_IRUN://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[0] = TMC2160_IHOLD_IRUN +0x80;
buff[1] = 0x00;
buff[2] = 0x06;//0x04;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>ʱ<EFBFBD>ϵ磬<CFB5>ɷ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ת
buff[3] = data;//<2F><><EFBFBD>е<EFBFBD><D0B5><EFBFBD>=data/32*4.7A<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0.05ŷ
buff[4] = (data>>1);//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>0x00,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if(choice == TMC2160_HORI)
{
hori_regis.i_run = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.i_run = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_TPOWERDOWN://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1>䣬2
buff[0] = TMC2160_TPOWERDOWN +0x80;
buff[1] = 0x00;
buff[2] = 0x00;
buff[3] = 0x00;
buff[4] = 0x0a;
if(choice == TMC2160_HORI)
{
hori_regis.tpowerdown = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.tpowerdown = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_TPWMTHRS: //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,,<2C>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>
buff[0] = TMC2160_TPWMTHRS +0x80;
buff[1] = 0x00;
buff[2] = 0x00;
buff[3] = 0x00;
buff[4] = 0xf4;
if(choice == TMC2160_HORI)
{
hori_regis.tpwmthrs = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.tpwmthrs = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_CHOPCONF: //0x00010083,24-27λ<37><CEBB><EFBFBD><EFBFBD>ϸ<EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>24λ
buff[0] = TMC2160_CHOPCONF +0x80;
buff[1] = tmc2160_chopconf_data(data);
#ifdef PTZ_SUPER_LIGHT_WORM_STEP_TMC2160_AS5047D_24V
buff[2] = 0xe1;//e1,,<2C><><34><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˥<EFBFBD><CBA5>ʱ<EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD>г̹<D0B3><CCB9><EFBFBD>
buff[3] = 0x03;//03
buff[4] = 0x34;//C3
#endif
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
buff[2] = 0xf1;//e1,,<2C><><34><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˥<EFBFBD><CBA5>ʱ<EFBFBD><EFBFBD>ɽ<EFBFBD><C9BD><EFBFBD><EFBFBD>г̹<D0B3><CCB9><EFBFBD>
buff[3] = 0x03;//03<30><33>00
buff[4] = 0x04;//04<30><34>64<36><34><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD>TOFFȡ3<C8A1><33>4<EFBFBD><34><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>hstrt<72><74><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#endif
if(choice == TMC2160_HORI)
{
hori_regis.chop_conf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.chop_conf = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_COOLCONF: ///<2F><>ʱ<EFBFBD><CAB1>д...<2E><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
buff[0] = TMC2160_COOLCONF +0x80;
buff[1] = 0x00;
buff[2] = 0x00;
buff[3] = 0xA8;
buff[4] = 0x28;
if(choice == TMC2160_HORI)
{
hori_regis.coolconf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.coolconf = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_PWMCONF: //0xc401321e<31><65>ʱ<EFBFBD><CAB1>35.1KHZ
buff[0] = TMC2160_PWMCONF +0x80;
buff[1] = 0xd2;//c4
buff[2] = 0x0d;//0x0E;//09,0D
buff[3] = 0x32;
buff[4] = 0x1e;
#ifdef PTZ_MEDIUM_WORM_STEP_TMC2160_AS5047D_24V
buff[3] = 0x32;
buff[4] = 0x24;//0x6e
#endif
if(choice == TMC2160_HORI)
{
tmc2160_write_hori_data(choice, buff[0],buff[1],0x09,buff[3],buff[4]);
hori_regis.pwmconf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
tmc2160_write_vert_data(choice, buff[0],buff[1],0x09,buff[3],buff[4]);
vert_regis.pwmconf = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
case TMC2160_SHORT_CONF:
buff[0] = TMC2160_SHORT_CONF +0x80;
buff[1] = 0x00;
buff[2] = 0x06;
buff[3] = 0x0c;
buff[4] = 0x0c;
if(choice == TMC2160_HORI)
{
hori_regis.short_conf = tmc2160_write_hori_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}else{
vert_regis.short_conf = tmc2160_write_vert_data(choice, buff[0],buff[1],buff[2],buff[3],buff[4]);
}
break;
}
BSP_OS_SemPost(&ptz_tmc2160_mutex);
return 0;
}
unsigned long int tmc2160_ihold_irun_data(unsigned char data)
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><35><CEBB><EFBFBD><EFBFBD>8-12λ<32><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
unsigned long int write_data = 0;
write_data = write_data | data << 8;
return write_data;
}
unsigned long int tmc2160_chopconf_data(unsigned char data)
{//<2F><><EFBFBD><EFBFBD>ϸ<EFBFBD>ֹ<EFBFBD><34><CEBB><EFBFBD><EFBFBD>24-27λ
//Ĭ<><C4AC>ֵд0x00010083,256ϸ<36><CFB8>
unsigned char write_data = 0x10;//0x10;
// write_data = 0x00010083;
switch (data)//<2F><>ʱdata<74><61>Ϊϸ<CEAA>ֵȼ<D6B5>
{
case TMC2160_1_8_STEP: //3<><33><EFBFBD><EFBFBD>8<EFBFBD><38>Ƶ
write_data = write_data | 0x05;// << 24;
break;
case TMC2160_1_16_STEP: //4<><34><EFBFBD><EFBFBD>16<31><36>Ƶ
write_data = write_data | 0x04;// << 24;
break;
case TMC2160_1_32_STEP: //5<><35><EFBFBD><EFBFBD>32<33><32>Ƶ
write_data = write_data | 0x03;// << 24;
break;
case TMC2160_1_64_STEP: //6<><36><EFBFBD><EFBFBD>64<36><34>Ƶ
write_data = write_data | 0x02;// << 24;
break;
case TMC2160_1_128_STEP: //7<><37><EFBFBD><EFBFBD>128<32><38>Ƶ
write_data = write_data | 0x01;// << 24;
break;
}
return write_data;
}
///===== <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
unsigned int tmc2160_parameter_crc(TMC2160Parameter data)
{
float crc = 0;
unsigned int crc1 = 0;
crc = crc + data.hori_step_1_8_en;
crc = crc + data.hori_step_1_8_v_max;
crc = crc + data.hori_step_1_8_v_min;
crc = crc + data.hori_step_1_16_en;
crc = crc + data.hori_step_1_16_v_max;
crc = crc + data.hori_step_1_16_v_min;
crc = crc + data.hori_step_1_32_en;
crc = crc + data.hori_step_1_32_v_max;
crc = crc + data.hori_step_1_32_v_min;
crc = crc + data.hori_step_1_64_en;
crc = crc + data.hori_step_1_64_v_max;
crc = crc + data.hori_step_1_64_v_min;
crc = crc + data.hori_step_1_128_en;
crc = crc + data.hori_step_1_128_v_max;
crc = crc + data.hori_step_1_128_v_min;
crc = crc + data.hori_work_torque;
crc = crc + data.hori_global_scaler;
crc = crc + data.hori_acc_time_max;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
crc = crc + data.hori_dec_time_max;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC>ٵ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
crc = crc + data.vert_step_1_8_en;
crc = crc + data.vert_step_1_8_v_max;
crc = crc + data.vert_step_1_8_v_min;
crc = crc + data.vert_step_1_16_en;
crc = crc + data.vert_step_1_16_v_max;
crc = crc + data.vert_step_1_16_v_min;
crc = crc + data.vert_step_1_32_en;
crc = crc + data.vert_step_1_32_v_max;
crc = crc + data.vert_step_1_32_v_min;
crc = crc + data.vert_step_1_64_en;
crc = crc + data.vert_step_1_64_v_max;
crc = crc + data.vert_step_1_64_v_min;
crc = crc + data.vert_step_1_128_en;
crc = crc + data.vert_step_1_128_v_max;
crc = crc + data.vert_step_1_128_v_min;
crc = crc + data.vert_work_torque;
crc = crc + data.vert_global_scaler;
crc = crc + data.vert_acc_time_max;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
crc = crc + data.vert_dec_time_max;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC>ٵ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
crc1 = (unsigned int)crc;
return crc1;
}
///===== <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char tmc2160_parameter_save()
{
TMC2160Parameter tmc2160_parameter_a;
char i,j;
//<2F><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
tmc2160_parameter.crc = tmc2160_parameter_crc(tmc2160_parameter);
//д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>
for(i = 0; i < TMC2160_PARAMETER_SAVE_FLASH_NUM; i++)
{
memset(&tmc2160_parameter_a, 0, sizeof(tmc2160_parameter_a));
write_many_data(sizeof(tmc2160_parameter),(unsigned char *)(&tmc2160_parameter),TMC2160_PARAMETER_FLASH_ADD);
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
Flash_Read((unsigned char *)(&tmc2160_parameter_a),TMC2160_PARAMETER_FLASH_ADD,sizeof(tmc2160_parameter_a));
if(memcmp(&tmc2160_parameter, &tmc2160_parameter_a, sizeof(tmc2160_parameter)) == 0)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
}
//д<><EFBFBD>ݴ洢<DDB4><E6B4A2>
for(j = 0; j < TMC2160_PARAMETER_SAVE_FLASH_NUM; j++)
{
memset(&tmc2160_parameter_a, 0, sizeof(tmc2160_parameter_a));
write_many_data(sizeof(tmc2160_parameter),(unsigned char *)(&tmc2160_parameter),TMC2160_PARAMETER_BACKUP_FLASH_ADD);
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
Flash_Read((unsigned char *)(&tmc2160_parameter_a),TMC2160_PARAMETER_BACKUP_FLASH_ADD,sizeof(tmc2160_parameter_a));
if(memcmp(&tmc2160_parameter, &tmc2160_parameter_a, sizeof(tmc2160_parameter)) == 0)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
}
if(i < TMC2160_PARAMETER_SAVE_FLASH_NUM || j < TMC2160_PARAMETER_SAVE_FLASH_NUM)//<2F>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
{
//д<><D0B4><EFBFBD>ɹ<EFBFBD>
return 1;
}
//д<><D0B4>ʧ<EFBFBD><CAA7>
return 0;
}
///===== <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
char tmc2160_parameter_read()
{
char i;
//<2F><><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
for(i = 0; i < TMC2160_PARAMETER_READ_FLASH_NUM; i++)
{
memset(&tmc2160_parameter, 0, sizeof(tmc2160_parameter));
Flash_Read((unsigned char *)(&tmc2160_parameter),TMC2160_PARAMETER_FLASH_ADD,sizeof(tmc2160_parameter));
if(tmc2160_parameter.crc == tmc2160_parameter_crc(tmc2160_parameter) && tmc2160_parameter.crc > 0)
{
return 1;
}
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1>ݴ洢<DDB4><E6B4A2><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
for(i = 0; i < TMC2160_PARAMETER_READ_FLASH_NUM; i++)
{
memset(&tmc2160_parameter, 0, sizeof(tmc2160_parameter));
Flash_Read((unsigned char *)(&tmc2160_parameter),TMC2160_PARAMETER_BACKUP_FLASH_ADD,sizeof(tmc2160_parameter));
if(tmc2160_parameter.crc == tmc2160_parameter_crc(tmc2160_parameter) && tmc2160_parameter.crc > 0)
{
return 1;
}
OSTimeDlyHMSM(0u, 0u, 0u, 2u);
}
return 0;
}
///===== <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char tmc2160_parameter_erase()
{
TMC2160Parameter tmc2160_parameter_a;
TMC2160Parameter tmc2160_parameter_b;
char i, j;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2>
for(i = 0; i < TMC2160_PARAMETER_SAVE_FLASH_NUM; i++)
{
memset(&tmc2160_parameter_a, 0, sizeof(tmc2160_parameter_a));
write_many_data(sizeof(tmc2160_parameter_a),(unsigned char *)(&tmc2160_parameter_a),TMC2160_PARAMETER_FLASH_ADD);
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
Flash_Read((unsigned char *)(&tmc2160_parameter_b),TMC2160_PARAMETER_FLASH_ADD,sizeof(tmc2160_parameter_b));
if(memcmp(&tmc2160_parameter_a, &tmc2160_parameter_b, sizeof(tmc2160_parameter_a)) == 0)//<2F>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ洢<DDB4><E6B4A2>
for(j = 0; j < TMC2160_PARAMETER_SAVE_FLASH_NUM; j++)
{
memset(&tmc2160_parameter_a, 0, sizeof(tmc2160_parameter_a));
write_many_data(sizeof(tmc2160_parameter_a),(unsigned char *)(&tmc2160_parameter_a),TMC2160_PARAMETER_BACKUP_FLASH_ADD);
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
Flash_Read((unsigned char *)(&tmc2160_parameter_b),TMC2160_PARAMETER_BACKUP_FLASH_ADD,sizeof(tmc2160_parameter_b));
if(memcmp(&tmc2160_parameter_a, &tmc2160_parameter_b, sizeof(tmc2160_parameter_a)) == 0)//<2F>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
{
break;
}
OSTimeDlyHMSM(0u, 0u, 0u, 5u);
}
if(i < TMC2160_PARAMETER_SAVE_FLASH_NUM || j < TMC2160_PARAMETER_SAVE_FLASH_NUM)//<2F>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD>
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
return 1;
}
//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
return 0;
}
///===== <20>˶<EFBFBD><CBB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
char tmc2160_data_reset()
{
tmc2160_parameter.hori_step_1_8_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.hori_step_1_8_v_max = PTZ_HORI_1_8_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.hori_step_1_8_v_min = PTZ_HORI_1_8_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.hori_step_1_16_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.hori_step_1_16_v_max = PTZ_HORI_1_16_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.hori_step_1_16_v_min = PTZ_HORI_1_16_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.hori_step_1_32_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.hori_step_1_32_v_max = PTZ_HORI_1_32_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.hori_step_1_32_v_min = PTZ_HORI_1_32_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.hori_step_1_64_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.hori_step_1_64_v_max = PTZ_HORI_1_64_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.hori_step_1_64_v_min = PTZ_HORI_1_64_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.hori_step_1_128_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.hori_step_1_128_v_max = PTZ_HORI_1_128_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.hori_step_1_128_v_min = PTZ_HORI_1_128_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.hori_work_torque = TMC2160_HORI_TORQUE_VALUE;//<2F><><EFBFBD><EFBFBD>ʱtorque<75><65>ֵ
tmc2160_parameter.hori_global_scaler = CURR_GLOBAL_SCALER;//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmc2160_parameter.hori_acc_time_max = PTZ_HORI_ACC_TIME_MAX;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
tmc2160_parameter.hori_dec_time_max = PTZ_HORI_DEC_TIME_MAX;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC>ٵ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
tmc2160_parameter.vert_step_1_8_en = 0;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.vert_step_1_8_v_max = 0;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.vert_step_1_8_v_min = 0;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.vert_step_1_16_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.vert_step_1_16_v_max = PTZ_VERT_1_16_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.vert_step_1_16_v_min = PTZ_VERT_1_16_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.vert_step_1_32_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.vert_step_1_32_v_max = PTZ_VERT_1_32_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.vert_step_1_32_v_min = PTZ_VERT_1_32_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.vert_step_1_64_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.vert_step_1_64_v_max = PTZ_VERT_1_64_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.vert_step_1_64_v_min = PTZ_VERT_1_64_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.vert_step_1_128_en = 1;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7>0<EFBFBD><30>Ч<EFBFBD><D0A7>1<EFBFBD><31>Ч
tmc2160_parameter.vert_step_1_128_v_max = PTZ_VERT_1_128_STEP_V_MAX;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
tmc2160_parameter.vert_step_1_128_v_min = PTZ_VERT_1_128_STEP_V_MIN;//<2F><>ϸ<EFBFBD>̶ֳ<D6B3><CCB6><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Сת<D0A1><D7AA>
tmc2160_parameter.vert_work_torque = TMC2160_VERT_TORQUE_VALUE;//<2F><><EFBFBD><EFBFBD>ʱtorque<75><65>ֵ
tmc2160_parameter.vert_global_scaler = CURR_GLOBAL_SCALER;//<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tmc2160_parameter.vert_acc_time_max = PTZ_VERT_ACC_TIME_MAX;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
tmc2160_parameter.vert_dec_time_max = PTZ_VERT_DEC_TIME_MAX;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶȼ<D9B6><C8BC>ٵ<EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
tmc2160_parameter.crc = tmc2160_parameter_crc(tmc2160_parameter);//Ч<><D0A7><EFBFBD><EFBFBD>
return 1;
}
///===== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
char tmc2160_reset()
{
tmc2160_data_reset();
//ˮƽ
tmc2160_write_register(TMC2160_HORI, TMC2160_IHOLD_IRUN, TMC2160_HORI_TORQUE_VALUE);//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=20/32*2.3A
tmc2160_write_register(TMC2160_HORI, TMC2160_CHOPCONF, TMC2160_1_16_STEP);//ϸ<><CFB8>Ĭ<EFBFBD><C4AC>16
//<2F><>ֱ
tmc2160_write_register(TMC2160_VERT, TMC2160_IHOLD_IRUN, TMC2160_VERT_TORQUE_VALUE);//<2F><><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ=20/32*2.3A
tmc2160_write_register(TMC2160_VERT, TMC2160_CHOPCONF, TMC2160_1_16_STEP);//ϸ<><CFB8>Ĭ<EFBFBD><C4AC>16
if (tmc2160_parameter_save() == 1)
{//<2F><>λ<EFBFBD>ɹ<EFBFBD>
return 1;
}
return 0;
}
///===== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
char tmc2160_data_init()
{
tmc2160_parameter_read();
if (tmc2160_parameter_read() == 1)
{//<2F><>ȡ<EFBFBD>ɹ<EFBFBD>
return 1;
}else{//<2F><>ȡʧ<C8A1><CAA7>
tmc2160_data_reset();
tmc2160_parameter_save();
return 0;
}
}
///===== <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>
void tmc2160_parameter_upload(char dev)
{
unsigned char data[7] = {0};
//*****************************<2A><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>**********************************//
/*********************************1_8*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x09;
data[4] = tmc2160_parameter.hori_step_1_8_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0a;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_8_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_8_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0b;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_8_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_8_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_16*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0c;
data[4] = tmc2160_parameter.hori_step_1_16_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0d;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_16_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_16_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0e;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_16_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_16_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_32*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0f;
data[4] = tmc2160_parameter.hori_step_1_32_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x10;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_32_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_32_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x11;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_32_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_32_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_64*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x12;
data[4] = tmc2160_parameter.hori_step_1_64_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x13;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_64_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_64_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x14;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_64_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_64_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_128*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x15;
data[4] = tmc2160_parameter.hori_step_1_128_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x16;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_128_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_128_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x17;
data[4] = ((unsigned short int)(tmc2160_parameter.hori_step_1_128_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.hori_step_1_128_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************work_torque*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x20;
data[4] = tmc2160_parameter.hori_work_torque;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/********************************global_scaler***********************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x21;
data[4] = tmc2160_parameter.hori_global_scaler;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************acc_time*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x23;
data[4] = tmc2160_parameter.hori_acc_time_max >> 8;
data[5] = tmc2160_parameter.hori_acc_time_max & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************dec_time*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x51;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x24;
data[4] = tmc2160_parameter.hori_dec_time_max >> 8;
data[5] = tmc2160_parameter.hori_dec_time_max & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//************************************************************************************************************************/
//****************************<2A><><EFBFBD>ʹ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>************************************//
/*********************************1_8*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x09;
data[4] = tmc2160_parameter.vert_step_1_8_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0a;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_8_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_8_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0b;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_8_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_8_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_16*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0c;
data[4] = tmc2160_parameter.vert_step_1_16_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0d;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_16_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_16_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0e;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_16_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_16_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_32*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x0f;
data[4] = tmc2160_parameter.vert_step_1_32_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x10;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_32_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_32_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x11;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_32_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_32_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************1_64*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x12;
data[4] = tmc2160_parameter.vert_step_1_64_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x13;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_64_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_64_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x14;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_64_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_64_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/**********************************1_128**************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x15;
data[4] = tmc2160_parameter.vert_step_1_128_en;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x16;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_128_v_min * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_128_v_min * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x17;
data[4] = ((unsigned short int)(tmc2160_parameter.vert_step_1_128_v_max * 10)) >> 8;
data[5] = ((unsigned short int)(tmc2160_parameter.vert_step_1_128_v_max * 10)) & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************work_torque**********************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x20;
data[4] = tmc2160_parameter.vert_work_torque;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/********************************global_scaler*********************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x21;
data[4] = tmc2160_parameter.vert_global_scaler;
data[5] = 0;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************acc_time*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x23;
data[4] = tmc2160_parameter.vert_acc_time_max >> 8;
data[5] = tmc2160_parameter.vert_acc_time_max & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
/*********************************dec_time*************************************/
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = 0x52;//0X51<35><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>ˮƽ,0X52<35><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>Ǵ<EFBFBD>ֱ
data[3] = 0x24;
data[4] = tmc2160_parameter.vert_dec_time_max >> 8;
data[5] = tmc2160_parameter.vert_dec_time_max & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
//************************************************************************************************************************/
}
///===== tmc2160<36><30><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
void tmc2160_parameter_process(char dev, PTZ_DATA_PACK *pack)
{
float speed;
if(pack->command[0] == 0x51)//ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>
{
speed = (float)((pack->data[0] << 8) | pack->data[1]) / 10.0;
if(speed > PTZ_HORI_MOTOR_MAX_SPEED)
{
speed = PTZ_HORI_MOTOR_MAX_SPEED;
}
if(speed < 0)
{
speed = 0;
}
switch(pack->command[1])
{
case 0x09:
if(pack->data[0] == 1)
{
tmc2160_parameter.hori_step_1_8_en = 1;
}
else
{
tmc2160_parameter.hori_step_1_8_en = 0;
}
break;
case 0x0a:
tmc2160_parameter.hori_step_1_8_v_min = speed;
break;
case 0x0b:
tmc2160_parameter.hori_step_1_8_v_max = speed;
break;
/*******************************************************************************************/
case 0x0c:
if(pack->data[0] == 1)
{
tmc2160_parameter.hori_step_1_16_en = 1;
}
else
{
tmc2160_parameter.hori_step_1_16_en = 0;
}
break;
case 0x0d:
tmc2160_parameter.hori_step_1_16_v_min = speed;
break;
case 0x0e:
tmc2160_parameter.hori_step_1_16_v_max = speed;
break;
/*******************************************************************************************/
case 0x0f:
if(pack->data[0] == 1)
{
tmc2160_parameter.hori_step_1_32_en = 1;
}
else
{
tmc2160_parameter.hori_step_1_32_en = 0;
}
break;
case 0x10:
tmc2160_parameter.hori_step_1_32_v_min = speed;
break;
case 0x11:
tmc2160_parameter.hori_step_1_32_v_max = speed;
break;
/*******************************************************************************************/
case 0x12:
if(pack->data[0] == 1)
{
tmc2160_parameter.hori_step_1_64_en = 1;
}
else
{
tmc2160_parameter.hori_step_1_64_en = 0;
}
break;
case 0x13:
tmc2160_parameter.hori_step_1_64_v_min = speed;
break;
case 0x14:
tmc2160_parameter.hori_step_1_64_v_max = speed;
break;
/*******************************************************************************************/
case 0x15:
if(pack->data[0] == 1)
{
tmc2160_parameter.hori_step_1_128_en = 1;
}
else
{
tmc2160_parameter.hori_step_1_128_en = 0;
}
break;
case 0x16:
tmc2160_parameter.hori_step_1_128_v_min = speed;
break;
case 0x17:
tmc2160_parameter.hori_step_1_128_v_max = speed;
break;
/*******************************************************************************************/
case 0x20:
tmc2160_parameter.hori_work_torque = pack->data[0];
if(tmc2160_parameter.hori_work_torque > TMC2160_WORK_TORQUE_MAX)
{
tmc2160_parameter.hori_work_torque = TMC2160_WORK_TORQUE_MAX;
}
if(tmc2160_parameter.hori_work_torque < TMC2160_WORK_TORQUE_MIN)
{
tmc2160_parameter.hori_work_torque = TMC2160_WORK_TORQUE_MIN;
}
tmc2160_write_register(TMC2160_HORI, TMC2160_IHOLD_IRUN, tmc2160_parameter.hori_work_torque);
break;
case 0x21:
tmc2160_parameter.hori_global_scaler = pack->data[0];
tmc2160_write_register(TMC2160_HORI, TMC2160_GLOBAL_SCALER, tmc2160_parameter.hori_global_scaler);
break;
case 0x23:
tmc2160_parameter.hori_acc_time_max = (pack->data[0] << 8) | pack->data[1];
break;
case 0x24:
tmc2160_parameter.hori_dec_time_max = (pack->data[0] << 8) | pack->data[1];
break;
}
}
if(pack->command[0] == 0x52)//<2F><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>
{
speed = (float)((pack->data[0] << 8) | pack->data[1]) / 10.0;
if(speed > PTZ_VERT_MOTOR_MAX_SPEED)
{
speed = PTZ_VERT_MOTOR_MAX_SPEED;
}
if(speed < 0)
{
speed = 0;
}
switch(pack->command[1])
{
case 0x09:
if(pack->data[0] == 1)
{
tmc2160_parameter.vert_step_1_8_en = 1;
}
else
{
tmc2160_parameter.vert_step_1_8_en = 0;
}
break;
case 0x0a:
tmc2160_parameter.vert_step_1_8_v_min = speed;
break;
case 0x0b:
tmc2160_parameter.vert_step_1_8_v_max = speed;
break;
/*******************************************************************************************/
case 0x0c:
if(pack->data[0] == 1)
{
tmc2160_parameter.vert_step_1_16_en = 1;
}
else
{
tmc2160_parameter.vert_step_1_16_en = 0;
}
break;
case 0x0d:
tmc2160_parameter.vert_step_1_16_v_min = speed;
break;
case 0x0e:
tmc2160_parameter.vert_step_1_16_v_max = speed;
break;
/*******************************************************************************************/
case 0x0f:
if(pack->data[0] == 1)
{
tmc2160_parameter.vert_step_1_32_en = 1;
}
else
{
tmc2160_parameter.vert_step_1_32_en = 0;
}
break;
case 0x10:
tmc2160_parameter.vert_step_1_32_v_min = speed;
break;
case 0x11:
tmc2160_parameter.vert_step_1_32_v_max = speed;
break;
/*******************************************************************************************/
case 0x12:
if(pack->data[0] == 1)
{
tmc2160_parameter.vert_step_1_64_en = 1;
}
else
{
tmc2160_parameter.vert_step_1_64_en = 0;
}
break;
case 0x13:
tmc2160_parameter.vert_step_1_64_v_min = speed;
break;
case 0x14:
tmc2160_parameter.vert_step_1_64_v_max = speed;
break;
/*******************************************************************************************/
case 0x15:
if(pack->data[0] == 1)
{
tmc2160_parameter.vert_step_1_128_en = 1;
}
else
{
tmc2160_parameter.vert_step_1_128_en = 0;
}
break;
case 0x16:
tmc2160_parameter.vert_step_1_128_v_min = speed;
break;
case 0x17:
tmc2160_parameter.vert_step_1_128_v_max = speed;
break;
/*******************************************************************************************/
case 0x20:
tmc2160_parameter.vert_work_torque = pack->data[0];
if(tmc2160_parameter.vert_work_torque > TMC2160_WORK_TORQUE_MAX)
{
tmc2160_parameter.vert_work_torque = TMC2160_WORK_TORQUE_MAX;
}
if(tmc2160_parameter.vert_work_torque < TMC2160_WORK_TORQUE_MIN)
{
tmc2160_parameter.vert_work_torque = TMC2160_WORK_TORQUE_MIN;
}
tmc2160_write_register(TMC2160_VERT, TMC2160_IHOLD_IRUN, tmc2160_parameter.vert_work_torque);
break;
case 0x21:
tmc2160_parameter.vert_global_scaler = pack->data[0];
tmc2160_write_register(TMC2160_VERT, TMC2160_GLOBAL_SCALER, tmc2160_parameter.vert_global_scaler);
break;
case 0x23:
tmc2160_parameter.vert_acc_time_max = (pack->data[0] << 8) | pack->data[1];
break;
case 0x24:
tmc2160_parameter.vert_dec_time_max = (pack->data[0] << 8) | pack->data[1];
break;
}
}
if(pack->command[0] == 0x53)//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD>
{
switch(pack->command[1])
{
case 0x00://<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ش<EFBFBD>DRV8711<31><31><EFBFBD><EFBFBD>
//<2F><>ȡ
tmc2160_parameter_read();
//<2F>ش<EFBFBD>
tmc2160_parameter_upload(dev);
break;
case 0x01://<2F><><EFBFBD><EFBFBD>DRV8711<31><31><EFBFBD><EFBFBD>
tmc2160_parameter_save();
break;
case 0x02://ɾ<><C9BE>DRV8711<31><31>FLASH<53>еIJ<D0B5><C4B2><EFBFBD>
tmc2160_parameter_erase();
break;
case 0x03://<2F><>λDRV8711<31><31>FLASH<53>б<EFBFBD><D0B1><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
// tmc2160_write_register(TMC2160_HORI, TMC2160_GSTAT, 0);
// OSTimeDlyHMSM(0u, 0u, 0u, 1u);
// tmc2160_write_register(TMC2160_VERT, TMC2160_GSTAT, 0);
// OSTimeDlyHMSM(0u, 0u, 0u, 1u);
tmc2160_reset();
break;
}
}
}
///===== <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ
unsigned int tmc2160_state_read(char choice, char regis)
{
unsigned long int status;
if(choice == TMC2160_HORI)
{
status = tmc2160_write_hori_data(choice, regis,0xff,0xff,0xff,0xff);//choice<63><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>x2/x3/x4/x5<78><35><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(choice == TMC2160_VERT)
{
status = tmc2160_write_vert_data(choice, regis,0xff,0xff,0xff,0xff);//choice<63><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>x2/x3/x4/x5<78><35><EFBFBD><EFBFBD>д<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
return status;
}
void tmc2160_state_return(char dev)
{
unsigned char data[7] = {0};
unsigned long int status;
//****************************<2A><><EFBFBD><EFBFBD>ˮƽ״̬******************//
status = tmc2160_state_read(TMC2160_HORI,TMC2160_DRV_STATUS);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = (status >> 24) & 0x00ff;//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>·<EFBFBD><C2B7><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>¾<EFBFBD><C2BE><EFBFBD><E6A1A2><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת״̬,<2C><><EFBFBD><EFBFBD>
data[3] = (status >> 16) & 0x00ff;
data[4] = (status >> 8) & 0x00ff;
data[5] = status & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//****************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬******************//
status = tmc2160_state_read(TMC2160_HORI,TMC2160_IOIN);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = (status >> 24) & 0x00ff;//<2F><>8λΪ<CEBB><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>8λΪ<CEBB><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
data[3] = 0x00ff;
data[4] = 0x00ff;
data[5] = status & 0x00ff;//<2F>˵<EFBFBD>8λΪ<CEBB><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><30><CEBB><EFBFBD><EFBFBD><EFBFBD>źš<C5BA>1λת<CEBB><D7AA><EFBFBD>źš<C5BA><34><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD>źš<C5BA>
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 20u);
//**************************<2A><><EFBFBD>ʹ<EFBFBD>ֱ״̬******************//
status = tmc2160_state_read(TMC2160_VERT,TMC2160_DRV_STATUS);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = (status >> 24) & 0x00ff;//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>·<EFBFBD><C2B7><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>¾<EFBFBD><C2BE><EFBFBD><E6A1A2><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת״̬,<2C><><EFBFBD><EFBFBD>
data[3] = (status >> 16) & 0x00ff;
data[4] = (status >> 8) & 0x00ff;
data[5] = status & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
OSTimeDlyHMSM(0u, 0u, 0u, 10u);
//****************************<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬******************//
status = tmc2160_state_read(TMC2160_VERT,TMC2160_IOIN);
data[0] = 0xff;
data[1] = g_ptz.address;
data[2] = (status >> 24) & 0x00ff;//<2F><>8λΪ<CEBB><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>8λΪ<CEBB><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
data[3] = 0x00ff;
data[4] = 0x00ff;
data[5] = status & 0x00ff;
data[6] = MotorCalPelcoDSUM(data,sizeof(data));
ptz_send_data(dev, data, sizeof(data));
/**********************<2A><><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>stealthchop<6F><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*********************/
// OSTimeDlyHMSM(0u, 0u, 0u, 20u);
// //****************************<2A><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ******************//
// status = tmc2160_state_read(TMC2160_HORI,TMC2160_PWM_AUTO);
// data[0] = 0xff;
// data[1] = g_ptz.address;
// data[2] = (status >> 24) & 0x00ff;
// data[3] = (status >> 16) & 0x00ff;
// data[4] = (status >> 8) & 0x00ff;
// data[5] = status & 0x00ff;
// data[6] = MotorCalPelcoDSUM(data,sizeof(data));
// ptz_send_data(dev, data, sizeof(data));
//
// OSTimeDlyHMSM(0u, 0u, 0u, 20u);
// //****************************<2A><><EFBFBD>ʹ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ******************//
// status = tmc2160_state_read(TMC2160_VERT,TMC2160_PWM_AUTO);
// data[0] = 0xff;
// data[1] = g_ptz.address;
// data[2] = (status >> 24) & 0x00ff;
// data[3] = (status >> 16) & 0x00ff;
// data[4] = (status >> 8) & 0x00ff;
// data[5] = status & 0x00ff;
// data[6] = MotorCalPelcoDSUM(data,sizeof(data));
// ptz_send_data(dev, data, sizeof(data));
//
// OSTimeDlyHMSM(0u, 0u, 0u, 20u);
// //*****************************<2A><><EFBFBD><EFBFBD>ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>******************//
// status = tmc2160_state_read(TMC2160_HORI,TMC2160_PWM_SCALE);
// data[0] = 0xff;
// data[1] = g_ptz.address;
// data[2] = (status >> 24) & 0x00ff;
// data[3] = (status >> 16) & 0x00ff;
// data[4] = (status >> 8) & 0x00ff;
// data[5] = status & 0x00ff;
// data[6] = MotorCalPelcoDSUM(data,sizeof(data));
// ptz_send_data(dev, data, sizeof(data));
//
// OSTimeDlyHMSM(0u, 0u, 0u, 20u);
// //*****************************<2A><><EFBFBD>ʹ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>******************//
// status = tmc2160_state_read(TMC2160_VERT,TMC2160_PWM_SCALE);
// data[0] = 0xff;
// data[1] = g_ptz.address;
// data[2] = (status >> 24) & 0x00ff;
// data[3] = (status >> 16) & 0x00ff;
// data[4] = (status >> 8) & 0x00ff;
// data[5] = status & 0x00ff;
// data[6] = MotorCalPelcoDSUM(data,sizeof(data));
// ptz_send_data(dev, data, sizeof(data));
}
#endif