增量式PID的stm32实现,整定过程_第1页
增量式PID的stm32实现,整定过程_第2页
增量式PID的stm32实现,整定过程_第3页
增量式PID的stm32实现,整定过程_第4页
增量式PID的stm32实现,整定过程_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【分享】增量式PID的stm32实现,整定过程 · 发消息1 感谢大家最近的帮忙,让我顺利做完增量PID功能,虽然PID不是什么牛逼的东西,但是真心希望以后刚刚接触这块的人能尽快进入状态。也下面我分享一下近期的这些工作吧。欢迎大家批评指点 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异。资料上比较多的是:还有一种是:感觉第二种的Kp Ki Kd比较清楚,更好理解,下面介绍的就以第二种来吧。(比例、积分、微分三个环节的作用这里就详细展开,百度会有很多)硬件部分:控制系统的控制对象是4个空心杯直流电机,电机带光电编

2、码器,可以反馈转速大小的波形。电机驱动模块是普通的L298N模块。芯片型号,STM32F103ZET6软件部分:PWM输出:TIM3,可以直接输出4路不通占空比的PWM波PWM捕获:STM32除了TIM6 TIM7其余的都有捕获功能,使用TIM1 TIM2 TIM4 TIM5四个定时器捕获四个反馈信号PID的采样和处理:使用了基本定时器TIM6,溢出时间就是我的采样周期,理论上T越小效果会越好,这里我取20ms,依据控制对象吧,如果控制水温什么的采样周期会是几秒几分钟什么的。上面的PWM输出和捕获关于定时器的设置都有例程,我这里是这样的:TIM3输出四路PWM,在引脚 C 的 GPIO_Pin

3、_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9输出四路捕获分别是TIM4  TIM1  TIM2  TIM5   ,对应引脚是:  PB7 PE11 PB3 PA1高级定时器tim1的初始化略不同,它的中断”名称“和通用定时器不同,见代码:1. /*功能名称IM3_PWM_Init(u16 arr,u16 psc)2.         描述      TIM3产生四路PWM3. *

4、/4. void TIM3_PWM_Init(u16 arr,u16 psc)5.   6.         GPIO_InitTypeDef GPIO_InitStructure;7.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;8.         TIM_OCInitTypeDef  TIM_OCInitStructure;9.   &

5、#160;     10.11.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC  | RCC_APB2Periph_AFIO, ENABLE);  /使能GPIO外设和AFIO复用功能模块时钟使能13.         14. 

6、60; GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); /Timer3全映射 GPIOC-> 6,7,8,9                                                

7、0;                            /用于TIM3的CH2输出的PWM通过该LED显示15.16.    /设置该引脚为复用输出功能,输出TIM3 CH1 CH2 CH3 CH4 的PWM脉冲波形17.         GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6 | GPIO_Pin_7

8、| GPIO_Pin_8 | GPIO_Pin_9; /初始化GPIO18.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  /复用推挽输出19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;20.         GPIO_Init(GPIOC, &GPIO_InitStructure);21.   &

9、#160;     GPIO_ResetBits(GPIOC,GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);/默认电机使能端状态:不使能 22.23.         TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值24.         TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除

10、数的预分频值  这里是72分频,那么时钟频率就是1M 25.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim26.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  /TIM向上计数模式27.         TIM_TimeBaseInit(TI

11、M3, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位28.         29.          30.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; /选择定时器模式:TIM脉冲宽度调制模式131.         TIM_OCInitSt

12、ructure.TIM_OutputState = TIM_OutputState_Enable; /比较输出使能32.         TIM_OCInitStructure.TIM_Pulse = 0; /设置待装入捕获比较寄存器的脉冲值33.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /输出极性:TIM输出比较极性高34.         35.     

13、60;   TIM_OC1Init(TIM3, &TIM_OCInitStructure);  /根据TIM_OCInitStruct中指定的参数初始化外设TIMx36.         TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  /使能TIMx在CCR1上的预装载寄存器37.         38.         39.     

14、0;   TIM_OC2Init(TIM3, &TIM_OCInitStructure);  /根据TIM_OCInitStruct中指定的参数初始化外设TIMx40.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  /使能TIMx在CCR2上的预装载寄存器41.         42.         TIM_OC3Init(TIM3, &

15、TIM_OCInitStructure);  /根据TIM_OCInitStruct中指定的参数初始化外设TIMx43.         TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  /使能TIMx在CCR3上的预装载寄存器44.         45.         TIM_OC4Init(TIM3, &TIM_OCInitStructure);  

16、/根据TIM_OCInitStruct中指定的参数初始化外设TIMx46.         TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  /使能TIMx在CCR4上的预装载寄存器47.         48.         TIM_ARRPreloadConfig(TIM3, ENABLE); /使能TIMx在ARR上的预装载寄存器49.         50

17、.51.         TIM_Cmd(TIM3, ENABLE);  /使能TIMx外设52.53.54. 55.56.57.58. /*功能名称TIM4_PWMINPUT_INIT(u16 arr,u16 psc)59.   描述      PWM输入初始化*/60.61. void TIM4_PWMINPUT_INIT(u16 arr,u16 psc)62. 63.   64.         TIM_Tim

