标题:
STM32F103C8T6单片机PID控制程序
[打印本页]
作者:
lmalma
时间:
2023-3-12 21:43
标题:
STM32F103C8T6单片机PID控制程序
适合于 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
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1