2015全国大学生电子设计竞赛设计报告B题 风力摆控制系统

更新时间:2023-10-05 18:44:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2015年全国大学生电子设计竞赛

风力摆控制系统(B题)

参赛学校:长安大学 队伍编号:XZ 015

参赛队员:崔曜东、马若斯、李宝才

指导教师:

2015年8月15日

摘 要

本系统为由STM32单片机控制模块、姿态采集模块、风力摆模块、人及交互系统以及风力摆机械结构组成的闭环控制系统。MPU-6050陀螺仪传感器实时采集风力摆的姿态角及角速度,STM32f103单片机通过PID算法调节轴流电机转速以控制风力摆。风力摆能够实现快速起摆、画线、恢复静止的功能,并能准确画圆。同时系统可以通过键盘设定运行模式和相关角度值,风力摆的角度和运行时间由液晶显示,具有较好人机界面。系统设计结构简单,制作成本低,控制精度高。

关键词:STM32f103、MPU-6050模块、PWM调速

Abstract

This system is composed of STM32 control module, attitude acquisition module, wind force model, human and interactive system, and the closed-loop control system composed of wind force. The attitude and angular velocity of the MPU-6050 gyroscope sensor are acquired in real time, and the speed of the motor is controlled by the PID algorithm, and the speed of the motor is controlled by the STM32f103 algorithm. Wind power can be achieved quickly, draw lines, restore the function of static, and can accurately draw circle. At the same time, the system can set up the operating mode and the relevant angle value, and the angle of the wind force and the running time of the system are displayed by the LCD. The system has the advantages of simple structure, low cost and high control precision.

Key words: MPU-6050, STM32f103 module, PWM speed control

I

目 录

一、系统方案 ........................................................................................................ 1 1、主控制器件的论证与选择 .............................................................................. 1

1.1控制器选用 .............................................................................................. 1 2、角度测量模块的论证与选择 .......................................................................... 2 3、风扇驱动模块的论证与选择 .......................................................................... 2 4、电源方案的论证与选择 .................................................................................. 2 二、系统理论分析与计算 .............................................. 3

1、风力摆状态的测量与计算的分析 .................................................................. 3

(1)姿态采集分析 ...................................................................................... 3 (2)控制算法分析 ...................................................................................... 3 2、角速度的计算 .................................................................................................. 4 三、电路与程序设计 .................................................. 4

1、电路的设计 ...................................................................................................... 4

(1)系统总体框图 ...................................................................................... 4 (2)MPU-6050子系统框图与电路原理图 ............................................... 4 (3)电机驱动模块子系统框图与电路原理图 .......................................... 6 (4)电源 ...................................................................................................... 6 2、程序的设计 ...................................................................................................... 7

(1)程序功能描述与设计思路 .................................................................. 7 (2)程序流程图 .......................................................................................... 8

四、测试方案与测试结果 .............................................. 8

1、测试方案 .......................................................................................................... 8 2、测试条件与仪器 .............................................................................................. 9 3、测试结果及分析 .............................................................................................. 9

(1)测试结果(数据) ................................................................................... 9 (2)测试分析与结论 .................................................................................. 9

五、结论与心得 ..................................................... 10 六、参考文献 ....................................................... 10 附录1:电路原理图 ................................................. 11 附录2:源程序 ..................................................... 13

II

风力摆控制系统(B题)

【本科组】

一、系统方案

本风力摆控制系统主要包括控制模块、电源模块、姿态采集模块、轴流风机及驱动模块、LCD显示模块、人机交互系统以及风力摆机械结构组成。风力摆由万向节连接碳杆再连接风机组成。位于碳素杆下方的姿态采集模块不断采集风力摆当前姿态角,并返回单片机。单片机控制LCD显示姿态角数据并处理数据后通过控制PWM波占空比控制风机转速,实现对风力摆的控制。本系统结构框图如图1所示。 姿态采集模块 人机交互系统 图1.1 系统方案框图

单片机系统 电机驱动模块 1、主控制器件的论证与选择

1.1控制器选用

