#ifndef __DEVICE_SPEED_BLDC_H_
#define __DEVICE_SPEED_BLDC_H_
#include "ptz_type_select.h"

#ifdef PTZ_BLDC_MOTOR


#ifdef PTZ_LIGHT_GEAR_L6235D_AS5047D
     
      #define PID_B      1
      //ˮƽ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_LESS   0.4 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_LESS     1.6 //ˮƽ�����������ӵı���
      //ˮƽ�ٶȴ����趨�ٶ�ʱ
//      #define PTZ_HORI_PRO_ADD_RANGE_MORE   0.5 //ˮƽ�������ٵķ�Χ
//      #define PTZ_HORI_PRO_ADD_MUL_MORE     0.8 //ˮƽ�����������ӵı��� 
      //��ֱ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_LESS   0.4 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_LESS     1.2 //��ֱ�����������ӵı���

      #define PTZ_PID_HALL_SPEED               1

      #define PTZ_HORI_PID_T             30u
      #define PTZ_HORI_PID_HORI_KP       3.5//4//1.4   //0.014//0.005   //����ϵ��
      #define PTZ_HORI_PID_HORI_TI       100.0    //����ϵ��
      #define PTZ_HORI_PID_HORI_TD       0.0        //΢��ϵ��

      #define PTZ_HORI_PID_INPUT_LIMIT   100//6.91//PID��������ֵ�޶�
      #define PTZ_HORI_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���
      

      #define PTZ_VERT_PID_T             20u
      #define PTZ_VERT_PID_VERT_KP       3//2//1.4    //0.014//0.005   //����ϵ��
      #define PTZ_VERT_PID_VERT_TI       100.0    //����ϵ��
      #define PTZ_VERT_PID_VERT_TD       0.0        //΢��ϵ��

      #define PTZ_VERT_PID_INPUT_LIMIT   100//4.0//PID��������ֵ�޶�
      #define PTZ_VERT_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���
      
      
      #define PTZ_HORI_PID_T_MAX         75//50u//PID�����������
      #define PTZ_VERT_PID_T_MAX         75//50u//PID�����������


      #define PTZ_HORI_PID_ADD           30//PID���ٿ�������
      #define PTZ_VERT_PID_ADD           30//PID���ٿ�������

      #define PTZ_HORI_PID_ADD_A           10//10//PID���ٿ�������
      #define PTZ_VERT_PID_ADD_A           10//15//PID���ٿ�������
     
#endif

#ifdef PTZ_MEDIUM_WORM_L6235D_AS5047D

      #define PID_B      1
      //ˮƽ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_LESS   0.4 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_LESS     1.2 //ˮƽ�����������ӵı���
      //ˮƽ�ٶȴ����趨�ٶ�ʱ
//      #define PTZ_HORI_PRO_ADD_RANGE_MORE   0.5 //ˮƽ�������ٵķ�Χ
//      #define PTZ_HORI_PRO_ADD_MUL_MORE     0.8 //ˮƽ�����������ӵı��� 
      //��ֱ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_LESS   0.4 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_LESS     1.2 //��ֱ�����������ӵı���
      //��ֱ�ٶȴ����趨�ٶ�ʱ
//      #define PTZ_VERT_PRO_ADD_RANGE_MORE   0.5 //��ֱ�������ٵķ�Χ
//      #define PTZ_VERT_PRO_ADD_MUL_MORE     0.8 //��ֱ�����������ӵı��� 

      //#define PID_A      1
      // #define PTZ_HORI_PID_AS5048A_ANGLE_ASY_SPEED   2//�Ƕȱ仯�첽
      // #define PTZ_VERT_PID_AS5048A_ANGLE_ASY_SPEED   2//�Ƕȱ仯�첽
      //ͨ��оƬ��������
      //#define  PTZ_HORI_PID_JY02A_SPEED
      //#define  PTZ_VERT_PID_JY02A_SPEED
      #define PTZ_PID_HALL_SPEED               1

      #define PTZ_HORI_PID_T             20u
      #define PTZ_HORI_PID_HORI_KP       0.6//1.0//6.0//����ϵ��
      #define PTZ_HORI_PID_HORI_TI       70.0//80.0//100.0//����ϵ��
      #define PTZ_HORI_PID_HORI_TD       0.001//΢��ϵ��

      #define PTZ_HORI_PID_INPUT_LIMIT   100.0//PID��������ֵ�޶�
      #define PTZ_HORI_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���

      #define PTZ_VERT_PID_T             20u
      #define PTZ_VERT_PID_VERT_KP       6//6.0//����ϵ��
      #define PTZ_VERT_PID_VERT_TI       80.0//100.0//����ϵ��
      #define PTZ_VERT_PID_VERT_TD       0.001//΢��ϵ��

      #define PTZ_VERT_PID_INPUT_LIMIT   100.0//PID��������ֵ�޶�
      #define PTZ_VERT_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���   

      #define PTZ_HORI_PID_T_MAX         80//75u//PID�����������
      #define PTZ_VERT_PID_T_MAX         80//75u//PID�����������

      #define PTZ_HORI_PID_ADD           20//PID���ٿ�������
      #define PTZ_VERT_PID_ADD           20//PID���ٿ�������

      #define PTZ_HORI_PID_ADD_A           15//PID���ٿ�������
      #define PTZ_VERT_PID_ADD_A           15//PID���ٿ�������

