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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

領航者飛控源碼 stm32 注釋相當的詳細 易于學習

  [復制鏈接]
跳轉到指定樓層
樓主
匿名的領航者飛控源碼,是用stm32單片機做的 注釋很詳細。


完整代碼下載:
領航者飛控源碼.zip (10.73 MB, 下載次數: 392)




飛控的初始化代碼:
  1. /******************** (C) COPYRIGHT 2014 ANO Tech ********************************
  2.   * 作者   :匿名科創
  3. * 文件名  :init.c
  4. * 描述    :飛控初始化
  5. **********************************************************************************/

  6. #include "include.h"
  7. #include "pwm_out.h"
  8. #include "mpu6050.h"
  9. #include "i2c_soft.h"
  10. #include "led.h"
  11. #include "ctrl.h"
  12. #include "ms5611.h"
  13. #include "ak8975.h"
  14. #include "ultrasonic.h"

  15. u8 All_Init()
  16. {
  17.         NVIC_PriorityGroupConfig(NVIC_GROUP);                //中斷優先級組別設置
  18.        
  19.         SysTick_Configuration();         //滴答時鐘
  20.        
  21.         I2c_Soft_Init();                                        //初始化模擬I2C
  22.        
  23.         PWM_IN_Init();                                                //初始化接收機采集功能
  24.        
  25.         PWM_Out_Init(400);                                //初始化電調輸出功能       
  26.        
  27.         Usb_Hid_Init();                                                //飛控usb接口的hid初始化
  28.        
  29.         MS5611_Init();                                                //氣壓計初始化
  30.        
  31.         Delay_ms(400);                                                //延時
  32.        
  33.         MPU6050_Init(20);                           //加速度計、陀螺儀初始化,配置20hz低通
  34.        
  35.         LED_Init();                                                                //LED功能初始化
  36.        
  37.         Usart2_Init(500000);                        //串口2初始化,函數參數為波特率
  38.         //Usart2_Init(256000);


  39.        
  40.         //TIM_INIT();
  41.        
  42.         Para_Init();                                                        //參數初始化
  43.        
  44.         Delay_ms(100);                                                //延時
  45.        
  46.         Ultrasonic_Init();                           //超聲波初始化
  47.        
  48.         Cycle_Time_Init();
  49.        
  50.         ak8975_ok = !(ANO_AK8975_Run());
  51.        
  52.         if( !mpu6050_ok )
  53.         {
  54.                 LED_MPU_Err();
  55.         }
  56.         else if( !ak8975_ok )
  57.         {
  58.                 LED_Mag_Err();
  59.         }
  60.         else if( !ms5611_ok )
  61.         {
  62.                 LED_MS5611_Err();
  63.         }
  64.         return (1);
  65. }
  66. /******************* (C) COPYRIGHT 2014 ANO TECH *****END OF FILE************/
復制代碼

