找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8309|回复: 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, 下载次数: 135)
飞控通信协议.zip (11.92 KB, 下载次数: 66)

还有我收藏的匿名飞行器最经典的PID,有很大的参考价值。
ANO-MR-F1-14422经典pid.zip (415.29 KB, 下载次数: 82)
分享到:  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 单片机教程网

快速回复 返回顶部 返回列表