微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 增量式PID的stm32实现,整定过程

增量式PID的stm32实现,整定过程

时间:11-28 来源:互联网 点击:

  1. GPIO_InitTypeDef GPIO_InitStructure;//IO口配置结构体
  2. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//Open TIM4 clock
  3. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//open gpioB clock
  4. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//GPIO 7
  5. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
  6. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  7. GPIO_Init(GPIOB, &GPIO_InitStructure);
  8. TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  9. TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  10. TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  11. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
  12. TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  13. NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  14. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  15. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  16. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  17. NVIC_Init(&NVIC_InitStructure);
  18. TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;
  19. TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  20. TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  21. TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;
  22. TIM4_ICInitStructure.TIM_ICFilter = 0x3;//Filter:过滤
  23. TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure);//PWM输入配置
  24. TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);//选择有效输入端
  25. TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);//配置为主从复位模式
  26. TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);//启动定时器的被动触发
  27. TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE);//中断配置
  28. TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
  29. TIM_Cmd(TIM4, ENABLE);
  30. }
  31. void TIM4_IRQHandler(void)
  32. {
  33. if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)//捕获1发生捕获事件
  34. {
  35. duty_TIM4=TIM_GetCapture1(TIM4); //采集占空比
  36. if(TIM_GetCapture2(TIM4)>600)period_TIM4=TIM_GetCapture2(TIM4);//简单的处理
  37. CollectFlag_TIM4 = 0;
  38. }
  39. TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); //清除中断标志位
  40. }
  41. void TIM1_PWMINPUT_INIT(u16 arr,u16 psc)
  42. {
  43. TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;//TIM的初始化结构体
  44. NVIC_InitTypeDef NVIC_InitStructure;//中断配置
  45. TIM_ICInitTypeDefTIM1_ICInitStructure;//PWM配置结构体
  46. GPIO_InitTypeDef GPIO_InitStructure;//IO口配置结构体
  47. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//Open TIM1 clock
  48. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//open gpioE clock
  49. GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); //Timer1完全重映射TIM1_CH2->PE11
  50. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//GPIO 11
  51. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
  52. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  53. GPIO_Init(GPIOE, &GPIO_InitStructure);
  54. TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  55. TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  56. TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  57. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式
  58. TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  59. NVIC_InitStructure.NVIC_IRQChannel =TIM1_CC_IRQn;//TIM1捕获中断
  60. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  61. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  62. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  63. NVIC_Init(&NVIC_InitStructure);
  64. TIM1_ICInitStructure.TIM_Channel = TIM_Channel_2;
  65. TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  66. TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  67. TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_div1;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top