增量式PID的stm32实现,整定过程 作者: 时间:2016-11-28 来源:网络 加入技术交流群 扫码加入和技术大咖面对面交流海量资料库查询 收藏 void TIM5_PWMINPUT_INIT(u16 arr,u16 psc){TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//TIM的初始化结构体NVIC_InitTypeDef NVIC_InitStructure;//中断配置TIM_ICInitTypeDefTIM5_ICInitStructure;//TIM4PWM配置结构体GPIO_InitTypeDef GPIO_InitStructure;//IO口配置结构体RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);//Open TIM4 clockRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//open gpioB clockGPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//GPIO 1GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;//浮空输入 上拉输入GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2;TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;TIM5_ICInitStructure.TIM_ICFilter = 0x3;//Filter:过滤TIM_PWMIConfig(TIM5, &TIM5_ICInitStructure);//PWM输入配置TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2);//选择有效输入端TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset);//配置为主从复位模式TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发TIM_ITConfig(TIM5, TIM_IT_CC2|TIM_IT_Update, ENABLE);//中断配置TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位TIM_Cmd(TIM5, ENABLE);}void TIM5_IRQHandler(void){{if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//捕获1发生捕获事件{duty_TIM5=TIM_GetCapture1(TIM5); //采集占空比if(TIM_GetCapture2(TIM5)>600)period_TIM5=TIM_GetCapture2(TIM5);CollectFlag_TIM5 = 0;}}TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位}复制代码
评论