极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: Malc

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

  [复制链接]
发表于 2013-10-15 18:05:11 | 显示全部楼层
嗯,人才 {:soso_e179:} 学习中
回复 支持 反对

使用道具 举报

发表于 2013-10-15 23:04:51 来自手机 | 显示全部楼层
编码器给个购买网址吧
回复 支持 反对

使用道具 举报

发表于 2013-10-16 16:21:45 | 显示全部楼层
楼主强贴,下载学习一下。
回复 支持 反对

使用道具 举报

发表于 2013-10-17 09:47:28 | 显示全部楼层
关注楼主很久了,这份资料非常有用,非常感谢。
回复 支持 反对

使用道具 举报

发表于 2013-10-30 20:53:26 | 显示全部楼层
lz做的好啊,我当时做的时候电机没加编码器,一直水平方向加速运动,好蛋疼
回复 支持 反对

使用道具 举报

发表于 2013-11-4 09:27:06 | 显示全部楼层
太酷了,我猜你是机械专业的吧?
回复 支持 反对

使用道具 举报

发表于 2013-11-24 14:41:14 | 显示全部楼层
你好! 为什么 我在Timer1.attachInterrupt( StepperEvent ); // attach the service routine here  这里编译 错误
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-24 17:35:40 | 显示全部楼层
电子侠 发表于 2013-11-24 14:41
你好! 为什么 我在Timer1.attachInterrupt( StepperEvent ); // attach the service routine here  这里编 ...

是不是没有装timerOne的库
回复 支持 反对

使用道具 举报

发表于 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[0]=armSpeedArr[1];
    armSpeedArr[1]=armSpeedArr[2];
    armSpeedArr[2]=armSpeed;
    armSpeed=mid(armSpeedArr[0],armSpeedArr[1],armSpeedArr[2]);
    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作为输出?


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

使用道具 举报

发表于 2013-11-28 18:02:15 | 显示全部楼层
我看你们摆杆的另一端绑了东西,我们压根没有另一端摆杆,原来最大的败笔就在这里,勉强做出4个要求
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-28 19:10:10 | 显示全部楼层
Ian 发表于 2013-11-28 17:58
if(speedTimer==5)
  {
    speedTimer=0;

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

使用道具 举报

发表于 2013-11-28 22:20:43 | 显示全部楼层
Malc 发表于 2013-11-28 19:10
这个pid是为了解决摆杆在保持平衡的状态下,摆臂会慢慢漂移然后平衡失败这个问题的,两个pid的关系是串联 ...

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

使用道具 举报

 楼主| 发表于 2013-11-29 11:57:58 | 显示全部楼层
Eternalve 发表于 2013-11-28 22:20
楼主  请问  平衡车的话  这样的串级控制也可以吗  输入输出是什么呢?

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

使用道具 举报

发表于 2013-12-21 20:03:22 | 显示全部楼层
Malc 发表于 2013-11-24 17:35
是不是没有装timerOne的库

你好!应该是没装的问题,要怎么装呢?
回复 支持 反对

使用道具 举报

发表于 2013-12-23 15:54:25 | 显示全部楼层
膜拜一下,控制的够精准啊,没试过感觉挺牛X的,呵呵
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 07:24 , Processed in 0.053548 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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