Ejemplo n.º 1
0
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;
}
Ejemplo n.º 3
0
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;
}