单片机比较

方案一:采用传统的51系列单片机

传统的51单片机为8位机,价格便宜,控制简单,但是运算速度慢,片内资源少,存储容量小,难以存储大体积的程序和实现快速精准的反应控制。并且受时钟限制,计时精度不高,外围电路也增加了系统的不可靠性。 方案二:采用32位的ARM微控制器

意法半导体(ST)公司出品的STM32f103RCT6,其内核是Cortex-M3,其片内集成了256K程序存储器,2个12位模数转换器(多达16个输入通道)、多达8个定时器等资源。

通过比较,我们选择方案二,采用32位的STM32f103RCT6作为控制器。 1.1.2控制系统方案选择

方案一:采用在面包板上搭建简易单片机系统

在面包板上搭建单片机系统可以方便的对硬件做随时修改,也易于搭建,但是系统连线

1

较多,不仅相互干扰,使电路杂乱无章,而且系统可靠性低,不适合本系统使用。 方案二:自制单片机印刷电路板

自制印刷电路实现较为困难,实现周期长,此外也会花费较多的时间,影响整体设计进程。不宜采用该方案。

方案三:采用单片机最小系统。

单片机最小系统包含了显示、矩阵键盘、A/D、D/A等模块,能明显减少外围电路的设计,降低系统设计的难度,非常适合本系统的设计。 综合以上三种方案,选择方案三。

2、角度测量模块的论证与选择

方案一:采用MPU-6050模块

MPU-6000(6050)为整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的封装空间。

该芯片内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并可利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主 IIC 接口,向应用端输出姿态解算后的数据。

方案二:采用ADXL345倾角传感器

ADXL345是超低功耗3轴加速度计,分辨率高(13位),测量范围达± 16g。数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I 2 C数字接口访问。 综合以上两种方案,选择方案一。

3、风扇驱动模块的论证与选择

方案一:采用L298N驱动模块

L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。 方案二:自己设计驱动模块

自己设计的大电流驱动模块可以完全符合系统要求,真正做到完美适配。

综合考虑采用方案二

4、电源方案的论证与选择

方案一:使用大功率开关电源接模块和单片机单独直流电源。大功率开关电源接模块给

2

(2)程序流程图

1、主程序流程图 各模块初始化 按键扫描 按键判断 进风 入力直进摆 线起入制 振直动线 起振

四、测试方案与测试结果 1、测试方案

(1)电路功能测试

8

每块电路板分开进行功能测试,进行逐项功能的测试。 (2)机械结构测试

搭建好机械结构后,利用等重负载进行负载承重和摇摆震动测试。 (3)硬件软件联调

驱动风力摆工作,使激光稳定地在地面画出一条长度不短于50cm 的直线段,来回五次,记录其由静止至开始自由摆时间及最大偏差距离。测试结果如表1所示。

2、测试条件与仪器

测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。机械结构通过负载测试和电机振动测试。

测试仪器:数字示波器,数字万用表,卷尺,量角器,方向角度图纸

3、测试结果及分析

(1)测试结果(数据)

(2)测试分析与结论

根据上述测试数据,由此可以得出以下结论: 1、 2、 3、

综上所述,本设计达到设计要求。

9

五、结论与心得

本次电子设计竞赛,通过对此系统前期的方案设计、方案的选择、方案论证,中期的机械结构的的搭建,硬件的设计和具体程序的实现和后期系统的测试,最终基本能达到要求,通过这次课程设计小组成员之间的分工和合作,交流配合,各项工作有序的进行,完成这次的设计,我没每个人都有很多的收获,但最大的收获不是这个结果,而是在这个过程中,每个人都学到了很多的新知识,提升了解决问题的能力和如何与他人很好的合作。无论最终测评的结果如何,我们都该为此次比赛感到高兴和满足。

六、参考文献

[1]童诗白,华程英.模拟电子技术基础(第四版)[M].北京:高等教育出版社,2009. [2]阎石. 数字电子技术基础(第五版)[M].北京:高等教育出版社,2009.

