极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Malc

2013电子设计竞赛-旋转倒立摆-整体方案-2014.10.26更新

  [复制链接]
发表于 2014-7-19 19:00:04 | 显示全部楼层
本帖最后由 11yichengming 于 2014-7-20 18:04 编辑
Malc 发表于 2014-7-19 01:28
一个角度传感器可以实现倒立平衡的,但是会晃动,不会静止在一点,调平衡用PI,调试方式先调P再调I,这个 ...


请教下pid:我现在是得到了角度传感器的AD采样值,对应着0~±180°,摆在最高点是0°,最低点是±180°。error_p = (AD采样值 - 最高点的AD值);error_d = 两次采样前后的差;error_i = error_i + (error_p*timechange),其中timechange是采样周期,也可以说是固定时间,pid取值是正确的吧?还有你说你采样是一毫秒中断一次,我看了下你的代码,是一毫秒中断一次,但是是5毫秒采样一次并处理,后面我试了下,因为AD采样获取AD值,取个三四次的平均值就超过几毫秒了,,中断就乱了,我用的是STM32,照理处理速度应该跟得上的,不知道为什么原因?另外你的速度是怎么处理的呢?即得到了myspeed,怎么去处理? pid还不怎么太熟悉。每天刷网页等大神回复,不知可不可以私信加qq,每天最多问你两个问题,不多打扰,嘿嘿,谢谢。
    网上PID调节步骤说:
    a.确定比例增益P
确定比例增益P 时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0
(具体见PID的参数设定说明),使PID为纯比例调节。输入设定为系统允许的
最大值的60%~70%,由0逐渐加大比例增益P,直至系统出现振荡;再反过
来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时的比例增益P,
设定PID的比例增益P为当前值的60%~70%。比例增益P调试完成。
【不知道这段话是啥意思。。。】

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-22 02:24:57 | 显示全部楼层
11yichengming 发表于 2014-7-19 19:00
请教下pid:我现在是得到了角度传感器的AD采样值,对应着0~±180°,摆在最高点是0°,最低点是±180° ...

你的pid没错
我的代码确实是1ms一次中断,5次中断输出一次pid值,也就是说控制周期是5ms,你得保证你的所有操作的时间要小于控制周期时间,否则肯定会发生时序错乱,ad采样的时间一般都是可调的,采样精度与时间成正比,据我所知avr系列的ad时间一般为13us-250us,所以足够使用,stm的采样时间应该也不会那么长吧?你设置一下采样速度试试
得到了速度,就可以进行pid计算了,myspeed是pid输出值,也就是步进电机的转动频率,由于使用了两个pid,因此步进电机的速度=pid1+pid2,此外还要实现一些题目给定的功能,所以步进电机的速度还应该叠加上功能速度,所以步进电机的速度为setStepperSpeed(myspeed + tempSpSpeed+functionSpeed);
你摘抄的那段话是pid参数的调节步骤,这个步骤是用来确定p的值的,你直接试吧,跟着步骤做就明白什么意思了
回复 支持 反对

使用道具 举报

发表于 2014-7-22 08:54:28 | 显示全部楼层
本帖最后由 11yichengming 于 2014-7-22 09:05 编辑
Malc 发表于 2014-7-22 02:24
你的pid没错
我的代码确实是1ms一次中断,5次中断输出一次pid值,也就是说控制周期是5ms,你得保证你的所 ...


嗯。我想我应该明白了。前面的采样问题我已经解决了。
我现在在165°处放下,能够实现倒立,不过时间不长,能跟踪个一两秒吧,然后摆就朝一边倒下去了,我的电机怎么也跟不上摆倒下去的速度(电机是二三十块钱一个的直流电机)。杆子也换成很轻的那种了。不知PID能否调节好?
还有你现在使用的是两个PID,我知道其中一个是摆的角度的PID,还有一个应该是电机速度的PID吧?打算改成两个传感器来调试了,不然一个真心有点难以实现。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-22 10:59:43 | 显示全部楼层
11yichengming 发表于 2014-7-22 08:54
嗯。我想我应该明白了。前面的采样问题我已经解决了。
我现在在165°处放下,能够实现倒立,不过时间不 ...

电机的速度、力矩比较重要,杆子不是越轻越好,越轻越不稳定越容易震荡,可以在杆子最低端加点小配重,还有增加摆杆与摆臂直接的摩擦力,最后双闭环控制,就可以实现了
回复 支持 反对

使用道具 举报

发表于 2014-7-22 12:28:40 | 显示全部楼层
Malc 发表于 2014-7-22 10:59
电机的速度、力矩比较重要,杆子不是越轻越好,越轻越不稳定越容易震荡,可以在杆子最低端加点小配重,还 ...

嗯。准备买个编码器。
回复 支持 反对

使用道具 举报

