全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx

上传人:b****6 文档编号:20969850 上传时间:2023-01-26 格式:DOCX 页数:20 大小:150.16KB
下载 相关 举报
全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx_第1页
第1页 / 共20页
全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx_第2页
第2页 / 共20页
全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx_第3页
第3页 / 共20页
全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx_第4页
第4页 / 共20页
全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx

《全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx》由会员分享,可在线阅读,更多相关《全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx(20页珍藏版)》请在冰豆网上搜索。

全国大学生电子设计竞赛设计报告B题风力摆控制系统精编版Word格式.docx

自制单片机印刷电路板

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

不宜采用该方案。

方案三:

采用单片机最小系统。

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

综合以上三种方案,选择方案三。

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

采用MPU-6050模块

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

该芯片内部整合了3轴陀螺仪和3轴加速度传感器,并可利用自带的数字运动处理器(DMP:

DigitalMotionProcessor)硬件加速引擎,通过主IIC接口,向应用端输出姿态解算后的数据。

采用ADXL345倾角传感器

ADXL345是超低功耗3轴加速度计,分辨率高(13位),测量范围达±

16g。

数字输出数据为16位二进制补码格式,可通过SPI(3线或4线)或I2C数字接口访问。

综合以上两种方案,选择方案一。

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

采用L298N驱动模块

L298N是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。

一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。

自己设计驱动模块

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

综合考虑采用方案二

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

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

大功率开关电源接模块给风机供电,单片机单独由直流电源供电。

方案简单易可靠,双电源还可保证单片机系统和电机系统的完全隔离,提高系统可靠性。

采用双电源供电。

风机驱动电源和控制电源分开,控制电机部分通过光耦隔离。

电机使用12V锂电池供电,此方案可确保系统的稳定性,但由于我们选择了12V3.2A的大功率轴流风机,锂电池无法提供足够的功率。

综合上述比较,考虑系统的安全性、稳定性以,本系统采用方案一。

二、系统理论分析与计算

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

(1)姿态采集分析

本系统采用高精度的陀螺加速度计MPU6050不断采集风力摆姿态角数据。

MPU6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP。

MPU6050和所有设备寄存器之间的通信采用400kHz的I2C接口,实现高速通信。

且内置的可编程卡尔曼滤波器,采用最优化自回归数据处理算法精确测量风力摆当前姿态角。

MPU6050对陀螺仪和加速度计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量,通过DMP处理器读取测量数据然后通过串口输出。

(2)控制算法分析

本系统采用PID算法来控制风机转动的速度。

风机开始工作后,姿态采集模块不断采集当前风力摆姿态角状态,并与之前的状态比较,使得风力摆的运动状态逐渐趋向于平稳。

PID算法控制器由舵机转动角度比例P、角度误差积分I和角度微分D组成。

其输入e(t)与输出U(t)的关系为:

它的传递函数为:

风力摆转动角度比例P:

对风力摆角速度进行比例调整,即对舵机转动速度调整。

比例越大,调节速度越快。

但不能过大,过大可能造成四风机因工作状态突变而是摆杆不稳定。

角度误差积分I:

使系统消除稳态误差,提高无差度。

加入积分调节可使系统稳定性下降,动态响应变慢。

本系统追求更快更稳完成对风力摆的控制,因此,本系统对积分调节的需要就非常弱。

即保证在不需要时系统不会受到影响。

角度微分D:

微分作用反映风力摆角度的变化率,即角速度。

具有预见性,能预见偏差变化的趋势因此能产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除。

因此,可以改善系统的动态性能。

在微分时间选择合适情况下,减少调节时间。

2、角速度的计算

根据三角函数知识,已知某一轴的角加速度可以求得对应的角速度。

三、电路与程序设计

1、电路的设计

(1)系统总体框图

系统包括STM32f103单片机;

轴流风机和电机驱动模块;

MPU-6050传感器。

由四台成九十度放置的轴流机来控制旋转臂转动从而来使摆杆摆动,在摆杆和风机平台相结合处加MPU-6050传感器.使摆杆一开始能快速得沿一条直线摆动,并且能保持画出长度偏差不大于±