[3]黄智伟,王彦,陈文光等.全国大学生电子设计竞赛训练教程[M].北京:电子工业出版社,2007.

[4]高吉祥,唐朝京.全国大学生电子设计竞赛培训系列教程(电子仪器仪表设计)[M].北京:电子工业出版社,2007.

[5]张友德、赵志英、涂时亮.单片微型机原理、应用与实践(第五版)[M].上海:复旦大学出版社,2009.

[6]郭天祥.新概念51单片机C语言教程.入门、提高、开发[M].北京:电子工业出版社,2009.

[7]梁明理.电子线路(第五版)[M].北京:高等教育出版社,2008. [8]谭浩强.C语言程序设计[M].北京:清华大学出版社,2012

10

附录1:电路原理图

附图 1.1 MCU 部分原理图

附图 1.2 MPU-6050 模块原理图

11

附图 1.3 驱动模块原理图

12

附录2:源程序

#include \#include \ #include \ #include \ #include \ #include \ #include \#include \ #include \

#include \ #include

static float Error=0; // Error static float LastError=0; // Error[-1] static float PrevError=0; // Error[-2] static float d_Error=0,dd_Error=0; #define pi 3.141592653f; int Kp = 10; int Ki = 0; int Kd = 0;

u8 t=0,report=1; //??è??a??é?±¨ u8 key; double stand_len=1.055,l1=0.75;// μ¥???×

float pitch,roll,yaw; //?·à-?? short aacx,aacy,aacz; //?ó?ù?è′??D?÷?-ê?êy?Y short gyrox,gyroy,gyroz; //íó?Yò??-ê?êy?Y short temp; //???è float first_yaw=0; float current_yaw=0; float x=0.15; //′??ú1·¢?í1??×?·? //c:òa·¢?íμ?×?·?

void usart1_send_char(u8 c) {

while((USART1->SR&0X40)==0);//μè′yé?ò?′?·¢?ííê±?

13

USART1->DR=c; } //′??íêy?Y?????????áé????úèí?t(V2.6°?±?) //fun:1|?ü×?. 0XA0~0XAF //data:êy?Y?o′???,×??à28×??ú!! //len:data??óDD§êy?Y??êy

