呵呵 发表于 2013-10-15 18:05:11

嗯,人才 {:soso_e179:} 学习中

lmb312 发表于 2013-10-15 23:04:51

编码器给个购买网址吧

tingjie 发表于 2013-10-16 16:21:45

楼主强贴,下载学习一下。

天空树 发表于 2013-10-17 09:47:28

关注楼主很久了,这份资料非常有用,非常感谢。

奏光 发表于 2013-10-30 20:53:26

lz做的好啊,我当时做的时候电机没加编码器,一直水平方向加速运动,好蛋疼

Microsoft 发表于 2013-11-4 09:27:06

太酷了,我猜你是机械专业的吧?

电子侠 发表于 2013-11-24 14:41:14

你好! 为什么 我在Timer1.attachInterrupt( StepperEvent ); // attach the service routine here这里编译 错误

Malc 发表于 2013-11-24 17:35:40

电子侠 发表于 2013-11-24 14:41 static/image/common/back.gif
你好! 为什么 我在Timer1.attachInterrupt( StepperEvent ); // attach the service routine here这里编 ...

是不是没有装timerOne的库

Ian 发表于 2013-11-28 17:58:57

if(speedTimer==5)
{
    speedTimer=0;
////////Speed PID///////////////
    positionLast=position;
    lastSpeed=armSpeed;
    position=SSI(1);
   
    armSpeed=calcSpeed(position,positionLast);
    armSpeedArr=armSpeedArr;
    armSpeedArr=armSpeedArr;
    armSpeedArr=armSpeed;
    armSpeed=mid(armSpeedArr,armSpeedArr,armSpeedArr);
    if(abs(armSpeed)<=1)
   armSpeed=0;
   
    absPositionLast=absPosition;
    absPosition+=armSpeed;
   
    sp_error_p = setSpeed-armSpeed;
    sp_error_d = armSpeed-lastSpeed;
    sp_error_i = sp_error_i + sp_error_p;
    sp_error_i=constrain(sp_error_i,-1000,1000);
   
   
    tempSpSpeed = -(np*sp_error_p/10.0 + nd*sp_error_d/10.0 + ni*sp_error_i/100.0);
    tempSpSpeed=constrain(tempSpSpeed,-delta,delta);
    //if(PIDSign==false||SpeedPIDSign==false||abs(degree)>155)
    if(PIDSign==true&&SpeedPIDSign==true&&abs(degree)>155)
    {
      setPoint+=tempSpSpeed;
      if(setPoint>originPoint+maxDelta)
       setPoint=originPoint+maxDelta;
      else if(setPoint<originPoint-maxDelta)
       setPoint=originPoint-maxDelta;
    }
    else if(SpeedPIDSign==true)
    {
      setPoint=originPoint;
    }
    }
这是不是就是步进的闭环?
控制在+-90度之间?

什么叫"速度做为被控量,平衡点是180+-8作为输出?


我们当时用的伺服,可是没有考虑转轴杆子要左右对称导致转动惯量过大,惯性过大,伺服电机不稳

Ian 发表于 2013-11-28 18:02:15

我看你们摆杆的另一端绑了东西,我们压根没有另一端摆杆,原来最大的败笔就在这里,勉强做出4个要求

Malc 发表于 2013-11-28 19:10:10

Ian 发表于 2013-11-28 17:58 static/image/common/back.gif
if(speedTimer==5)
{
    speedTimer=0;


这个pid是为了解决摆杆在保持平衡的状态下,摆臂会慢慢漂移然后平衡失败这个问题的,两个pid的关系是串联(pid1的输入是(目标平衡点-当前角度),输出是步进速度,pid2的输入是(目标速度-步进速度),输出是目标平衡点),不是叠加,叠加方案没调出来。。
当你的摆杆很重的时候,有必要在摆臂另一端加配重平衡,我们的杆子很轻,去的配重也完全没问题,因为步进的力矩很大
还有,你们用的伺服是几百块的成品,还是普通电机+编码器,如果是后者的话,很不好控制,4天比赛浪费了1天在直流电机上。。

Eternalve 发表于 2013-11-28 22:20:43

Malc 发表于 2013-11-28 19:10 static/image/common/back.gif
这个pid是为了解决摆杆在保持平衡的状态下,摆臂会慢慢漂移然后平衡失败这个问题的,两个pid的关系是串联 ...

楼主请问平衡车的话这样的串级控制也可以吗输入输出是什么呢?   

Malc 发表于 2013-11-29 11:57:58

Eternalve 发表于 2013-11-28 22:20 static/image/common/back.gif
楼主请问平衡车的话这样的串级控制也可以吗输入输出是什么呢?

平衡车没试过串联控制,我用的是基于卓晴老师的方案,你可以看看他写的教程,叫 电磁组直立行车参考设计方案

电子侠 发表于 2013-12-21 20:03:22

Malc 发表于 2013-11-24 17:35 static/image/common/back.gif
是不是没有装timerOne的库

你好!应该是没装的问题,要怎么装呢?

风笛丸 发表于 2013-12-23 15:54:25

膜拜一下,控制的够精准啊,没试过感觉挺牛X的,呵呵
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: 2013电子设计竞赛-旋转倒立摆-整体方案-2014.10.26更新