18、eBaseInitTypeDef  TIM_TimeBaseStructure;        /TIM的初始化结构体65.         NVIC_InitTypeDef NVIC_InitStructure;                        /中断配置66.         TIM_ICInitTypeDef 

19、; TIM4_ICInitStructure;                 /TIM4  PWM配置结构体67.         GPIO_InitTypeDef GPIO_InitStructure;                         /IO口配置结构体68.69. &

20、#160;       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);     /Open TIM4 clock70.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  /open gpioB clock71.72.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; 

21、            /GPIO 773.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          /上拉输入74.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;75.   GPIO_Init(GPIOB, &GPIO_InitStructure);76.77.   

22、60;     TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值  78.         TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值  79.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tc

23、k_tim80.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  /TIM向上计数模式81.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位82.83.         84.    

24、    /*配置中断优先级*/85.         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;                     86.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;87.   NVIC_InitStructu

25、re.NVIC_IRQChannelSubPriority = 1;88.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;89.   NVIC_Init(&NVIC_InitStructure);90.91.   TIM4_ICInitStructure.TIM_Channel = TIM_Channel_2;                   92. &

26、#160; TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       93.   TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   94.   TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 95.   TIM4_ICInitStructure.T

27、IM_ICFilter = 0x3;   /Filter:过滤96.97.   TIM_PWMIConfig(TIM4, &TIM4_ICInitStructure);     /PWM输入配置           98.   TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2);     /选择有效输入端   &#

28、160;    99.   TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset);  /配置为主从复位模式100.   TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发                        

29、               101.   TIM_ITConfig(TIM4, TIM_IT_CC2|TIM_IT_Update, ENABLE);          /中断配置102.   TIM_ClearITPendingBit(TIM4, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位103.   TIM_Cmd(TIM4, ENABLE);&

30、#160;   104. 105.106.107. void TIM4_IRQHandler(void)108. 109.110.                 if (TIM_GetITStatus(TIM4, TIM_IT_CC2) != RESET)/捕获1发生捕获事件111.                                

31、 112.                                 duty_TIM4    =   TIM_GetCapture1(TIM4);          /采集占空比                113.    

32、60;           if  (TIM_GetCapture2(TIM4)>600)         period_TIM4        =        TIM_GetCapture2(TIM4);/简单的处理114.                      

33、          CollectFlag_TIM4 = 0;                        115.                 116.                 TIM_ClearITPendingBit(TIM4, TIM_IT_CC2

34、|TIM_IT_Update); /清除中断标志位117. 118.119.120. /*功能名称TIM1_PWMINPUT_INIT(u16 arr,u16 psc)121.   描述      PWM输入初始化*/122.123. void TIM1_PWMINPUT_INIT(u16 arr,u16 psc)124. 125.   126.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

35、        /TIM的初始化结构体127.         NVIC_InitTypeDef NVIC_InitStructure;                        /中断配置128.         TIM_ICInitTypeDef  TIM1_ICInitStructure;     

36、            /PWM配置结构体129.         GPIO_InitTypeDef GPIO_InitStructure;                         /IO口配置结构体130.131.         RCC_APB2PeriphClockCmd(RCC_APB2Per

37、iph_TIM1, ENABLE);     /Open TIM1 clock132.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);  /open gpioE clock133.    GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); /Timer1完全重映射  TIM1_CH2->PE11        134.

38、        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;             /GPIO 11135.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;          /上拉输入136.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50

39、MHz;137.   GPIO_Init(GPIOE, &GPIO_InitStructure);138.139.         TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值  140.         TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值  141.  

40、       TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim142.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  /TIM向上计数模式143.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /根据TIM_TimeB

