position control added

This commit is contained in:
Nicolas Trimborn 2021-08-12 14:07:23 +02:00
parent ce627e4963
commit 797226616e
5 changed files with 29 additions and 43 deletions

View File

@ -35,7 +35,7 @@ void motor_StateMachine(BLDCMotor_t* const motor)
case MOTOR_IDLE:
//hri_tcc_write_PATTBUF_reg(motor->motor_param->pwm_desc->device.hw, DISABLE_PATTERN);
motor->motor_state.previousstate = motor->motor_state.currentstate;
motor->motor_state.currentstate = MOTOR_VI_CTRL_STATE;
motor->motor_state.currentstate = MOTOR_PVI_CTRL_STATE;
break;
case MOTOR_OPEN_LOOP_STATE:
BLDC_runOpenLoop(motor, *M1_Desired_dc);
@ -51,42 +51,31 @@ void motor_StateMachine(BLDCMotor_t* const motor)
switch (motor->regulation_loop_count) {
case 0: /* PWM FREQ / 25 - 1kHz */
case 5: case 10: case 15: case 20:/* PWM FREQ / 5 - 5kHz */
calculate_motor_speed(motor);
BLDC_runSpeedCntl(motor, (float32_t)motor->motor_status.calc_rpm, (float32_t)motor->motor_setpoints.desired_speed);
calculate_motor_speed(motor);
BLDC_runSpeedCntl(motor, (float32_t)motor->motor_status.calc_rpm, (float32_t)motor->motor_setpoints.desired_speed);
default: /* PWM FREQ - 25kHz */
select_active_phase(motor);
BLDC_runCurrentCntl(motor,(float32_t)motor->Iphase_pu.Bus, (float32_t)motor->controllers.Pi_Idc.Ref_pu);
select_active_phase(motor);
BLDC_runCurrentCntl(motor,(float32_t)motor->Iphase_pu.Bus, (float32_t)motor->controllers.Pi_Idc.Ref_pu);
break;
} // end switch(regulation_loop_count)
if(motor->regulation_loop_count > 23) motor->regulation_loop_count = 0;
else motor->regulation_loop_count++;
break;
case MOTOR_PVI_CTRL_STATE:
switch (Motor1.regulation_loop_count) {
switch (motor->regulation_loop_count) {
case 0: /* PWM FREQ / 25 - 1kHz */
Motor1.timerflags.motor_telemetry_flag = true; // Update telemetry flag
BLDC_runPosCntl(&Motor1, Motor1.motor_status.Num_Steps, Motor1.motor_setpoints.desired_position);
BLDC_runPosCntl(&Motor2, Motor1.motor_status.Num_Steps, Motor1.motor_setpoints.desired_position);
BLDC_runPosCntl(motor, motor->motor_status.Num_Steps, motor->motor_setpoints.desired_position);
case 5: case 10: case 15: case 20:/* PWM FREQ / 5 - 5kHz */
//calculate_motor_speed(motor);
//calculate_motor_speed();
BLDC_runSpeedCntl(&Motor1, Motor1.motor_status.calc_rpm, Motor1.controllers.Pid_Speed.Ref_pu);
BLDC_runSpeedCntl(&Motor2, Motor1.motor_status.calc_rpm, Motor1.controllers.Pid_Speed.Ref_pu);
calculate_motor_speed(motor);
BLDC_runSpeedCntl(motor, (float32_t)motor->motor_status.calc_rpm, (float32_t)motor->controllers.Pid_Speed.Ref_pu);
default: /* PWM FREQ - 25kHz */
select_active_phase(motor);
//select_active_phase(&Motor2, Motor2.motor_status.currentHallPattern);
BLDC_runCurrentCntl(&Motor1, Motor1.Iphase_pu.Bus, Motor1.controllers.Pi_Idc.Ref_pu);
BLDC_runCurrentCntl(&Motor2, Motor1.Iphase_pu.Bus, Motor1.controllers.Pi_Idc.Ref_pu);
select_active_phase(motor);
//select_active_phase(&Motor2, Motor2.motor_status.currentHallPattern);
BLDC_runCurrentCntl(motor, motor->Iphase_pu.Bus, motor->controllers.Pi_Idc.Ref_pu);
break;
} // end switch(regulation_loop_count)
if(Motor1.regulation_loop_count > 23) Motor1.regulation_loop_count = 0;
else Motor1.regulation_loop_count++;
if(motor->regulation_loop_count > 23) motor->regulation_loop_count = 0;
else motor->regulation_loop_count++;
break;
} //end switch (motor->motor_state.currentstate)
@ -220,13 +209,13 @@ void exec_commutation(BLDCMotor_t* const motor)
volatile uint8_t currentHall = motor->readHall();
motor->motor_status.currentHallPattern = currentHall;
if ((currentHall == INVALID_HALL_0)||(currentHall == INVALID_HALL_7))
{
hri_tcc_write_PATTBUF_reg(motor->motor_param->pwm_desc->device.hw, DISABLE_PATTERN);
motor->motor_state.currentstate == MOTOR_FAULT;
motor->motor_state.fault == MOTOR_HALLSENSORINVALID;
return;
}
//if ((currentHall == INVALID_HALL_0)||(currentHall == INVALID_HALL_7))
//{
//hri_tcc_write_PATTBUF_reg(motor->motor_param->pwm_desc->device.hw, DISABLE_PATTERN);
//motor->motor_state.currentstate == MOTOR_FAULT;
//motor->motor_state.fault == MOTOR_HALLSENSORINVALID;
//return;
//}
// ----------------------------------------------------------------------
// Set Pattern Buffers

View File

@ -17,7 +17,7 @@
#include "statemachine.h"
#define PWM_TOP (1000)
#define MAX_PWM (400)
#define MAX_PWM (300)
//#define MAX_VEL 3800
#define CW (0) //CBA

View File

@ -181,17 +181,14 @@ int main(void)
/* Replace with your application code */
while (1) {
//delay_ms(100);
//*M1_Motor__hallState = readM1Hall();
//*M2_Motor__hallState = readM2Hall();
//x += 1;
//comms_check();
//update_setpoints();
if (Motor1.timerflags.adc_readings_ready_tic) {process_currents();}
if (Motor1.timerflags.current_loop_tic) {APPLICATION_StateMachine();}
if (Motor1.timerflags.current_loop_tic) {
APPLICATION_StateMachine();
exec_commutation(&Motor1);
exec_commutation(&Motor2);
}
if (run_ECAT) {ECAT_STATE_MACHINE();}
exec_commutation(&Motor1);
exec_commutation(&Motor2);
}
}

View File

@ -167,7 +167,7 @@ const static BLDCMotor_param_t FH_32mm24BXTR = {
.motor_Max_Spd_RPM = 3000,
.motor_MeasureRange_RPM = 3200, //(1.2f * MOTOR_MAX_SPD_RPM)f // give 20% headroom
.motor_Max_Spd_ELEC = 12000, //(MOTOR_MAX_SPD_RPM/60)*MOTOR_POLEPAIRS
.motor_Max_Current_IDC_A = 1.2,
.motor_Max_Current_IDC_A = 1.0,
};
#endif /* MOTORPARAMETERS_H_ */