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

標(biāo)題: stm32f103單片機(jī)自制飛控代碼分享 [打印本頁]

作者: zzkuner    時間: 2023-7-14 19:12
標(biāo)題: stm32f103單片機(jī)自制飛控代碼分享
程序可以支持MPU6050數(shù)據(jù)讀取、SPL06氣壓計讀取、SBUS遙控數(shù)據(jù)讀取、最多可以控制8路電機(jī)或者電調(diào)。寫了PID算法,可以讓無人機(jī)在控制保持穩(wěn)定。
飛機(jī)是自制的,硬件和機(jī)械也是自己做的,
是本人設(shè)計一部分,硬件電路會在整理之后發(fā)出來。新人第一次發(fā)帖,還望各位大佬輕噴。
制作出來的實物圖如下:


單片機(jī)源程序如下:
  1. #include "sys.h"

  2. u8 report=0;                        //默認(rèn)開啟上報
  3. int motor1,motor2,servo1,servo2;
  4. float Setpitch=0,Setroll=0;
  5. float pitch,roll,yaw;                 //歐拉角
  6. short aacx,aacy,aacz;                //加速度傳感器原始數(shù)據(jù)
  7. short gyrox,gyroy,gyroz;        //陀螺儀原始數(shù)據(jù)
  8. short temp;                                        //溫度       
  9. int main(void)
  10. {       
  11.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  12.         Usart_init();                 //串口初始化
  13.         delay_init();          //延時初始化 delay_ms(1000);
  14.         BEEP_GPIO_Init();
  15.         Motor_PWM_Init(20000-1, 72-1);
  16.         Servo_PWM_Init(20000-1, 72-1);
  17.         TIM2_Int_Init(100-1,720-1);
  18.         Motor_Unlock(1900,1100);
  19.         BEEP_GPIO_High();
  20.         FrSky_Uart2_Init(100000);
  21.         Adc_Init();
  22.         SPI1_Init();
  23.         SPL06_Init();
  24.         MPU_IIC_Init(); //MPU使用的IIC初始化
  25.         while(MPU_Init())
  26.         {
  27.                 printf("mpu error\n");
  28.                 delay_ms(200);
  29.         };                                        //初始化MPU6050
  30.        
  31.         while(mpu_dmp_init())
  32.         {
  33.                 printf("mpu dmp error\n");
  34.                 delay_ms(200);
  35.         }
  36.   PID_Init();
  37.         BEEP_GPIO_Low();

  38.         while(1)
  39.         {

  40.                 int i;
  41.                 static float Baro_Buf[20];
  42.                 Baro.Org_Alt = SPL06_Get_Altitude();
  43.                 //氣壓原始數(shù)據(jù)緩存
  44.     for(i=19;i>0;i--)
  45.     {
  46.         Baro_Buf[i]=Baro_Buf[i-1];
  47.     }
  48.     Baro_Buf[0]=Baro.Org_Alt;

  49. //                printf("%f\n",Baro.Org_Alt );
  50. //                delay_ms(100);
  51. /********測量電池電壓********/
  52.                
  53.                 Get_Bat_Voltage();
  54.                 if(Bat_Voltage<11)
  55.                 {
  56.                         BEEP_GPIO_High();
  57.                 }
  58.                 else
  59.                 {
  60.                         BEEP_GPIO_Low();
  61.                 }
  62. //////                printf("電池電壓為 %f \n",Bat_Voltage);
  63. ///**********陀螺儀數(shù)據(jù)輸出***************/               
  64. if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
  65. {
  66. //        printf("%f,%f,%f\r\n",pitch,roll,yaw);
  67.         temp=MPU_Get_Temperature();        //得到溫度值
  68.         MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度傳感器數(shù)據(jù)
  69.         MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺儀數(shù)據(jù)
  70.         if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//用自定義幀發(fā)送加速度和陀螺儀原始數(shù)據(jù)
  71.         if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));

  72. }
  73. /********     根據(jù)無線串口輸入并調(diào)整pid   ********/
  74.         PID_Update();       
  75.                
  76. /********更新遙控器數(shù)據(jù)********/               
  77.                 update_channels();
  78.                
  79. //                printf( "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\r\n",
  80. //                                channels[0],
  81. //                                channels[1],
  82. //                                channels[2],
  83. //                                channels[3],
  84. //                                channels[4],
  85. //                                channels[5],
  86. //                                channels[6],
  87. //                                channels[7],
  88. //                                channels[8],
  89. //                                channels[9],
  90. //                                channels[10],
  91. //                                channels[11]
  92. //                         );                                                                                       
  93. /********遙控器控制電機(jī)********/                       
  94.                 motor1=motor2=channels[0]/2+1000;       
  95.                 //printf("%d\r\n",channels[0]);
  96.                 Motor_PWM_Set(motor1,motor2);
  97. /********遙控器控制舵機(jī)********/               
  98. //                servo1=channels[1];
  99. //                servo2=channels[2];
  100. //    Servo_PWM_Set(servo1,servo2);

  101. Setpitch=(channels[1]-988)/30;
  102. if(channels[2]>1003 | channels[2]<1000){
  103. Setroll =(channels[2]-1002)/30;
  104. }

  105. /********測試舵機(jī)********/       
  106. //        Servo_PWM_Set(1050,950);

  107. //printf("%f,%f,%f,%f\n",Setroll,roll,Setpitch,pitch);
  108.         }        
  109. }

復(fù)制代碼

Keil代碼下載:
程序.7z (392.28 KB, 下載次數(shù): 24)


作者: cba_cba    時間: 2023-8-4 12:19
這樣子能飛起來嗎??。





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91在线视频免费观看 | 欧美区日韩区 | 亚洲免费影院 | 毛片一区二区 | 欧美啪啪 | 亚洲一区二区在线视频 | 中文字幕在线一区二区三区 | 亚洲欧美一区二区三区在线 | 亚洲免费av一区 | 91看片在线 | 91大神在线看| 国产精品1区2区3区 中文字幕一区二区三区四区 | 热re99久久精品国产99热 | 国产一区2区 | 天堂一区| 国产高清精品一区二区三区 | 欧美一区二区在线观看 | 91精品国产综合久久久久久首页 | 免费在线观看成人av | 国产精品中文字幕在线 | 一级片在线观看 | 久久久免费毛片 | 久久久久久久久久久福利观看 | 欧美日韩国产精品一区二区 | 亚洲成人中文字幕 | 精品一区二区三区在线观看国产 | 午夜视频大全 | 亚洲午夜电影 | 亚洲福利av | 日韩免费视频一区二区 | 亚洲视频 欧美视频 | jlzzxxxx18hd护士| 欧美在线观看一区二区 | gav成人免费播放视频 | 欧美一区视频 | 99精品国产一区二区三区 | 日本成人一区二区 | 在线观看中文字幕视频 | 国产中文一区二区三区 | 成人精品一区 | 日韩一区二区在线观看 |