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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9541|回復: 7
收起左側

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

[復制鏈接]
ID:140725 發表于 2016-10-12 13:20 | 顯示全部樓層 |閱讀模式
做四軸飛行器需要考慮到很多很多,其中上位機設計和PCB設計都是需要花費大量精力的。

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

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

0.png

部分源碼:
  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. }
復制代碼
0.png
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)
回復

使用道具 舉報

ID:142588 發表于 2016-10-13 16:32 | 顯示全部樓層
mark...
回復

使用道具 舉報

ID:93852 發表于 2017-3-16 09:12 | 顯示全部樓層
謝謝樓主啦啦,樓主好人啊
回復

使用道具 舉報

ID:93852 發表于 2017-3-16 09:13 | 顯示全部樓層
不錯的東西,謝啦
回復

使用道具 舉報

ID:163324 發表于 2017-3-20 13:17 | 顯示全部樓層
為什么光扣分,就是下不了啊
回復

使用道具 舉報

ID:149167 發表于 2017-3-20 13:43 | 顯示全部樓層
51有你真精彩...
回復

使用道具 舉報

ID:343555 發表于 2018-6-12 17:19 來自觸屏版 | 顯示全部樓層
撒開源呀,就是個程序
回復

使用道具 舉報

ID:357855 發表于 2018-7-1 14:45 | 顯示全部樓層
謝謝你的分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美综合 | 黄色高清网站 | 91成人免费视频 | 国产精品久久久久久久久久久久久久久 | 黄色三级大片 | 国产午夜三级 | 九一九色国产 | 少妇高潮久久久久久潘金莲 | 亚洲另类色综合网站 | 国产一级在线观看 | 亚洲欧洲天堂 | 香蕉视频一区二区 | 成人国产网站 | 91一级片 | 久久黄视频 | 久久精品2 | 欧美色综合天天久久综合精品 | 亚洲乱码一区二区 | 成人做爰www看视频软件 | 国产吃瓜黑料一区二区 | 国产亚洲视频在线观看 | 在线看黄色片 | 久久久久久久综合 | 国产福利视频 | 国产免费a| 蜜臀久久99精品久久久久久宅男 | 婷婷五月在线视频 | 午夜av免费 | 蜜臀久久99精品久久久久久宅男 | 伊人综合影院 | 国产裸体永久免费视频网站 | 一区久久 | av入口 | 四虎官网 | 少妇激情视频 | 日韩综合久久 | 在线观看国产小视频 | 成人aaa| 日韩三级一区 | 中文字幕免费在线看线人动作大片 | 五月天丁香 |