void usart1_niming_report(u8 fun,u8*data,u8 len) {

u8 send_buf[32]; u8 i;

if(len>28)return; //×??à28×??úêy?Y send_buf[len+3]=0; //D£?éêy??á? send_buf[0]=0X88; //??í· send_buf[1]=fun; //1|?ü×? send_buf[2]=len; //êy?Y3¤?è

for(i=0;i

void mpu6050_send_data(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz)

{

u8 tbuf[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 } //í¨1y′??ú1é?±¨?á??oóμ?×?ì?êy?Y??μ??? //aacx,aacy,aacz:x,y,zèy??·??òé???μ??ó?ù?è?μ //gyrox,gyroy,gyroz:x,y,zèy??·??òé???μ?íó?Yò??μ

14

//roll:oá1???.μ¥??0.01?è?£ -18000 -> 18000 ??ó| -180.00 -> 180.00?è //pitch:??????.μ¥?? 0.01?è?£-9000 - 9000 ??ó| -90.00 -> 90.00 ?è //yaw:o??ò??.μ¥???a0.1?è 0 -> 3600 ??ó| 0 -> 360.0?è

void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw)

{

u8 tbuf[28]; u8 i;

for(i=0;i<28;i++)tbuf[i]=0;//??0 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; 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 }

//////////////////////////////////////////////////////

void TIM2_PWM_Init(u16 arr,u16 psc) {

//????????IO???

RCC->APB1ENR|=1<<0; //TIM2????

RCC->APB2ENR|=1<<2; //??PORTA?? RCC->APB2ENR|=1<<3; //??PORTB??

// GPIOB->CRL&=0XFF0FFFFF; //PB5?? GPIOB->CRL&=0XFFFF0FFF; //PB3??

GPIOB->CRH&=0XFFFF00FF; //PB10/PB11?? GPIOA->CRH&=0X0FFFFFFF; //PA15??

// GPIOB->CRL|=0X00B00000; //PB5??????

15

GPIOB->CRL|=0X0000B000; //PB3??????

GPIOB->CRH|=0X0000BB00; //PB10/PB11?????? GPIOA->CRH|=0XB0000000; //PA15??????

RCC->APB2ENR|=1<<0; //??????

// AFIO->MAPR&=0XFFFFF3FF; //??MAPR?[11:10] AFIO->MAPR&=0XFFFFFCFF; //??MAPR?[9:8]

// AFIO->MAPR|=1<<11; //?????,TIM3_CH2->PB5 AFIO->MAPR|=0X02000300; //??JTAG-DP??SW-DP?????

TIM2->ARR=arr; //?????????? TIM2->PSC=psc; //???????

// TIM2->CCMR1|=7<<12; //CH2 PWM2?? TIM2->CCMR1|=0X7070; //CH2 PWM2?? // TIM2->CCMR1|=1<<11; //CH2????? TIM2->CCMR1|=0X0808; //CH2?????

TIM2->CCMR2|=0X7878; /*????????,PB10/PB11???PWM*/ // TIM2->CCER|=1<<4; //OC2 ???? TIM2->CCER|=0X1111; //OC2 ???? TIM2->CR1=0x0080; //ARPE?? TIM2->CR1|=0x01; //?????3 }//CH1 PA15 //CH2 PB3 //CH3 PB10 //CH4 9B11

///////////////////////////////////////////////////////////////////////////

short get_gyrox( float first_yaw, double point, short current_gyrox,short current_gyroy)

{

double p;//μ±?°?D?? double pd;//?úí?μ??D?? double p1;//?úí????ù?è

current_gyrox=current_gyrox/(16.384);//μ?μ????ù?è pd=atan(point/stand_len);//?úí????è

p=asin(sqrt(sin(current_gyrox)*sin(current_gyrox)+sin(current_gyroy)*sin(current_gyroy)));//μ±?°???è

p1=sqrt(19.6/l1*(cos(p)-cos(pd)));

16

if(fabs(p)

gyrox=asin(sin(p1)*cos(yaw));//?úí?μ?X???ù?è if(current_gyrox>0)gyrox=fabs(gyrox); else { gyrox=-fabs(gyrox); } } else {

gyrox=-asin(sin(p)*cos(yaw)); }

return gyrox; }

short get_gyroy( float first_yaw, double point,short current_gyroy,short current_gyrox)

{

double p;//μ±?°?D?? double pd;//?úí?μ??D?? double p1;//?úí????ù?è

current_gyroy=current_gyroy/(16.384);//μ?μ????ù?è pd=atan(point/stand_len)*180/pi;//μ?μ????è?μ

p=asin(sqrt(sin(current_gyrox)*sin(current_gyrox)+sin(current_gyroy)*sin(current_gyroy)));//μ±?°???è

p1=sqrt(19.6/l1*(cos(p)-cos(pd))); if(fabs(p)

gyroy=asin(sin(p1)*sin(yaw));//?úí?μ?Y???ù?è if(current_gyroy>0)gyroy=fabs(gyroy); else { gyroy=-fabs(gyroy); } } else {

gyroy=-asin(sin(p)*sin(yaw)); }

return gyroy; }

17

temp=-temp; //×a?a?yêy }else LCD_ShowChar(30+48,260,' ',16,0); //è¥μ??oo? LCD_ShowNum(30+48+8,260,temp/168.34,5,16); //??ê???êy2?·? LCD_ShowNum(30+48+40,260,temp,1,16); //??ê?D?êy2?·? t=0; LED0=!LED0;//LEDéá?? } } t++; } }

23

double PID_gyrox(short Set_pitch,short current_pitch,int kp,int ki,int kd) {

static double Speed_gyrox=0;

Error = Set_pitch - current_pitch; //if(Error<=0)Error=-Error;

d_Error = Error - LastError; dd_Error = d_Error - PrevError; LastError = Error; // ?÷e(k) PrevError = d_Error; // ?÷e(k)-?÷e(k-1)

Speed_gyrox = kp* Error + ki * d_Error + kd* dd_Error;

return Speed_gyrox; }

double PID_gyroy(short Set_gyroy,short current_gyroy,int kp,int ki,int kd) {

static double Speed_gyroy=0;

Error = Set_gyroy - current_gyroy; //if(Error<=0)Error=-Error;

d_Error = Error - LastError; dd_Error = d_Error - PrevError; LastError = Error; // ?÷e(k) PrevError = d_Error; // ?÷e(k)-?÷e(k-1)

Speed_gyroy = kp* Error + ki * d_Error + kd* dd_Error;

return Speed_gyroy; }

void speed_control() {

short a,b;

u16 max=1000,min=500,mid=750; u16 speed1,speed2,speed3,speed4;

MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); a=get_gyrox(0,x,gyrox,gyroy);//?úí?μ?X b=get_gyroy(0,x,gyroy,gyrox);//?úí?μ?Y

18

speed1=PID_gyrox(a,gyrox,Kp,Ki,Kd); speed2=-PID_gyrox(a,gyrox,Kp,Ki,Kd); speed3=PID_gyroy(b,gyroy,Kp,Ki,Kd); speed4=-PID_gyroy(b,gyroy,Kp,Ki,Kd);

if(speed1>=max)speed1=max; if(speed1<=min)speed1=min; if(speed2>=-max)speed2=-max; if(speed2<=-min)speed2=-min; if(speed3>=max)speed3=max; if(speed3<=min)speed3=min; if(speed4>=-max)speed4=-max; if(speed4<=-min)speed4=-min;

TIM_SetCompare1(TIM2,speed1+mid); //PA15 TIM_SetCompare2(TIM2,speed2+mid); //PB3 TIM_SetCompare3(TIM2,speed3+mid); //PB10 TIM_SetCompare4(TIM2,speed4+mid); //PB11 }

/////////////////////////////////////////////////////////////////////////// void TIM3_Int_Init(u16 arr,u16 psc) {

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±?óê1?ü

TIM_TimeBaseStructure.TIM_Period = arr; //éè???ú??ò????üD?ê??t×°è????ˉμ?×??ˉ??×°????′??÷?ü?úμ??μ ??êyμ?5000?a500ms

TIM_TimeBaseStructure.TIM_Prescaler =psc; //éè??ó?à′×÷?aTIMxê±?ó?μ?ê3yêyμ??¤·??μ?μ 10Khzμ???êy?μ?ê

TIM_TimeBaseStructure.TIM_ClockDivision = 0; //éè??ê±?ó·???:TDTS = Tck_tim

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?òé???êy?£ê?

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //?ù?YTIM_TimeBaseInitStruct?D???¨μ?2?êy3?ê??ˉTIMxμ?ê±???ùêyμ¥??

19

TIM_ITConfig( //ê1?ü?ò??ê§?ü???¨μ?TIM?D?? TIM3, //TIM2 TIM_IT_Update , ENABLE //ê1?ü );

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3?D?? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //?è??ó??è??0??

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //′óó??è??3?? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±?ê1?ü NVIC_Init(&NVIC_InitStructure); //?ù?YNVIC_InitStruct?D???¨μ?2?êy3?ê??ˉíaéèNVIC??′??÷

TIM_Cmd(TIM3, ENABLE); //ê1?üTIMxíaéè }

void TIM3_IRQHandler(void) //TIM3?D?? { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //?ì2é???¨μ?TIM?D??·¢éúó?·?:TIM ?D???′

{ TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //??3yTIMxμ??D??′y′|àí??:TIM ?D???′

speed_control(); } }

int main(void) {

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(); //?óê±oˉêy3?ê??ˉ uart_init(500000); //′??ú3?ê??ˉ?a9600 usmart_dev.init(72); //3?ê??ˉUSMART MPU_Init(); //3?ê??ˉMPU6050 TIM2_PWM_Init(1000,7199);//PA2 TIM_SetCompare1(TIM2,1); //PA15 TIM_SetCompare2(TIM2,1000); //PB3 TIM_SetCompare3(TIM2,1); //PB10

20

TIM_SetCompare4(TIM2,1000); //PB11 delay_ms(300);//???e

LCD_Init(); //3?ê??ˉLCD POINT_COLOR=RED; //éè??×?ì??aoìé? LCD_ShowString(30,50,200,16,16,\ LCD_ShowString(30,70,200,16,16,\ LCD_ShowString(30,90,200,16,16,\ LCD_ShowString(30,110,200,16,16,\ while(mpu_dmp_init()) {

LCD_ShowString(30,130,200,16,16,\ delay_ms(200);

LCD_Fill(30,130,239,130+16,WHITE); delay_ms(200); }

LCD_ShowString(30,130,200,16,16,\

LCD_ShowString(30,150,200,16,16,\ POINT_COLOR=BLUE;//éè??×?ì??aà?é?

LCD_ShowString(30,170,200,16,16,\ LCD_ShowString(30,200,200,16,16,\ . C\ LCD_ShowString(30,220,200,16,16,\ . C\ LCD_ShowString(30,240,200,16,16,\ . C\ LCD_ShowString(30,260,200,16,16,\ . C\ while(1) {

key=KEY_Scan(0); if(key==KEY0_PRES) { report=!report; if(report)LCD_ShowString(30,170,200,16,16,\ else LCD_ShowString(30,170,200,16,16,\ }

if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0) { temp=MPU_Get_Temperature(); //μ?μ????è?μ MPU_Get_Accelerometer(&aacx,&aacy,&aacz); //μ?μ??ó?ù?è′??D?÷êy?Y

MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz); //μ?μ?íó?Yò?êy?Y

if(report)mpu6050_send_data(aacx,aacy,aacz,gyrox,gyroy,gyroz);//ó?×??¨ò???·¢?í?ó?ù?èoííó?Yò??-ê?êy?Y

21

if(report)usart1_report_imu(aacx,aacy,aacz,gyrox,gyroy,gyroz,(int)(roll*100),(int)(pitch*100),(int)(yaw*10));

if((t)==0) { if(temp<0) { LCD_ShowChar(30+48,200,'-',16,0); //??ê??oo? temp=-temp; //×a?a?yêy }else LCD_ShowChar(30+48,200,' ',16,0); //è¥μ??oo? LCD_ShowNum(30+48+8,200,temp/100,3,16); //??ê???êy2?·?

LCD_ShowNum(30+48+40,200,temp,1,16); //??ê?D?êy2?·?

temp=gyrox*10; if(temp<0) { LCD_ShowChar(30+48,220,'-',16,0); //??ê??oo? temp=-temp; //×a?a?yêy }else LCD_ShowChar(30+48,220,' ',16,0); //è¥μ??oo? LCD_ShowNum(30+48+8,220,temp/168.34,5,16); //??ê???êy2?·?

LCD_ShowNum(30+48+40,220,temp,1,16); //??ê?D?êy2?·?

temp=gyroy*10; if(temp<0) { LCD_ShowChar(30+48,240,'-',16,0); //??ê??oo? temp=-temp; //×a?a?yêy }else LCD_ShowChar(30+48,240,' ',16,0); //è¥μ??oo? LCD_ShowNum(30+48+8,240,temp/168.34,5,16); //??ê???êy2?·?

LCD_ShowNum(30+48+40,240,temp,1,16); //??ê?D?êy2?·?

temp=gyroz*10; if(temp<0) { LCD_ShowChar(30+48,260,'-',16,0); //??ê??oo?

22

temp=-temp; //×a?a?yêy }else LCD_ShowChar(30+48,260,' ',16,0); //è¥μ??oo? LCD_ShowNum(30+48+8,260,temp/168.34,5,16); //??ê???êy2?·? LCD_ShowNum(30+48+40,260,temp,1,16); //??ê?D?êy2?·? t=0; LED0=!LED0;//LEDéá?? } } t++; } }

23

本文来源:https://www.bwwdw.com/article/7kpd.html

Top