#endif

#ifdef PTZ_HEAVY_WORM_L6235D_AS5047D

      #define PID_B      1
      //ˮƽ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_LESS   0.4 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_LESS     1.4 //ˮƽ�����������ӵı���
      //ˮƽ�ٶȴ����趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_MORE   0.5 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_MORE     0.8 //ˮƽ�����������ӵı��� 
      //��ֱ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_LESS   0.4 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_LESS     1.4 //��ֱ�����������ӵı���
      //��ֱ�ٶȴ����趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_MORE   0.5 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_MORE     0.8 //��ֱ�����������ӵı��� 




      #define PTZ_PID_HALL_SPEED               1

//      #define PTZ_VERT_PID_as5047d_ANGLE_ASY_SPEED    1
//      #define PTZ_HORI_PID_as5047d_ANGLE_SYN_SPEED    1


      #define PTZ_HORI_PID_T             50u
      #define PTZ_HORI_PID_HORI_KP       10.0//3.0   //0.014//0.005   //����ϵ��
      #define PTZ_HORI_PID_HORI_TI       100.0    //����ϵ��
      #define PTZ_HORI_PID_HORI_TD       0.0        //΢��ϵ��

      #define PTZ_HORI_PID_INPUT_LIMIT   6.91//PID��������ֵ�޶�
      #define PTZ_HORI_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���

      #define PTZ_VERT_PID_T             50u
      #define PTZ_VERT_PID_VERT_KP       20.0//3.0    //0.014//0.005   //����ϵ��
      #define PTZ_VERT_PID_VERT_TI       100.0    //����ϵ��
      #define PTZ_VERT_PID_VERT_TD       0.0        //΢��ϵ��

      #define PTZ_VERT_PID_INPUT_LIMIT   4.0//PID��������ֵ�޶�
      #define PTZ_VERT_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���

      #define PTZ_HORI_PID_T_MAX         75//50u//PID�����������
      #define PTZ_VERT_PID_T_MAX         75//50u//PID�����������

      #define PTZ_HORI_PID_ADD           30//PID���ٿ�������
      #define PTZ_VERT_PID_ADD           30//PID���ٿ�������

      #define PTZ_HORI_PID_ADD_A           20//PID���ٿ�������
      #define PTZ_VERT_PID_ADD_A           20//PID���ٿ�������
#endif

#ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_12V
      #define PID_B      1
      //ˮƽ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_LESS   0.6 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_LESS     1.3 //ˮƽ�����������ӵı���
      //ˮƽ�ٶȴ����趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_MORE   0.5 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_MORE     0.8 //ˮƽ�����������ӵı��� 
      //��ֱ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_LESS   0.6 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_LESS     1.3 //��ֱ�����������ӵı���
      //��ֱ�ٶȴ����趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_MORE   0.5 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_MORE     0.8 //��ֱ�����������ӵı��� 




      //#define PTZ_HORI_PID_AS5048A_ANGLE_ASY_SPEED   2//�Ƕȱ仯�첽
      //#define PTZ_VERT_PID_AS5048A_ANGLE_ASY_SPEED   2//�Ƕȱ仯�첽
            //ͨ��оƬ��������
      //#define  PTZ_HORI_PID_JY02A_SPEED
      //#define  PTZ_VERT_PID_JY02A_SPEED
      #define PTZ_PID_HALL_SPEED               1

      #define PTZ_HORI_PID_T             30u
      #define PTZ_HORI_PID_HORI_KP       2.0//6.0   //0.014//0.005   //����ϵ��
      #define PTZ_HORI_PID_HORI_TI       100.0    //����ϵ��
      #define PTZ_HORI_PID_HORI_TD       0.0        //΢��ϵ��

      #define PTZ_HORI_PID_INPUT_LIMIT   100.0//6.91//PID��������ֵ�޶�
      #define PTZ_HORI_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���

      #define PTZ_VERT_PID_T             30u
      #define PTZ_VERT_PID_VERT_KP       2.0//6.0    //0.014//0.005   //����ϵ��
      #define PTZ_VERT_PID_VERT_TI       100.0    //����ϵ��
      #define PTZ_VERT_PID_VERT_TD       0.0        //΢��ϵ��

      #define PTZ_VERT_PID_INPUT_LIMIT   100.0//4.0//PID��������ֵ�޶�
      #define PTZ_VERT_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���   

      #define PTZ_HORI_PID_T_MAX         100u//PID�����������
      #define PTZ_VERT_PID_T_MAX         100u//PID�����������

      #define PTZ_HORI_PID_ADD           20//40//PID���ٿ�������
      #define PTZ_VERT_PID_ADD           20//40//PID���ٿ�������

      #define PTZ_HORI_PID_ADD_A           15//PID���ٿ�������
      #define PTZ_VERT_PID_ADD_A           15//PID���ٿ�������

