电子设计大赛风板控制系统Word格式.docx

上传人:b****6 文档编号:8605802 上传时间:2023-05-12 格式:DOCX 页数:16 大小:336.31KB
下载 相关 举报
电子设计大赛风板控制系统Word格式.docx_第1页
第1页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第2页
第2页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第3页
第3页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第4页
第4页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第5页
第5页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第6页
第6页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第7页
第7页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第8页
第8页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第9页
第9页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第10页
第10页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第11页
第11页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第12页
第12页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第13页
第13页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第14页
第14页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第15页
第15页 / 共16页
电子设计大赛风板控制系统Word格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电子设计大赛风板控制系统Word格式.docx

《电子设计大赛风板控制系统Word格式.docx》由会员分享,可在线阅读,更多相关《电子设计大赛风板控制系统Word格式.docx(16页珍藏版)》请在冰点文库上搜索。

电子设计大赛风板控制系统Word格式.docx

控制帆板角度是个快速处理的过程,方案一还需采集电路对AD进行采集转化为数字量,综合考虑选择方案二。

电机驱动模块

本设计的主要目的在于控制风机的转速,因此电机驱动模块是必不可少,其方案有以下两种。

采用大功率晶体管组合电路构成驱动电路,这种方法结构简单,成本低、易实现,但由于在驱动电路中采用了大量的晶体管相互连接,使得电路复杂、抗干扰能力差、可靠性下降,我们知道在实际的生产实践过程中可靠性是一个非常重要的方面。

因此此中方案不宜采用。

采用专用的电机驱动芯片,例如L298N、L297N等电机驱动芯片,由于它内部已经考虑到了电路的抗干扰能力,安全、可靠行,所以我们在应用时只需考虑到芯片的硬件连接、驱动能力等问题就可以了,所以此种方案的电路设计简单、抗干扰能力强、可靠性好。

设计者不需要对硬件电路设计考虑很多,可将重点放在算法实现和软件设计中,大大的提高了工作效率。

基于上述理论分析和实际情况,电机驱动模块选用方案二。

显示模块方案

选用常见的数码管显示,成本低,只能显示简单的字符和数字。

显示位数较多时,轮番扫描占用CPU时间。

选用12864显示屏做显示。

12864的显示为128x64,显示面积大,数字和汉字显示容易实现,程序要求不是很高,更加方便。

方案三:

用彩屏做显示。

彩屏显示效果好,但成本高,功耗大,编程设计相对繁琐。

由于系统显示信息量较多,对比所述方案,选择12864作为系统显示器。

电源模块方案

电源是任何系统能否运行的能量来源,本系统中电源模块为主控制器、电机驱动、角度检测模块等提供电源。

通过电阻分压的形式将整流后的电压分别降为控制芯片和电机运行所需的电压,此种方案原理和硬件电路连接都比较简单,但对能量的损耗大,在实际应用系统同一般不宜采用。

通过固定芯片对整流后的电压进行降压、稳压处理(如7812、7805等),此种方案可靠性、安全性高,对能源的利用率高,并且电路简单容易实现。

根据系统的具体要求,采用方案二作为系统的供电模块。

2.系统理论分析与计算

角度确定

风板运动过程中需要实时检测角度的变化,通过计算加速度传感器传回的数据,可以测得风板的角度,加速度与角度存在如下关系:

风速控制

风速的快慢直接决定了系统风板角度的大小。

通过pid调节,单片机输出PWM波形,可对风板进行快速、准确的调整。

通过不断调整P(比例)、I(积分)、D(微分)值,系统的稳定性得到明显的提高,响应时间也加快了。

由各个参数的控制规律可知,比例P使反应变快,微分D使反应提前,积分I使反应滞后。

在一定范围内,P,D值越大,调节的效果越好。

3.电路与程序设计

硬件电路设计

系统总体框图如图所示。

图系统总体框图

单片机最小系统设计

MSP430F149单片机,其最小系统包括电源电路、复位电路、时钟电路,具体电路设计如图所示。

图最小系统原理图

角度测量设计

本系统中要实时监控风板的角度,系统采用mpu6050传感器,通过计算可迅速得出测量的角度,从而反馈给单片机进行相应操作。

显示模块设计