41、aseInitStruct中指定的参数初始化TIMx的时间基数单位144.145.         146.         /*配置中断优先级*/147.   NVIC_InitStructure.NVIC_IRQChannel =  TIM1_CC_IRQn;   /TIM1捕获中断                    &

42、#160; 148.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;149.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;150.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;151.   NVIC_Init(&NVIC_InitStructure);152.153.   TIM1_ICInitStruc

43、ture.TIM_Channel = TIM_Channel_2;                   154.   TIM1_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       155.   TIM1_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

44、60;  156.   TIM1_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 157.   TIM1_ICInitStructure.TIM_ICFilter = 0x03;   /Filter:过滤158.159.   TIM_PWMIConfig(TIM1, &TIM1_ICInitStructure);     /PWM输入配置        &#

45、160;  160.   TIM_SelectInputTrigger(TIM1, TIM_TS_TI2FP2);     /选择有效输入端        161.   TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset);  /配置为主从复位模式162.   TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMo

46、de_Enable);/启动定时器的被动触发                                       163. / TIM_ITConfig(TIM1, TIM_IT_CC2|TIM_IT_Update, ENABLE);          /中断配置164.

47、   TIM_ITConfig(TIM1, TIM_IT_CC2, ENABLE); /通道2 捕获中断打开165.   /TIM_ClearITPendingBit(TIM1, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位166.   TIM_Cmd(TIM1, ENABLE);    167. 168.169.170. void TIM1_CC_IRQHandler(void)171. 172.173.         174.   &

48、#160;             if (TIM_GetITStatus(TIM1, TIM_IT_CC2) != RESET)/捕获1发生捕获事件175.                                 176.                     

49、60;           duty_TIM1    =   TIM_GetCapture1(TIM1);          /采集占空比                177.                           

50、; if  (TIM_GetCapture2(TIM1)>600)         period_TIM1        =        TIM_GetCapture2(TIM1);178.                                 CollectF

51、lag_TIM1 = 0;179.                                 180.                 181.                 TIM_ClearITPendingBit(TIM1, TIM_IT_CC2|TIM_IT_Up

52、date); /清除中断标志位182. 183.184.185. /*功能名称TIM2_PWMINPUT_INIT(u16 arr,u16 psc)186.   描述      PWM输入初始化*/187.188. void TIM2_PWMINPUT_INIT(u16 arr,u16 psc)189. 190.   191.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  

53、60;     /TIM的初始化结构体192.         NVIC_InitTypeDef NVIC_InitStructure;                        /中断配置193.         TIM_ICInitTypeDef  TIM2_ICInitStructure;        &#

54、160;        /TIM2  PWM配置结构体194.         GPIO_InitTypeDef GPIO_InitStructure;                         /IO口配置结构体195.196.         RCC_APB1PeriphClockCmd(RCC_A

55、PB1Periph_TIM2, ENABLE);     /Open TIM2 clock197. / RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);  /open gpioB clock198. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  /使能GPIO外设和AFIO复用功能模块时钟199. GPIO_PinRemapCon

56、fig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);          /关闭JTAG200.         GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); /Timer2完全重映射  TIM2_CH2->PB3201.202.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;   

57、          /GPIO 3203.         GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_IPU;          /浮空输入 上拉输入204.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;205.        

58、 GPIO_Init(GPIOB, &GPIO_InitStructure);206.207.         TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值  208.         TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值  209.        

59、; TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim210.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  /TIM向上计数模式211.         TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初

60、始化TIMx的时间基数单位212.213.         214.         /*配置中断优先级*/215.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;                     216.   NVIC_InitStructure

61、.NVIC_IRQChannelPreemptionPriority = 1;217.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;218.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;219.   NVIC_Init(&NVIC_InitStructure);220.221.   TIM2_ICInitStructure.TIM_Channel = TIM_Channel_2;  &

62、#160;                222.   TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;       223.   TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   224.   TIM2_ICInitStr

63、ucture.TIM_ICPrescaler = TIM_ICPSC_DIV1; 225.   TIM2_ICInitStructure.TIM_ICFilter = 0x3;   /Filter:过滤226.227.   TIM_PWMIConfig(TIM2, &TIM2_ICInitStructure);     /PWM输入配置           228.   TIM_Selec

64、tInputTrigger(TIM2, TIM_TS_TI2FP2);     /选择有效输入端        229.   TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);  /配置为主从复位模式230.   TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发    

65、                                  231.   TIM_ITConfig(TIM2, TIM_IT_CC2|TIM_IT_Update, ENABLE);          /中断配置232.   TIM_ClearITPendingB

