搜索
bottom↓
回复: 11

MSP430G2553飞控测试版~带图~带视频

[复制链接]

出0入0汤圆

发表于 2014-8-26 13:45:50 | 显示全部楼层 |阅读模式
本帖最后由 yaolu0724 于 2014-8-26 13:45 编辑

本人新手,望大神勿怪!
自动2011年全国电赛来,四轴才进入了我的知识中。当时虽说也拿了市一等奖,可是还是有很多不完美的地方!今年TI电赛,去帮助学弟学妹们,又见四轴,想着花些时间搞搞~感觉四轴非常值得研究,其中包括的知识也很丰富,希望和大家交流~

采用主控芯片:MSP450G2553
传感器:MPU6050
使用四元微分、欧拉角、滤波
可直接使用串口调试数据和赋值PWM
调试PID参数(目前还没有调试成功......)
复位加速度和陀螺仪自动校正

起初用的STC12C5A60S2来做MPU6050,后来用了G2553才发现,stc51浮点真的不行...

若视频卡,请缓冲会,本站服务器有限!
视频我上传的是自己的服务器,不能分享哈~~~移步:WWW:ECSCH:COM

pid有两种,一种增量,一种微分,可以选择使用:

  1. #include <string.h>             //C语言中memset函数头文件
  2. #include <math.h>

  3. #define unsigned int uint
  4. //#define WZSPID
  5. #define ZLSPID
  6. int PID_MAX;
  7. int PID_MIN;
  8. double P_term,I_term,D_term;

  9. /*====================================================================================================
  10. PID 结构  
  11. =====================================================================================================*/
  12. typedef struct PID {
  13.         double SetPoint;    // 设定目标
  14.         double KP;                   // 比例常数
  15.         double KI;                     // 积分常数
  16.         double KD;                   // 微分常数
  17.         double LastError;   // Error[-1]最近误差        
  18.         double PrevError;   // Error[-2]前一个误差
  19.         double SumError;    // 误差和
  20. } PID;
  21. /*====================================================================================================
  22. PID计算部分,教训,一定要注意输入的值!!!
  23. =====================================================================================================*/
  24. double PIDCalc( PID *pp, double NextPoint )
  25. {
  26.         double dError, Error,iIncpid,iError;
  27.         
  28.         #ifdef WZSPID
  29.         
  30.         //***********位置式PID算法************************
  31.         Error = pp->SetPoint - NextPoint;           // 偏差
  32.         pp->SumError += Error;                      // 积分
  33.         dError = Error - pp->LastError;             // 当前微分
  34.                                                                                                
  35.         P_term = pp->KP * Error;                // 比例项
  36.         I_term = pp->KI * pp->SumError;                // 积分项
  37.         D_term = pp->KD * dError;                 // 微分项
  38.         
  39.         pp->PrevError = pp->LastError;                 //缓存前一个误差量
  40.         pp->LastError = Error;                        //缓存当前误差量

  41.         if(I_term>PID_MAX) I_term = PID_MAX;        //限定积分量上限
  42.         else if(I_term<0) I_term = 0;                //限定积分量下限

  43.         if(P_term>PID_MAX) P_term=PID_MAX;        //控制量上限=PID_MAX
  44.         else if(P_term<PID_MIN) P_term=PID_MIN;        //控制量下限=PID_MIN
  45.          
  46.         return (P_term + I_term + D_term);
  47.         
  48.         #endif
  49.         
  50.         
  51.         #ifdef ZLSPID
  52.         //***********增量式PID算法************************
  53.         iError = pp->SetPoint - NextPoint;      //增量
  54.         
  55.         iIncpid = pp->KP * iError       //k项
  56.           -pp->KI * pp->LastError       //k-1项        
  57.             +pp->KD * pp->PrevError;    //k-2项
  58.         
  59.         pp->PrevError = pp->LastError;                 //缓存前一个误差量
  60.         pp->LastError = iError;                        //缓存当前误差量
  61.         
  62.         return iIncpid;

  63.         #endif

  64. }
复制代码



