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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

四軸上位機(jī)和飛控經(jīng)典代碼分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140725 發(fā)表于 2016-10-12 13:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
做四軸飛行器需要考慮到很多很多,其中上位機(jī)設(shè)計和PCB設(shè)計都是需要花費(fèi)大量精力的。

現(xiàn)在已經(jīng)有匿名四軸開發(fā)的開源上位機(jī)程序,集通信,調(diào)試,監(jiān)視,設(shè)置功能于一體。


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



部分源碼:
  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. }
復(fù)制代碼

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

7#
ID:343555 發(fā)表于 2018-6-12 17:19 來自手機(jī) | 只看該作者
撒開源呀,就是個程序
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品美女久久久久久免费 | 91看片在线观看 | 3p视频在线观看 | 亚洲最大成人综合 | www.久久影视 | 国产91观看 | www久久国产 | 久久专区 | 亚洲一区二区三区四区五区中文 | 国产精品美女久久久久久久久久久 | 亚洲欧美中文日韩在线v日本 | 日韩综合在线 | 成人精品网 | 免费超碰 | 日本在线黄色 | 日韩视频在线免费观看 | 欧美vide| 国产精品一区三区 | 国产视频不卡一区 | 99久久久国产精品 | 精品国产乱码久久久久久丨区2区 | 亚洲一区国产精品 | 亚洲综合色视频在线观看 | 中文字幕不卡视频在线观看 | 亚洲久视频 | 97超碰在线免费 | 97精品超碰一区二区三区 | 日韩www | 国产精品一区二区免费 | 成人综合视频在线观看 | 国产黄色麻豆视频 | 亚洲91视频 | 亚洲精品黄 | 国产精品久久国产精品 | 中文字幕亚洲欧美 | 亚洲乱码一区二区三区在线观看 | 高清黄色 | 手机看黄av免费网址 | 亚洲美女在线视频 | 欧美一级www片免费观看 | 国产一区二区三区久久久久久久久 |