本系统采用LCD12864作为显示,模块电路图如图所示。

图LCD12864电路图

直流风机驱动

电机驱动芯片L298N内部包含4通道逻辑驱动电路。

是一种二相和四相电机的专用驱动器。

L298可驱动2个电机,OUT1、OUT2和OUT3、OUT4之间分别接2个电动机。

5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。

利用单片机产生PWM信号接到ENA,ENB端子,对电机的转速进行调节。

电机驱动电路如图所示。

图电机驱动

供电系统电路

在电子电路及设备中,一般都需要稳定的直流电源供电。

小功率的稳压电源的组成如图所示,它由电源变压器、整流电路、滤波电路和稳压电路四部分组成。

直流稳压电源电路如图所示。

图直流稳压电路工作原理

图LM2596可调电源模块

程序设计

程序功能描述

根据设计要求,软件部分主要实现风机转速控制以及声光报警与液晶显示。

(1)风机转速控制部分:

在键盘按下设定风板的角度后,风板15s内处于指定位置并稳定5秒以上,上下波动不超过5度,根据传感器测出的距离通过PID算法调整风机转速来调整风板的位置。

(2)键盘设置部分:

在键盘按下后,风机作出相应转速,风板达到指定位置。

(3)液晶显示部分:

液晶器显示风板位置及维持时间。

程序设计思路

系统程序主要由角度检测部分,PID调节部分和显示部分组成。

设定需求角度,通过获取测量角度值来反馈给单片机,单片机做出相应的PWM调节,从而达到需求的角度。

同时液晶将对实时采集的角度和按键值信息进行显示。

程序流程图

程序总体流程图如图所示,PWM控制流程图如图所示,12864液晶显示电路流程图如图所示。

图程序主流程图图PWM控制电路图12864液晶程序流程图

4系统测试

测试仪器

高精度的数字毫伏表、模拟示波器、数字示波器、数字万用表、指针式万用表、量角器、秒表。

测试方案

1、硬件测试

对各个模块进行测试,测试通过后使用。

2、软件仿真测试

对程序的错误和不能正确实现的部分进行调节和改正。

3、硬件软件联调

对整体功能的实现进行进一步调节。

测试结果及分析

测试结果

a.风板实际角度与角度传感器角度比较

实测角

40

60

80

100

120

130

150

角度传感器值

59

81

101

131

b.风板角度与pwm关系如表所示。

不带砝码

测试次数

设定角度

测试误差

完成时间

1

45

2

65

3

85

4

90

5

115

6

135

带砝码

7

8

9

10

11

12

测试分析与结论

根据上述测试数据,随着PWM的增加,风机的风速逐渐加大,风板设定的角度能维持3~5s,由此可以得出以下结论:

1、风机的转速可通过PWM调控且成正比关系。

2、风板实际角度与传感器检测的角度误差1度,当稳定时,角度误差小于5度波动,符合系统要求。

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

5设计总结

不说我们在电赛中学到的新知识是多么有价值,也不用说它拓宽了多少我们的眼界,只是说它让我们的能力得到提高就已足以成为我们努力付出的回报。

在这四天三夜的奋战中,遇到过很多困难,搭载硬件时,由于对量角器安装角度有误差,导致软件校准时存在较大误差,经过仔细排查,不断改变方案,最终解决了问题。

软件调试时,PID参量设置成了最头疼的问题,过大调整系统波动较大,过小调整风板很难达到预设角度。

功夫不负有心人,两天的幸苦没有白费,当风机稳定的转动到达预设角度时,喜悦之情难以言表。

理论与现实总是用通过实践联系起来的,我们在这次比赛中不再是局限于课本或是参考资料中的理论知识,而是把所有的实验都按部就班的做过,并通过实验结果对所理解的知识进行了加强巩固,更是对原来的理解偏差进行了改正,使我们对平时所学的课程更加透彻。

当然,我们自己动手焊接了不少硬件电路,用到了大量的基础知识,还把实习中学到的焊接技术,对以前的知识进行了一次整合。

再来,它增强了我们的沟通能力。

合作精神是一个团队成立成长的根本所在,我们组的队员从第一个合作项目起就十分的团结,大家各有分工,共同讨论,为我们日后的工作能力打下了基础。

