diff --git a/2_Motor_Master/Motor_Master/Motor_Master/Motor_Master.cproj b/2_Motor_Master/Motor_Master/Motor_Master/Motor_Master.cproj index fa8614f..d4697ea 100644 --- a/2_Motor_Master/Motor_Master/Motor_Master/Motor_Master.cproj +++ b/2_Motor_Master/Motor_Master/Motor_Master/Motor_Master.cproj @@ -36,7 +36,7 @@ - + diff --git a/2_Motor_Master/Motor_Master/Motor_Master/bldc.c b/2_Motor_Master/Motor_Master/Motor_Master/bldc.c index 78ce2af..d77d15b 100644 --- a/2_Motor_Master/Motor_Master/Motor_Master/bldc.c +++ b/2_Motor_Master/Motor_Master/Motor_Master/bldc.c @@ -18,7 +18,7 @@ void BldcInitStruct(BLDCMotor_t *motor, BLDCMotor_param_t *motor_param) motor->motor_param = motor_param; motor->motor_status.actualDirection = 0; motor->motor_setpoints.desiredDirection = 0; - motor->motor_status.duty_cycle = 150; + motor->motor_status.duty_cycle = 100; motor->motor_status.calc_rpm = 0; motor->motor_status.Num_Steps = 0; motor->motor_status.cur_comm_step = 0; @@ -103,6 +103,12 @@ void exec_commutation(BLDCMotor_t *motor) //tic_port(DEBUG_2_PORT); //motor->motor_status.currentHallPattern = readM1Hall(); motor->motor_status.currentHallPattern = motor->readHall(); + if(motor->motor_status.currentHallPattern == INVALID_HALL_0 || + motor->motor_status.currentHallPattern == INVALID_HALL_7 ) { + applicationStatus.fault = HALLSENSORINVALID; + applicationStatus.currentstate = FAULT; + + } // ---------------------------------------------------------------------- // Multi Motor Register Masking @@ -110,12 +116,14 @@ void exec_commutation(BLDCMotor_t *motor) //tic_port(DEBUG_2_PORT); //volatile uint16_t temp_M1 = COMMUTATION_PATTERN_M1[Motor1.motor_status.currentHallPattern + Motor1.motor_setpoints.directionOffset]; //volatile uint16_t temp_M2 = COMMUTATION_PATTERN_M2[Motor2.motor_status.currentHallPattern + oh ]; - volatile uint16_t temp_M1 = COMMUTATION_PATTERN[motor->motor_status.currentHallPattern + - motor->motor_setpoints.directionOffset]; + //volatile uint16_t temp_M1 = COMMUTATION_PATTERN[motor->motor_status.currentHallPattern + + //motor->motor_setpoints.directionOffset]; + + volatile uint16_t temp_M1 = COMMUTATION_PATTERN[motor->motor_status.currentHallPattern + motor->motor_setpoints.directionOffset]; // ---------------------------------------------------------------------- // Set Pattern Buffers // ---------------------------------------------------------------------- - hri_tcc_write_PATTBUF_reg(motor->motor_param->pwm_desc->device.hw, (hri_tcc_pattbuf_reg_t)temp_M1); + hri_tcc_write_PATTBUF_reg(motor->motor_param->pwm_desc->device.hw, temp_M1); //(Tcc *)(motor->motor_param.pwm_desc->device.hw)->PATTBUF.reg = temp_M1; //TCC0->PATTBUF.reg = (uint16_t)temp_M2; //TCC1->PATTBUF.reg = (uint16_t)temp_M1; @@ -132,12 +140,12 @@ void exec_commutation(BLDCMotor_t *motor) switch(step_change1) { - case 1: case -5: + case -1: case 5: motor->motor_status.Num_Steps = motor->motor_status.Num_Steps+1; motor->motor_status.actualDirection = CW; //Motor1.motor_setpoints.directionOffset = DIRECTION_CW_OFFSET; break; - case -1: case 5: + case 1: case -5: motor->motor_status.Num_Steps = motor->motor_status.Num_Steps-1; motor->motor_status.actualDirection = CCW; //Motor1.motor_setpoints.directionOffset = DIRECTION_CCW_OFFSET; @@ -327,9 +335,9 @@ uint8_t readHallSensorM1(void) volatile uint8_t b = gpio_get_pin_level(M1_HALL_B_PIN); volatile uint8_t c = gpio_get_pin_level(M1_HALL_C_PIN); - return ((a << 2) | + return ((c << 2) | (b << 1) | - (c << 0)); + (a << 0)); } @@ -339,7 +347,7 @@ uint8_t readHallSensorM2(void) volatile uint8_t b = gpio_get_pin_level(M2_HALL_B_PIN); volatile uint8_t c = gpio_get_pin_level(M2_HALL_C_PIN); - return ((a << 2) | + return ((c << 2) | (b << 1) | - (c << 0)); + (a << 0)); } \ No newline at end of file diff --git a/2_Motor_Master/Motor_Master/Motor_Master/bldc.h b/2_Motor_Master/Motor_Master/Motor_Master/bldc.h index 9ffba42..56a3656 100644 --- a/2_Motor_Master/Motor_Master/Motor_Master/bldc.h +++ b/2_Motor_Master/Motor_Master/Motor_Master/bldc.h @@ -62,8 +62,9 @@ // global variables // ---------------------------------------------------------------------- -static const uint8_t HALL_PATTERN_ARRAY[16] = {0, 5, 3, 1, 6, 4, 2, 0, 0, 3, 6, 2, 5, 1, 4, 0 }; +//static const uint8_t HALL_PATTERN_ARRAY[16] = {0, 5, 3, 1, 6, 4, 2, 0, 0, 3, 6, 2, 5, 1, 4, 0 }; static const uint8_t MOTOR_COMMUTATION_STEPS[8] = {9, 1, 3, 2, 5, 6, 4, 9}; +//static const uint8_t MOTOR_COMMUTATION_STEPS[8] = {9, 1, 3, 2, 6, 4, 5, 9}; volatile BLDCMotor_t Motor1; volatile BLDCMotor_t Motor2; @@ -90,67 +91,4 @@ static void SetDutyCycle(const uint16_t duty); uint8_t readHallSensorM1(void); uint8_t readHallSensorM2(void); - - - -// ---------------------------------------------------------------------- -// Inline Functions, hoping for in lining and faster execution -// ---------------------------------------------------------------------- -static inline uint8_t readM1Hall(void) -{ - //volatile uint8_t motor_read = 0; - //motor_read = (motor_read & M1_HALL_A_MASK) | (uint8_t)((PORT->Group[M1_HALL_A_GROUP].IN.reg & M1_HALL_A_PORT)>>(M1_HALL_A_LSR)); - //motor_read = (motor_read & M1_HALL_B_MASK) | (uint8_t)((PORT->Group[M1_HALL_B_GROUP].IN.reg & M1_HALL_B_PORT)>>(M1_HALL_B_LSR)); - //motor_read = (motor_read & M1_HALL_C_MASK) | (uint8_t)((PORT->Group[M1_HALL_C_GROUP].IN.reg & M1_HALL_C_PORT)>>(M1_HALL_C_LSR)); - // - //return motor_read; - volatile uint8_t a = gpio_get_pin_level(M1_HALL_A_PIN); - volatile uint8_t b = gpio_get_pin_level(M1_HALL_B_PIN); - volatile uint8_t c = gpio_get_pin_level(M1_HALL_C_PIN); - - return ((a << 2) | - (b << 1) | - (c << 0)); - -} - -static inline uint8_t readM2Hall(void) -{ - //volatile uint8_t motor_read = 0; - //motor_read = (motor_read & M2_HALL_A_MASK) | (uint8_t)((PORT->Group[M2_HALL_A_GROUP].IN.reg & M2_HALL_A_PORT)>>(M2_HALL_A_LSR)); - //motor_read = (motor_read & M2_HALL_B_MASK) | (uint8_t)((PORT->Group[M2_HALL_B_GROUP].IN.reg & M2_HALL_B_PORT)>>(M2_HALL_B_LSR)); - //motor_read = (motor_read & M2_HALL_C_MASK) | (uint8_t)((PORT->Group[M2_HALL_C_GROUP].IN.reg & M2_HALL_C_PORT)>>(M2_HALL_C_LSR)); - // - //return motor_read; - - - volatile uint8_t a = gpio_get_pin_level(M2_HALL_A_PIN); - volatile uint8_t b = gpio_get_pin_level(M2_HALL_B_PIN); - volatile uint8_t c = gpio_get_pin_level(M2_HALL_C_PIN); - - return ((a << 2) | - (b << 1) | - (c << 0)); -} - -//static inline uint8_t read_hall_pattern(BLDCMotor_t *motor) -//{ - ////volatile uint8_t motor_read = 0; - ////motor_read = (motor_read & M2_HALL_A_MASK) | (uint8_t)((PORT->Group[M2_HALL_A_GROUP].IN.reg & M2_HALL_A_PORT)>>(M2_HALL_A_LSR)); - ////motor_read = (motor_read & M2_HALL_B_MASK) | (uint8_t)((PORT->Group[M2_HALL_B_GROUP].IN.reg & M2_HALL_B_PORT)>>(M2_HALL_B_LSR)); - ////motor_read = (motor_read & M2_HALL_C_MASK) | (uint8_t)((PORT->Group[M2_HALL_C_GROUP].IN.reg & M2_HALL_C_PORT)>>(M2_HALL_C_LSR)); - //// - ////return motor_read; - // - //Motor1. - // - //volatile uint8_t a = gpio_get_pin_level(motor->motor_param->hallPins.hallA); - ////volatile uint8_t b = gpio_get_pin_level(motor->motor_param->hallsensors[1]); - ////volatile uint8_t c = gpio_get_pin_level(motor->motor_param->hallsensors[2]); - //// - ////return ((a << 2) | - ////(b << 1) | - ////(c << 0)); -//} - #endif /* BLDC_H_ */ \ No newline at end of file diff --git a/2_Motor_Master/Motor_Master/Motor_Master/bldc_types.h b/2_Motor_Master/Motor_Master/Motor_Master/bldc_types.h index 3085cd6..e8b69b5 100644 --- a/2_Motor_Master/Motor_Master/Motor_Master/bldc_types.h +++ b/2_Motor_Master/Motor_Master/Motor_Master/bldc_types.h @@ -68,7 +68,7 @@ volatile typedef struct volatile uint8_t actualDirection; //! The actual direction of rotation. volatile uint16_t duty_cycle; volatile float32_t calc_rpm; - volatile int32_t* Num_Steps; + volatile int32_t Num_Steps; /* Hall States */ volatile uint8_t prevHallPattern; volatile uint8_t currentHallPattern; diff --git a/2_Motor_Master/Motor_Master/Motor_Master/motorparameters.h b/2_Motor_Master/Motor_Master/Motor_Master/motorparameters.h index 4dd264a..c2bbc8f 100644 --- a/2_Motor_Master/Motor_Master/Motor_Master/motorparameters.h +++ b/2_Motor_Master/Motor_Master/Motor_Master/motorparameters.h @@ -14,20 +14,20 @@ // M1 Hall Parameters // ---------------------------------------------------------------------- -#define M1_HALL_A_PIN GPIO(GPIO_PORTA, 22) -#define M1_HALL_A_PORT PORT_PA22 +#define M1_HALL_A_PIN GPIO(GPIO_PORTA, 4) +#define M1_HALL_A_PORT PORT_PA04 #define M1_HALL_A_MASK ~(1<<0) #define M1_HALL_A_LSR M1_HALL_A_PIN - M1_HALL_A_GROUP*32 -0 #define M1_HALL_A_GROUP M1_HALL_A_PIN/32 -#define M1_HALL_B_PIN GPIO(GPIO_PORTA, 23) -#define M1_HALL_B_PORT PORT_PA23 +#define M1_HALL_B_PIN GPIO(GPIO_PORTA, 5) +#define M1_HALL_B_PORT PORT_PA05 #define M1_HALL_B_MASK ~(1<<1) #define M1_HALL_B_LSR M1_HALL_B_PIN - M1_HALL_B_GROUP*32 -1 #define M1_HALL_B_GROUP M1_HALL_B_PIN/32 -#define M1_HALL_C_PIN GPIO(GPIO_PORTA, 24) -#define M1_HALL_C_PORT PORT_PA24 +#define M1_HALL_C_PIN GPIO(GPIO_PORTA, 6) +#define M1_HALL_C_PORT PORT_PA06 #define M1_HALL_C_MASK ~(1<<2) #define M1_HALL_C_LSR M1_HALL_C_PIN - M1_HALL_C_GROUP*32 -2 #define M1_HALL_C_GROUP M1_HALL_C_PIN/32 @@ -36,24 +36,26 @@ // M2 Hall Parameters // ---------------------------------------------------------------------- -#define M2_HALL_A_PIN GPIO(GPIO_PORTA, 4) -#define M2_HALL_A_PORT PORT_PA04 +#define M2_HALL_A_PIN GPIO(GPIO_PORTA, 22) +#define M2_HALL_A_PORT PORT_PA22 #define M2_HALL_A_MASK ~(1<<0) #define M2_HALL_A_LSR M2_HALL_A_PIN - M2_HALL_A_GROUP*32 -0 #define M2_HALL_A_GROUP M2_HALL_A_PIN/32 -#define M2_HALL_B_PIN GPIO(GPIO_PORTA, 5) -#define M2_HALL_B_PORT PORT_PA05 +#define M2_HALL_B_PIN GPIO(GPIO_PORTA, 23) +#define M2_HALL_B_PORT PORT_PA23 #define M2_HALL_B_MASK ~(1<<1) #define M2_HALL_B_LSR M2_HALL_B_PIN - M2_HALL_B_GROUP*32 -1 #define M2_HALL_B_GROUP M2_HALL_B_PIN/32 -#define M2_HALL_C_PIN GPIO(GPIO_PORTA, 6) -#define M2_HALL_C_PORT PORT_PA06 +#define M2_HALL_C_PIN GPIO(GPIO_PORTA, 24) +#define M2_HALL_C_PORT PORT_PA24 #define M2_HALL_C_MASK ~(1<<2) #define M2_HALL_C_LSR M2_HALL_C_PIN - M2_HALL_C_GROUP*32 -2 #define M2_HALL_C_GROUP M2_HALL_C_PIN/32 + + /* ---------------------------------------------------------------------- // Commutation Patterns // ---------------------------------------------------------------------- @@ -69,25 +71,67 @@ ** W7 | M1_0 | CC0 || M2_0 | CC0 | */ -static const uint16_t COMMUTATION_PATTERN[16] = { - 0x00FF, // (0) invalid state - 0x303B, // (1) - 0x183D, // (2) - 0x283B, // (3) - 0x283E, // (4) - 0x183E, // (5) - 0x303D, // (6) - 0x00FF, // (7) invalid state - 0x00FF, // (8) invalid state - 0x303D, // (9) - 0x183E, // (10) - 0x283E, // (11) - 0x283B, // (12) - 0x183D, // (13) - 0x303B, // (14) - 0x00FF // (15) invalid state +/* CCW from Back - works best in forward diraction*/ +static const uint16_t COMMUTATION_PATTERN[] = { + 0x003F, // (0) invalid state + 0x053D, // (1) + 0x1437, // (2) + 0x113D, // (3) + 0x111F, // (4) + 0x141F, // (5) + 0x0537, // (6) + 0x003F, // (7) invalid state + 0x003F, // (8) invalid state + 0x0537, // (9) + 0x141F, // (10) + 0x111F, // (11) + 0x113D, // (12) + 0x1437, // (13) + 0x053D, // (14) + 0x003F // (15) invalid state }; +////* CW From Back */ +//static const uint16_t COMMUTATION_PATTERN[16] = { + //0x003F, // (0) invalid state + //0x0537, // (1) + //0x141F, // (2) + //0x111F, // (3) + //0x113D, // (4) + //0x1437, // (5) + //0x053D, // (6) + //0x003F, // (7) invalid state + //0x003F, // (8) invalid state + //0x053D, // (9) + //0x1437, // (10) + //0x113D, // (11) + //0x111F, // (12) + //0x141F, // (13) + //0x0537, // (14) + //0x003F // (15) invalid state +//}; + +////* CW From Back */ +//static const uint16_t COMMUTATION_PATTERN[16] = { + //0x003F, // (0) invalid state + //0x0537, // (1) + //0x141F, // (2) + //0x111F, // (3) + //0x113D, // (4) + //0x1437, // (5) + //0x053D, // (6) + //0x003F, // (7) invalid state + //0x003F, // (8) invalid state + //0x0537, // (9) + //0x053D, // (10) + //0x1437, // (11) + //0x113D, // (12) + //0x111F, // (13) + //0x141F, // (14) + //0x003F // (15) invalid state +//}; + + typedef struct { uint8_t hallA;