飛控遙控程序:
  1. /******************** (C) COPYRIGHT 2014 ANO Tech ********************************
  2.   * 作者   :匿名科創
  3. * 文件名  :rc.c
  4. * 描述    :遙控器通道數據處理
  5. **********************************************************************************/

  6. #include "include.h"
  7. #include "rc.h"
  8. #include "mymath.h"
  9. #include "mpu6050.h"

  10. s8 CH_in_Mapping[CH_NUM] = {0,1,2,3,4,5,6,7};    //通道映射


  11. void CH_Mapping_Fun(u16 *in,u16 *Mapped_CH)
  12. {
  13.         u8 i;
  14.         for( i = 0 ; i < CH_NUM ; i++ )
  15.         {
  16.                 *( Mapped_CH + i ) = *( in + CH_in_Mapping[i] );
  17.         }
  18. }

  19. s16 CH[CH_NUM];

  20. float CH_Old[CH_NUM];
  21. float CH_filter[CH_NUM];
  22. float CH_filter_Old[CH_NUM];
  23. float CH_filter_D[CH_NUM];
  24. u8 NS,CH_Error[CH_NUM];
  25. u16 NS_cnt,CLR_CH_Error[CH_NUM];

  26. s16 MAX_CH[CH_NUM]  = {1900 ,1900 ,1900 ,1900 ,1900 ,1900 ,1900 ,1900 };        //搖桿最大
  27. s16 MIN_CH[CH_NUM]  = {1100 ,1100 ,1100 ,1100 ,1100 ,1100 ,1100 ,1100 };        //搖桿最小
  28. char CH_DIR[CH_NUM] = {0    ,0    ,0    ,0    ,0    ,0    ,0    ,0    };  //搖桿方向
  29. #define CH_OFFSET 500


  30. float filter_A;

  31. void RC_Duty( float T , u16 tmp16_CH[CH_NUM] )
  32. {
  33.         u8 i;
  34.         s16 CH_TMP[CH_NUM];
  35.         static u16 Mapped_CH[CH_NUM];

  36.         if( NS == 1 )
  37.         {
  38.                 CH_Mapping_Fun(tmp16_CH,Mapped_CH);
  39.         }
  40.         else if( NS == 2 )
  41.         {
  42.                 CH_Mapping_Fun(RX_CH,Mapped_CH);
  43.         }
  44.        
  45.         for( i = 0;i < CH_NUM ; i++ )
  46.         {
  47.                 if( (u16)Mapped_CH[i] > 2500 || (u16)Mapped_CH[i] < 500 )
  48.                 {
  49.                         CH_Error[i]=1;
  50.                         CLR_CH_Error[i] = 0;
  51.                 }
  52.                 else
  53.                 {
  54.                         CLR_CH_Error[i]++;
  55.                         if( CLR_CH_Error[i] > 200 )
  56.                         {
  57.                                 CLR_CH_Error[i] = 2000;
  58.                                 CH_Error[i] = 0;
  59.                         }
  60.                 }

  61.                 if( NS == 1 || NS == 2 )
  62.                 {
  63.                         if( CH_Error[i] ) //單通道數據錯誤
  64.                         {
  65.                                
  66.                         }
  67.                         else
  68.                         {
  69.                                 //CH_Max_Min_Record();
  70.                                 CH_TMP[i] = ( Mapped_CH[i] ); //映射拷貝數據,大約 1000~2000
  71.                                
  72.                                 if( MAX_CH[i] > MIN_CH[i] )
  73.                                 {
  74.                                         if( !CH_DIR[i] )
  75.                                         {
  76.                                                 CH[i] =   LIMIT ( (s16)( ( CH_TMP[i] - MIN_CH[i] )/(float)( MAX_CH[i] - MIN_CH[i] ) *1000 - CH_OFFSET ), -500, 500); //歸一化,輸出+-500
  77.                                         }
  78.                                         else
  79.                                         {
  80.                                                 CH[i] = - LIMIT ( (s16)( ( CH_TMP[i] - MIN_CH[i] )/(float)( MAX_CH[i] - MIN_CH[i] ) *1000 - CH_OFFSET ), -500, 500); //歸一化,輸出+-500
  81.                                         }
  82.                                 }       
  83.                                 else
  84.                                 {
  85.                                         fly_ready = 0;
  86.                                 }
  87.                         }
  88.                 }       
  89.                 else //未接接收機或無信號(遙控關閉或丟失信號)
  90.                 {

  91.                 }
  92. //=================== filter ===================================
  93. //  全局輸出,CH_filter[],0橫滾,1俯仰,2油門,3航向 范圍:+-500       
  94. //=================== filter ===================================                
  95.                        
  96.                         filter_A = 3.14f *20 *T;
  97.                        
  98.                         if( ABS(CH_TMP[i] - CH_filter[i]) <100 )
  99.                         {
  100.                                 CH_filter[i] += filter_A *(CH[i] - CH_filter[i]) ;
  101.                         }
  102.                         else
  103.                         {
  104.                                 CH_filter[i] += 0.5f *filter_A *( CH[i] - CH_filter[i]) ;
  105.                         }
  106. //                                         CH_filter[i] = Fli_Tmp;
  107.                         CH_filter_D[i]         = ( CH_filter[i] - CH_filter_Old[i] );
  108.                         CH_filter_Old[i] = CH_filter[i];
  109.                         CH_Old[i]                 = CH[i];
  110.         }
  111.         //======================================================================
  112.         Fly_Ready(T);                //解鎖判斷
  113.         //======================================================================
  114.         if(++NS_cnt>200)  // 400ms  未插信號線。
  115.         {
  116.                 NS_cnt = 0;
  117.                 NS = 0;
  118.         }
  119. }

  120. u8 fly_ready = 0;
  121. s16 ready_cnt=0;

  122. void Fly_Ready(float T)
  123. {
  124.         if( CH_filter[2] < -400 )                                                          //油門小于10%
  125.         {
  126.                 if( fly_ready && ready_cnt != -1 ) //解鎖完成,且已退出解鎖上鎖過程
  127.                 {
  128.                         //ready_cnt += 1000 *T;
  129.                 }
  130. #if(USE_TOE_IN_UNLOCK)               
  131.                 if( CH_filter[3] < -400 )                                                       
  132.                 {
  133.                         if( CH_filter[1] > 400 )
  134.                         {
  135.                                 if( CH_filter[0] > 400 )
  136.                                 {
  137.                                         if( ready_cnt != -1 )                                   //外八滿足且退出解鎖上鎖過程
  138.                                         {
  139.                                                 ready_cnt += 3 *1000 *T;
  140.                                         }
  141.                                 }

  142.                         }

  143.                 }
  144. #else
  145.                 if( CH_filter[3] < -400 )                                              //左下滿足               
  146.                 {
  147.                         if( ready_cnt != -1 && fly_ready )        //判斷已經退出解鎖上鎖過程且已經解鎖
  148.                         {
  149.                                 ready_cnt += 1000 *T;
  150.                         }
  151.                 }
  152.                 else if( CH_filter[3] > 400 )                              //右下滿足
  153.                 {
  154.                         if( ready_cnt != -1 && !fly_ready )        //判斷已經退出解鎖上鎖過程且已經上鎖
  155.                         {
  156.                                 ready_cnt += 1000 *T;
  157.                         }
  158.                 }
  159. #endif               
  160.                 else if( ready_cnt == -1 )                                                //4通道(CH[3])回位
  161.                 {
  162.                         ready_cnt=0;
  163.                 }
  164.         }
  165.         else
  166.         {
  167.                 ready_cnt=0;
  168.         }

  169.        
  170.         if( ready_cnt > 1000 ) // 1000ms
  171.         {
  172.                 ready_cnt = -1;
  173.                 //fly_ready = ( fly_ready==1 ) ? 0 : 1 ;
  174.                 if( !fly_ready )
  175.                 {
  176.                         fly_ready = 1;
  177.                         mpu6050.Gyro_CALIBRATE = 2;
  178.                 }
  179.                 else
  180.                 {
  181.                         fly_ready = 0;
  182.                 }
  183.         }

  184. }

  185. void Feed_Rc_Dog(u8 ch_mode) //400ms內必須調用一次
  186. {
  187.         NS = ch_mode;
  188.         NS_cnt = 0;
  189. }

  190. //=================== filter ===================================
  191. //  全局輸出,CH_filter[],0橫滾,1俯仰,2油門,3航向 范圍:+-500       
  192. //=================== filter ===================================        
  193. u8 height_ctrl_mode = 0;
  194. extern u8 ultra_ok;
  195. void Mode()
  196. {
  197.         if( !fly_ready || CH_filter[THR]<-400 ) //只在上鎖時 以及 油門 低于10% 的時候,允許切換模式,否則只能向模式0切換。
  198.         {
  199.                 if( CH_filter[AUX1] < -200 )
  200.                 {
  201.                         height_ctrl_mode = 0;
  202.                 }
  203.                 else if( CH_filter[AUX1] < 200 )
  204.                 {
  205.                         height_ctrl_mode = 1;
  206.                 }
  207.                 else
  208.                 {
  209.                         if(ultra_ok == 1)
  210.                         {
  211.                                 height_ctrl_mode = 2;
  212.                         }
  213.                         else
  214.                         {
  215.                                 height_ctrl_mode = 1;
  216.                         }
  217.                 }
  218.         }
  219.         else
  220.         {
  221.                 if( CH_filter[AUX1] < -200 )
  222.                 {
  223.                         height_ctrl_mode = 0;
  224.                 }
  225.         }
  226. }

  227. /******************* (C) COPYRIGHT 2014 ANO TECH *****END OF FILE************/