这是PID设置:

  1. PID YawPID;                         //PID控制结构
  2.   PID PitchPID;                 //PID控制结构
  3.   PID RollPID;                         //PID控制结构
  4.   
  5.   double YawOut;                 //PID的响应(输出)
  6.   double YawIn;                 //PID反馈(输入)
  7.   double PitchOut;                 //PID的响应(输出)
  8.   double PitchIn;                 //PID反馈(输入)
  9.   double RollOut;                 //PID的响应(输出)
  10.   double RollIn;                 //PID反馈(输入)
  11.   
  12.   PIDInit ( &YawPID );                 //初始化结构
  13.   PIDInit ( &PitchPID );        //初始化结构
  14.   PIDInit ( &RollPID );         //初始化结构
  15.   
  16.   YawPID.SetPoint = 0.0f;         //设定PID设定值
  17.   PitchPID.SetPoint = 0.0f;         //设定PID设定值
  18.   RollPID.SetPoint = 0.0f;         //设定PID设定值
  19.   
  20.   YawPID.KP = 0.0f;         //设定PID设定值
  21.   YawPID.KI = 0.0f;         //设定PID设定值
  22.   YawPID.KD = 0.0f;         //设定PID设定值
  23.   
  24.   PitchPID.KP = 0.0f;         //设定PID设定值
  25.   PitchPID.KI = 0.0f;         //设定PID设定值
  26.   PitchPID.KD = 0.0f;         //设定PID设定值
  27.   
  28.   RollPID.KP = 0.0f;         //设定PID设定值
  29.   RollPID.KI = 0.0f;         //设定PID设定值
  30.   RollPID.KD = 0.0f;         //设定PID设定值
复制代码


来几幅实际测量图片看看!

下图是程序构架:



这是整理的资料:



下图是传感器输出曲线!



下图是文本输出数据:



下图是空间三维姿态图片!



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

感觉51在浮点方面不行,换了MSP430G2553后,明显感觉到姿态结算快多了,不卡了...

视频我上传的是自己的服务器,不能分享哈~~~移步:WWW:ECSCH:COM

下图是G2553



一下是测试数据值!

从左往右依次是:YAW PITCH ROLL



这是4路PWM输出



这个是IIC的时序,按照逻辑分析仪严格测试!稳定!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-27 16:38:28 | 显示全部楼层
Mark,,,,,

出0入0汤圆

发表于 2014-8-27 18:10:36 | 显示全部楼层
G2553也不能浮点吧,而且RAM很小,感觉能用来做这个确实不容易。换个M4吧。

出0入0汤圆

 楼主| 发表于 2014-8-28 13:41:40 | 显示全部楼层

视频移步:WWW:ECSCH:COM~~

出0入0汤圆

 楼主| 发表于 2014-8-28 13:42:17 | 显示全部楼层
Jason_zhang 发表于 2014-8-27 18:10
G2553也不能浮点吧,而且RAM很小,感觉能用来做这个确实不容易。换个M4吧。

现在用MSP430F5438A,这个没问题。

出0入0汤圆

发表于 2014-8-28 13:50:43 | 显示全部楼层
2553能做四轴?厉害啊···当时根本没敢想

出0入0汤圆

 楼主| 发表于 2014-8-29 16:08:48 | 显示全部楼层
motodefy 发表于 2014-8-28 13:50
2553能做四轴?厉害啊···当时根本没敢想

当时我也没接触过MSP430,组委会发了,就用了。。。

出0入0汤圆

发表于 2015-6-25 15:10:34 | 显示全部楼层
撸主 你是通过什么方式给g2553烧写程序的 我自己做的一直都不能脱机运行 在线仿真到时可以运行我用的是SBW 模式 编程器买利尔达的LSD-FET430UIF

出0入0汤圆

发表于 2015-6-25 17:07:01 | 显示全部楼层
九轴和角速度传感器有硬件,需要购买定制姿态结果的软件,只需要结果,不需要源码,请问哪位高手有的,有的请联系我
主板上焊接了两组传感器, 每组分别为:
LIS35DE(三轴加速度传感器)
MPU9255(九轴传感器)
分别布局在板子的两端,见图(选用两组传感器的目的是为了计算角度更精确);

所有传感器和一个STM32 CPU(STM32F030F4,ST的,16K的Flash空间),以及系统主CPU(ARM8127)一起,挂在同一条I2C总线上,I2C总线已经拉出板外来,要求最后的姿态信息必须由这个STM32 CPU来计算得出后,实时地送给系统主CPU(ARM8127);

要求:
手持设备,慢速移动(类似手持粗笔写字的速度),通过STM32的姿态算法,得出本设备的实时姿态信息;

1.        实时的角度和角速度信息(必须)
2.        实时的位移方向信息(必须)
3.        实时的位移值信息(最好要求实现)

提供环境: 一套可以正常上电和供电的办卡, 开发者不需要任何的其他硬件

出0入0汤圆

发表于 2015-7-6 20:16:54 | 显示全部楼层
MSP430G2553做飞控不太行吧,浮点运算速度太慢,定时器太少,加上看门狗定时器也才三个定时器,PWM输出貌似也不够的把

出0入0汤圆

发表于 2015-7-6 20:35:55 | 显示全部楼层
这个小板做飞控,估计够呛,如果是STC15W4K系类的单片机还行,PWM输出不够(除非你外加或者是你的高度电机少),还有就是功能相对少一些!我用8位单片机仿制一个四轴效果也就那样,不完善。MSP430F的其它系类的单片机还行,这个G系类的资源太少了(或者你是高手,资源利用率相当的高),这是在下的一点儿小看法,不对之处还请指正!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-29 11:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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