Exemplo n.º 1
0
void PIT_Configuration (void)
{
	PIT_InitTypeDef PIT_InitStruct1;
	PIT_InitStruct1.PITx = PIT0;          //PIT0通道
	PIT_InitStruct1.PIT_Interval = 200;   //定时周期100MS
	PIT_Init(&PIT_InitStruct1);
	PIT_ITConfig(PIT0,PIT_IT_TIF,ENABLE);
	//NVIC_EnableIRQ(PIT0_IRQn);
}
Exemplo n.º 2
0
Arquivo: main.c Projeto: oldjohnh/car
int main(void)
{
	unsigned char i;          
	unsigned char Send_Count; 
	uint32_t DMA_Value0 = 0;
	uint32_t DMA_Value1 = 0;
	PIT_InitTypeDef PIT_InitStruct1;
	GPIO_InitTypeDef GPIO_InitStruct1;
	FTM_InitTypeDef FTM_InitStruct1;
	DMACNT_InitTypeDef DMACNT_InitStruct1;
	SystemClockSetup(ClockSource_EX50M,CoreClock_100M);
	UART_DebugPortInit(UART0_RX_PA14_TX_PA15,115200);
	DisplayCPUInfo();
	DelayInit();
	OLED_Init();
	DMACNT_InitStruct1.DMACNT_Mode = DMACNT_MODE_FALLING;  //ÉÏÉýÑؼÆÊý
	DMACNT_InitStruct1.DMA_Chl = DMA_CH0;                 //ʹÓÃͨµÀ 0
	DMACNT_InitStruct1.GPIOx = PTC;                       //PTC5
	DMACNT_InitStruct1.GPIO_Pin = GPIO_Pin_5; 
	DMACNT_Init(&DMACNT_InitStruct1);

	GPIO_InitStruct1.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct1.GPIO_InitState = Bit_RESET;
	GPIO_InitStruct1.GPIO_IRQMode = GPIO_IT_DISABLE;
	GPIO_InitStruct1.GPIO_Mode = GPIO_Mode_OPP;
	GPIO_InitStruct1.GPIOx = PTB;
	GPIO_Init(&GPIO_InitStruct1);
	
	GPIO_InitStruct1.GPIO_Pin = GPIO_Pin_1;
	GPIO_InitStruct1.GPIO_InitState = Bit_SET;
	GPIO_InitStruct1.GPIOx = PTB;
	GPIO_Init(&GPIO_InitStruct1);
	
	PIT_InitStruct1.PITx=PIT2;
	PIT_InitStruct1.PIT_Interval=100;
	PIT_Init(&PIT_InitStruct1);
	NVIC_EnableIRQ(PIT2_IRQn);
	PIT_ITConfig(PIT2,PIT_IT_TIF,ENABLE);
	
	PIT_InitStruct1.PITx=PIT0;
	PIT_InitStruct1.PIT_Interval=20000;
	PIT_Init(&PIT_InitStruct1);
	PIT_ITConfig(PIT0,PIT_IT_TIF,ENABLE);
	NVIC_EnableIRQ(PIT0_IRQn);
	FTM_InitStruct1.Frequency = 800;
	FTM_InitStruct1.FTM_Mode = FTM_Mode_EdgeAligned;
//	FTM_InitStruct1.InitalDuty = 10000;
	FTM_InitStruct1.FTMxMAP = FTM0_CH0_PC1;
	FTM_Init(&FTM_InitStruct1);
	UART_printf("DMACNT_CH0_Value:%d \n",*Pid_Out);


	while(1)
	{
//		if(key_detect1()){
//			Pid_Set += 500;
//		}
//		if(key_detect3()){
//			Pid_Set -= 500;
//		}
		GPIO_ResetBits(PTB,GPIO_Pin_0);
		PidError[2] = Pid_Set - *Pid_Out;
		PidOut =  Kp * (PidError[2] - PidError[1]);
		PidOut += Ki *  PidError[2] * Td;
		PidOut += Kd * (PidError[2] - 2 * PidError[1] + PidError[0]) / Td;
		PidError[0] = PidError[1];
		PidError[1] = PidError[2];
		PID_FinalOut =PidOut*2;
		
		
//		
//		if(key_detect5()){
//			Kd+=0.2;OLED_Clear();
//		}
//		else if(key_detect6()){
//			Kd-=0.2;OLED_Clear();
//		}
//		
//		OLED_Write_String(2,0,"Kp");
//		OLED_Write_String(2,2,"Ki");
//		OLED_Write_String(2,4,"Kd");
//		OLED_Write_Num3(6,0,Kp*10);
//		OLED_Write_Num3(6,2,Ki*10);
//		OLED_Write_Num3(6,4,Kd*10);
//		OLED_Write_Num4(9,6,*Pid_Out-1000);
//		
		
		if(PID_FinalOut>10000) PID_FinalOut=10000;
		else if(PID_FinalOut<0) PID_FinalOut=0;
		
		FTM_PWM_ChangeDuty(FTM0_CH0_PC1,PID_FinalOut);
		
	}
}