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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13118|回復: 10
收起左側

基于STM32F4的飛控程序源代碼下載

  [復制鏈接]
ID:433240 發表于 2018-11-26 10:39 | 顯示全部樓層 |閱讀模式
和固定翼不同,沒有飛控,多旋翼無法操控。
直到以下飛控的出現,
Kiss
Lux
CC3D
F3及變種
F4及變種
F7及變種
這些飛控通過多種傳感器和主控芯片,控制著機身多個電機,調整機身的姿態。
飛控的選擇,會影響多旋翼的飛行感受。而固件則是飛控的靈魂。
以下放出了F4飛控的程序源代碼,需要的可以自行下載,謝謝。

單片機源程序如下:
  1. #include "stm32f4xx.h"

  2. #include "delay.h"
  3. #include "led.h"
  4. #include "timer.h"
  5. #include "pwm_output.h"
  6. #include "usart.h"
  7. #include "pwm_in.h"
  8. #include "MPU6050.h"
  9. #include "IIC.h"
  10. #include "imu.h"
  11. #include "control.h"

  12. /*------------------------------------------------------------------------------------------*/
  13. /*                                                               global varibles                                                        */
  14. /*------------------------------------------------------------------------------------------*/
  15. unsigned char tim2flag=0;                                   //定時期2中斷任務執行標志
  16. unsigned char readyflag=0;                                   //任務執行標志                0:初始化kp,kd;1:電機執行許可;2:執行電機執行許可和發送角度信息
  17. /*------------------------------------------------------------------------------------------*/
  18. /*                                     function code                                            */
  19. /*------------------------------------------------------------------------------------------*/


  20. void TIM2_IRQHandler(void);
  21. void NVIC_Configuration(void);
  22. void USART3_IRQHandler(void);



  23. int main(void)
  24. {
  25.                 float Roll=0;
  26.                 float Pitch=0;
  27.                 int i=0;

  28.                 LED_Init();

  29.                 LED1_OFF;
  30.                 LED2_OFF;
  31.                 LED3_OFF;
  32.                 LED4_OFF;

  33.                 delay_init(168);                //延時初始化  并啟動開機時間。

  34.                 NVIC_Configuration();
  35.                 usart_x_init(115200);
  36.                 Timer2_Init(40,8399);
  37.                 pwm_in_init();
  38.                
  39.                 TIM5_PWM_Init();                //PWM輸出初始化250hz
  40.                 TIM4_PWM_Init();                //50hz
  41.                 delay_ms(100);
  42.                
  43.                 for(i=0;i<10000;i++)                                                                //用以初始化電調航程的時間
  44.                 {
  45.                          TIM5_PWM_OUTPUT(pwmout2,pwmout2,pwmout2,pwmout2);
  46.                         delay_ms(1);
  47.                 }


  48.                 delay_ms(100);
  49.                 I2C_GPIO_Config();
  50.                 delay_ms(100);
  51.                 Init_MPU6050();
  52.                
  53.                 Acc_Correct();
  54.             Gyro_Correct();

  55.                 PID_controllerInit();
  56.                 controlmiddleinit(pwmout1,pwmout2,pwmout3,pwmout4);         //          pwmout1:橫滾          pwmout2:油門
  57.                                                                                                                          //          pwmout3:俯仰          pwmout4:航向       
  58.                                                                                                                                        
  59. //                printf("\n\rUSARTx test:\n\r");

  60.                 delay_ms(500);
  61.                 delay_ms(500);

  62.                 LED1_OFF;
  63.                 LED2_ON;
  64.                 LED3_ON;
  65.                 LED4_OFF;
  66.                
  67.                 while(1)
  68.                 {       
  69.                      if(tim2flag!=0)
  70.                                 {
  71.                                                          tim2flag=0;                         

  72.                                                 //         READ_MPU6050();         
  73.                                                 //         MPU6050_TEST();

  74.                                                          IMUdataprepare();
  75.                                                          IMUupdate(GyroFinal.X,GyroFinal.Y,GyroFinal.Z,AccFinal.X,AccFinal.Y,AccFinal.Z);
  76.                                        
  77.                                                          Roll=(float)atan2(AccFinal.Y,AccFinal.Z)*57.295779513;    //X軸角度值
  78.                                                          Pitch=-(float)atan2(AccFinal.X,AccFinal.Z)*57.295779513;  //Y軸角度值

  79.                                        
  80.                                                 //         SendData(Q_ANGLE.Pitch*10,Pitch*10,Q_ANGLE.Roll*10,Roll*10);
  81.                                                          SendData(Q_ANGLE.Yaw*10,Q_ANGLE.Pitch*10,Q_ANGLE.Roll*10,0);         //配合diIMU上位機,單位度*10  紅 藍 青 黃
  82.                                                 //         SendData(0,Pitch*10,0,Roll*10);               
  83.                                                 //         SendData(0,GyroFinal.X*10,0,GyroFinal.Y*10);               

  84.                                                          Getdesireddata(pwmout1,pwmout2,pwmout3,pwmout4);

  85.                                                 //         Q_ANGLE.Roll=-Q_ANGLE.Roll;
  86.                                                          PID_CAL();
  87.                                                          TIM5_PWM_OUTPUT(MOTOR1,MOTOR2,MOTOR3,MOTOR4);                //MOTOR1    REAR_R  后右電機
  88.                                                                                                                                                                 //MOTOR2        FRONT_R 前右電機
  89.                                                                                                                                                                 //MOTOR3        REAR_L  后左電機
  90.                                                                                                                                                                 //MOTOR4        FRONT_L 前左電機       
  91.                                                 //         TIM5_PWM_OUTPUT(pwmout2,pwmout2,pwmout2,pwmout2);
  92.                                                          platform_control(Q_ANGLE.Roll,Q_ANGLE.Pitch,0,0);
  93.                                                          TIM4_PWM_OUTPUT(servo_Roll,servo_Pitch);
  94.                                                 //         SendData(Q_ANGLE.Roll*10,(&pidRoll)->outP,(&pidRoll)->outD,0);
  95.                                                 //         SendData(MOTOR1*10,MOTOR2*10,MOTOR3*10,MOTOR4*10);
  96.                                                          LED1_Tog;
  97.                                 }
  98.                 }       
  99. }

  100. void NVIC_Configuration(void)
  101. {
  102.           NVIC_InitTypeDef NVIC_InitStructure;  

  103.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);                                        //中斷分組0                先占優先級4位。從優先級0位
  104. //Usart1 NVIC 配置

  105.     NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
  106.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;
  107. //        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;                //
  108.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQ通道使能
  109.         NVIC_Init(&NVIC_InitStructure);        //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器USART1

  110. //TIM2定時中斷設置

  111.         NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM3中斷
  112.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占優先級0級
  113. //        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //從優先級3級
  114.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  115.         NVIC_Init(&NVIC_InitStructure);  //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器
  116.                
  117.                                
  118. //中斷分組初始化
  119.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM5中斷
  120.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優先級2級
  121. //        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //從優先級0級
  122.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  123.         NVIC_Init(&NVIC_InitStructure);  //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器       
  124.                
  125. }


  126. void TIM2_IRQHandler(void)   //TIM2中斷
  127. {       

  128.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源
  129.                 {
  130.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源
  131.                 }
  132. //        LED4_Tog;
  133.         tim2flag++;
  134.        
  135. }

  136. void USART3_IRQHandler(void)                        //串口1中斷服務程序
  137. {
  138.                 char ch;

  139.                 LED1_OFF;
  140.                 LED3_ON;
  141.                
  142.                 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //接收中斷
  143.                 {
  144.                         ch =USART_ReceiveData(USART3);//(USART3->DR);        //讀取接收到的數據                       
  145.                         USART3_SendData(ch);
  146.                                  
  147.              }                         
  148.                                
  149. }