#endif


#ifdef PTZ_SUPER_LIGHT_WORM_L6235D_AS5047D_24V
      #define PID_B      1
      //ˮƽ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_LESS   0.4 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_LESS     1.2 //ˮƽ�����������ӵı���
      //ˮƽ�ٶȴ����趨�ٶ�ʱ
      #define PTZ_HORI_PRO_ADD_RANGE_MORE   0.5 //ˮƽ�������ٵķ�Χ
      #define PTZ_HORI_PRO_ADD_MUL_MORE     0.8 //ˮƽ�����������ӵı��� 
      //��ֱ�ٶ�С���趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_LESS   0.4 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_LESS     1.2 //��ֱ�����������ӵı���
      //��ֱ�ٶȴ����趨�ٶ�ʱ
      #define PTZ_VERT_PRO_ADD_RANGE_MORE   0.5 //��ֱ�������ٵķ�Χ
      #define PTZ_VERT_PRO_ADD_MUL_MORE     0.8 //��ֱ�����������ӵı��� 




      //#define PTZ_HORI_PID_AS5048A_ANGLE_ASY_SPEED   2//�Ƕȱ仯�첽
      //#define PTZ_VERT_PID_AS5048A_ANGLE_ASY_SPEED   2//�Ƕȱ仯�첽
            //ͨ��оƬ��������
      //#define  PTZ_HORI_PID_JY02A_SPEED
      //#define  PTZ_VERT_PID_JY02A_SPEED
      #define PTZ_PID_HALL_SPEED               1

      #define PTZ_HORI_PID_T             30u
      #define PTZ_HORI_PID_HORI_KP       20.0//����ϵ��
      #define PTZ_HORI_PID_HORI_TI       100.0    //����ϵ��
      #define PTZ_HORI_PID_HORI_TD       0.0        //΢��ϵ��

      #define PTZ_HORI_PID_INPUT_LIMIT   100.0//PID��������ֵ�޶�
      #define PTZ_HORI_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���

      #define PTZ_VERT_PID_T             30u
      #define PTZ_VERT_PID_VERT_KP       20.0//����ϵ��
      #define PTZ_VERT_PID_VERT_TI       100.0    //����ϵ��
      #define PTZ_VERT_PID_VERT_TD       0.0        //΢��ϵ��

      #define PTZ_VERT_PID_INPUT_LIMIT   100.0//PID��������ֵ�޶�
      #define PTZ_VERT_PID_OUTPUT_LIMIT  200.0//PID�������ֵ�޶�����ǰ���ֵ����һ�����ֵ֮��Ĳ���   

      #define PTZ_HORI_PID_T_MAX         100u//PID�����������
      #define PTZ_VERT_PID_T_MAX         100u//PID�����������

      #define PTZ_HORI_PID_ADD           20//20//PID���ٿ�������
      #define PTZ_VERT_PID_ADD           20//20//PID���ٿ�������

      //#define PTZ_HORI_PID_ADD_A           15//PID���ٿ�������
      //#define PTZ_VERT_PID_ADD_A           15//PID���ٿ�������

#endif


//PID����
#define PID_ADJUST_SPEED     0
//�������
#define DIRECTOR_ADJUST_SPEED   1

#ifdef PTZ_LIGHT_GEAR_L6235D_AS5047D 
//ͨ������PWM���ṩ�������ص���
//�Ƿ����÷������
#define PTZ_CONTROL_SPEED_L6235D  2
//�������������
#define PTZ_DIRECTOR_SPEED_T  10//20
#endif

void ptz_send_speed(char dev, char speed);
void init_speed_module(void);
void ptz_pid_Init();
void ptz_hori_pid_clear_zero();
void ptz_vert_pid_clear_zero();
void init_speed_module(void);
#endif


void as5047d_hori_get_speed(void);

#endif