智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2007|回复: 3
打印 上一主题 下一主题

北京科技大学的舵机控制

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
41
威望
23
贡献
12
兑换币
10
注册时间
2015-2-3
在线时间
3 小时
毕业学校
西南
跳转到指定楼层
1#
发表于 2015-4-10 15:45:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在调舵机的程序的时候,
pp->loca_PreU = pp->loca_Kp * loca_error + pp->loca_Ki * pp->loca_PreIntegral + pp->loca_Kd * loca_derror;// 位置PID算法
是直接把pp->loca_PreU/1000变成PWM吗,但是pp->loca_PreU/1000值不确定,该怎样对应上PWM呢,

回复

使用道具 举报

1

主题

6

帖子

0

精华

注册会员

Rank: 2

积分
95
威望
62
贡献
17
兑换币
20
注册时间
2015-4-4
在线时间
8 小时
毕业学校
湖南理工学院
2#
发表于 2015-4-13 17:17:03 | 只看该作者
同问!都没资料谈到这个问题,懂的也没人来解释一下,郁闷。。。
回复 支持 反对

使用道具 举报

2

主题

22

帖子

0

精华

高级会员

Rank: 4

积分
552
威望
255
贡献
137
兑换币
158
注册时间
2015-5-1
在线时间
80 小时
毕业学校
郑州科技学院
3#
发表于 2015-6-20 15:43:10 | 只看该作者
float32 PID_realize_D(float32 speed/*输入值,偏差*/)
{
pid_D.err=speed;
pid_D.integral+=pid_D.err;
pid_D.PID_output=pid_D.Kp*pid_D.err+pid_D.Ki*pid_D.integral+pid_D.Kd*(pid_D.err-pid_D.err_last);
pid_D.err_last=pid_D.err;
if(pid_D.PID_output>=30)  pid_D.PID_output=30;
if(pid_D.PID_output<=-30)  pid_D.PID_output=-30;
return pid_D.PID_output;
}
setServo1((int8)(PID_realize_D(-offset)));//舵机PID控制
舵机控制一般用PD控制,加上空间微分(就是轨迹的变化方向),效果更好,不用除去1000,通过PID参数都可以让它自己匹配了,但要设置舵机的左右限制
回复 支持 反对

使用道具 举报

6

主题

227

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4239
威望
1991
贡献
1328
兑换币
1288
注册时间
2013-1-12
在线时间
460 小时
4#
发表于 2015-6-20 17:13:49 | 只看该作者
北科的公式里面,根据我的理解,之所前面要用很大的整型数据,算出来要除以1000什么的,是为了不在计算中引入浮点型数据的计算,这一点其实是很有必要的。不过你说 “但是pp->loca_PreU/1000值不确定,该怎样对应上PWM呢” 这个话,我就莫名其妙的想笑,这都快七月了,你还在说胡话,睡得挺深的啊。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 19:54 , Processed in 0.075142 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表