復制代碼

所有資料51hei提供下載:
軟件源代碼.zip (447 KB, 下載次數: 240)


回復

使用道具 舉報

ID:404223 發表于 2019-1-18 21:44 | 顯示全部樓層
感謝提供共享,已收藏
回復

使用道具 舉報

ID:64913 發表于 2019-1-23 21:52 | 顯示全部樓層
要是有原理圖就好了
回復

使用道具 舉報

ID:229821 發表于 2019-4-11 12:17 | 顯示全部樓層
謝謝分享。收藏了。真好。
回復

使用道具 舉報

ID:140642 發表于 2019-6-9 10:07 | 顯示全部樓層
好東西,收藏看看。
回復

使用道具 舉報

ID:516571 發表于 2019-6-12 19:01 | 顯示全部樓層
感謝分享,已經收藏
回復

使用道具 舉報

ID:599303 發表于 2019-8-12 10:53 | 顯示全部樓層
沒有濾波?
回復

使用道具 舉報

ID:621821 發表于 2019-10-10 16:51 | 顯示全部樓層
這個好,感謝分享。
回復

使用道具 舉報

ID:261045 發表于 2019-10-25 23:21 | 顯示全部樓層
謝謝,正需要這個飛控源碼!!
回復

使用道具 舉報

ID:688334 發表于 2020-1-27 19:02 來自觸屏版 | 顯示全部樓層
51黑有你更精彩!!
回復

使用道具 舉報

ID:628703 發表于 2020-3-18 15:17 | 顯示全部樓層
謝謝分享,以收藏!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品色哟哟网站 | 久久成人精品视频 | 一区二区久久 | 亚洲精选一区二区 | 亚洲视频在线免费观看 | 欧美国产日韩在线 | 日韩精品一区二 | 日本午夜视频 | 欧美一级免费 | 欧美日韩一区二区三区四区 | 91原创视频 | 亚洲一区二区三区视频 | av成年人网站 | av一区二区三区 | 中文字幕精品一区 | 夜夜骑首页 | 国产精品亚洲二区 | 在线观看国产 | 高清黄色网址 | 成年人在线视频 | 日韩亚洲欧美综合 | 在线第一页 | 国产成人精品一区二区 | 欧美日韩在线精品 | 欧美性网 | 国产日韩欧美 | 99福利视频 | 国产成人久久精品一区二区三区 | 亚洲免费精品 | 亚洲视频免费在线观看 | 91精品国产综合久久久久久丝袜 | 五月婷婷激情 | 亚洲电影一级片 | 久久丁香 | 黄色一级大片在线免费看产 | 久久久蜜臀国产一区二区 | a级大毛片| 国精产品一区一区三区免费完 | 欧美精品一二区 | 欧美日韩电影一区二区 | 欧美一区在线视频 |