void Moror_Do(int i, eDirection dir) { if(i<NUM_MOTOR) { if(dir==MOTOR_OFF) { Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].pwm.port, MOTOR[i].pwm.bit, false); }else{ Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].pwm.port, MOTOR[i].pwm.bit, true); } switch(dir) { case MOTOR_STOP: Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].a.port, MOTOR[i].a.bit, false); Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].b.port, MOTOR[i].b.bit, false); break; case MOTOR_LEFT: Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].a.port, MOTOR[i].a.bit, false); Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].b.port, MOTOR[i].b.bit, true); break; case MOTOR_RIGHT: Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].a.port, MOTOR[i].a.bit, true); Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].b.port, MOTOR[i].b.bit, false); break; case MOTOR_OFF: Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].a.port, MOTOR[i].a.bit, true); Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR[i].b.port, MOTOR[i].b.bit, true); break; } } }
//INTERRUPT PWM void PWM1_IRQHandler(void) { //Interupción Canal 0 -> PERIODO //----------------------------------------------------------------------------------------------- if (Chip_PWM_MatchPending(LPC_PWM1, 0)) //Reviso interrupción pendiente canal PWM 0 { Match_Cnt1++; //Incremento contador para el brillo Match_Cnt2++; Chip_PWM_ClearMatch(LPC_PWM1, 0); //Limpio interrupción canal PWM 0 //PWM sobre transistores PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q1b[Cycle], PIN_Q1b[Cycle], 1); //Encender (invertido por el tbj emisor común) Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2b[Cycle], PIN_Q2b[Cycle], 1); //Encender (invertido por el tbj emisor común) } //Interrupción Canal 5 -> DUTYCICLE //----------------------------------------------------------------------------------------------- if (Chip_PWM_MatchPending(LPC_PWM1, 5)) //Reviso interrupción pendiente canal PWM 5 { Chip_PWM_ClearMatch(LPC_PWM1, 5); //Limpio interrupción canal PWM 5 //PWM sobre transistores NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q1b[Cycle], PIN_Q1b[Cycle], 0); //Apagar (invertido por el tbj emisor común) } //Interrupción Canal 5 -> DUTYCICLE //----------------------------------------------------------------------------------------------- if (Chip_PWM_MatchPending(LPC_PWM1, 6)) //Reviso interrupción pendiente canal PWM 5 { Chip_PWM_ClearMatch(LPC_PWM1, 6); //Limpio interrupción canal PWM 5 //PWM sobre transistores NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2b[Cycle], PIN_Q2b[Cycle], 0); //Apagar (invertido por el tbj emisor común) } }
void NextPWM2() { //Actualizar DutyCycle //----------------------------------------------------------------------------------------------- if (DutyCycle != DutyCycle02) { Chip_PWM_SetMatch(LPC_PWM1, 6, DutyCycle); //Chip_PWM_Reset(LPC_PWM1); Chip_PWM_LatchEnable(LPC_PWM1, 6, PWM_OUT_ENABLED); DutyCycle02 = DutyCycle; } //Conmutaciones MOSfet //----------------------------------------------------------------------------------------------- switch (StepID2) { case 0: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2a[2], PIN_Q2a[2], 1); //Apago Q4 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2a[0], PIN_Q2a[0], 0); //Prendo Q0 break; case 1: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2b[1], PIN_Q2b[1], 0); //Apago Q3 inv Cycle = 2; //Prendo Q5 break; case 2: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2a[0], PIN_Q2a[0], 1); //Apago Q0 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2a[1], PIN_Q2a[1], 0); //Prendo Q2 break; case 3: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2b[2], PIN_Q2b[2], 0); //Apago Q5 Cycle = 0; //Prendo Q1 break; case 4: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2a[1], PIN_Q2a[1], 1); //Apago Q2 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2a[2], PIN_Q2a[2], 0); //Prendo Q4 break; default: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2b[0], PIN_Q2b[0], 0); //Apago Q1 Cycle = 1; //Prendo Q3 } if (StepID2 > 4) //Si StepID es mayor a 4 reseteo variable StepID { StepID2 = 0; //Count++; } else StepID2++;//Incremento StepID para la siguiente conmutación (6 conmutaciones) Match_Cnt2 = 0; //Reinicio Match_Cnt //Estado anterior cruces zeros //----------------------------------------------------------------------------------------------- //CruceZero02[0] = Chip_GPIO_ReadPortBit(LPC_GPIO, PORT_Z2[0], PIN_Z2[0]); //CruceZero02[1] = Chip_GPIO_ReadPortBit(LPC_GPIO, PORT_Z2[1], PIN_Z2[1]); //CruceZero02[2] = Chip_GPIO_ReadPortBit(LPC_GPIO, PORT_Z2[2], PIN_Z2[2]); //CruceZero02[0] = LPC_GPIO->PIN & 0x0000C000; //CruceZero02[1] = LPC_GPIO2->PIN & 0x00000100; }
//PWM void NextPWM(void) { //Actualizar DutyCycle //----------------------------------------------------------------------------------------------- if (DutyCycle != DutyCycle0) { Chip_PWM_SetMatch(LPC_PWM1, 5, DutyCycle); Chip_PWM_Reset(LPC_PWM1); DutyCycle0 = DutyCycle; } //Conmutaciones MOSfet //----------------------------------------------------------------------------------------------- switch (StepID) { case 0: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb[2], PIN_Qb[2], 1); //Apago Q4 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb[0], PIN_Qb[0], 0); //Prendo Q0 break; case 1: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa[1], PIN_Qa[1], 0); //Apago Q3 Cycle = 2; //Prendo Q5 break; case 2: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb[0], PIN_Qb[0], 1); //Apago Q0 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb[1], PIN_Qb[1], 0); //Prendo Q2 break; case 3: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa[2], PIN_Qa[2], 0); //Apago Q5 Cycle = 0; //Prendo Q1 break; case 4: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb[1], PIN_Qb[1], 1); //Apago Q2 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb[2], PIN_Qb[2], 0); //Prendo Q4 break; default: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa[0], PIN_Qa[0], 0); //Apago Q1 Cycle = 1; //Prendo Q3 } if (StepID > 4) //Si StepID es mayor a 4 reseteo variable StepID { StepID = 0; Count++; } else StepID++;//Incremento StepID para la siguiente conmutación (6 conmutaciones) Match_Cnt = 0; //Reinicio Match_Cnt //Estado anterior cruces zeros //----------------------------------------------------------------------------------------------- CruceZero0[0] = Chip_GPIO_ReadPortBit(LPC_GPIO, PORT_Z[0], PIN_Z[0]); CruceZero0[1] = Chip_GPIO_ReadPortBit(LPC_GPIO, PORT_Z[1], PIN_Z[1]); CruceZero0[2] = Chip_GPIO_ReadPortBit(LPC_GPIO, PORT_Z[2], PIN_Z[2]); }
/* Sets the state of a board LED to on or off */ void Board_LED_Set(uint8_t LEDNumber, bool On) { /* There is only one LED */ if (LEDNumber == 0) { Chip_GPIO_WritePortBit(LPC_GPIO, LED0_GPIO_PORT_NUM, LED0_GPIO_BIT_NUM, On); } }
void InicGPIOs ( void ) { Chip_GPIO_SetDir(LPC_GPIO,LEDXpresso,SALIDA); Chip_GPIO_WritePortBit(LPC_GPIO,LEDXpresso,1); Chip_GPIO_SetDir(LPC_GPIO,DHT_DATA,ENTRADA); }
/* Initialize the LEDs on the NXP LPC812 XPresso Board */ static void Board_LED_Init(void) { uint8_t i; for (i = 0; i < sizeof(LED_BITS); i++) { Chip_GPIO_WriteDirBit(LPC_GPIO_PORT, LPC8XX_PORT_NUM, LED_BITS[i], true); Chip_GPIO_WritePortBit(LPC_GPIO_PORT, LPC8XX_PORT_NUM, LED_BITS[i], (bool) true); } }
//INTERRUPT PWM void PWM1_IRQHandler(void) { //Interupción Canal 0 -> PERIODO //----------------------------------------------------------------------------------------------- if (Chip_PWM_MatchPending(LPC_PWM1, 0)) //Reviso interrupción pendiente canal PWM 0 { Match_Cnt[0]++; //Incremento contador para el brillo Match_Cnt[1]++; //Incremento contador para el brillo Match_Cnt[2]++; //Incremento contador para el brillo Match_Cnt[3]++; //Incremento contador para el brillo Chip_PWM_ClearMatch(LPC_PWM1, 0); //Limpio interrupción canal PWM 0 //PWM sobre transistores PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[0][Cycle[0]], PIN_Qa_[0][Cycle[0]], 1); //Encender Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[1][Cycle[1]], PIN_Qa_[1][Cycle[1]], 1); //Encender Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[2][Cycle[2]], PIN_Qa_[2][Cycle[2]], 1); //Encender Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[3][Cycle[3]], PIN_Qa_[3][Cycle[3]], 1); //Encender } //Interrupción Canal PWM_number[sel_motor] -> DUTYCICLE //----------------------------------------------------------------------------------------------- if (Chip_PWM_MatchPending(LPC_PWM1, 3)) //Reviso interrupción pendiente canal PWM 3 { Chip_PWM_ClearMatch(LPC_PWM1, 3); //Limpio interrupción canal PWM 3 //PWM sobre transistores NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[0][Cycle[0]], PIN_Qa_[0][Cycle[0]], 0); //Apagar } if (Chip_PWM_MatchPending(LPC_PWM1, 4)) //Reviso interrupción pendiente canal PWM 3 { Chip_PWM_ClearMatch(LPC_PWM1, 4); //Limpio interrupción canal PWM 3 //PWM sobre transistores NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[1][Cycle[1]], PIN_Qa_[1][Cycle[1]], 0); //Apagar } if (Chip_PWM_MatchPending(LPC_PWM1, 5)) //Reviso interrupción pendiente canal PWM 3 { Chip_PWM_ClearMatch(LPC_PWM1, 5); //Limpio interrupción canal PWM 3 //PWM sobre transistores NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[2][Cycle[2]], PIN_Qa_[2][Cycle[2]], 0); //Apagar } if (Chip_PWM_MatchPending(LPC_PWM1, 6)) //Reviso interrupción pendiente canal PWM 3 { Chip_PWM_ClearMatch(LPC_PWM1, 6); //Limpio interrupción canal PWM 3 //PWM sobre transistores NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[3][Cycle[3]], PIN_Qa_[3][Cycle[3]], 0); //Apagar } }
void InitGPIO(uint32_t num_motor) { //CONFIGURAR SALIDAS //----------------------------------------------------------------------------------------------- Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Qa_[num_motor][0], PIN_Qa_[num_motor][0] , SALIDA); //Configuro el pin como salida Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Qa_[num_motor][1], PIN_Qa_[num_motor][1] , SALIDA); //Configuro el pin como salida Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Qa_[num_motor][2], PIN_Qa_[num_motor][2] , SALIDA); //Configuro el pin como salida Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Qb_[num_motor][0], PIN_Qb_[num_motor][0] , SALIDA); //Configuro el pin como salida Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Qb_[num_motor][1], PIN_Qb_[num_motor][1] , SALIDA); //Configuro el pin como salida Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Qb_[num_motor][2], PIN_Qb_[num_motor][2] , SALIDA); //Configuro el pin como salida //APAGAR TRANSISTORES //----------------------------------------------------------------------------------------------- Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][0], PIN_Qa_[num_motor][0], 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][1], PIN_Qa_[num_motor][1], 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][2], PIN_Qa_[num_motor][2], 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][0], PIN_Qb_[num_motor][0], 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][1], PIN_Qb_[num_motor][1], 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][2], PIN_Qb_[num_motor][2], 1); //NMOS //CONFIGURAR ENTRADAS //----------------------------------------------------------------------------------------------- /*=============[TODAVIA NO ESTA IMPLEMENTADO]========================*/ Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Z_[num_motor][0], PIN_Z_[num_motor][0], ENTRADA); Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Z_[num_motor][1], PIN_Z_[num_motor][1], ENTRADA); Chip_GPIO_WriteDirBit(LPC_GPIO, PORT_Z_[num_motor][2], PIN_Z_[num_motor][2], ENTRADA); /*===================================================================*/ }
/* Initialise the SCT Pins */ void SCT_PinsConfigure(void) { #ifdef BOARD_HITEX_EVA_18504350 /* Enable signals on MC connector X19 */ Chip_SCU_PinMuxSet(0xD, 9, (SCU_MODE_MODE_INACT | SCU_MODE_FUNC4)); /* PD_9: GPIO 6.23, MCSEL */ Chip_GPIO_WriteDirBit(LPC_GPIO_PORT, MCSEL_PORT, MCSEL_BIT, true); Chip_GPIO_WritePortBit(LPC_GPIO_PORT, MCSEL_PORT, MCSEL_BIT, false); /* Pin configuration for SCT */ /* PD_7: SCTIN_5 used for the CROSS_REQUEST input (button) */ Chip_SCU_PinMuxSet(0xD, 7, (SCU_MODE_MODE_REPEATER | SCU_MODE_INBUFF_EN | SCU_MODE_FUNC1)); /* PD_10: SCTIN_1, used for SCT clock input */ /* Connect JP13 pin 1 with connector X19 pin2 */ Chip_SCU_PinMuxSet(0xD, 10, (SCU_MODE_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC1)); Chip_SCU_PinMuxSet(0xE, 6, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC1)); /* PE_6: SCTOUT_2 connected to RGB green */ Chip_SCU_PinMuxSet(0xE, 5, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC1)); /* PE_5: SCTOUT_3 connected to RGB red */ Chip_SCU_PinMuxSet(0xE, 8, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC1)); /* P4_4: SCTOUT_4 connected to RGB blue */ Chip_SCU_PinMuxSet(0xE, 7, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC1)); /* P4_3: SCTOUT_5 */ Chip_SCU_PinMuxSet(0xD, 3, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC1)); /* PD_3: SCTOUT_6 */ /* Global configuration of the SCT */ /* use external clock, rising edge, on CTIN1 */ /* For Hitex4350, external clock is IRC clock /16 = 12 MHz / 16 = 750 KHz */ /* For Hitex1850, external clock is IRC clock /16 = 12 MHz / 16 = 750 KHz */ Chip_SCT_Config(LPC_SCT, (SCT_CONFIG_16BIT_COUNTER | (0x2 << 1) | (0x2 << 3))); #elif defined(BOARD_KEIL_MCB_18574357) /* PD_10: SCTIN_2, used for SCT clock input */ /* Connect PF_8 pin to CLK3 */ Chip_SCU_PinMuxSet(0xF, 8, (SCU_MODE_MODE_INACT | SCU_MODE_INBUFF_EN | SCU_MODE_HIGHSPEEDSLEW_EN | SCU_MODE_FUNC2)); Chip_SCU_PinMuxSet(0xD, 11, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC6)); /* PD_11: SCTOUT_14 connected to LED1 */ Chip_SCU_PinMuxSet(0xD, 12, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC6)); /* PD_12: SCTOUT_10 connected to LED2 */ Chip_SCU_PinMuxSet(0xD, 13, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC6)); /* PD_13: SCTOUT_13 connected to LED3 */ Chip_SCU_PinMuxSet(0xD, 14, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC6)); /* PD_14: SCTOUT_11 connected to LED4 */ Chip_SCU_PinMuxSet(0xD, 15, (SCU_MODE_MODE_PULLUP | SCU_MODE_FUNC6)); /* PD_15: SCTOUT_8 connected to LED5 */ /* Global configuration of the SCT */ /* use external clock, rising edge, on CTIN2 */ /* For Keil4357, external clock is IRC clock /16 = 12 MHz / 16 = 750 KHz */ /* For Keil1857, external clock is IRC clock /16 = 12 MHz / 16 = 750 KHz */ Chip_SCT_Config(LPC_SCT, (SCT_CONFIG_16BIT_COUNTER | (0x2 << 1) | (0x4 << 3))); #else #error Board not supported! #endif }
void Motor_Init(void) { Chip_GPIO_WriteDirBit(LPC_GPIO, MOTOR_STBY_PORT_NUM, MOTOR_STBY_BIT_NUM, true); int i; for(int i=0;i<NUM_MOTOR;i++) { Chip_GPIO_WriteDirBit(LPC_GPIO, MOTOR[i].pwm.port, MOTOR[i].pwm.bit, true); Chip_GPIO_WriteDirBit(LPC_GPIO, MOTOR[i].a.port, MOTOR[i].a.bit, true); Chip_GPIO_WriteDirBit(LPC_GPIO, MOTOR[i].b.port, MOTOR[i].b.bit, true); } Chip_GPIO_WritePortBit(LPC_GPIO, MOTOR_STBY_PORT_NUM, MOTOR_STBY_BIT_NUM, true); }
void Stop_and_Default(uint32_t num_motor) { //Set Period and PWM //----------------------------------------------------------------------------------------------- StepPeriod[num_motor] = start.periodRange[0]; DutyCycle[num_motor] = start.powerRange[0]; DutyCycle0[num_motor] = DutyCycle[num_motor]; //Shut Down All //----------------------------------------------------------------------------------------------- Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][0], PIN_Qa_[num_motor][0], 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][1], PIN_Qa_[num_motor][1], 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][2], PIN_Qa_[num_motor][2], 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][0], PIN_Qb_[num_motor][0], 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][1], PIN_Qb_[num_motor][1], 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][2], PIN_Qb_[num_motor][2], 1); //NMOS }
//DEFAULT void Stop_and_Default(void) { //Set Period and PWM //----------------------------------------------------------------------------------------------- StepPeriod = start.periodRange[0]; DutyCycle = start.powerRange[0]; DutyCycle0 = DutyCycle; //Shut Down All //----------------------------------------------------------------------------------------------- Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q1, PIN_Q1, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q2, PIN_Q2, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q3, PIN_Q3, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q4, PIN_Q4, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q5, PIN_Q5, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q0, PIN_Q0, 1); //NMOS }
platform_result_t platform_gpio_output_low( const platform_gpio_t* gpio) { Chip_GPIO_WritePortBit(LPC_GPIO, gpio->port, gpio->pin,false); return PLATFORM_SUCCESS; }
/* Set the LED to the state of "On" */ void Board_LED_Set(uint8_t LEDNumber, bool On) { Chip_GPIO_WritePortBit(LPC_GPIO_PORT, LPC8XX_PORT_NUM, LED_BITS[LEDNumber], (bool) !On); }
void NextPWM(uint32_t num_motor) { //Actualizar DutyCycle //----------------------------------------------------------------------------------------------- if (DutyCycle[num_motor] != DutyCycle0[num_motor]) { Chip_PWM_SetMatch(LPC_PWM1, PWM_number[num_motor], DutyCycle[num_motor]); //Chip_PWM_Reset(LPC_PWM1); Chip_PWM_LatchEnable(LPC_PWM1, PWM_number[num_motor], PWM_OUT_ENABLED); DutyCycle0[num_motor] = DutyCycle[num_motor]; } //Conmutaciones MOSfet //----------------------------------------------------------------------------------------------- switch (StepID[num_motor]) { case 0: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][2], PIN_Qb_[num_motor][2], 1); //Apago Q4 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][0], PIN_Qb_[num_motor][0], 0); //Prendo Q0 break; case 1: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][1], PIN_Qa_[num_motor][1], 0); //Apago Q3 //Prendo Q5 Cycle[num_motor] = 2; break; case 2: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][0], PIN_Qb_[num_motor][0], 1); //Apago Q0 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][1], PIN_Qb_[num_motor][1], 0); //Prendo Q2 break; case 3: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][2], PIN_Qa_[num_motor][2], 0); //Apago Q5 //Prendo Q1 Cycle[num_motor] = 0; break; case 4: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][1], PIN_Qb_[num_motor][1], 1); //Apago Q2 Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qb_[num_motor][2], PIN_Qb_[num_motor][2], 0); //Prendo Q4 break; default: Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Qa_[num_motor][0], PIN_Qa_[num_motor][0], 0); //Apago Q1 //Prendo Q3 Cycle[num_motor] = 1; } if (StepID[num_motor] > 4) //Si StepID es mayor a 4 reseteo variable StepID { StepID[num_motor] = 0; Count[num_motor]++; } else StepID[num_motor]=StepID[num_motor]+1;//Incremento StepID para la siguiente conmutación (6 conmutaciones) Match_Cnt[num_motor] = 0; //Reinicio Match_Cnt //Estado anterior cruces zeros //----------------------------------------------------------------------------------------------- /*=============[TODAVIA NO ESTA IMPLEMENTADO]========================*/ /* CruceZero0[num_motor][0] = GETPIN(PORT_Z_[num_motor][0], PIN_Z_[num_motor][0]); CruceZero0[num_motor][1] = GETPIN(PORT_Z_[num_motor][1], PIN_Z_[num_motor][1]); CruceZero0[num_motor][2] = GETPIN(PORT_Z_[num_motor][2], PIN_Z_[num_motor][2]); */ /*===================================================================*/ }
//DEFAULT void Stop_and_Default(void) { //Set Period and PWM //----------------------------------------------------------------------------------------------- StepPeriod = start.periodRange[0]; DutyCycle = start.powerRange[0]; DutyCycle01 = DutyCycle; DutyCycle02 = DutyCycle; //Shut Down All //----------------------------------------------------------------------------------------------- Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q11, PIN_Q11, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q12, PIN_Q12, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q13, PIN_Q13, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q14, PIN_Q14, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q15, PIN_Q15, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q10, PIN_Q10, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q21, PIN_Q21, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q22, PIN_Q22, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q23, PIN_Q23, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q24, PIN_Q24, 1); //NMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q25, PIN_Q25, 0); //PMOS Chip_GPIO_WritePortBit(LPC_GPIO, PORT_Q20, PIN_Q20, 1); //NMOS }
/* Assert SSEL pin */ void Board_SPI_AssertSSEL(void) { Chip_GPIO_WritePortBit(LPC_GPIO, 0, 16, false); }
/* De-Assert SSEL pin */ void Board_SPI_DeassertSSEL(void) { Chip_GPIO_WritePortBit(LPC_GPIO, 0, 16, true); }