适合于 STM32 单片机 型号 F103C8T6 PID控制程序
单片机源程序如下:
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "PWM.h"
- #include "stm32f10x_tim.h"
- #include "key.h"
- #include "pid.h"
- //捕获TIM4通道二PB7的频率和占空比
- //PA8输出PWM驱动脉冲
- //按键一设置初始转速为3000;按键二 增加1000转速 按键3 降低1000转速
- extern void TIM3_PWM_Init(u16 arr,u16 psc);
- extern void TIM4_PWMINPUT_INIT(u16 arr,u16 psc);
- extern u16 PWM0_TEMP;
- extern u16 period;
- extern u16 duty ;
- extern u8 CollectFlag ;
- float SetSpeed; //定义设定值
- float ActualSpeed; //定义实际值
- float err; //定义偏差值
- float err_next; //定义上一个偏差值
- float err_last; //定义最上前的偏差值
- float incrementSpeed;
- float Kp,Ki,Kd;
- unsigned int rpm_set;
- int main(void)
- {
- u8 b,c;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- PID_init();
- KEY_Init();
- SystemInit();
- delay_init(); //延时初始化
- NVIC_Configuration(); //中断配置
- uart_init(9600); //串口初始化
- DIR_Init();
- TIM4_PWMINPUT_INIT(0xffff,72-1); //pwm输入初始化以1M的频率捕捉
- TIM1_PWM_Init(1000-1,20); //pwm频率调节
- //TIM_SetCompare1(TIM1,2000); //初始转速设定
- delay_ms(300);
- delay_ms(1000);
- rpm_set=3000; //设转速给定
- TIM3_Int_Init(50000,72-1); //pid运算进中断速率设置
- //TIM_SetCompare1(TIM1,800);
- while(1)
- {
- b=KEY_Scan(0);
- delay_ms(100);
- if(1)
- { //USART_SendData(USART1,'a');
- //USART_SendData(USART1,(u8)err);
- // printf("duty = %d%% \r\n",duty*100/period); //打印占空比
- // printf("s = %dr/min\r\n",3750000/period);//打印周期另一种叫法
-
- if(period<1.0)
- printf("#%f",0.0);
- else printf("n=%d\n",3750000/period); //打印速度值
-
- }
- if(b==1) rpm_set=3000; //设转速
-
- if(b==2) rpm_set=rpm_set+1000;
- if(b==3) rpm_set=rpm_set-1000;
- if(rpm_set>=9000) rpm_set=9000;
- if(rpm_set<=1000) rpm_set=1000;
-
- }
- }
复制代码
Keil代码下载:
STM32F103C8T6PID控制程序.7z
(198.01 KB, 下载次数: 67)
|