久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4937|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

飛控STM32程序 參考了匿名等程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:200281 發(fā)表于 2017-5-15 13:10 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一套基于32的程序,參考了匿名等程序

編譯,下載,運(yùn)行,連接飛控串口和FTDI串口,串口波特率500K,上位機(jī)打開高級收碼,在上位機(jī)飛控狀態(tài)標(biāo)簽可以看到變化的傳感器數(shù)據(jù),3D顯示可以跟隨roll和pitch的變化而變化,因為沒有寫yaw的上傳,所以yaw保持零度...此時打開飛控波形按鈕,打開波形顯示頁面,并打開相應(yīng)波形開關(guān),1到3為加速度,4到6為陀螺儀,10和11為roll和pitch,就可以看到變化的波形.

單片機(jī)源程序如下:
  1. #include "imu.h"
  2. #include "bsp/MPU6050.h"
  3. #include "math.h"

  4. #define RtA                 57.324841                                //弧度到角度
  5. #define AtR            0.0174533                                //度到角度
  6. #define Acc_G         0.0011963                                //加速度變成G
  7. #define Gyro_G         0.0152672                                //角速度變成度
  8. #define Gyro_Gr        0.0002663                                
  9. #define FILTER_NUM 20

  10. S_INT16_XYZ ACC_AVG;                        //平均值濾波后的ACC
  11. S_FLOAT_XYZ GYRO_I;                                //陀螺儀積分
  12. S_FLOAT_XYZ EXP_ANGLE;                //期望角度
  13. S_FLOAT_XYZ DIF_ANGLE;                //期望角度與實際角度差
  14. S_FLOAT_XYZ Q_ANGLE;                        //四元數(shù)計算出的角度

  15. int16_t        ACC_X_BUF[FILTER_NUM],ACC_Y_BUF[FILTER_NUM],ACC_Z_BUF[FILTER_NUM];        //加速度滑動窗口濾波數(shù)組

  16. void Prepare_Data(void)
  17. {
  18.         static uint8_t filter_cnt=0;
  19.         int32_t temp1=0,temp2=0,temp3=0;
  20.         uint8_t i;
  21.         
  22.         MPU6050_Read();
  23.         MPU6050_Dataanl();
  24.         
  25.         ACC_X_BUF[filter_cnt] = MPU6050_ACC_LAST.X;//更新滑動窗口數(shù)組
  26.         ACC_Y_BUF[filter_cnt] = MPU6050_ACC_LAST.Y;
  27.         ACC_Z_BUF[filter_cnt] = MPU6050_ACC_LAST.Z;
  28.         for(i=0;i<FILTER_NUM;i++)
  29.         {
  30.                 temp1 += ACC_X_BUF[i];
  31.                 temp2 += ACC_Y_BUF[i];
  32.                 temp3 += ACC_Z_BUF[i];
  33.         }
  34.         ACC_AVG.X = temp1 / FILTER_NUM;
  35.         ACC_AVG.Y = temp2 / FILTER_NUM;
  36.         ACC_AVG.Z = temp3 / FILTER_NUM;
  37.         filter_cnt++;
  38.         if(filter_cnt==FILTER_NUM)        filter_cnt=0;
  39.         
  40.         GYRO_I.X += MPU6050_GYRO_LAST.X*Gyro_G*0.0001;//0.0001是時間間隔,兩次prepare的執(zhí)行周期
  41.         GYRO_I.Y += MPU6050_GYRO_LAST.Y*Gyro_G*0.0001;
  42.         GYRO_I.Z += MPU6050_GYRO_LAST.Z*Gyro_G*0.0001;
  43. }

  44. void Get_Attitude(void)
  45. {
  46.         IMUupdate(MPU6050_GYRO_LAST.X*Gyro_Gr,
  47.                                                 MPU6050_GYRO_LAST.Y*Gyro_Gr,
  48.                                                 MPU6050_GYRO_LAST.Z*Gyro_Gr,
  49.                                                 ACC_AVG.X,ACC_AVG.Y,ACC_AVG.Z);        //*0.0174轉(zhuǎn)成弧度
  50. }
  51. ////////////////////////////////////////////////////////////////////////////////
  52. #define Kp 10.0f                        // proportional gain governs rate of convergence to accelerometer/magnetometer
  53. #define Ki 0.008f                          // integral gain governs rate of convergence of gyroscope biases
  54. #define halfT 0.001f                   // half the sample period采樣周期的一半

  55. float q0 = 1, q1 = 0, q2 = 0, q3 = 0;    // quaternion elements representing the estimated orientation
  56. float exInt = 0, eyInt = 0, ezInt = 0;    // scaled integral error
  57. void IMUupdate(float gx, float gy, float gz, float ax, float ay, float az)
  58. {
  59.   float norm;
  60. //  float hx, hy, hz, bx, bz;
  61.   float vx, vy, vz;// wx, wy, wz;
  62.   float ex, ey, ez;

  63.   // 先把這些用得到的值算好
  64.   float q0q0 = q0*q0;
  65.   float q0q1 = q0*q1;
  66.   float q0q2 = q0*q2;
  67. //  float q0q3 = q0*q3;
  68.   float q1q1 = q1*q1;
  69. //  float q1q2 = q1*q2;
  70.   float q1q3 = q1*q3;
  71.   float q2q2 = q2*q2;
  72.   float q2q3 = q2*q3;
  73.   float q3q3 = q3*q3;
  74.         
  75.         if(ax*ay*az==0)
  76.                  return;
  77.                
  78.   norm = sqrt(ax*ax + ay*ay + az*az);       //acc數(shù)據(jù)歸一化
  79.   ax = ax /norm;
  80.   ay = ay / norm;
  81.   az = az / norm;

  82.   // estimated direction of gravity and flux (v and w)              估計重力方向和流量/變遷
  83.   vx = 2*(q1q3 - q0q2);                                                                                                //四元素中xyz的表示
  84.   vy = 2*(q0q1 + q2q3);
  85.   vz = q0q0 - q1q1 - q2q2 + q3q3 ;

  86.   // error is sum of cross product between reference direction of fields and direction measured by sensors
  87.   ex = (ay*vz - az*vy) ;                                                                    //向量外積在相減得到差分就是誤差
  88.   ey = (az*vx - ax*vz) ;
  89.   ez = (ax*vy - ay*vx) ;

  90.   exInt = exInt + ex * Ki;                                                                  //對誤差進(jìn)行積分
  91.   eyInt = eyInt + ey * Ki;
  92.   ezInt = ezInt + ez * Ki;

  93.   // adjusted gyroscope measurements
  94.   gx = gx + Kp*ex + exInt;                                                                                                   //將誤差PI后補(bǔ)償?shù)酵勇輧x,即補(bǔ)償零點(diǎn)漂移
  95.   gy = gy + Kp*ey + eyInt;
  96.   gz = gz + Kp*ez + ezInt;                                                                                           //這里的gz由于沒有觀測者進(jìn)行矯正會產(chǎn)生漂移,表現(xiàn)出來的就是積分自增或自減

  97.   // integrate quaternion rate and normalise                                                   //四元素的微分方程
  98.   q0 = q0 + (-q1*gx - q2*gy - q3*gz)*halfT;
  99.   q1 = q1 + (q0*gx + q2*gz - q3*gy)*halfT;
  100.   q2 = q2 + (q0*gy - q1*gz + q3*gx)*halfT;
  101. ……………………

  102. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
飛控程序.7z (259.85 KB, 下載次數(shù): 63)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:238803 發(fā)表于 2017-10-12 10:38 來自手機(jī) | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報

板凳
ID:293977 發(fā)表于 2018-3-29 11:07 | 只看該作者
先馬克一下,到時候回來下載
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91社区在线观看高清 | av午夜激情| 国产精品一区二 | 国产精品一区久久久 | 国产精品视频久久久久 | 国产91精品久久久久久久网曝门 | 精品视频在线免费观看 | 91久久精品一区二区二区 | 一级毛片视频免费观看 | 久久久久久网站 | 亚洲一区二区三区四区视频 | 亚洲欧美综合 | 夜夜操天天干 | 黄片毛片免费观看 | a免费视频| 日韩欧美中文字幕在线视频 | 日韩av在线一区二区 | 在线观看中文字幕一区二区 | 国产一区二区影院 | 在线观看亚 | 欧美日韩高清一区 | 人妖无码| 特黄视频| 国产精品久久网 | 国产成人精品午夜 | 日本电影免费完整观看 | h视频免费在线观看 | 亚洲美女av网站 | 黄色网毛片 | 日韩av看片| 在线视频a| 日本免费一区二区三区 | 欧美精品一区二区免费 | 日本成人中文字幕 | 在线视频中文字幕 | 精品一二三区在线观看 | 91在线精品视频 | 亚洲精品一区二区 | 国户精品久久久久久久久久久不卡 | 狼色网| 91精品国产综合久久精品图片 |