43039|82

12

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

毕业多年的我也来做做旋转倒立摆 [复制链接]

 
新注册贵论坛,首次发帖,如有规则或措辞不当之处还请群里大佬海涵。
俺在05年和07年参加过2次国赛,可以说对这个比赛有种莫名的感情,今年9月份,我小孩刚出生。
上网闲逛看见又开始了2年一度的国赛,其中还有个倒立摆的题目。于是为了预防老年痴呆,动手也做了个。
效果马马虎虎,主要是为我下一步的自悬停火箭热热身。借此也纪念一下8年前我的参赛队友,毕业后各奔东西
联系甚少,只能祝他们各项顺利,生活稳如倒立摆。

有兴趣的朋友可以看看下面的视频
第一个视频是只加了速度控制环的,稳摆时可以匀速旋转。

第二个视频是速度环加位置环共同控制,可以实现定点稳摆。


方案概述:
一、驱动电机:由于老婆大人不准设小金库,所以俺只能买了二手的57步进电机,伺服谐波减速电机这货就不敢想了。
PS,看了看今年比赛的同学们,貌似很多都失败在电机选型上,这不能怪同学们,其实是现代大学教育模式下学生工程经验缺乏导致的。
对于这个倒立摆的应用,电机选型有几个必须保证的要点:一是变速平滑,控速精密;二是高扭矩;三是启动死区小;四是机械间隙小。其实能满足这几个条件的就2种电机,1步进电机,2空心杯谐波减速伺服电机。
同时,为了保证整个系统有足够的刚度和精密的配合,所有机械部分全部为数控CNC成型。
二、控制量:什么拉格朗日我不懂,但通过牛2定律的简单推导,可以得到控制量为横杆的角加速度,这次看了,很多用步进电机的同学错误的选择横杆角位移为控制量,所以导致后面怎么调都是抖的。
三、稳摆算法,其实我想说,不是算法越刁钻效果就越好的,对于这个应用,单纯的PD调节就足够了。
更多设计方法,楼后继续补充,欢迎大刀吐槽。

[ 本帖最后由 ehco 于 2013-10-2 11:55 编辑 ]
此帖出自电子竞赛论坛

最新回复

请问一下两个环的输出是直接相加然后给电机吗?  详情 回复 发表于 2017-7-31 20:30

点评

赞一个!:carnation: :carnation: 我做的这题啊!!  详情 回复 发表于 2013-10-2 12:26

赞赏

5

查看全部赞赏

点赞 关注(9)
 
 

回复
举报

437

帖子

0

TA的资源

五彩晶圆(初级)

推荐
 

这个NB~
此帖出自电子竞赛论坛

点评

朋友你好 你能指导我一下吗  详情 回复 发表于 2015-7-11 17:34
楼主的硬件可否分享一下  详情 回复 发表于 2013-11-23 21:51
个人签名
 
 
 

回复

577

帖子

9

TA的资源

纯净的硅(中级)

沙发
 

回复 楼主ehco 的帖子

赞一个!:carnation: :carnation: 我做的这题啊!!
此帖出自电子竞赛论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
继续
角度传感器:我选用的是电位器式绝对值编码器,当然不是单纯的电位器,其内部是光栅结构的,只是输出的数据为电压量而已。在0-360度的范围内,此编码器具有良好的线性及定位精度(12位)。这个传感器重量尺寸越小越好,启动扭矩越小越好。
这里值得一提的是,貌似很多同学都为这个编码器的引线头疼,殊不知有个东西叫导电滑环,自制或购买成品都能解决您引线缠绕之苦。

控制器:这里用了STM32的芯片配合CPLD完成,前者主要完成ADC转换和大量的浮点控制算法,后者主要完成一些高速并行的逻辑处理。
此帖出自电子竞赛论坛

点评

请问楼主,我经常看到有人用ARM和CPLD一起做东西的,我想请教一下,CPLD不是用vHDL或者vialog语言编程序吗,两者是如何结合到一起的呢,就是两者在一起弄该怎么弄呢?楼主能详细说一下吗,谢谢  详情 回复 发表于 2013-10-3 07:26
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

4
 