66、it(TIM2, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位233.   TIM_Cmd(TIM2, ENABLE);    234. 235.236.237. void TIM2_IRQHandler(void)238. 239.         240.                 if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)/捕获1发生捕获事件241

67、.                                 242.                                 duty_TIM2    =   TIM_GetCapture1(TIM2);   &#

68、160;      /采集占空比                243.                            if  (TIM_GetCapture2(TIM2)>600)         period_TIM2   

69、;     =        TIM_GetCapture2(TIM2);244.                                 CollectFlag_TIM2 = 0;245.                          

70、                       246.                 247.                 TIM_ClearITPendingBit(TIM2, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位248. 249.250. /*功能名称TIM5_PWMINPUT_INI

71、T(u16 arr,u16 psc)251.   描述      PWM输入初始化*/252.253. void TIM5_PWMINPUT_INIT(u16 arr,u16 psc)254. 255.   256.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;        /TIM的初始化结构体257.       &

72、#160; NVIC_InitTypeDef NVIC_InitStructure;                        /中断配置258.         TIM_ICInitTypeDef  TIM5_ICInitStructure;                 /TIM4  PW

73、M配置结构体259.         GPIO_InitTypeDef GPIO_InitStructure;                         /IO口配置结构体260.261.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);     /Open T

74、IM4 clock262.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  /open gpioB clock263.264.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;             /GPIO 1265.   GPIO_InitStructure.GPIO_Mode = &

75、#160;GPIO_Mode_IPU;          /浮空输入 上拉输入266.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;267.   GPIO_Init(GPIOA, &GPIO_InitStructure);268.269.         TIM_TimeBaseStructure.TIM_Period = arr; /设置在下一个更新事件装入活动的自动重装载寄存器周期的值&

76、#160; 270.         TIM_TimeBaseStructure.TIM_Prescaler =psc; /设置用来作为TIMx时钟频率除数的预分频值  271.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割:TDTS = Tck_tim272.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_Cou

77、nterMode_Up;  /TIM向上计数模式273.         TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); /根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位274.275.         276.         /*配置中断优先级*/277.         NVIC_InitStructure.NVI

78、C_IRQChannel = TIM5_IRQn;                     278.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;279.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;280.   NVIC_InitStructure.NVIC_IR

79、QChannelCmd = ENABLE;281.   NVIC_Init(&NVIC_InitStructure);282.283.   TIM5_ICInitStructure.TIM_Channel = TIM_Channel_2;                   284.   TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;&

80、#160;      285.   TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;   286.   TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; 287.   TIM5_ICInitStructure.TIM_ICFilter = 0x3;   /Filter:过滤288.289.   TIM_PWM

81、IConfig(TIM5, &TIM5_ICInitStructure);     /PWM输入配置           290.   TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2);     /选择有效输入端        291.   TIM_SelectSlaveMode(TIM5,

82、TIM_SlaveMode_Reset);  /配置为主从复位模式292.   TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable);/启动定时器的被动触发                                       

83、293.   TIM_ITConfig(TIM5, TIM_IT_CC2|TIM_IT_Update, ENABLE);          /中断配置294.   TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位295.   TIM_Cmd(TIM5, ENABLE);    296. 297.298.299. void TIM5_IRQHandler(void)300. 301

84、.         302.                 if (TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)/捕获1发生捕获事件303.                                 304.         &#

85、160;                       duty_TIM5    =   TIM_GetCapture1(TIM5);          /采集占空比                305.               

86、60;         if  (TIM_GetCapture2(TIM5)>600)         period_TIM5        =        TIM_GetCapture2(TIM5);306.                          

87、       CollectFlag_TIM5 = 0;307.                                                 308.                 309.     

88、0;           TIM_ClearITPendingBit(TIM5, TIM_IT_CC2|TIM_IT_Update); /清除中断标志位310. 311.复制代码PID部分:准备部分:先定义PID结构体:1.2. typedef struct 3. 4. int setpoint;/设定目标5. int sum_error;/误差累计6. float proportion ;/比例常数7. float integral ;/积分常数8. float derivative;/微分常数9. int last_error;/e-110

89、. int prev_error;/e-211. PIDtypedef;复制代码这里注意一下成员的数据类型,依据实际需要来定的。在文件中定义几个关键变量:1. float  Kp =     0.32   /比例常数2. float  Ti =                0.09 ; /积分时间常数3. float Td =                0.0028 ;  /微分时间常数4. #define T                  0.02 /采样周期5. #define Ki     Kp*(T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论