找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1422|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stm32f103舵機云臺(附帶mpu6050解算)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1090084 發(fā)表于 2023-7-30 16:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"
#include <stdio.h>
#include <stdlib.h>
#include "Key.h"
#include "sys.h"
#include "LED.h"
#include "Servo.h"
#include "mpu6050.h"  
#include "inv_mpu.h"
#include "inv_mpu_dmp_motion_driver.h"

unsigned int KeyNum,Mode;
float Ang1,Ang2,AngFlag;
float Angle1=160,Angle2=70;
float Pitch,Roll,Yaw,Pitch_read,Roll_read,Yaw_read;
int16_t Gx,Gy,Gz;

float low_rc(float x,float alpha);

int main(void)
{
        OLED_Init();
        Key_Init();
        Serial_Init();
        Servo_Init();
        OLED_ShowString(1,1,"Roll:");
        OLED_ShowString(2,1,"Yaw:");
        OLED_ShowString(1,12,".");
        OLED_ShowString(2,12,".");
        OLED_ShowString(3,1,"1:");
        OLED_ShowString(4,1,"2:");
        Servo_SetAngle(160,70);

        MPU6050_DMP_Init();
        Delay_ms(2000);
       
        while (1)
        {
                KeyNum=Key_GetNum();
                if(KeyNum==1)Mode=0;
                if(KeyNum==2)Mode=1;
                OLED_ShowSignedNum(1,6,Roll,5);
                OLED_ShowSignedNum(2,6,Yaw,5);
                OLED_ShowNum(1,13,(int)(Roll*10)%10,1);
                OLED_ShowNum(2,13,(int)(Yaw*10)%10,1);
                OLED_ShowNum(3,3,Angle1,3);
                OLED_ShowNum(4,3,Angle2,3);
               
                if(MPU6050_DMP_Get_Data(&Pitch_read,&Roll_read,&Yaw_read)==0)
                {
                        Roll=Roll_read;if(Roll<-50)Roll=-50;if(Roll>50)Roll=50;
                        Yaw=Yaw_read;if(Yaw<-160)Yaw=-160;if(Yaw>20)Yaw=20;
                }
               
                if(Mode==1)
                {
                        Angle1=160+Yaw;
                        Angle2=70+Roll;
               
                        if(Angle1<0){Angle1=0;}
                        if(Angle1>180){Angle1=180;}
                        if(Angle2<0){Angle2=0;}
                        if(Angle2>180){Angle2=180;}
                }
               
                Servo_SetAngle(Angle1,Angle2);
        }
               
               
}
                       
float low_rc(float x,float alpha)
{
        static float y,last_y;
        y=alpha*x+(1-alpha)*last_y;
        last_y=y;
        return y;
}


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

使用道具 舉報

沙發(fā)
ID:1130383 發(fā)表于 2024-8-10 10:47 | 只看該作者
我這就去買配件,做個陀螺儀控制云臺出來
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表