2.5cm的直线段,并且具有较好的重复性。

系统总体框图如图3.1所示

图3.1系统总体框图

(2)MPU-6050子系统框图与电路原理图

1、MPU-6050子系统框图

图3.2MPU-6050子系统框图

2、MPU-6050子系统电路

图3.3MPU-6050子系统电路

(3)电机驱动模块子系统框图与电路原理图

1、电机驱动模块子系统框图

图3.4电机驱动模块子系统框图

2、电机驱动模块子系统电路

图3.5电机驱动模块子系统电路

(4)电源

电源由变压部分、滤波部分、稳压部分组成。

为整个系统提供

5V或者

12V电压,确保电路的正常稳定工作。

这部分电路比较简单,都采用三端稳压管实现,故不作详述。

2、程序的设计

(1)程序功能描述与设计思路

1、程序功能描述

根据题目要求软件部分主要实现键盘的设置和显示。

1)键盘实现功能:

2)显示部分:

2、程序设计思路

(2)程序流程图

1、主程序流程图

四、测试方案与测试结果

1、测试方案

(1)电路功能测试

每块电路板分开进行功能测试,进行逐项功能的测试。

(2)机械结构测试

搭建好机械结构后,利用等重负载进行负载承重和摇摆震动测试。

(3)硬件软件联调

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

测试结果如表1所示。

2、测试条件与仪器

测试条件:

检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。

机械结构通过负载测试和电机振动测试。

测试仪器:

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

3、测试结果及分析

(1)测试结果(数据)

(2)测试分析与结论

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

1、

2、

3、

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

五、结论与心得

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

无论最终测评的结果如何,我们都该为此次比赛感到高兴和满足。

六、参考文献

[1]童诗白,华程英.模拟电子技术基础(第四版)[M].北京:

高等教育出版社,2009.

[2]阎石.数字电子技术基础(第五版)[M].北京:

高等教育出版社,2009.

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

电子工业出版社,2007.

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

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

复旦大学出版社,2009.

[6]郭天祥.新概念51单片机C语言教程.入门、提高、开发[M].北京:

电子工业出版社,2009.

[7]梁明理.电子线路(第五版)[M].北京:

高等教育出版社,2008.

[8]谭浩强.C语言程序设计[M].北京:

清华大学出版社,2012

附录1:

电路原理图

附图1.1MCU部分原理图

附图1.2MPU-6050模块原理图

附图1.3驱动模块原理图

附录2:

源程序

#include"

sys.h"

usart.h"

delay.h"

led.h"

lcd.h"

key.h"

mpu6050.h"

usmart.h"

inv_mpu.h"

inv_mpu_dmp_motion_driver.h"

#include<

math.h>

staticfloatError=0;

//Error

staticfloatLastError=0;

//Error[-1]

staticfloatPrevError=0;

//Error[-2]

staticfloatd_Error=0,dd_Error=0;

intKp=10;

intKi=0;

intKd=0;

u8t=0,report=1;

//è

±

¨

u8key;

doublestand_len=1.055,l1=0.75;

//μ¥?

×

floatpitch,roll,yaw;

//·

à

-

shortaacx,aacy,aacz;

//ó

ù

è

′D÷

ê

yY

shortgyrox,gyroy,gyroz;

//í

ó

shorttemp;

//è

floatfirst_yaw=0;

floatcurrent_yaw=0;

floatx=0.15;

//′ú

¢í

·

//c:

ò

μ×

voidusart1_send_char(u8c)

{

while((USART1->

SR&

0X40)==0);

//μè

′yé

′·

í

USART1->

DR=c;

}

//′í

yYá

é

ú