原来   这个      叫         倒立摆
此帖出自电子竞赛论坛
 
 
 

回复

19

帖子

1

TA的资源

一粒金砂(中级)

5
 
表示楼主工程经验相当丰富啊,学习了。
此帖出自电子竞赛论坛
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

7
 
世界上的牛人这么多,为什么我不是其中一个
此帖出自电子竞赛论坛
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

8
 

回复 板凳ehco 的帖子

请问楼主,我经常看到有人用ARM和CPLD一起做东西的,我想请教一下,CPLD不是用vHDL或者vialog语言编程序吗,两者是如何结合到一起的呢,就是两者在一起弄该怎么弄呢?楼主能详细说一下吗,谢谢
此帖出自电子竞赛论坛

点评

您好,朋友。ARM和CPLD结合是指的硬件上的结合,并不是说两者的语言相结合。ARM是时序处理器件,专门用来处理流水的算法。CPLD是逻辑器件,专门完成硬件逻辑的构建,因为是独立于ARM的CPU运行的,所以不占用ARM的CP  详情 回复 发表于 2013-10-3 12:35
 
 
 

回复

109

帖子

0

TA的资源

一粒金砂(中级)

9
 

楼主牛X

请问楼主整个设计花费多少呢?
此帖出自电子竞赛论坛

点评

嘿嘿,这个还没细算呢 大约就是电机+驱动+传感器+控制单元 约摸500来rmb吧  详情 回复 发表于 2013-10-3 12:37
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

10
 
今年做倒立摆摆失败的同学向你致敬,我们选的电机是57电机用AVRatmage16控制用12ADmax187采样,但是不是很懂闭环控制,还请楼主上传下你是怎么代码实现闭环控制的,谢谢!
此帖出自电子竞赛论坛

点评