復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏10 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:116120 發表于 2017-5-3 13:45 來自手機 | 只看該作者
支持一個
回復

使用道具 舉報

板凳
ID:196311 發表于 2017-5-3 23:59 | 只看該作者
新來的,學習中,支持一個
回復

使用道具 舉報

地板
ID:197328 發表于 2017-5-6 15:15 | 只看該作者
好帖,一定要頂!
回復

使用道具 舉報

5#
ID:218756 發表于 2017-7-12 09:57 | 只看該作者
新來的,學習中,支持一個
回復

使用道具 舉報

6#
ID:219815 發表于 2017-7-15 09:50 | 只看該作者
好東西  感謝分享
回復

使用道具 舉報

7#
ID:220035 發表于 2017-7-16 12:28 | 只看該作者
好東西,謝謝樓主分享
回復

使用道具 舉報

8#
ID:220748 發表于 2017-7-19 11:05 | 只看該作者
有配套的電路圖么?
回復

使用道具 舉報

9#
ID:221096 發表于 2017-7-20 15:42 | 只看該作者
好東西,謝謝樓主分享
回復

使用道具 舉報

10#
ID:95072 發表于 2017-8-2 22:56 | 只看該作者
好東西
回復

使用道具 舉報

11#
ID:228857 發表于 2017-8-22 20:59 | 只看該作者

