static void initHardware(void) { Chip_SetupXtalClocking(); Chip_SYSCTL_SetFLASHAccess(FLASHTIM_100MHZ_CPU); SystemCoreClockUpdate(); /*====================[PARA MODULO RF]====================*/ Chip_GPIO_WriteDirBit(LPC_GPIO, CE_PIN, 1); //Puerto CE Chip_GPIO_SetPinOutLow(LPC_GPIO, CE_PIN); //Puerto CE InitSPI (); begin(); setPALevel(RF24_PA_LOW); openWritingPipe(&addresses2[0]); openReadingPipe(1,&addresses1[0]); //1Node: Transmite paquetes el tx por este pide (addres) startListening(); /*========================================================*/ // Board_Init(); // Board_LED_Set(0, false); SysTick_Config(SystemCoreClock/1000); //1000 ticks por segundo InitPWM_motores(0); //Función inicialización modulo PWM InitPWM_motores(1); //Función inicialización modulo PWM InitPWM_motores(2); //Función inicialización modulo PWM InitPWM_motores(3); //Función inicialización modulo PWM InitPWM0(); InitGPIO(0); //Llamo función para inicializar GPIO InitGPIO(1); //Llamo función para inicializar GPIO InitGPIO(2); //Llamo función para inicializar GPIO InitGPIO(3); //Llamo función para inicializar GPIO Stop_and_Default(0); //Condiciones iniciales Stop_and_Default(1); //Condiciones iniciales Stop_and_Default(2); //Condiciones iniciales Stop_and_Default(3); //Condiciones iniciales P2_6ER = 1; P2_7ER = 1; P2_8ER = 1; P2_6EF = 1; P2_7EF = 1; P2_8EF = 1; P0_15ER = 1; P0_16ER = 1; P2_9ER = 1; P0_15EF = 1; P0_16EF = 1; P2_9EF = 1; NVIC_SetPriority(EINT3_IRQn,1); //Le pongo la mayor prioridad a la interrupcion NVIC_EnableIRQ(EINT3_IRQn); }
// MAIN PROGRAM int main(void) { Board_SystemInit(); uint8_t Giro = 0, Giro0 = 0, CloseLoop=0, Inertia=0xFF; //Init All //----------------------------------------------------------------------------------------------- Stop_and_Default(); //Condiciones iniciales InitGPIO(); //Llamo función para inicializar GPIO InitPWM(); //Función inicialización modulo PWM Start_Up_Brushless(); //Arranque del motor **********************7777777777777777777777777777744444444444*************** Giro=1; //Main Loop //----------------------------------------------------------------------------------------------- while (1) { //Lectura Pulsadores //------------------------------------------------------------------------------------------- if (Chip_GPIO_ReadPortBit(LPC_GPIO, PULS_PORT, PULS1)==0 && Chip_GPIO_ReadPortBit(LPC_GPIO, PULS_PORT, PULS2)==0) { //Detencion y valores de reinicio Stop_and_Default(); //Detencion del motor Giro = 0; //Flag que no siga girando Giro0 = 0; //Flag para arranque CloseLoop=0; //Flag para lazo cerrado Inertia=0xFF; //Contador para mantener velocidad hasta encontrar BEMF AntiRebo = REBOTE_; //Reestablezco anti rebote } if (Chip_GPIO_ReadPortBit(LPC_GPIO, PULS_PORT, PULS1) == 0 && AntiRebo == 0) { //Arranque Motor PWM + Period if (Giro0 == 0) { //Primer pulso: Start_Up_Brushless(); //Arranque del motor Giro = 1; //Flag que continue girando } else { if (DutyCycle > 20) DutyCycle = DutyCycle - 5; //Decrementar ciclo actividad } AntiRebo = REBOTE_; //Restablezco anti rebote } if (Chip_GPIO_ReadPortBit(LPC_GPIO, PULS_PORT, PULS2) == 0 && AntiRebo == 0) { if (DutyCycle < 980 && Giro0 == 1) DutyCycle = DutyCycle + 5; //Incremento ciclo actividad AntiRebo = REBOTE_; //Restablezco anti rebote } //------------------------------------------------------------------------------------------- if (AntiRebo > 0) AntiRebo--; //Antirebote a lo croto //Test PWM //------------------------------------------------------------------------------------------- if(CloseLoop==0){ //Lazo abierto if (Match_Cnt1>=StepPeriod && Giro) { NextPWM1(); //Conmutación NextPWM2(); Giro0 = 1; //Flag para incrementar o decrementar duty Inertia--; //Contador decreciente para encontrar BEMF if(Inertia==0) CloseLoop=1; //Final del contador -> entro en lazo cerrado } }else{ //Lazo cerrado //Zero_Detect1(); //Detección de cruces por cero (cincronismo) //Zero_Detect2(); if(Conmutar1){ NextPWM1(); Conmutar1=0; } if(Conmutar2){ NextPWM2(); Conmutar2=0; } } //------------------------------------------------------------------------------------------- //End Test } return 1; }
int main(void) { uint32_t estado[4] ={0,0,0,0},suspender[4]={0,0,0,0}, StartMotores[4] = {0,0,0,0}; initHardware(); Chip_GPIO_WriteDirBit(LPC_GPIO, 2, 10, 1); //led isp Chip_GPIO_SetPinOutHigh(LPC_GPIO, 2,10); while(1) { if(available()) { read( &data_led[0], 4 ); data=data_led[0]; data=(data<<8)|data_led[1]; data=(data<<8)|data_led[2]; data=(data<<8)|data_led[3]; } if(data == 0xAABBCCDD) { Chip_GPIO_SetPinOutLow(LPC_GPIO, 2,10); //led isp StartMotores[2] = 1; StartMotores[3] = 1; } if(data == 0xEEFF0123) { Chip_GPIO_SetPinOutHigh(LPC_GPIO, 2,10); //led isp estado[2] = 0; estado[3] = 0; Stop_and_Default(0); //Condiciones iniciales Stop_and_Default(1); //Condiciones iniciales Stop_and_Default(2); //Condiciones iniciales Stop_and_Default(3); //Condiciones iniciales } if (StartMotores[2] && estado[2] == 0) { StartMotores[2] = 0; estado[2] = 1; msTick[2] = 0; } /* if (StartMotores[3] && estado[3] == 0) { StartMotores[3] = 0; estado[3] = 1; msTick[3] = 0; } */ if(estado[2] == 1) { if(msTick[2]) { msTick[2]=0; suspender[2]=Start_Up_Brushless(2); if(suspender[2]) { suspender[2] = 0; estado[2] = 2; } } } if(estado[2] == 2) { if(Conmutar[2]) { Conmutar[2] = 0; NextPWM(2); } } /* if(estado[3] == 1) { if(msTick[3]) { msTick[3]=0; suspender[3]=Start_Up_Brushless(3); if(suspender[3]) { suspender[3] = 0; estado[3] = 2; } } } if(estado[3] == 2) { if(Conmutar[3]) { Conmutar[3] = 0; NextPWM(3); } }*/ } return 0; }