首页 » 机器人 » C小程序 » pid
admin
聪明的教授 Lv153    
课程作者
pid
已学习:1031   提交:0   发表于2022-01-05 10:07:19
下载编号:94607

##PID## pid

#include
struct _pid {
float SetSpeed; //定义设定值
float ActualSpeed; //定义实际值
float err; //定义偏差值
float err_last; //定义上一个偏差值
float Kp, Ki, Kd; //定义比例、积分、微分系数
float voltage; //定义电压值(控制执行器的变量)
float integral; //定义积分值
}pid;

// pid初始化
void PID_init() {

printf("PID_init begin \n");
pid.SetSpeed = 0.0;
pid.ActualSpeed = 0.0;
pid.err = 0.0;
pid.err_last = 0.0;
pid.voltage = 0.0;
pid.integral = 0.0;
pid.Kp = 0.2;
pid.Ki = 0.015;
pid.Kd = 0.2;
printf("PID_init end \n");
}

// 算法
float PID_realize(float speed) {
pid.SetSpeed = speed;
pid.err = pid.SetSpeed - pid.ActualSpeed;
pid.integral += pid.err;
pid.voltage = pid.Kp * pid.err + pid.Ki * pid.integral + pid.Kd * (pid.err - pid.err_last);
pid.err_last = pid.err;
pid.ActualSpeed = pid.voltage * 1.0;
return pid.ActualSpeed;
}


//主程序
int main() {

printf("System begin \n");
PID_init();
int count = 0;
while (count < 1000)
{
float speed = PID_realize(200.0);
printf("%f\n", speed);
count++;
}
return 0;
}

结语:上面这个小程序是不是很有趣嘞?还有更多的小程序供你探索哦!

优唯思教育机器人,你所有的问题在我这儿都能得到解决! 
学习列表
默认   热门   正序   倒序
暂无班级信息
等级:0级
优币:
好奇少年:
最新作业
左邻右舍
{"竞赛编程":"http://www.uwis.cn/uide/","课程编辑":"http://www.135editor.com/","成信大":"http://www.cuit.edu.cn","老版优唯思":"http://old.uwis.cn","图文发帖":"http://yz.uwis.cn/index.php?c=edit&type=read&pyteditorload=no"}

©2015 - 2024 优唯思编程   |   Copyright 2015 All Rights 成都优威骐骥教育科技有限公司  |  网站备案号:蜀ICP备16015136号

已有0次打赏