新來的,學習中,支持一個
回復

使用道具 舉報

12#
ID:228857 發表于 2017-8-22 21:02 | 只看該作者
東西很好,就是沒積分啊
回復

使用道具 舉報

13#
ID:103626 發表于 2017-12-28 09:07 | 只看該作者
這個東西好,回去要好好研究一下
回復

使用道具 舉報

14#
ID:268389 發表于 2017-12-28 15:19 | 只看該作者
支持一下
回復

使用道具 舉報

15#
ID:271175 發表于 2018-1-4 09:20 | 只看該作者
用什么軟件寫的源碼阿?
回復

使用道具 舉報

16#
ID:267230 發表于 2018-2-3 18:16 | 只看該作者
支持一下
回復

使用道具 舉報

17#
ID:229491 發表于 2018-2-26 10:09 | 只看該作者
支持 正需要
回復

使用道具 舉報

18#
ID:287746 發表于 2018-3-5 14:22 | 只看該作者
支持,學習,學習。
回復

使用道具 舉報

19#
ID:284500 發表于 2018-3-10 21:46 | 只看該作者
是否有電路原理圖?
回復

使用道具 舉報

20#
ID:96935 發表于 2018-5-1 20:15 | 只看該作者
感謝分享  下載學習學習
回復

使用道具 舉報

21#
ID:349928 發表于 2018-6-11 23:34 | 只看該作者
正在搞飛控,感謝樓主分享
回復

使用道具 舉報

22#
ID:341672 發表于 2018-9-26 08:41 | 只看該作者
非常感謝,最近剛好要搞接收機的程序,終于找到了
回復

使用道具 舉報

23#
ID:380389 發表于 2018-10-12 00:38 來自手機 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

24#
ID:486480 發表于 2019-3-7 19:23 | 只看該作者
贊一個
回復

使用道具 舉報

25#
ID:486480 發表于 2019-3-7 19:24 | 只看該作者
感想樓主分享呀
回復

使用道具 舉報

26#
ID:574376 發表于 2019-6-28 23:32 | 只看該作者
好東西,很有幫助
回復

使用道具 舉報

27#
ID:640676 發表于 2019-11-12 20:07 | 只看該作者
可以可以
回復

使用道具 舉報

28#
ID:621765 發表于 2019-11-28 11:31 | 只看該作者
學習中,支持一個
回復

使用道具 舉報

29#
ID:284903 發表于 2019-12-2 08:52 | 只看該作者
不錯,剛好一邊學一邊做,自己做個無人機玩玩,就是不知道有沒有遙控部分的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品久久久一区二区三区 | 国产91 在线播放 | 国产成人精品一区二 | 久精品久久 | 一区二区免费视频 | 亚洲天堂久久新 | 91精品国产乱码久久久久久久久 | 成人高潮片免费视频欧美 | 日韩高清黄色 | 久久久91精品国产一区二区三区 | 亚洲国产精品人人爽夜夜爽 | 午夜精品一区二区三区在线视 | 亚洲毛片在线观看 | 一区二区三区视频 | 成人精品啪啪欧美成 | 日韩久久久久久久久久久 | 国产综合久久久 | 久久网国产| 日本精品一区 | 国产黄色大片 | 免费看a| 自拍偷拍一区二区三区 | 色99视频| 91视频日本| 涩涩鲁亚洲精品一区二区 | 日本精品一区二区三区在线观看视频 | av在线天堂网 | 九九热这里 | 在线观看亚洲专区 | 日韩久久久久久久久久久 | 国产福利91精品 | 久久久亚洲一区 | 涩涩视频在线观看 | 欧美h视频 | 一区二区三区四区在线播放 | 99亚洲综合 | 四虎影院免费在线播放 | 一本色道久久综合亚洲精品高清 | 在线观看日本网站 | 久久精品亚洲成在人线av网址 | eeuss国产一区二区三区四区 |