匿名四轴上位机使用手册_第1页
匿名四轴上位机使用手册_第2页
匿名四轴上位机使用手册_第3页
匿名四轴上位机使用手册_第4页
匿名四轴上位机使用手册_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

匿名四轴上位机使⽤⼿册匿名四轴上位机使⽤⼿册⽬录1、串⼝功能软件界⾯串⼝功能和串⼝助⼿等软件功能类似,设置也差不多。1.设置接收格式、端⼝、波特率即可。2.打开基本收码功能。3.打开串⼝。4.测试:2、⾼级收码⾼级收码设置选项卡:1.1-10对应0XA1-0XAA,我们只需要按定义帧设置即可,我这⾥使⽤0XA2,选择2,并打开开关。2.因为我需要查看的有三个数据,pitch,roll,yaw,并为float类型,所以如此设置。3.最后打开⾼级收码功能,如果你需要实时查看上传的数据可以打开收码显⽰。4.打开串⼝。5.测试:3、波形显⽰波形显⽰功能需要在⾼级收码的功能上做修改。波形显⽰设置选项卡如下:1.1-20序号对应的是波形序号,也就是说最多能指定显⽰20个波形,我们这⾥有pitch,roll,yaw三个波形,所以设置1,2,3。2.设置第⼀个波形1,它来源于数据帧2的第⼀位。3.设置第⼀个波形2,它来源于数据帧2的第⼆位。4.设置第⼀个波形3,它来源于数据帧2的第三位。5.打开数据校验,数据显⽰。6.打开波形显⽰。7.在波形显⽰页⾯勾上前三个即可:8.打开串⼝。9.测试:4、飞控状态使⽤到此功能再补充。5、上传数据的单⽚机程序以下为上传三个⾓度的代码,串⼝初始化等略过:voidusart1_send_char(u8c){while((USART1->SR&0X40)==0);//等待上⼀次发送完毕USART1->DR=c;}//fun:功能字.0XA0~0XAF//data:数据缓存区,最多28字节!!//len:data区有效数据个数voidusart1_niming_report(u8fun,u8*data,u8len){u8send_buf[32];u8i;if(len>28)return;//最多28字节数据send_buf[len+3]=0;//校验数置零send_buf[0]=0X88;//帧头send_buf[1]=fun;//功能字send_buf[2]=len;//数据长度for(i=0;i<len;i++)send_buf[3+i]=data[i];//复制数据for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i];//计算校验和for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]);//发送数据到串⼝1}voidmpu6050_send_data(floatpitch,floatroll,floatyaw){u8tbuf[16];unsignedchar*p;p=(unsignedchar*)&pitch;tbuf[0]=(unsignedchar)(*(p+3));tbuf[1]=(unsignedchar)(*(p+2));tbuf[2]=(unsignedchar)(*(p+1));tbuf[3]=(unsignedchar)(*(p+0));p=(unsignedchar*)&roll;tbuf[4]=(unsignedchar)(*(p+3));tbuf[5]=(unsignedchar)(*(p+2));tbuf[6]=(unsignedchar)(*(p+1));tbuf[7]=(unsignedchar)(*(p+0));p=(unsignedchar*)&yaw;tbuf[8]=(unsignedchar)(*(p+3));tbuf[9]=(unsignedchar)(*(p+2));tbuf[10]=(unsignedchar)(*(p+1));tbuf[11]=(unsignedchar)(*(p+0));usart1_niming_report(0XA2,tbuf,12);//⾃定义帧,0XA2}注意:最后⼀个函数把float拆成四个字节发送(由于串⼝只能⼀个字节⼀个字节的发送),⽤指针获得float型变量的⾸地址,然后强制转换为unsignedchar型,地址逐渐加⼤把float的四个字节分别发出即可。6、更多参考另外在个⼈的⽆⼈机中使⽤如下:/**********************************************************************************⽂件名:main.c*描述:⽆⼈机*实验平台:STM32开发板*库版本:ST3.5.0*作者:零**********************************************************************************/#include"stm32f10x.h"#include"pwm_output.h"#include"key.h"#include"delay.h"#include"QDTFT_demo.h"#include"led.h"#include"Lcd_Driver.h"#include"mpu6050.h"#include"inv_mpu.h"#include"inv_mpu_dmp_motion_driver.h"#include"usart.h"#include"delay.h"#include"misc.h"#include"GUI.h"#include"pid_1.h"#include"math.h"#include"control.h"#include"string.h"#include"usmart.h"#include"stm32f10x_usart.h"/************************************************///串⼝1发送1个字符//c:要发送的字符voidusart1_send_char(u8c){while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//循环发送,直到发送完毕USART_SendData(USART1,c);}/*//传送数据给匿名四轴上位机软件(V2.6版本)//fun:功能字.0XA0~0XAF//data:数据缓存区,最多28字节!!//len:data区有效数据个数voidusart1_niming_report(u8fun,u8*data,u8len){u8send_buf[32];u8i;if(len>28)return;//最多28字节数据send_buf[len+3]=0;//校验数置零send_buf[0]=0X88;//帧头send_buf[1]=fun;//功能字send_buf[2]=len;//数据长度for(i=0;i<len;i++)send_buf[3+i]=data[i];//复制数据for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i];//计算校验和for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]);//发送数据到串⼝1}//if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//⽤⾃定义帧发送加速度和陀螺仪原始数据//if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));//发送加速度传感器数据和陀螺仪数据//aacx,aacy,aacz:x,y,z三个向上⾯的加速度值向上⾯的陀螺仪值//gyrox,gyroy,gyroz:x,y,z三个voidmpu6050_send_data(shortaacx,shortaacy,shortaacz,shortgyrox,shortgyroy,shortgyroz){u8tbuf[12];tbuf[0]=(aacx>>8)&0XFF;tbuf[1]=aacx&0XFF;tbuf[2]=(aacy>>8)&0XFF;tbuf[3]=aacy&0XFF;tbuf[4]=(aacz>>8)&0XFF;tbuf[5]=aacz&0XFF;tbuf[6]=(gyrox>>8)&0XFF;tbuf[7]=gyrox&0XFF;tbuf[8]=(gyroy>>8)&0XFF;tbuf[9]=gyroy&0XFF;tbuf[10]=(gyroz>>8)&0XFF;tbuf[11]=gyroz&0XFF;usart1_niming_report(0XA1,tbuf,12);//⾃定义帧,0XA1}//通过串⼝1上报结算后的姿态数据给电脑//aacx,aacy,aacz:x,y,z三个向上⾯的加速度值向上⾯的陀螺仪值//gyrox,gyroy,gyroz:x,y,z三个//roll:横滚⾓.单位0.01度。-18000->18000对应-180.00->180.00度//pitch:俯仰⾓.单位0.01度。-9000-9000对应-90.00->90.00度//yaw:航向⾓.单位为0.1度0->3600对应0->360.0度voidusart1_report_imu(shortaacx,shortaacy,shortaacz,shortgyrox,shortgyroy,shortgyroz,shortroll,shortpitch,shortyaw){u8tbuf[28];u8i;for(i=0;i<28;i++)tbuf[i]=0;//清0tbuf[0]=(aacx>>8)&0XFF;

tbuf[1]=aacx&0XFF;tbuf[2]=(aacy>>8)&0XFF;tbuf[3]=aacy&0XFF;tbuf[4]=(aacz>>8)&0XFF;tbuf[5]=aacz&0XFF;tbuf[6]=(gyrox>>8)&0XFF;tbuf[7]=gyrox&0XFF;tbuf[8]=(gyroy>>8)&0XFF;tbuf[9]=gyroy&0XFF;tbuf[10]=(gyroz>>8)&0XFF;tbuf[11]=gyroz&0XFF;tbuf[18]=(roll>>8)&0XFF;tbuf[19]=roll&0XFF;tbuf[20]=(pitch>>8)&0XFF;tbuf[21]=pitch&0XFF;tbuf[22]=(yaw>>8)&0XFF;tbuf[23]=yaw&0XFF;usart1_niming_report(0XAF,tbuf,28);//飞控显⽰帧,0XAF}************************************************///fun:功能字.0XA0~0XAF//data:数据缓存区,最多28字节!!//len:data区有效数据个数voidusart1_niming_report(u8fun,u8*data,u8len){u8send_buf[32];u8i;if(len>28)return;//最多28字节数据send_buf[len+3]=0;//校验数置零send_buf[0]=0X88;//帧头send_buf[1]=fun;//功能字send_buf[2]=len;//数据长度for(i=0;i<len;i++)send_buf[3+i]=data[i];//复制数据for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i];//计算校验和for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]);//发送数据到串⼝1}voidmpu6050_send_data(floatpitch,floatroll,floatyaw){u8tbuf[16];unsignedchar*p;p=(unsignedchar*)&pitch;tbuf[0]=(unsignedchar)(*(p+3));tbuf[1]=(unsignedchar)(*(p+2));tbuf[2]=(unsignedchar)(*(p+1));tbuf[3]=(unsignedchar)(*(p+0));p=(unsignedchar*)&roll;tbuf[4]=(unsignedchar)(*(p+3));tbuf[5]=(unsignedchar)(*(p+2));tbuf[6]=(unsignedchar)(*(p+1));tbuf[7]=(unsignedchar)(*(p+0));p=(unsignedchar*)&yaw;tbuf[8]=(unsignedchar)(*(p+3));tbuf[9]=(unsignedchar)(*(p+2));tbuf[10]=(unsignedchar)(*(p+1));tbuf[11]=(unsignedchar)(*(p+0));usart1_niming_report(0XA2,tbuf,12);//⾃定义帧,0XA2}u16pwm1=2000,pwm2=2000,pwm3=2000,pwm4=2000;/************************************************//**函数名:main*描述:主函数*输⼊:⽆*输出:⽆*/intmain(void){u8report=1;//默认开启上报u8res;u8test[20];u8temp_value[20];//存储陀螺仪的临时值u8temp_value2[20];//存储pwm输出的临时值u8t=0;u8key;//按键值u8key_status=0;//按键状态u8keystatus=0;//按键s4的状态值floattemp;floatpitch,roll,yaw;//欧拉⾓shortaacx,aacy,aacz;//加速度传感器原始数据shortgyrox,gyroy,gyroz;//陀螺仪原始数据intMotor1=0;//电机1输出intMotor2=0;//电机2输出intMotor3=0;//电机3输出intMotor4=0;//电机4输出floatPitch;floatRoll;floatYaw;PIDx_init();PIDy_init();PIDz_init();pitch_init();roll_init();yaw_init();NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级delay_init();

KEY_Init();uart_init(500000);//初始化串⼝usmart_dev.init(72);//初始化USMARTpwm_init();/*TIM3PWM波输出初始化,并使能TIM3PWM输出*/Lcd_Init();LCD_LED_SET;//通过IO控制背光亮Lcd_Clear(GRAY0);delay_ms(1000);MPU_Init();//初始化MPU6050Gui_DrawFont_GBK16(25,30,YELLOW,GRAY0,"Startcheck");while(mpu_dmp_init())Gui_DrawFont_GBK16(16,50,YELLOW,GRAY0,"MPU6050Error");Gui_DrawFont_GBK16(25,50,YELLOW,GRAY0,"MPU6050OK");Lcd_Clear(GRAY0);Gui_DrawFont_GBK16(25,30,YELLOW,GRAY0,"S3->shuju");Gui_DrawFont_GBK16(25,50,BLUE,GRAY0,"S4->PWM");while(1){if(keystatus!=1&&key!=2)key=KEY_Scan(0);//得到键值if(key){switch(key){caseKEY0_PRES://{Lcd_Clear(GRAY0);Gui_DrawFont_GBK16(25,30,YELLOW,GRAY0,"M1:");Gui_DrawFont_GBK16(25,50,BLUE,GRAY0,"M2:");Gui_DrawFont_GBK16(25,70,RED,GRAY0,"M3:");Gui_DrawFont_GBK16(25,90,BLUE,GRAY0,"M4:");while(1){key=KEY_Scan(1);if(key)switch(key){caseKEY1_PRES:key_status=1;break;}if(key_status==1)break;//有没有更新值,有更新新的值就会继续往下执⾏if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0){/*MPU_Get_Accelerometer(&aacx,&aacy,&aacz);//得到加速度传感器数据MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);//得到陀螺仪数据*/Pitch=PIDx_out_realize(pitch);Roll=PIDy_out_realize(roll);Yaw=PIDz_out_realize(yaw);//Pitch+=PIDx_inner_realize(pitch);//Roll+=PIDy_inner_realize(roll);//Yaw+=PIDz_inner_realize(yaw);//Motor1=(int)(2200-Pitch+Roll-Yaw);//Motor2=(int)(2200+Pitch+Roll+Yaw);//Motor3=(int)(2200+Pitch-Roll-Yaw);//Motor4=(int)(2200-Pitch-Roll+Yaw);Motor1=(int)(2500+Pitch-Roll);Motor2=(int)(2500+Pitch+Roll);Motor3=(int)(2500-Pitch+Roll);Motor4=(int)(2500-Pitch-Roll);//TIM_SetCompare1(TIM3,Motor4);////TIM_SetCompare2(TIM3,Motor1);////TIM_SetCompare3(TIM3,Motor2);////TIM_SetCompare4(TIM3,Motor3);//if(t%1==0){sprintf(temp_value2,"%4d",Motor4);Gui_DrawFont_GBK16(50,30,BLUE,GRAY0,temp_value2);sprintf(temp_value2,"%4d",Motor1);Gui_DrawFont_GBK16(50,50,BLUE,GRAY0,temp_value2);sprintf(temp_value2,"%4d",Motor2);Gui_DrawFont_GBK16(50,70,BLUE,GRAY0,temp_value2);sprintf(temp_value2,"%4d",Motor3);Gui_DrawFont_GBK16(50,90,BLUE,GRAY0,temp_value2);if(report)mpu6050_send_data(pitch,roll,yaw);//⽤⾃定义帧发送加速度和陀螺仪原始数据//if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));}}t++;}key_status=0;}caseKEY1_PRES://{keystatus=0;Lcd_Clear(GRAY0);Gui_DrawFont_GBK16(25,50,BLUE,GRAY0,"Pitch:.C");Gui_DrawFont_GBK16(25,70,RED,GRAY0,"Roll:.C");Gui_DrawFont_GBK16(25,90,BLUE,GRAY0,"Yaw:.C");while(1){key=KEY_Scan(0);if(key)switch(key){caseKEY0_PRES:key_status=1;break;}if(key_status==1)break;if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)

{//MPU_Get_Accelerometer(&aacx,&aacy,&aacz);//得到加速度传感器数据//MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);//得到陀螺仪数据Pitch=PIDx_out_realize(pitch);Roll=PIDy_out_realize(roll);Yaw=PIDz_out_realize(yaw);//Pitch+=PIDx_inner_realize(pitch);//Roll+=PIDy_inner_realize(roll);//Yaw+=PIDz_inner_realize(yaw);//Motor1=(int)(2200-Pitch+Roll-Yaw);//Motor2=(int)(2200+Pitch+Roll+Yaw);//Motor3=(int)(2200+Pitch-Roll-Yaw);//Motor4=(int)(2200-Pitch-Roll+Yaw);Motor1=(int)(2500+Pitch-Roll);Motor2=(int)(2500+Pitch+Roll);Motor3=(int)(2500-Pitch+Roll);Motor4=(int)(2500-Pitch-Roll);//TIM_SetCompare1(TIM3,Motor4);////TIM_SetCompare2(TIM3,Motor1);////TIM_SetCompare3(TIM3,Motor2);////TIM_SetCompare4(TIM3,Motor3);//temp=pitch;if(temp<0)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论