您好,我是这样处理的,将PID环放在一个定时器中断中,每2mS执行一次,以下是核心代码。加速度环的采集量是摆杆角度编码器,位置环的采集量是步进电机的正反脉冲计数,以此实现闭环控制。 void TIM2_IRQHandler(vo  详情 回复 发表于 2013-10-3 12:43
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

11
 
我们用模糊算法最多能倒立顶住5秒左右
此帖出自电子竞赛论坛

点评

估计您的模糊控制中没加入自学习项,只加了基础知识库。所以不会动态整定到最佳控制值。  详情 回复 发表于 2013-10-3 12:47
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 8楼wudayongnb 的帖子

您好,朋友。ARM和CPLD结合是指的硬件上的结合,并不是说两者的语言相结合。ARM是时序处理器件,专门用来处理流水的算法。CPLD是逻辑器件,专门完成硬件逻辑的构建,因为是独立于ARM的CPU运行的,所以不占用ARM的CPU机时,执行效率高许多。
举个简单的例子,您应该做过LED点阵驱动吧,如果单纯用ARM来做,什么行列扫描都必须占用CPU的计算时间。但是如果配合CPLD或FPGA的话,可以单独构建一个LED驱动逻辑,简单地重复LED点阵的行列扫描、余辉消除等工作;这样,ARM的任务就是简单地向CPLD构建的驱动器送入字符数据即可,省下时间来处理其他任务。当然此例可能不是很准确。
再举个例,您应该知道ARM都包含许多片内外设吧,例如GPIO,Timer,UART,I2C总线设备,SPI总线设备等等,我们要操作他们的时候,只需要读写几个寄存器即可,具体的工作由外设自动完成;CPLD外设也是一样的,只不过是做在片外而已,ARm只需要告诉他需要处理的数据,具体怎么处理由CPLD独立完成。
不知这样解释您是否满意,因为逛论坛的时间有限,如果有更多的疑问欢迎加我q一起交流27530390①。谢谢。
此帖出自电子竞赛论坛

点评

明白了,谢谢您  详情 回复 发表于 2013-10-4 15:04
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 9楼k331922164 的帖子

嘿嘿,这个还没细算呢
大约就是电机+驱动+传感器+控制单元
约摸500来rmb吧
此帖出自电子竞赛论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 10楼able200330 的帖子

您好,我是这样处理的,将PID环放在一个定时器中断中,每2mS执行一次,以下是核心代码。加速度环的采集量是摆杆角度编码器,位置环的采集量是步进电机的正反脉冲计数,以此实现闭环控制。
void TIM2_IRQHandler(void)
{
if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
  {
    TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
  }
   
    ADC_DOWN=268;
    ADC_FULL=4075;
    filter();//获取AD采样值并进行均值滤波
    ADC_temp=(float)After_filter[0];
    //ADC_temp=12;
    if(ADC_temp         ADC_temp+=ADC_FULL;
    f_angle=((ADC_temp-ADC_DOWN)/ADC_FULL)*360;
   
    KP_L=(float)After_filter[1]/200;
    KD_L=(float)After_filter[2]/200;
    KP_V=(float)After_filter[3]/20;
    KD_V=(float)After_filter[4]/40;
   
// ************ PID位置环,控制稳摆位置 ***********
    float TimeCh1 = 0.002;                                       // 采样时间(s)
   //float Kp1 = 6.53, Ki1 =0.00, Kd1 = 2.84;                    // 比例系数、积分系数、微分系数
    float Kp1, Ki1, Kd1;
    Kp1=KP_L;Ki1=0.0;Kd1=KD_L;
    float Setpoint1 = 0;                                  // 设定目标值(degree)
    float outMin1 = -3000, outMax1 =3000;                   // 输出上限、输出下限

    float Input1 = (float)(CNTS*(0.0140625)); // 170;                            // 输入赋值
    float error1 = Setpoint1 - Input1;                     // 偏差值
    ITerm1+= (Ki1 * error1 * TimeCh1);                      // 计算积分项
    ITerm1 = constrain(ITerm1, outMin1, outMax1);           // 限定值域
    float DTerm1 = Kd1 * (Input1 - lastInput1) / TimeCh1;    // 计算微分项
    Output1 = Kp1 * error1 + ITerm1 - DTerm1;                // 计算输出值
    Output1 = constrain(Output1, outMin1, outMax1);         // 限定值域
    ERR1=Output1/100;

    lastInput1 = Input1;                                  // 记录输入值   
   
   
   
// ************ PID加速度环,控制稳摆 ***********
    float TimeCh = 0.002;                                       // 采样时间(s)
    //float Kp = 142.0, Ki =0.00, Kd = 17.6;                    // 比例系数、积分系数、微分系数/
    float Kp, Ki, Kd;
    Kp=KP_V; Ki=0.0; Kd=KD_V;
    float Setpoint = 180;                                  // 设定目标值(degree)
    float outMin = -20000, outMax =20000;                   // 输出上限、输出下限

    float Input = f_angle;                             // 输入赋值
    float error = Setpoint - Input - ERR1;                     // 偏差值
    ITerm+= (Ki * error * TimeCh);                      // 计算积分项
    ITerm = constrain(ITerm, outMin, outMax);           // 限定值域
    float DTerm = Kd * (Input - lastInput) / TimeCh;    // 计算微分项
    Output = Kp * error + ITerm - DTerm;                // 计算输出值
    Output = constrain(Output, outMin, outMax);         // 限定值域
    A_INPUT=Output;

    lastInput = Input;                                  // 记录输入值


}
此帖出自电子竞赛论坛

点评

感谢楼主的热心回复,谢谢:) :)  详情 回复 发表于 2013-10-3 21:07
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 11楼able200330 的帖子

估计您的模糊控制中没加入自学习项,只加了基础知识库。所以不会动态整定到最佳控制值。
此帖出自电子竞赛论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

16
 
楼主厉害,我们也是做的的倒立摆,做的PD函数写的不是很好。。。偶尔会倒立
此帖出自电子竞赛论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

17
 

回复 14楼ehco 的帖子

感谢楼主的热心回复,谢谢
此帖出自电子竞赛论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

18
 
楼主能加个QQ吗?
此帖出自电子竞赛论坛
 
 
 

回复

373

帖子

0

TA的资源

纯净的硅(中级)

19
 

回复 12楼ehco 的帖子

明白了,谢谢您
此帖出自电子竞赛论坛
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

20
 
哎,不知道怎么使用PID控制
此帖出自电子竞赛论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表