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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 9546|回復: 7
打印 上一主題 下一主題
收起左側

四軸上位機和飛控經典代碼分享

[復制鏈接]
跳轉到指定樓層
樓主
做四軸飛行器需要考慮到很多很多,其中上位機設計和PCB設計都是需要花費大量精力的。

現在已經有匿名四軸開發的開源上位機程序,集通信,調試,監視,設置功能于一體。


同時附帶飛控通信協議,是我一直在用的四軸飛行器上位機,開發中省了很大的功夫啊。之前一直在用的2.6版本的,前兩天去官網看到有更新,特地分享給大家



部分源碼:
  1. #include "stm32f10x.h"
  2. #include "BSP.H"

  3. void Nvic_Init(void)
  4. {
  5.         NVIC_InitTypeDef NVIC_InitStructure;
  6.         
  7.         /* NVIC_PriorityGroup */
  8.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  9.         //串口
  10.         NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  11.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_UART_P;
  12.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_UART_S;
  13.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  14.         NVIC_Init(&NVIC_InitStructure);
  15.         //TIM3
  16.         NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
  17.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_TIM3_P;
  18.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_TIM3_S;
  19.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  20.         NVIC_Init(&NVIC_InitStructure);
  21. #ifdef CONTROL_USE_RC
  22.         //TIM4 pwm in
  23.         NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
  24.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_TIM4_P;
  25.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_TIM4_S;
  26.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  27.         NVIC_Init(&NVIC_InitStructure);
  28. #endif
  29. }
  30. #define EE_6050_ACC_X_OFFSET_ADDR        0
  31. #define EE_6050_ACC_Y_OFFSET_ADDR        1
  32. #define EE_6050_ACC_Z_OFFSET_ADDR        2
  33. #define EE_6050_GYRO_X_OFFSET_ADDR        3
  34. #define EE_6050_GYRO_Y_OFFSET_ADDR        4
  35. #define EE_6050_GYRO_Z_OFFSET_ADDR        5
  36. #define EE_PID_ROL_P        6
  37. #define EE_PID_ROL_I        7
  38. #define EE_PID_ROL_D        8
  39. #define EE_PID_PIT_P        9
  40. #define EE_PID_PIT_I        10
  41. #define EE_PID_PIT_D        11
  42. #define EE_PID_YAW_P        12
  43. #define EE_PID_YAW_I        13
  44. #define EE_PID_YAW_D        14
  45. //ErrorStatus  HSEStartUpStatus;
  46. //FLASH_Status FlashStatus;
  47. uint16_t VirtAddVarTab[NumbOfVar] = {0xAA00, 0xAA01, 0xAA02, 0xAA03, 0xAA04, 0xAA05, 0xAA06, 0xAA07, 0xAA08, 0xAA09,
  48.                                                                                                                                                  0xAA0A,0xAA0B, 0xAA0C, 0xAA0D, 0xAA0E,};
  49. uint16_t temp;
  50. void EE_INIT(void)
  51. {
  52.         EE_Init();
  53. }
  54. void EE_SAVE_ACC_OFFSET(void)
  55. {
  56.         EE_WriteVariable(VirtAddVarTab[EE_6050_ACC_X_OFFSET_ADDR], ACC_OFFSET.X);
  57.         EE_WriteVariable(VirtAddVarTab[EE_6050_ACC_Y_OFFSET_ADDR], ACC_OFFSET.Y);
  58.         EE_WriteVariable(VirtAddVarTab[EE_6050_ACC_Z_OFFSET_ADDR], ACC_OFFSET.Z);
  59. }
  60. void EE_READ_ACC_OFFSET(void)
  61. {
  62.         EE_ReadVariable(VirtAddVarTab[EE_6050_ACC_X_OFFSET_ADDR], &ACC_OFFSET.X);
  63.         EE_ReadVariable(VirtAddVarTab[EE_6050_ACC_Y_OFFSET_ADDR], &ACC_OFFSET.Y);
  64.         EE_ReadVariable(VirtAddVarTab[EE_6050_ACC_Z_OFFSET_ADDR], &ACC_OFFSET.Z);
  65. }
  66. void EE_SAVE_GYRO_OFFSET(void)
  67. {
  68.         EE_WriteVariable(VirtAddVarTab[EE_6050_GYRO_X_OFFSET_ADDR], GYRO_OFFSET.X);
  69.         EE_WriteVariable(VirtAddVarTab[EE_6050_GYRO_Y_OFFSET_ADDR], GYRO_OFFSET.Y);
  70.         EE_WriteVariable(VirtAddVarTab[EE_6050_GYRO_Z_OFFSET_ADDR], GYRO_OFFSET.Z);
  71. }
  72. void EE_READ_GYRO_OFFSET(void)
  73. {
  74.         EE_ReadVariable(VirtAddVarTab[EE_6050_GYRO_X_OFFSET_ADDR], &GYRO_OFFSET.X);
  75.         EE_ReadVariable(VirtAddVarTab[EE_6050_GYRO_Y_OFFSET_ADDR], &GYRO_OFFSET.Y);
  76.         EE_ReadVariable(VirtAddVarTab[EE_6050_GYRO_Z_OFFSET_ADDR], &GYRO_OFFSET.Z);
  77. }
  78. void EE_SAVE_PID(void)
  79. {
  80.         u16 _temp;
  81.         _temp = PID_ROL.P * 100;
  82.         EE_WriteVariable(VirtAddVarTab[EE_PID_ROL_P],_temp);
  83.         _temp = PID_ROL.I * 1000;
  84.         EE_WriteVariable(VirtAddVarTab[EE_PID_ROL_I],_temp);
  85.         _temp = PID_ROL.D * 100;
  86.         EE_WriteVariable(VirtAddVarTab[EE_PID_ROL_D],_temp);
  87.         _temp = PID_PIT.P * 100;
  88.         EE_WriteVariable(VirtAddVarTab[EE_PID_PIT_P],_temp);
  89.         _temp = PID_PIT.I * 1000;
  90.         EE_WriteVariable(VirtAddVarTab[EE_PID_PIT_I],_temp);
  91.         _temp = PID_PIT.D * 100;
  92.         EE_WriteVariable(VirtAddVarTab[EE_PID_PIT_D],_temp);
  93.         _temp = PID_YAW.P * 100;
  94.         EE_WriteVariable(VirtAddVarTab[EE_PID_YAW_P],_temp);
  95.         _temp = PID_YAW.I * 1000;
  96.         EE_WriteVariable(VirtAddVarTab[EE_PID_YAW_I],_temp);
  97.         _temp = PID_YAW.D * 100;
  98.         EE_WriteVariable(VirtAddVarTab[EE_PID_YAW_D],_temp);
  99. }
  100. void EE_READ_PID(void)
  101. {
  102.         u16 _temp;
  103.         EE_ReadVariable(VirtAddVarTab[EE_PID_ROL_P],&_temp);
  104.         PID_ROL.P = (float)_temp / 100;
  105.         EE_ReadVariable(VirtAddVarTab[EE_PID_ROL_I],&_temp);
  106.         PID_ROL.I = (float)_temp / 1000;
  107.         EE_ReadVariable(VirtAddVarTab[EE_PID_ROL_D],&_temp);
  108.         PID_ROL.D = (float)_temp / 100;
  109.         EE_ReadVariable(VirtAddVarTab[EE_PID_PIT_P],&_temp);
  110.         PID_PIT.P = (float)_temp / 100;
  111.         EE_ReadVariable(VirtAddVarTab[EE_PID_PIT_I],&_temp);
  112.         PID_PIT.I = (float)_temp / 1000;
  113.         EE_ReadVariable(VirtAddVarTab[EE_PID_PIT_D],&_temp);
  114.         PID_PIT.D = (float)_temp / 100;
  115.         EE_ReadVariable(VirtAddVarTab[EE_PID_YAW_P],&_temp);
  116.         PID_YAW.P = (float)_temp / 100;
  117.         EE_ReadVariable(VirtAddVarTab[EE_PID_YAW_I],&_temp);
  118.         PID_YAW.I = (float)_temp / 1000;
  119.         EE_ReadVariable(VirtAddVarTab[EE_PID_YAW_D],&_temp);
  120.         PID_YAW.D = (float)_temp / 100;
  121. }
