適合于 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)
2023-3-13 00:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|