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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6223|回復: 2
打印 上一主題 下一主題
收起左側

基于STM32F103的飛控源程序(無刷電機控制)

[復制鏈接]
跳轉到指定樓層
樓主
ID:387229 發表于 2018-8-17 13:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
也是在網上找的一些資料,這個代碼相當全面
主要針對無刷電機控制的可以一起學習一下

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "usart.h"
  3. #include "delay.h"
  4. #include "sys.h"
  5. #include <math.h>
  6. #include "mysystem.h"
  7. #include "mpu6050.h"
  8. #include "myiic.h"
  9. #include "led.h"
  10. #include "adc.h"
  11. #include "spi.h"
  12. #include "nrf24l01.h"
  13. #include "time.h"
  14. #include "motor.h"
  15. #include "rc.h"
  16. #include "pid_own.h"
  17. #include "myimu.h"
  18. #include "iwdg.h"


  19. u8 count=0;
  20. u8 Con_FLAG = 0;
  21. Int16_xyz Accel,Gyro;           //兩次綜合后的傳感器數據
  22. Int16_xyz        Acc_Data_Con;  //濾波后的加速度
  23. Float_angle  Att_Angle;         //ATT函數計算出的姿態角

  24. static u8 Count=0;
  25. static Int16_xyz mpu6050_dataacc1,mpu6050_dataacc2,mpu6050_datagyr1,mpu6050_datagyr2;

  26. int Arm_Count=0,Dis_Count=0;


  27. int main(void)
  28. {
  29.         armed=0;//鎖四軸
  30.         
  31.         delay_init();
  32.         LED_Init();
  33.         I2C_EE_Init();
  34.         delay_ms(20);
  35.         MPU6050_Init();
  36.         ADC1_Init();
  37.         Spi1_Init();
  38.         Nrf24l01_Init(MODEL_TX2,40);
  39.         delay_ms(10);
  40.         Tim3_Init(499);
  41.         TIM2_PWM_Init(999,72/24-1);
  42.         USART1_Init(115200);
  43.         Nvic_Init();
  44.         
  45.         if(Nrf24l01_Check())
  46.         {
  47.                 USART1_Put_String("NRF IS OK !!!");
  48.         }

  49.         LED_FLASH();

  50.         Tim3_Con(1);
  51.         IWDG_Init(0,625);//1/16 S
  52.         
  53.         while(1)
  54.         {
  55.                 RC_Rece();
  56.                
  57.                 if(Receive.AD_YM < 500 && Receive.AD_PZ < 1500) Arm_Count++;
  58.                 else Arm_Count = 0;
  59.                 if(Receive.AD_YM < 500 && Receive.AD_PZ > 2500) Dis_Count++;
  60.                 else Dis_Count = 0;
  61.                
  62.                 if(Arm_Count > 20000) {Arm_Count=0; armed = 1; LEDY_ON delay_ms(300);LEDY_OFF delay_ms(300);LEDY_ON delay_ms(300);LEDY_OFF delay_ms(300);LEDY_ON delay_ms(300);LEDY_OFF delay_ms(300);}
  63.                 if(Dis_Count > 20000) {Dis_Count=0; armed = 0; LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);LEDY_ON delay_ms(50);LEDY_OFF delay_ms(50);}
  64.                         
  65.                 if(Receive.Fun == 0) LEDY_ON
  66.                 else LEDY_OFF
  67.         }
  68. }

  69. void TIM3_IRQHandler(void)                //0.5ms中斷一次
  70. {        
  71.         if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET )
  72.         {
  73.                 TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);   //清除中斷標志

  74.                 count++;
  75.                
  76.                 IWDG_Feed();//防止卡死的關鍵
  77.                 Nrf_Check_Event();
  78.                
  79.                 RC_Send();
  80.                 NRF_TxPacket(NRF24L01_TXDATA,32);

  81.                 if(count == 2)//1ms
  82.                 {
  83.                         count = 0;
  84.                         MPU6050_GetDate();
  85.                         
  86.                         Con_FLAG = 1;
  87.                 }
  88.                 if(Con_FLAG)//1ms
  89.                 {
  90.                         Con_FLAG = 0;
  91.                         Count ++;
  92.                         
  93.                         if(Count == 1)
  94.                                 MPU6050_DataCon(&mpu6050_dataacc1,&mpu6050_datagyr1);        //2ms
  95.                         else
  96.                         {
  97.                                 Count = 0;
  98.                                 MPU6050_DataCon(&mpu6050_dataacc2,&mpu6050_datagyr2);        //2ms
  99.                                 Accel.X = (mpu6050_dataacc1.X + mpu6050_dataacc2.X)/2;
  100.                                 Accel.Y = (mpu6050_dataacc1.Y + mpu6050_dataacc2.Y)/2;
  101.                                 Accel.Z = (mpu6050_dataacc1.Z + mpu6050_dataacc2.Z)/2;
  102.                                 Gyro.X = (mpu6050_datagyr1.X + mpu6050_datagyr2.X)/2;
  103.                                 Gyro.Y = (mpu6050_datagyr1.Y + mpu6050_datagyr2.Y)/2;
  104.                                 Gyro.Z = (mpu6050_datagyr1.Z + mpu6050_datagyr2.Z)/2;
  105.                         
  106.                                 Accel_Con(&Accel,&Acc_Data_Con);//加速度濾波
  107.                                 IMUupdate(&Gyro,&Acc_Data_Con,&Att_Angle);        //IMU姿態解算
  108.                                 Pid_Con(Att_Angle.pit,Gyro.X,Att_Angle.rol,Gyro.Y,Att_Angle.yaw,Gyro.Z,Receive.AD_YM,armed);
  109.                         }
  110.                 }
  111.         }

  112. }

  113. //                if(Att_Angle.pit >= 0)
  114. //                {
  115. //                        USART_SendData(USART1, '+');delay_ms(1);
  116. //                        USART_SendData(USART1, '0'+(int)Att_Angle.pit % 1000/100);delay_ms(1);
  117. //                        USART_SendData(USART1, '0'+(int)Att_Angle.pit % 100/10);delay_ms(1);
  118. //                        USART_SendData(USART1, '0'+(int)Att_Angle.pit % 10);delay_ms(1);
  119. //                        USART_SendData(USART1, '\n');//Delay_ms_led(100);
  120. //                }
  121. //                else
  122. //                {
  123. //                        USART_SendData(USART1, '-');delay_ms(1);
  124. //                        USART_SendData(USART1, '0'+abs((int)Att_Angle.pit)/100);delay_ms(1);
  125. //                        USART_SendData(USART1, '0'+abs((int)Att_Angle.pit)%100/10);delay_ms(1);
  126. //                        USART_SendData(USART1, '0'+abs((int)Att_Angle.pit)%10);delay_ms(1);
  127. //                        USART_SendData(USART1, '\n');//Delay_ms_led(100);               
  128. //                }
  129. //                if(Att_Angle.rol >= 0)
  130. //                {
  131. //                        USART_SendData(USART1, '+');delay_ms(1);
  132. //                        USART_SendData(USART1, '0'+(int)Att_Angle.rol % 1000/100);delay_ms(1);
  133. //                        USART_SendData(USART1, '0'+(int)Att_Angle.rol % 100/10);delay_ms(1);
  134. //                        USART_SendData(USART1, '0'+(int)Att_Angle.rol % 10);delay_ms(1);
  135. //                        USART_SendData(USART1, '\n');//Delay_ms_led(100);
  136. //                }
  137. //                else
  138. //                {
  139. //                        USART_SendData(USART1, '-');delay_ms(1);
  140. //                        USART_SendData(USART1, '0'+abs((int)Att_Angle.rol)/100);delay_ms(1);
  141. //                        USART_SendData(USART1, '0'+abs((int)Att_Angle.rol)%100/10);delay_ms(1);
  142. //                        USART_SendData(USART1, '0'+abs((int)Att_Angle.rol)%10);delay_ms(1);
  143. //                        USART_SendData(USART1, '\n');//Delay_ms_led(100);               
  144. //                }
  145. //                if(Gyro.X >= 0)
  146. //                {
  147. //                        USART_SendData(USART1, '+');delay_ms(1);
  148. //                        USART_SendData(USART1, '0'+(int)Gyro.X % 1000/100);delay_ms(1);
  149. //                        USART_SendData(USART1, '0'+(int)Gyro.X % 100/10);delay_ms(1);
  150. //                        USART_SendData(USART1, '0'+(int)Gyro.X % 10);delay_ms(1);
  151. //                        USART_SendData(USART1, '\n');//Delay_ms_led(100);
  152. //                }
  153. //                else
  154. //                {
  155. //                        USART_SendData(USART1, '-');delay_ms(1);
  156. //                        USART_SendData(USART1, '0'+abs((int)Gyro.X)/100);delay_ms(1);
  157. //                        USART_SendData(USART1, '0'+abs((int)Gyro.X)%100/10);delay_ms(1);
  158. //                        USART_SendData(USART1, '0'+abs((int)Gyro.X)%10);delay_ms(1);
  159. //                        USART_SendData(USART1, '\n');//Delay_ms_led(100);               
  160. //                }

