645 lines
13 KiB
C
645 lines
13 KiB
C
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
/// FULL_BRIDGE<47>ļ<EFBFBD>
|
|||
|
///
|
|||
|
///
|
|||
|
/// <20><><EFBFBD><EFBFBD>hall<6C><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
/// @file full_bridge.c
|
|||
|
/// @author LH
|
|||
|
/// @date 2022-07-19
|
|||
|
/// @version v1.0
|
|||
|
|
|||
|
////////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
#include "full_bridge.h"
|
|||
|
#include "ptz_struct.h"
|
|||
|
#include "gd32f4xx_it.h"
|
|||
|
#include "rotate_bldc.h"
|
|||
|
#include "rotate_plan.h"
|
|||
|
#include "device_adc_collect.h"
|
|||
|
#include "gd32f4xx_timer.h"
|
|||
|
#include "speed_to_bldc.h"
|
|||
|
|
|||
|
|
|||
|
#ifdef Full_bridge
|
|||
|
|
|||
|
typedef void(*pctr) (void);
|
|||
|
|
|||
|
pctr h_six_step_commu[6];
|
|||
|
pctr v_six_step_commu[6];
|
|||
|
|
|||
|
|
|||
|
HALL_State H_Hall_state;
|
|||
|
HALL_State V_Hall_state;
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
********************************<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>***********************************/
|
|||
|
static unsigned int h_pwm_duty;
|
|||
|
static unsigned int v_pwm_duty;
|
|||
|
/*!
|
|||
|
\brief none pwmռ<EFBFBD>ձ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.10.11
|
|||
|
*/
|
|||
|
//ˮƽ
|
|||
|
void h_pwm_duty_change(unsigned int pwm_duty)
|
|||
|
{
|
|||
|
h_pwm_duty = pwm_duty;
|
|||
|
|
|||
|
}
|
|||
|
//<2F><>ֱ
|
|||
|
void v_pwm_duty_change(unsigned int pwm_duty)
|
|||
|
{
|
|||
|
v_pwm_duty = pwm_duty;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief hall״̬<EFBFBD><EFBFBD>ȡ
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.19
|
|||
|
*/
|
|||
|
unsigned char h_hall_senser_value_get()
|
|||
|
{
|
|||
|
unsigned char hall_value;
|
|||
|
H_Hall_state.Hall_H1_state = gpio_input_bit_get(GPIOE, GPIO_PIN_10);
|
|||
|
H_Hall_state.Hall_H2_state = gpio_input_bit_get(GPIOE, GPIO_PIN_11);
|
|||
|
H_Hall_state.Hall_H3_state = gpio_input_bit_get(GPIOE, GPIO_PIN_12);
|
|||
|
|
|||
|
hall_value = H_Hall_state.Hall_H1_state
|
|||
|
|(H_Hall_state.Hall_H2_state << 1)
|
|||
|
|(H_Hall_state.Hall_H3_state << 2);
|
|||
|
return hall_value;
|
|||
|
}
|
|||
|
|
|||
|
unsigned char v_hall_senser_value_get()
|
|||
|
{
|
|||
|
unsigned char hall_value;
|
|||
|
V_Hall_state.Hall_H1_state = gpio_input_bit_get(GPIOE, GPIO_PIN_13);
|
|||
|
V_Hall_state.Hall_H2_state = gpio_input_bit_get(GPIOE, GPIO_PIN_14);
|
|||
|
V_Hall_state.Hall_H3_state = gpio_input_bit_get(GPIOE, GPIO_PIN_15);
|
|||
|
|
|||
|
hall_value = V_Hall_state.Hall_H1_state
|
|||
|
|(V_Hall_state.Hall_H2_state << 1)
|
|||
|
|(V_Hall_state.Hall_H3_state << 2);
|
|||
|
return hall_value;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none U<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_uh_vl()
|
|||
|
{
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_ON;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER2) = h_pwm_duty;//U199;//
|
|||
|
TIMER_CH1CV(TIMER2) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER2) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_wh_vl()
|
|||
|
{
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_ON;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER2) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER2) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER2) = h_pwm_duty;//W199;//
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_wh_ul()
|
|||
|
{
|
|||
|
H_EN1_ON;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER2) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER2) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER2) = h_pwm_duty;//W199;//
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_vh_ul()
|
|||
|
{
|
|||
|
H_EN1_ON;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER2) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER2) = h_pwm_duty;//V199;//
|
|||
|
TIMER_CH2CV(TIMER2) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_vh_wl()
|
|||
|
{
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_ON;//W
|
|||
|
TIMER_CH0CV(TIMER2) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER2) = h_pwm_duty;//V199;//
|
|||
|
TIMER_CH2CV(TIMER2) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none U<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_uh_wl()
|
|||
|
{
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_ON;//W
|
|||
|
TIMER_CH0CV(TIMER2) = h_pwm_duty;//U199;//
|
|||
|
TIMER_CH1CV(TIMER2) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER2) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>120<EFBFBD><EFBFBD>hall<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת˳<EFBFBD><EFBFBD>Ϊ546231<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת˳<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>7-<EFBFBD><EFBFBD>ת˳<EFBFBD><EFBFBD>,,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD>1<EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
pctr h_six_step_commu[6] =
|
|||
|
{
|
|||
|
&h_uh_wl, &h_vh_ul, &h_vh_wl, &h_wh_vl, &h_uh_vl, &h_wh_ul
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none U<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void v_uh_vl()
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_ON;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER3) = v_pwm_duty;//U199;//
|
|||
|
TIMER_CH1CV(TIMER3) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER3) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void v_wh_vl()
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_ON;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER3) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER3) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER3) = v_pwm_duty;//W199;//
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void v_wh_ul()
|
|||
|
{
|
|||
|
V_EN1_ON;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER3) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER3) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER3) = v_pwm_duty;//W199;//
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>U<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void v_vh_ul()
|
|||
|
{
|
|||
|
V_EN1_ON;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
TIMER_CH0CV(TIMER3) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER3) = v_pwm_duty;//V199;//
|
|||
|
TIMER_CH2CV(TIMER3) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void v_vh_wl()
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_ON;//W
|
|||
|
TIMER_CH0CV(TIMER3) = 0;//U
|
|||
|
TIMER_CH1CV(TIMER3) = v_pwm_duty;//V199;//
|
|||
|
TIMER_CH2CV(TIMER3) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none U<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void v_uh_wl()
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_ON;//W
|
|||
|
TIMER_CH0CV(TIMER3) = v_pwm_duty;//U199;//
|
|||
|
TIMER_CH1CV(TIMER3) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER3) = 0;//W
|
|||
|
}
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>120<EFBFBD><EFBFBD>hall<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת˳<EFBFBD><EFBFBD>Ϊ546231<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת˳<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>7-<EFBFBD><EFBFBD>ת˳<EFBFBD><EFBFBD>,,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ټ<EFBFBD>1<EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
pctr v_six_step_commu[6] =
|
|||
|
{
|
|||
|
&v_uh_wl, &v_vh_ul, &v_vh_wl, &v_wh_vl, &v_uh_vl, &v_wh_ul
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
void uvw()
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
}
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none ˮƽֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void h_bldc_six_step()
|
|||
|
{
|
|||
|
// H_ADC2_Phase_current();
|
|||
|
if(g_ptz.hori_start_stop_set == PTZ_HORI_START)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
H_Hall_state.Hall_value = h_hall_senser_value_get();
|
|||
|
if((H_Hall_state.Hall_value <= 6)&&(H_Hall_state.Hall_value >= 1))
|
|||
|
{
|
|||
|
// if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
|
|||
|
// {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת- 1
|
|||
|
// h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
|
|||
|
// }else{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
// h_six_step_commu[H_Hall_state.Hall_value -1]();
|
|||
|
// }
|
|||
|
//ֱ<><D6B1><EFBFBD><EFBFBD>̨ת<CCA8><D7AA>
|
|||
|
if(g_ptz.hori_direction_set == PTZ_HORI_DIR_RIGHT)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת- 1
|
|||
|
|
|||
|
h_six_step_commu[H_Hall_state.Hall_value -1]();
|
|||
|
}else{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
h_six_step_commu[(7-H_Hall_state.Hall_value) -1]();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD>ֱֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void v_bldc_six_step()
|
|||
|
{
|
|||
|
// V_ADC0_Phase_current();
|
|||
|
if((g_ptz.vert_start_stop_set == PTZ_VERT_START) && (g_ptz.vert_pid.mode == PID_ADJUST_SPEED))
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
V_Hall_state.Hall_value = v_hall_senser_value_get();
|
|||
|
if((V_Hall_state.Hall_value <= 6)&&(V_Hall_state.Hall_value >= 1))
|
|||
|
{
|
|||
|
if(g_ptz.vert_direction_set == PTZ_VERT_DIR_UP)
|
|||
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת- 1
|
|||
|
v_six_step_commu[V_Hall_state.Hall_value -1]();
|
|||
|
}else{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// if(g_ptz.vert_pid.PidUT_float < 0)
|
|||
|
// {//<2F><><EFBFBD><EFBFBD>˼·<CBBC><C2B7>PID<49><44><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
|||
|
// if(g_ptz.vert_direction_set == PTZ_VERT_DIR_UP)
|
|||
|
// {//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת- 1
|
|||
|
// v_six_step_commu[(7-V_Hall_state.Hall_value) -1]();
|
|||
|
// }else{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
|
|||
|
// v_six_step_commu[V_Hall_state.Hall_value -1]();
|
|||
|
// }
|
|||
|
// }
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.12.05
|
|||
|
*/
|
|||
|
void vert_dir_speed_start(unsigned int verf)
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_ON;//V
|
|||
|
V_EN3_ON;//W
|
|||
|
TIMER_CH0CV(TIMER3) = verf;//U199;//
|
|||
|
TIMER_CH1CV(TIMER3) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER3) = 0;//W
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void vert_dir_speed_stop(void)
|
|||
|
{
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void hori_dir_speed_start(unsigned int verf)
|
|||
|
{
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_ON;//V
|
|||
|
H_EN3_ON;//W
|
|||
|
TIMER_CH0CV(TIMER2) = verf;//U199;//
|
|||
|
TIMER_CH1CV(TIMER2) = 0;//V
|
|||
|
TIMER_CH2CV(TIMER2) = 0;//W
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void hori_dir_speed_stop(void)
|
|||
|
{
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_start_motor()
|
|||
|
{
|
|||
|
//<2F><>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
|||
|
// timer_enable(TIMER2);
|
|||
|
h_pwm_duty_change(0);
|
|||
|
TIMER_CH0CV(TIMER2) = 0 ;//
|
|||
|
TIMER_CH1CV(TIMER2) = 0 ;//
|
|||
|
TIMER_CH2CV(TIMER2) = 0 ;//
|
|||
|
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
|
|||
|
// timer_interrupt_enable(TIMER2,TIMER_INT_UP);//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
}
|
|||
|
|
|||
|
void v_start_motor()
|
|||
|
{
|
|||
|
//<2F><>ʱ<EFBFBD><CAB1>ʹ<EFBFBD><CAB9>
|
|||
|
// timer_enable(TIMER3);
|
|||
|
v_pwm_duty_change(0);
|
|||
|
TIMER_CH0CV(TIMER3) = 0 ;//
|
|||
|
TIMER_CH1CV(TIMER3) = 0 ;//
|
|||
|
TIMER_CH2CV(TIMER3) = 0 ;//
|
|||
|
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
|
|||
|
// timer_interrupt_enable(TIMER3,TIMER_INT_UP);//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.07.21
|
|||
|
*/
|
|||
|
void h_stop_motor()
|
|||
|
{
|
|||
|
h_pwm_duty_change(0);
|
|||
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ
|
|||
|
TIMER_CH0CV(TIMER2) = 0;
|
|||
|
TIMER_CH1CV(TIMER2) = 0;
|
|||
|
TIMER_CH2CV(TIMER2) = 0;
|
|||
|
|
|||
|
H_EN1_OFF;//U
|
|||
|
H_EN2_OFF;//V
|
|||
|
H_EN3_OFF;//W
|
|||
|
// //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD>
|
|||
|
// timer_disable(TIMER2);
|
|||
|
// timer_interrupt_disable(TIMER2,TIMER_INT_UP);//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
}
|
|||
|
|
|||
|
void v_stop_motor()
|
|||
|
{
|
|||
|
v_pwm_duty_change(0);
|
|||
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ
|
|||
|
TIMER_CH0CV(TIMER3) = 0;
|
|||
|
TIMER_CH1CV(TIMER3) = 0;
|
|||
|
TIMER_CH2CV(TIMER3) = 0;
|
|||
|
|
|||
|
V_EN1_OFF;//U
|
|||
|
V_EN2_OFF;//V
|
|||
|
V_EN3_OFF;//W
|
|||
|
// //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ر<EFBFBD>
|
|||
|
// timer_disable(TIMER3);
|
|||
|
// timer_interrupt_disable(TIMER3,TIMER_INT_UP);//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʹ<EFBFBD><CAB9>
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*!
|
|||
|
\brief hall<EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.10.11
|
|||
|
*/
|
|||
|
static void hall_io_init(void)
|
|||
|
{
|
|||
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
// rcu_periph_clock_enable(RCU_GPIOE);
|
|||
|
//
|
|||
|
// //ˮƽ<CBAE><C6BD><EFBFBD><EFBFBD>PE10-H1,PE11-H2,PE12-H3<48><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱPE13-H1,PE14-H2,PE15-H3
|
|||
|
// //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ
|
|||
|
// gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_10);
|
|||
|
// gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
|
|||
|
// gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_12);
|
|||
|
//
|
|||
|
// gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13);
|
|||
|
// gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_14);
|
|||
|
// gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
|
|||
|
|
|||
|
H_Hall_state.Hall_H1_state = 0;
|
|||
|
H_Hall_state.Hall_H2_state = 0;
|
|||
|
H_Hall_state.Hall_H3_state = 0;
|
|||
|
H_Hall_state.Hall_value = 0;
|
|||
|
|
|||
|
V_Hall_state.Hall_H1_state = 0;
|
|||
|
V_Hall_state.Hall_H2_state = 0;
|
|||
|
V_Hall_state.Hall_H3_state = 0;
|
|||
|
V_Hall_state.Hall_value = 0;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/*!
|
|||
|
\brief none <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
\param[in] none
|
|||
|
\param[out] none
|
|||
|
\retval none
|
|||
|
\note LH @2022.10.11
|
|||
|
*/
|
|||
|
void bridge_io_init(void)
|
|||
|
{
|
|||
|
rcu_periph_clock_enable(RCU_GPIOA);
|
|||
|
rcu_periph_clock_enable(RCU_GPIOC);
|
|||
|
rcu_periph_clock_enable(RCU_GPIOD);
|
|||
|
rcu_periph_clock_enable(RCU_GPIOE);
|
|||
|
//H_EN1--PC9//H_EN2--PA8//H_EN3--PA11
|
|||
|
gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_9);
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_8);
|
|||
|
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
|
|||
|
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8| GPIO_PIN_11);
|
|||
|
gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
|
|||
|
//V_EN1--PD10//V_EN2--PD11//V_EN3--PD15
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_10);
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_11);
|
|||
|
gpio_mode_set(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_15);
|
|||
|
gpio_output_options_set(GPIOD, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10| GPIO_PIN_11| GPIO_PIN_15);
|
|||
|
|
|||
|
//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><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);
|
|||
|
|
|||
|
H_EN1_OFF;
|
|||
|
H_EN2_OFF;
|
|||
|
H_EN3_OFF;
|
|||
|
|
|||
|
V_EN1_OFF;
|
|||
|
V_EN2_OFF;
|
|||
|
V_EN3_OFF;
|
|||
|
hall_io_init();
|
|||
|
|
|||
|
H_BRIDGE_POWER_ON;
|
|||
|
// V_BRIDGE_POWER_ON;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|