t(V2.6°

//fun:

1|ü

.0XA0~0XAF

//data:

yYo′,×

28×

!

//len:

dataó

DD§

yYê

y

voidusart1_niming_report(u8fun,u8*data,u8len)

u8send_buf[32];

u8i;

if(len>

28)return;

//×

yY

send_buf[len+3]=0;

//D£é

send_buf[0]=0X88;

send_buf[1]=fun;

//1|ü

send_buf[2]=len;

//ê

yY3¤

for(i=0;

i<

len;

i++)send_buf[3+i]=data[i];

//′ê

len+3;

i++)send_buf[len+3]+=send_buf[i];

len+4;

i++)usart1_send_char(send_buf[i]);

//·

yYμ′ú

1

}

//·

yYoí

//aacx,aacy,aacz:

x,y,zè

μó

μ

//gyrox,gyroy,gyroz:

μí

voidmpu6050_send_data(shortaacx,shortaacy,shortaacz,shortgyrox,shortgyroy,shortgyroz)

u8tbuf[12];

tbuf[0]=(aacx>

>

8)&

0XFF;

tbuf[1]=aacx&

tbuf[2]=(aacy>

tbuf[3]=aacy&

tbuf[4]=(aacz>

tbuf[5]=aacz&

tbuf[6]=(gyrox>

tbuf[7]=gyrox&

tbuf[8]=(gyroy>

tbuf[9]=gyroy&

tbuf[10]=(gyroz>

tbuf[11]=gyroz&

usart1_niming_report(0XA1,tbuf,12);

//×

0XA1

//í

1y′ú

á

ì

yYμ

//roll:

1.μ¥0.01è

£-18000->

18000ó

|-180.00->

180.00è

//pitch:

.μ¥0.01è

£-9000-9000ó

|-90.00->

90.00è

//yaw:

.μ¥a0.1è

0->

3600ó

|0->

360.0è

voidusart1_report_imu(shortaacx,shortaacy,shortaacz,shortgyrox,shortgyroy,shortgyroz,shortroll,shortpitch,shortyaw)

u8tbuf[28];

28;

i++)tbuf[i]=0;

//0

tbuf[18]=(roll>

tbuf[19]=roll&

tbuf[20]=(pitch>

tbuf[21]=pitch&

tbuf[22]=(yaw>

tbuf[23]=yaw&

usart1_niming_report(0XAF,tbuf,28);

0XAF

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

voidTIM2_PWM_Init(u16arr,u16psc)

{

//IO

RCC->

APB1ENR|=1<

<

0;

//TIM2

APB2ENR|=1<

2;

//PORTA

3;

//PORTB

//GPIOB->

CRL&

=0XFF0FFFFF;

//PB5

GPIOB->

=0XFFFF0FFF;

//PB3

CRH&

=0XFFFF00FF;

//PB10/PB11

GPIOA->

=0X0FFFFFFF;

//PA15

CRL|=0X00B00000;

//PB5

CRL|=0X0000B000;

CRH|=0X0000BB00;

CRH|=0XB0000000;

//

//AFIO->

MAPR&

=0XFFFFF3FF;

//MAPR[11:

10]

AFIO->

=0XFFFFFCFF;

//MAPR[9:

8]

MAPR|=1<

11;

//,TIM3_CH2->

PB5

MAPR|=0X02000300;

//JTAG-DPSW-DP

TIM2->

ARR=arr;

PSC=psc;

//TIM2->

CCMR1|=7<

12;

//CH2PWM2

CCMR1|=0X7070;

CCMR1|=1<

//CH2

CCMR1|=0X0808;

CCMR2|=0X7878;

/*,PB10/PB11PWM*/

CCER|=1<

4;

//OC2

CCER|=0X1111;

//OC2

CR1=0x0080;

//ARPE

CR1|=0x01;

//3

}//CH1PA15

//CH2PB3

//CH3PB10

//CH49B11

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

shortget_gyrox(floatfirst_yaw,doublepoint,shortcurrent_gyrox,shortcurrent_gyroy)

{

doublep;

//μ±

°

D

doublepd;

//ú

μD

doublep1;

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)));

if(fabs(p)<

fabs(pd))//è

1μ±

{

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));

returngyrox;

shortget_gyroy(floatfirst_yaw,doublepoint,shortcurrent_gyroy,shortcurren

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1