復制代碼

ANO_TC匿名科創地面站V3.1.rar (4.44 MB, 下載次數: 136)
飛控通信協議.zip (11.92 KB, 下載次數: 67)

還有我收藏的匿名飛行器最經典的PID,有很大的參考價值。
ANO-MR-F1-14422經典pid.zip (415.29 KB, 下載次數: 83)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:142588 發表于 2016-10-13 16:32 | 只看該作者
mark...
回復

使用道具 舉報

板凳
ID:93852 發表于 2017-3-16 09:12 | 只看該作者
謝謝樓主啦啦,樓主好人啊
回復

使用道具 舉報

地板
ID:93852 發表于 2017-3-16 09:13 | 只看該作者
不錯的東西,謝啦
回復

使用道具 舉報

5#
ID:163324 發表于 2017-3-20 13:17 | 只看該作者
為什么光扣分,就是下不了啊
回復

使用道具 舉報

6#
ID:149167 發表于 2017-3-20 13:43 | 只看該作者
51有你真精彩...
回復

使用道具 舉報

7#
ID:343555 發表于 2018-6-12 17:19 來自觸屏版 | 只看該作者
撒開源呀,就是個程序
回復

使用道具 舉報

8#
ID:357855 發表于 2018-7-1 14:45 | 只看該作者
謝謝你的分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字字幕 | 国产区视频在线 | 18在线观看免费入口 | 欧美一区二区三区在线视频 | 一级黄片毛片 | 伊人久久在线 | 日韩久久久 | 欧美日韩在线播放 | 特黄一级视频 | 亚洲免费在线 | 免费国产黄色 | 久久中文网| 成人涩涩 | 亚洲视频一区 | 日韩首页 | 国产精品久久久久久久午夜 | 国产精品久久久久久中文字 | 四虎精品视频 | 天天爽夜夜操 | 天天干夜夜 | 欧美黄色网 | 国产老头视频 | 天天干夜夜爱 | 国产免费黄色片 | 国产日韩精品一区二区 | 精品久久网站 | 久久香蕉网 | 久久久久久中文字幕 | 蜜臀久久99精品久久久久久宅男 | 福利视频免费 | 国产精品乱 | 在线中文字幕网站 | 91av在线播放| 日韩精品福利 | 中文字幕av久久爽av | 一区二区三区免费观看 | 免费毛片在线 | 国产福利一区二区三区 | 国产精自产拍久久久久久蜜 | 国产精品欧美精品 | 国产综合久久久 |