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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4955|回復: 1
打印 上一主題 下一主題
收起左側

自己寫的stm32小四軸程序 用mpu6050 dmp直接輸出姿態角 裸機代碼

[復制鏈接]
跳轉到指定樓層
樓主
  自己寫的小四軸程序stm32f103c8t6,采用mpu6050中的dmp直接輸出姿態角可不用了解四元數,通行模塊為藍牙模塊,程序是裸機代碼沒有太多變量可以容易看懂,如果有這方面的愛好可以一起探討qq1244450581,PID算法只用了串級PD(這個PID是由模電穩壓的過程得到靈感)不過有引進PID死區,分為倆個PID調節

自己試了感覺挺穩,由于不能發太大文件遙控程序就不發了。




部分源程序預覽:
  1. /*******************************************************************************
  2.                    gggi
  3.                                                                          四軸飛控程序
  4.                                                                          由mpu_dmp_get_data(&pitch,&roll,&yaw)這個函數引出歐拉角
  5.                                                                          由RCDataProcess(&exthrottle,&exroll,&expitch,&exyaw);這個引出期望角與油門
  6.                                                                         
  7. *******************************************************************************/
  8. #include "public.h"
  9. #include "printf.h"
  10. #include "stdio.h"
  11. #include "delay.h"
  12. #include "dmp.h"
  13. #include "inv_mpu.h"
  14. #include "inv_mpu_dmp_motion_driver.h"
  15. #include "bt.h"
  16. #include "pwm.h"
  17. #include "time.h"  //把LED初始化的文件一塊放里面,恩,我沒有偷懶!!!
  18. #include "pid.h"
  19.         float old;//用于 判斷是否進入加速劑調節模式
  20. float exthrottle,roll_ex,pitch_ex,yaw_ex;
  21. u16 power1,power2,power3,power4;
  22. //S_FLOAT_ANGLE Q_ANGLE;
  23. float pitch,roll,yaw;                 //歐拉角
  24. float gyrox,gyroy,gyroz;
  25. float Gyrox,Gyroy,Gyroz;
  26.         float aacx,aacy,aacz;                //加速度傳感器原始數據
  27. //傳送數據給匿名四軸上位機軟件(V2.6版本)
  28. //fun:功能字. 0XA0~0XAF
  29. //data:數據緩存區,最多28字節!!
  30. //len:data區有效數據個數
  31. void usart1_niming_report(u8 fun,u8*data,u8 len)
  32. {
  33.         u8 send_buf[32];
  34.         u8 i;
  35.         if(len>28)return;        //最多28字節數據
  36.         send_buf[len+3]=0;        //校驗數置零
  37.         send_buf[0]=0X88;        //幀頭
  38.         send_buf[1]=fun;        //功能字
  39.         send_buf[2]=len;        //數據長度
  40.         for(i=0;i<len;i++)send_buf[3+i]=data[i];                        //復制數據
  41.         for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i];        //計算校驗和        
  42.         for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]);        //發送數據到串口1
  43. }        
  44. //匿名四軸上位機發送的數據格式
  45. void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw)
  46. {
  47.         u8 tbuf[28];
  48.         u8 i;
  49.         for(i=0;i<28;i++)tbuf[i]=0;//清0
  50.         tbuf[0]=(aacx>>8)&0XFF;
  51.         tbuf[1]=aacx&0XFF;
  52.         tbuf[2]=(aacy>>8)&0XFF;
  53.         tbuf[3]=aacy&0XFF;
  54.         tbuf[4]=(aacz>>8)&0XFF;
  55.         tbuf[5]=aacz&0XFF;
  56.         tbuf[6]=(gyrox>>8)&0XFF;
  57.         tbuf[7]=gyrox&0XFF;
  58.         tbuf[8]=(gyroy>>8)&0XFF;
  59.         tbuf[9]=gyroy&0XFF;
  60.         tbuf[10]=(gyroz>>8)&0XFF;
  61.         tbuf[11]=gyroz&0XFF;        
  62.         tbuf[18]=(roll>>8)&0XFF;
  63.         tbuf[19]=roll&0XFF;
  64.         tbuf[20]=(pitch>>8)&0XFF;
  65.         tbuf[21]=pitch&0XFF;
  66.         tbuf[22]=(yaw>>8)&0XFF;
  67.         tbuf[23]=yaw&0XFF;
  68.         usart1_niming_report(0XAF,tbuf,28);//飛控顯示幀,0XAF
  69. }

  70. int main()
  71. {               

  72.          u8 i;
  73.         float j;//用于遙控油門數值
  74.         u8 a,b=0,x=0;//用于加速計的累加求平均值
  75.   u16 flag=0,gyro[3];
  76. float aac1[10],aac2[10];


  77.   SystemInit();
  78.         delay_init(72);
  79.                 LED_Init() ;
  80.          printf_init();
  81.         I2C_GPIO_Config();
  82.                 delay_ms(10);
  83.         PIDvalue();//往PID里面塞東西,確定三個姿態的p,i,d值
  84.         MPU_Init();
  85.   mpu_dmp_init();
  86. pwm_init();
  87. TIM2_Init();
  88.         
  89.         
  90.         while(1)
  91.         {

  92.                         mpu_dmp_get_data(&pitch,&roll,&yaw,&gyrox,&gyroy,&gyroz,&aacx,&aacy,&aacz);
  93.                 ////////////////////////////////////加速劑平滑濾波
  94. //                aac1[x]=aacx;
  95. //aac2[x]=aacy;
  96. //                x++;
  97. //                for(i=0;i<10;i++)
  98. //                aacx=(aacx+aac1[i])/2;
  99. //        
  100. //                for(i=0;i<10;i++)
  101. //                aacy=(aacy+aac2[i])/2;
  102. //                                if(x==10)
  103. //                        x=0;
  104.                 /////////////////////////////////////                        
  105.                                 
  106.                                 
  107.                                 
  108.                                 
  109.         if(timer==1)
  110.         {
  111.         timer=0;
  112.                         flag++;

  113.                
  114.       gyrox=gyrox/10;
  115.                          gyroy=gyroy/10;
  116.                          gyroz=gyroz/10;
  117. //     aacx=aacx/40-25;
  118. //      aacy=aacy/40+22.5;
  119. //                aacz=aacz/90-180;

  120. //       RCDataProcess(&exthrottle,&roll_ex,&pitch_ex,&yaw_ex);
  121.         
  122.                
  123.                 /////////////////////////翻滾程序/////////////////////

  124.                
  125.                 /////////////////////////////////////////////////////////////////////////
  126.                

  127.                
  128.                 //////////////////////////////////油門保護程序////////////////////////////////
  129. //                                        if((old-exthrottle)>400)
  130. //                        {
  131. //                                while(1)
  132. //                                {
  133. //                                        mpu_dmp_get_data(&pitch,&roll,&yaw,&gyrox,&gyroy,&gyroz);
  134. //                                         RCDataProcess(&nouse,&roll_ex,&pitch_ex,&yaw_ex);
  135. //                                exthrottle=old-10;
  136. //                                singlePIDupdate();
  137. //                                pwm_in(power1,power2,power3,power4);        
  138. //                                        if(nouse>300)break;
  139. //                                }
  140. //                        }
  141. //////////////////////////////////////////////////////////////////////////////////////        
  142.                     RCDataProcess(&exthrottle,&roll_ex,&pitch_ex,&yaw_ex);

  143. //                                if(roll_ex==170)
  144. //                {
  145. //                        pwm_in(power1+200,power2-200,power3-200,power4+200);
  146. //                        delay_ms(10);
  147. //                        pwm_in(power1-200,power2+400,power3+400,power4-200);
  148. //                        delay_ms(10);
  149. //                        
  150. //                        power2=power2+400;
  151. //                        if(power2>1000)
  152. //                                power2=1000;
  153. //                                power4=power4-200;
  154. //                        if(power4<0)
  155. //                                power4=0;
  156. //                        
  157. //                                power3=power3+400;
  158. //                        if(power3>1000)
  159. //                                power3=1000;
  160. //                                power1=power1-200;
  161. //                        if(power1<0)
  162. //                                power1=0;
  163. //                        while(1)
  164. //                        {
  165. //                pwm_in(power1,power2,power3,power4);
  166. //                        mpu_dmp_get_data(&pitch,&roll,&yaw,&gyrox,&gyroy,&gyroz,&aacx,&aacy,&aacz);
  167. //                                if(roll_ex>150)
  168. //                                {
  169. //                                        b=1;
  170. //                                delay_ms(500);
  171. //                                }
  172. //                                if((roll>(-40))&&(b==1))
  173. //                                {b=0;
  174. //                                break;
  175. //                                }
  176. //                        }
  177. //                           RCDataProcess(&exthrottle,&roll_ex,&pitch_ex,&yaw_ex);
  178. //                        mpu_dmp_get_data(&pitch,&roll,&yaw,&gyrox,&gyroy,&gyroz,&aacx,&aacy,&aacz);
  179. //                              gyrox=gyrox/10;
  180. //                         gyroy=gyroy/10;
  181. //                         gyroz=gyroz/10;
  182. //     aacx=aacx/40-25;
  183. //      aacy=aacy/40+22.5;
  184. //                aacz=aacz/90-180;
  185. //                }
  186.         //exthrottle=21;

  187.         if(exthrottle>20)
  188.         {
  189.                
  190. //                        Q_ANGLE.Pitch=(int)((pitch)*100)/100.0;
  191. //                        Q_ANGLE.Roll=(int)(roll*100)/100.0;
  192. //                        Q_ANGLE.Yaw=(int)(yaw*100)/100.0;
  193.                                 singlePIDupdate();   //PID調節
  194. pwm_in(power1,power2,power3,power4);         //油門輸出
  195.         
  196.                 //pwm_in(power1,0,power3,0);         //油門輸出
  197.         //        pwm_in(0,power2,0,power4);        

  198.         }
  199.         else if(exthrottle<20)
  200.         {
  201. //                Q_ANGLE.Pitch=(int)((pitch)*100)/100.0+1.5;
  202. //                Q_ANGLE.Roll=(int)(roll*100)/100.0+0.3;
  203. //                Q_ANGLE.Yaw=(int)(Q_ANGLE.Yaw*100)/100.0;
  204.                         pwm_in(0,0,0,0);  //油門輸出
  205.                
  206.                
  207.                
  208.         }
  209.         
  210.         
  211.         
  212.         
  213.                 if(flag==500)
  214.                 {
  215.                         led_display1();
  216.                
  217.                 //MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度傳感器數據

  218.                         //usart1_report_imu(exthrottle,roll_ex,pitch_ex,gyrox,gyrox,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));
  219. //           j=exthrottle+1000;
  220. //                i[0]=((int)j>>8)&0XFF;
  221. //                                        i[1]=(int)j&0XFF;
  222. //                                                        

  223. //                                usart1_niming_report(0xAE,i,24);
  224.                
  225.    }
  226.                         if(flag==1000)
  227.                         {
  228.                                 flag=0;
  229.                                 led_display2();
  230.                                  old=exthrottle;
  231.                                 
  232.                         }


  233.         if(pitch>75||pitch<-75||roll<-75||roll>75)
  234.         {
  235.                 pwm_in(0,0,0,0);
  236.                 while(1);
  237.         }
  238. //}
  239. //                        if(flag==30)
  240. //                {
  241. //                        //led_display1();
  242. //               
  243. //                flag=0;

  244. //                        usart1_report_imu(exthrottle,roll_ex,pitch_ex,gyrox,gyrox,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));
  245. ////           j=exthrottle+1000;
  246. ////                i[0]=((int)j>>8)&0XFF;
  247. ////                                        i[1]=(int)j&0XFF;
  248. ////                                                        

  249. ////                                usart1_niming_report(0xAE,i,24);
  250. //               
  251.    }
  252.                

  253. …………余下代碼請下載附件…………
復制代碼

資料下載:
四軸帶遙控.zip (9.82 MB, 下載次數: 46)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:177825 發表于 2017-3-23 17:02 | 只看該作者
自己試了一下程序穩定性很差,怎么調也調不好,不知道為什么。。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本免费一区二区三区 | 婷婷激情综合 | 福利视频网| www97影院 | 国产精品18hdxxxⅹ在线 | 成人影视网址 | 国产韩国精品一区二区三区 | 日韩精品一区二区三区 | 女同av亚洲女人天堂 | 日韩精品成人一区二区三区视频 | 欧美一区二区大片 | 日本又色又爽又黄的大片 | 亚洲综合无码一区二区 | 91精品国产一区二区三区动漫 | 亚洲激情网站 | 婷婷去俺也去 | 日本三级精品 | 欧美日韩精品一区二区天天拍 | 日韩中文字幕视频 | 中文字幕免费中文 | 毛片黄| 日韩高清在线观看 | 精品亚洲一区二区三区 | 亚洲色图综合网 | 天天操,夜夜爽 | 欧美久久一区二区三区 | 欧美精品一区二区三区在线播放 | 国产yw851.c免费观看网站 | 国产日韩一区二区 | 国产婷婷 | 亚洲欧美成人影院 | 日韩综合在线 | 欧美精品v国产精品v日韩精品 | 国产一区免费 | 一级毛片免费视频观看 | 欧美日韩在线精品 | 欧美在线播放一区 | 五月激情婷婷网 | 国产高清视频在线 | 国产女人与拘做视频免费 | 91网站在线播放 |