这次大赛给予了我们很多,通过这次比赛大家一起交流学习,互帮互助,增强了合作意识。

老师们的帮助让我们感觉老师不再仅仅是一个指导者,更像一个家长带领我们成长,让我们跟老师之间的关系更加的紧密。

最后,我们衷心感谢我们的指导老师,也祝愿此次大赛圆满成功!

附录1:

电路原理图

附录2:

源程序

#include<

>

#include"

"

#defineP_DATA

#defineI_DATA0

#defineD_DATA0

typedefstructPID

{

intSetPoint;

-90);

//X轴角度值

return(-Roll);

}

voidlcd_printf(uchar*s,inttemp_data)

if(temp_data<

0)

{

temp_data=-temp_data;

*s='

-'

;

}

else*s='

'

*++s=temp_data/100+'

0'

temp_data=temp_data%100;

//取余运算

*++s=temp_data/10+'

temp_data=temp_data%10;

*++s=temp_data+'

*++s='

\0'

voidInitMPU6050()

//Single_WriteI2C(PWR_MGMT_1,0x80);

//复位

Single_WriteI2C(PWR_MGMT_1,0x00);

//解除休眠状态

Single_WriteI2C(SMPLRT_DIV,0x07);

//陀螺仪采样率,典型值:

0x07(125Hz)

Single_WriteI2C(CONFIG,0x06);

//低通滤波频率,典型值:

0x06(5Hz)

Single_WriteI2C(GYRO_CONFIG,0x18);

//陀螺仪自检及测量范围,典型值:

0x18(不自检,2000deg/s)

Single_WriteI2C(ACCEL_CONFIG,0x01);

//加速计自检,测量范围及高通滤波频率,典型值:

0x01(不自检,2G,5Hz)

//**************************************

//合成数据

intGetData(ucharREG_Address)

charH,L;

H=Single_ReadI2C(REG_Address);

L=Single_ReadI2C(REG_Address+1);

return(H<

<

8)+L;

//合成数据

//在12864上显示10位数据

intDisplay10BitData(intvalue)

value/=64;

//转换为10位数据

lcd_printf(dis,value);

//转换数据显示

//csj(y,x,dis);

returnvalue;

voidI2C_Start()

SDA1;

//拉高数据线

SCL1;

//拉高时钟线

delayus(5);

//延时

SDA0;

//产生下降沿

SCL0;

//拉低时钟线

//I2C停止信号

voidI2C_Stop()

//拉低数据线

//产生上升沿

//I2C发送应答信号

//入口参数:

ack(0:

ACK1:

NAK)

voidI2C_SendACK(ucharack)

SDAOUT;

if(ack)SDA1;

elseSDA0;

//SDA=ack;

//写应答信号

//I2C接收应答信号

ucharI2C_RecvACK()

ucharcy;

SDAIN;

if(SDADATA)

cy=1;

else

cy=0;

//cy=SDA;

//读应答信号

returncy;

//向I2C总线发送一个字节数据

voidI2C_SendByte(uchardat)

uchari;

for(i=0;

i<

8;

i++)//8位计数器

if((dat<

i)&

0x80)

//SDA=cy;

//送数据口

I2C_RecvACK();

//从I2C总线接收一个字节数据

ucharI2C_RecvByte()

uchardat=0,cy;

//使能内部上拉,准备读取数据,

dat<

=1;

if(SDADATA)

dat|=cy;

//读数据

returndat;

//向I2C设备写入一个字节数据

voidSingle_WriteI2C(ucharREG_Address,ucharREG_data)

I2C_Start();

//起始信号

I2C_SendByte(SlaveAddress);

//发送设备地址+写信号

I2C_SendByte(REG_Address);

//内部寄存器地址,

I2C_SendByte(REG_data);

//内部寄存器数据,

I2C_Stop();

//发送停止信号

//从I2C设备读取一个字节数据

ucharSingle_ReadI2C(ucharREG_Address)

ucharREG_data;

//发送存储单元地址,从0开始

I2C_SendByte(SlaveAddress+1);

//发送设备地址+读信号

REG_data=I2C_RecvByte();

//读出寄存器数据

I2C_SendACK

(1);

//接收应答信号

//停止信号

returnREG_data;

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2