|
做四軸飛行器需要考慮到很多很多,其中上位機(jī)設(shè)計和PCB設(shè)計都是需要花費(fèi)大量精力的。
現(xiàn)在已經(jīng)有匿名四軸開發(fā)的開源上位機(jī)程序,集通信,調(diào)試,監(jiān)視,設(shè)置功能于一體。
0.png (135.35 KB, 下載次數(shù): 102)
下載附件
2016-10-12 13:14 上傳
同時附帶飛控通信協(xié)議,是我一直在用的四軸飛行器上位機(jī),開發(fā)中省了很大的功夫啊。之前一直在用的2.6版本的,前兩天去官網(wǎng)看到有更新,特地分享給大家
0.png (44.4 KB, 下載次數(shù): 95)
下載附件
2016-10-12 13:16 上傳
0.png (57.9 KB, 下載次數(shù): 90)
下載附件
2016-10-12 13:17 上傳
部分源碼:
- #include "stm32f10x.h"
- #include "BSP.H"
- void Nvic_Init(void)
- {
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* NVIC_PriorityGroup */
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- //串口
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_UART_P;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_UART_S;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- //TIM3
- NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_TIM3_P;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_TIM3_S;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- #ifdef CONTROL_USE_RC
- //TIM4 pwm in
- NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = NVIC_TIM4_P;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = NVIC_TIM4_S;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- #endif
- }
- #define EE_6050_ACC_X_OFFSET_ADDR 0
- #define EE_6050_ACC_Y_OFFSET_ADDR 1
- #define EE_6050_ACC_Z_OFFSET_ADDR 2
- #define EE_6050_GYRO_X_OFFSET_ADDR 3
- #define EE_6050_GYRO_Y_OFFSET_ADDR 4
- #define EE_6050_GYRO_Z_OFFSET_ADDR 5
- #define EE_PID_ROL_P 6
- #define EE_PID_ROL_I 7
- #define EE_PID_ROL_D 8
- #define EE_PID_PIT_P 9
- #define EE_PID_PIT_I 10
- #define EE_PID_PIT_D 11
- #define EE_PID_YAW_P 12
- #define EE_PID_YAW_I 13
- #define EE_PID_YAW_D 14
- //ErrorStatus HSEStartUpStatus;
- //FLASH_Status FlashStatus;
- uint16_t VirtAddVarTab[NumbOfVar] = {0xAA00, 0xAA01, 0xAA02, 0xAA03, 0xAA04, 0xAA05, 0xAA06, 0xAA07, 0xAA08, 0xAA09,
- 0xAA0A,0xAA0B, 0xAA0C, 0xAA0D, 0xAA0E,};
- uint16_t temp;
- void EE_INIT(void)
- {
- EE_Init();
- }
- void EE_SAVE_ACC_OFFSET(void)
- {
- EE_WriteVariable(VirtAddVarTab[EE_6050_ACC_X_OFFSET_ADDR], ACC_OFFSET.X);
- EE_WriteVariable(VirtAddVarTab[EE_6050_ACC_Y_OFFSET_ADDR], ACC_OFFSET.Y);
- EE_WriteVariable(VirtAddVarTab[EE_6050_ACC_Z_OFFSET_ADDR], ACC_OFFSET.Z);
- }
- void EE_READ_ACC_OFFSET(void)
- {
- EE_ReadVariable(VirtAddVarTab[EE_6050_ACC_X_OFFSET_ADDR], &ACC_OFFSET.X);
- EE_ReadVariable(VirtAddVarTab[EE_6050_ACC_Y_OFFSET_ADDR], &ACC_OFFSET.Y);
- EE_ReadVariable(VirtAddVarTab[EE_6050_ACC_Z_OFFSET_ADDR], &ACC_OFFSET.Z);
- }
- void EE_SAVE_GYRO_OFFSET(void)
- {
- EE_WriteVariable(VirtAddVarTab[EE_6050_GYRO_X_OFFSET_ADDR], GYRO_OFFSET.X);
- EE_WriteVariable(VirtAddVarTab[EE_6050_GYRO_Y_OFFSET_ADDR], GYRO_OFFSET.Y);
- EE_WriteVariable(VirtAddVarTab[EE_6050_GYRO_Z_OFFSET_ADDR], GYRO_OFFSET.Z);
- }
- void EE_READ_GYRO_OFFSET(void)
- {
- EE_ReadVariable(VirtAddVarTab[EE_6050_GYRO_X_OFFSET_ADDR], &GYRO_OFFSET.X);
- EE_ReadVariable(VirtAddVarTab[EE_6050_GYRO_Y_OFFSET_ADDR], &GYRO_OFFSET.Y);
- EE_ReadVariable(VirtAddVarTab[EE_6050_GYRO_Z_OFFSET_ADDR], &GYRO_OFFSET.Z);
- }
- void EE_SAVE_PID(void)
- {
- u16 _temp;
- _temp = PID_ROL.P * 100;
- EE_WriteVariable(VirtAddVarTab[EE_PID_ROL_P],_temp);
- _temp = PID_ROL.I * 1000;
- EE_WriteVariable(VirtAddVarTab[EE_PID_ROL_I],_temp);
- _temp = PID_ROL.D * 100;
- EE_WriteVariable(VirtAddVarTab[EE_PID_ROL_D],_temp);
- _temp = PID_PIT.P * 100;
- EE_WriteVariable(VirtAddVarTab[EE_PID_PIT_P],_temp);
- _temp = PID_PIT.I * 1000;
- EE_WriteVariable(VirtAddVarTab[EE_PID_PIT_I],_temp);
- _temp = PID_PIT.D * 100;
- EE_WriteVariable(VirtAddVarTab[EE_PID_PIT_D],_temp);
- _temp = PID_YAW.P * 100;
- EE_WriteVariable(VirtAddVarTab[EE_PID_YAW_P],_temp);
- _temp = PID_YAW.I * 1000;
- EE_WriteVariable(VirtAddVarTab[EE_PID_YAW_I],_temp);
- _temp = PID_YAW.D * 100;
- EE_WriteVariable(VirtAddVarTab[EE_PID_YAW_D],_temp);
- }
- void EE_READ_PID(void)
- {
- u16 _temp;
- EE_ReadVariable(VirtAddVarTab[EE_PID_ROL_P],&_temp);
- PID_ROL.P = (float)_temp / 100;
- EE_ReadVariable(VirtAddVarTab[EE_PID_ROL_I],&_temp);
- PID_ROL.I = (float)_temp / 1000;
- EE_ReadVariable(VirtAddVarTab[EE_PID_ROL_D],&_temp);
- PID_ROL.D = (float)_temp / 100;
- EE_ReadVariable(VirtAddVarTab[EE_PID_PIT_P],&_temp);
- PID_PIT.P = (float)_temp / 100;
- EE_ReadVariable(VirtAddVarTab[EE_PID_PIT_I],&_temp);
- PID_PIT.I = (float)_temp / 1000;
- EE_ReadVariable(VirtAddVarTab[EE_PID_PIT_D],&_temp);
- PID_PIT.D = (float)_temp / 100;
- EE_ReadVariable(VirtAddVarTab[EE_PID_YAW_P],&_temp);
- PID_YAW.P = (float)_temp / 100;
- EE_ReadVariable(VirtAddVarTab[EE_PID_YAW_I],&_temp);
- PID_YAW.I = (float)_temp / 1000;
- EE_ReadVariable(VirtAddVarTab[EE_PID_YAW_D],&_temp);
- PID_YAW.D = (float)_temp / 100;
- }
復(fù)制代碼
0.png (46.48 KB, 下載次數(shù): 103)
下載附件
2016-10-12 13:18 上傳
ANO_TC匿名科創(chuàng)地面站V3.1.rar
(4.44 MB, 下載次數(shù): 136)
2016-10-12 13:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
飛控通信協(xié)議.zip
(11.92 KB, 下載次數(shù): 67)
2016-10-12 13:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
還有我收藏的匿名飛行器最經(jīng)典的PID,有很大的參考價值。
ANO-MR-F1-14422經(jīng)典pid.zip
(415.29 KB, 下載次數(shù): 83)
2016-10-12 13:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|