发表于 2014-7-24 15:08:24 | 显示全部楼层
你好,我看了你的作品相当不错啊!!一直有个问题没有明白,你说两个pid的关系是串联(pid1的输入是(目标平衡点-当前角度),输出是步进速度,pid2的输入是(目标速度-步进速度),输出是目标平衡点),我这样理解不知道可以:第一个PID是控制电机的PWM作为输出,摆杆的角度值作为反馈输入,这个理解没问题。第二个PID是“目标平衡点”作为输出,控制电机的PWM波作为输入,这里的目标平衡点具体指的是最终平衡时的电机速度为0,还有角度刚好处于180°的状态,为什么这个可以作为输出呢??想了两天还是没明白,想你求教一下,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-7-25 00:51:26 | 显示全部楼层
话说为神马只要调PI啊,D呢D呢D呢D呢D呢D呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 02:35:39 | 显示全部楼层
崔新杰 发表于 2014-7-24 15:08
你好,我看了你的作品相当不错啊!!一直有个问题没有明白,你说两个pid的关系是串联(pid1的输入是(目标平 ...

可以这么理解,第一个pid用来解决摆杆倒立平衡的问题,第二个用来解决摆杆水平飘动的问题
假如只有第一个pid,摆杆确实能保持倒立,但是因为各种误差干扰,摆杆会往一个方向加速,当速度大于系统调节能力,摆杆就会倒下,因此需要另一个pid来进行速度的控制,控制方法有很多的,不一定要采用这种方法,我测试过很多种方式,比如两个pid并联叠加输出,但是效果很不好,最后采用了这个方法
第二个pid的原理,因为摆杆漂移的问题是因为误差的积累,导致角度增大,角度增大,会使速度进一步增大,最后倒下,所以可以这么解决:当角度增大的时候可以使目标平衡点反向偏移,此时pid1便会进行调节,使其往目标平衡点靠拢,从而抑制漂移,最终的效果就是摆杆会在某一点附近左右摆动,这也不是一个完美的解决方案,因为时间原因,只做到了这一步。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 02:39:07 | 显示全部楼层
wanglinma 发表于 2014-7-25 00:51
话说为神马只要调PI啊,D呢D呢D呢D呢D呢D呢?

原理不好解释,建议你看看一个叫“电磁组直立车模调试指南”的视频,如果用实践的方法,因为加了D效果反而很差,所以没加
回复 支持 反对

使用道具 举报

发表于 2014-7-28 09:01:38 | 显示全部楼层
特地注册个号来支持楼主。已经成功移植了。模型也是参考楼主的。但是电机和模型共振有点厉害,有什么方法可以改进。是不是我杆子有的是圆形的缘故,增加配重可以解决吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 13:53:17 | 显示全部楼层
Puppey 发表于 2014-7-28 09:01
特地注册个号来支持楼主。已经成功移植了。模型也是参考楼主的。但是电机和模型共振有点厉害,有什么方法可 ...

恭喜!
解决共振,首先底座要足够沉重,其次每个连接部分都要结实,第三就是把细分设置大一点,越大步进电机的低频振动越小
回复 支持 反对

使用道具 举报

发表于 2014-7-29 10:16:48 | 显示全部楼层
本帖最后由 11yichengming 于 2014-7-29 12:08 编辑
Malc 发表于 2014-7-28 02:35
可以这么理解,第一个pid用来解决摆杆倒立平衡的问题,第二个用来解决摆杆水平飘动的问题
假如只有第一个 ...


第二个PID我也不怎么理解,,看了你们说的。
第二个PID是根据电机度速度来调节的,我还是搞不清输入是什么,反馈又是什么?可以解释下吗?是不是输入为零呢(即平衡点的速度就是为零)?你这个没有用到电机旋转方向的判断?还是电机旋转方向不必要?我们买的编码器输出的是方波,一般的频率变化范围是0~300hz内,想要在五毫秒内测出频率,,不可能。。。
第一个PID的输入是倒立摆平衡点,反馈是当前值与平衡值之间的差,这个应该是确定的。
回复 支持 反对

使用道具 举报

发表于 2014-7-31 16:58:33 | 显示全部楼层
Malc 发表于 2014-7-28 02:35
可以这么理解,第一个pid用来解决摆杆倒立平衡的问题,第二个用来解决摆杆水平飘动的问题
假如只有第一个 ...

太感谢了,明白了!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-1 01:43:30 | 显示全部楼层
11yichengming 发表于 2014-7-29 10:16
第二个PID我也不怎么理解,,看了你们说的。
第二个PID是根据电机度速度来调节的,我还是搞不清输入是 ...

你的说法好像不太准确,你说的输入应该是目标值,反馈应该是测量值,输入值是测量值减目标值
所以第一个pid的输入=摆杆当前角度-目标角度(180°),输出=步进电机频率
第二个pid的输入=当前步进电机速度-目标速度(0),输出=平衡点(175°~185°)
另外,第二个pid会影响第一个pid,又由于我们只需要在保持平衡后才考虑静止,所以程序里,只在摆杆介于155~205°时才运行第二个pid
一般的编码器频率不会这么低吧,随便的光电编码盘都能满足需求的,不过我们用的编码器非常贵非常不错,绝对式编码器,电机方向需要判断,如果用增量式,需要正交编码确定方向
回复 支持 反对

使用道具 举报

发表于 2014-8-1 21:46:53 | 显示全部楼层
楼主你好,我想做旋转倒立摆,编码器决定用mini1024j的,但是在淘宝里没有找到想要的型号,还有电机的选则,我想用步进电机,但是具体哪一个型号的不知道怎么选择,你能发一个你在淘宝上到的这二种东西让我参考一下么?谢谢了,
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 16:20 , Processed in 0.047362 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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