復制代碼

所有資料51hei提供下載:
飛控基本版.rar (323.32 KB, 下載次數: 167)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:393919 發表于 2018-9-5 11:12 | 只看該作者
謝謝分享
!!111
回復

使用道具 舉報

板凳
ID:451968 發表于 2020-1-3 23:30 | 只看該作者
大四軸嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人精品一区 | 国产精品久久久久久久久 | 99爱国产| 欧美精品一区二区在线观看 | 九九亚洲| 亚洲福利在线观看 | 日韩成人在线播放 | 99re6在线视频精品免费 | 久久精品二区亚洲w码 | 农村真人裸体丰满少妇毛片 | av在线视| 亚洲一区精品在线 | 九九热在线视频 | 午夜精品久久久 | 亚洲精品区 | 午夜丁香视频在线观看 | 免费观看av | 51ⅴ精品国产91久久久久久 | 欧美午夜剧场 | 99久久婷婷国产综合精品首页 | 国产精品永久在线观看 | 国产精品久久久久久久久久不蜜臀 | 国产精品美女久久久久久不卡 | 成年人视频在线免费观看 | 伊人伊成久久人综合网站 | 天堂国产 | 综合色播 | 国产激情91久久精品导航 | 91 在线 | 日韩精品在线观看免费 | 欧美激情亚洲 | 欧美成人精品 | 国产成人精品一区二 | 激情的网站 | 国产在线观看一区二区三区 | 亚洲欧洲激情 | 久久综合狠狠综合久久综合88 | 欧美jizzhd精品欧美巨大免费 | 久久久久国产精品一区 | 欧美久久一区二区三区 | 色婷婷激情综合 |