风帆控制 陈果概论.docx

上传人:b****2 文档编号:17514931 上传时间:2023-07-26 格式:DOCX 页数:44 大小:905.28KB
下载 相关 举报
风帆控制 陈果概论.docx_第1页
第1页 / 共44页
风帆控制 陈果概论.docx_第2页
第2页 / 共44页
风帆控制 陈果概论.docx_第3页
第3页 / 共44页
风帆控制 陈果概论.docx_第4页
第4页 / 共44页
风帆控制 陈果概论.docx_第5页
第5页 / 共44页
风帆控制 陈果概论.docx_第6页
第6页 / 共44页
风帆控制 陈果概论.docx_第7页
第7页 / 共44页
风帆控制 陈果概论.docx_第8页
第8页 / 共44页
风帆控制 陈果概论.docx_第9页
第9页 / 共44页
风帆控制 陈果概论.docx_第10页
第10页 / 共44页
风帆控制 陈果概论.docx_第11页
第11页 / 共44页
风帆控制 陈果概论.docx_第12页
第12页 / 共44页
风帆控制 陈果概论.docx_第13页
第13页 / 共44页
风帆控制 陈果概论.docx_第14页
第14页 / 共44页
风帆控制 陈果概论.docx_第15页
第15页 / 共44页
风帆控制 陈果概论.docx_第16页
第16页 / 共44页
风帆控制 陈果概论.docx_第17页
第17页 / 共44页
风帆控制 陈果概论.docx_第18页
第18页 / 共44页
风帆控制 陈果概论.docx_第19页
第19页 / 共44页
风帆控制 陈果概论.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

风帆控制 陈果概论.docx

《风帆控制 陈果概论.docx》由会员分享,可在线阅读,更多相关《风帆控制 陈果概论.docx(44页珍藏版)》请在冰点文库上搜索。

风帆控制 陈果概论.docx

风帆控制陈果概论

 

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

 

帆板控制系统(F题)

【高职高专组】

 

 

2015年7月30日

摘要

 

  本文主要介绍了一种帆板控制系统。

通过对直流风扇风速的控制,调节风力大小,改变帆板的转角。

其主控芯片为STM32F103VET6,通过PWM对电机驱动模块的控制,来调节电机的转速,同时应用电位器和风扇的信号线的返回信号作为反馈,对整个调速系统进行PWM闭环调节,以到所预期的角度。

并且介绍了在调试过程中的实时监控和数据分析应用等调试手段。

文章着重介绍核心器件的选择、各部分电路、软件的设计和调试手段

1竞赛作品上交及包装密封要求

2011年9月3日晚20:

00竞赛结束时,参赛队需要上交的材料包括:

①《设计报告》;②制作实物;③《2011全国大学生电子设计竞赛登记表》,必须封入由各校自备的纸箱。

密封后的纸箱内部所有物品及纸箱外部不得出现任何校名、参赛队代号、参赛队员姓名及其它暗记,否则视为无效。

纸箱封条由赛区组委会自备,各参赛学校必须按照赛区组委会要求的时间、地点上交。

2.《设计报告》写作与装订要求

《设计报告》文字应控制在8000字以内,第一页为300字以内的设计中文摘要,正文采用小四号宋体字,标题字号自定,一律采用A4纸纵向打印。

《设计报告》每页上方必须留出3cm空白,空白内不得有任何文字,每页右下端注明页码。

报告用纸由参赛学校自备。

3.《设计报告》的密封方法

竞赛结束时,参赛队应将设计报告密封纸在距设计报告上端约2厘米处装订,然后将参赛队的代码(代码由赛区组委会统一编制,在发放题目时通知各参赛队)写在设计报告密封纸的最上方。

设计报告装订好后将密封纸掀起并折向报告背面,最后用胶水在后面粘牢。

设计报告上不允许出现参赛队的学校、姓名等文字。

 

1系统方案1

1.1智能控制模块的论证与选择1

1.2电机驱动模块的论证与选择1

1.3角度传感器的论证与选择1

1.3显示模块的论证与选择1

2系统理论分析与计算2

2.1帆板受力的分析和计算2

2.1.1帆板转角的原理2

2.1.2帆板的受力分析2

2.2 角度传感器的分析与计算3

2.2.1角度传感器的原理3

2.2.2角度传感器的计算3

2.3电机转速的控制的分析和计算3

2.3.1电机转速的控制的分析3

2.3.2 PID算法的计算3

3电路与程序设计4

3.1电路的设计4

3.1.1系统总体原理图4

3.1.2控制系统框图与电路原理图4

3.1.3声光报警子系统框图与电路原理图5

3.1.4电源6

3.2程序的设计6

3.2.1程序功能描述与设计思路6

3.2.2程序流程图6

4测试方案与测试结果7

4.1测试方案7

4.2测试条件与仪器8

4.3测试结果及分析8

4.3.1测试结果(数据)8

4.3.2测试分析与结论8

5.设计总结8

6.参考文献9

附录1:

电路原理图10

附录2:

源程序11

 

帆板控制系统(F题)

【高职高专组】

1系统方案

本系统主要由智能控制模块、电机驱动模块、角度传感器模块、显示模块、电源模块组成,下面分别论证这几个模块的选择。

1.1智能控制模块的论证与选择

方案一:

选用传统的89C51单片机,它的结构较为先进,功能较强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,但是传统的51单片机只有32个独令的IO口且没有ADC模数转换功能和PWM输出功能。

方案二:

ST公司的STM32F103VET6是一款高性能、低功耗的32位ARM微处理器,具有高速,内部集成了ADC模数转换,同时还具有丰富的外设资源,可谓功能强大。

通过对系统的综合设计考虑以及外设的要求,我们最终选择了STM32F103VET6这款功能更完善,速度更高的单片机。

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

1.2电机驱动模块的论证与选择

方案一:

通过用三极管搭建H桥来做电机驱动模块,来控制电机的正反转,通过两个8050和8550搭建成H桥。

优点是:

结构简单,方便搭建。

缺点是:

驱动电流小。

方案二:

直接用电机驱动芯片L298,L298N是内部集成了双H桥,最大驱动电压达到36V,驱动电流达到4A,且是现有资源。

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

1.3角度传感器的论证与选择

方案一:

选用角度传感器,飞思卡尔公司的MMA7445三轴加速度传感器,不同点是它输出的是数字量,拥有低功耗,高稳定性等特点。

方案二:

线性电位WDD35D是360°连续机械转角的线性电位器,精度可达到1%,将电位器旋钮和电位器分别于帆板和连杆结合,在帆板转动的同时带动旋钮改变阻值,用AD测出电压变化,从而换算出倾斜角度。

综合以上两种方案,经小组讨论后决定选用方案二。

1.3显示模块的论证与选择

方案一:

选用12864QB,该点阵的屏显成本相对较低,适用于各类仪器,小型设备的显示领域。

比起LCD1602虽然显示的文本量大大的提高,但是还存在着不能显示图片等缺点。

方案二:

选用320*240的触摸彩屏,比起12864,彩屏存在诸多的优点,显示量大,刷新快等优点,还有其触摸功能,直接把人机交互界面整合到彩屏上,节省了键盘的输入部分。

综合以上两种方案,经小组讨论后决定选用方案二。

*注:

电源部分采用0-36V专用电源。

2系统理论分析与计算

2.1帆板受力的分析和计算

2.1.1帆板转角的原理

帆板受力如图2.1.1所示,帆板在不受水平风力的作用下,在重力的作用下应该是与水平面成90度角。

当受到水平风力时,在水平风力和帆板自身重力而形成一个斜向下的合,使帆板绕轴转动,与重力方向形成一个夹角。

,当连杆对帆板的拉力等于重力与风力的合力时,帆板可以保持平衡,即理论上的静止。

调节电机的转速从而影响风力的大小,进而影响到夹角的大小。

图2.1.1

2.1.2帆板的受力分析

图2.12受力分析

当风扇打开时,形成水平风力F,和重力共同作用在帆板上,帆板的受力如图2.12所示,帆板和垂直方向形成的夹角

(1)

由此,可以改变F的大小,进而改变夹角的大小。

从而实现系统的各项功能。

2.2 角度传感器的分析与计算

2.2.1角度传感器的原理

线性电位WDD35D是360°连续机械转角的线性电位器,精度可达到1%,将电位器旋钮和电位器分别于帆板和连杆结合,在帆板转动的同时带动旋钮改变阻值,用AD测出电压变化,从而换算出倾斜角度。

2.2.2角度传感器的计算

角度传感器其本身就是一个电位器,帆板的轴部连接着电位器的转动轴,帆板的转动会导致电位器阻值的变化,通过分析电位器上所加的电压的变化,即可得到时实的角度。

例如:

在帆板垂直的条件下,电位器上电压是aV,帆板转动到至60度的时候,电位器上的电压是bV,该电位器的阻值是呈线性分布的,可较容易的在电压和角度间完成转换。

2.3电机转速的控制的分析和计算

2.3.1电机转速的控制的分析

本系统所用到的电机为普通电器上散热所用的直流电机,较为常见,相对普通的电机,该电机还具有电机转速的检测的功能。

单片机可以直接通过GPIO口读取到这个信号,进而转换成转速。

在正常情况下,直流电机通电时,转速增加,电机断电时,转速逐渐减小,控制转速比较容易实现的方法就是通过单片机的GPIO口输出PWM波,只要调节PWM的占空比,就可以调节电机的转速了。

在控制电机转速的过程中,免不了要用到各种各样的算法,我们为了更好地控制电机的转速,我们采用了较为简单且比较实用的   算法。

2.3.2 PID算法的计算

数字PID控制算法在生产过程中是一种最普遍采用的控制方法,在冶金、机械、化工等行业中获得广泛应用。

究其原因是:

该算法蕴涵了动态控制过程中现在(P)、过去(I)和将来(D)的主要信息,具有本质上的鲁棒性、优化控制特性和智能化,算法简单明了,易于掌握。

单位反馈的PID控制原理框图如图

图2.32PID控制原理框图

单位反馈

代表理想输入与实际输出的误差,这个误差信号被送到控制器,控制器算出误差信号的积分值和微分值,并将它们与原误差信号进行线性组合,得到输出量

(5)

其中,

分别称为比例系数、积分系数、微分系数。

接着被送到了执行机构,这样就获得了新的输出信号

这个新的输出信号被再次送到感应器以发现新的误差信号,这个过程就这样周而复始地进行。

3电路与程序设计

3.1电路的设计

3.1.1系统总体原理图

系统总体框图如图1所示,

图1系统总体原理图

3.1.2控制系统框图与电路原理图

1、控制系统子系统原理图

控制系统原理图

3.1.3声光报警子系统框图与电路原理图

1、声光报警系统原理图

图2声光报警系统原理图

2、显示及触摸系统电路

图3显示及触摸系统电路

3.1.4电源

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

为整个系统提供0-36V的可调电压,确保电路的正常稳定工作。

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

3.2程序的设计

3.2.1程序功能描述与设计思路

1、程序功能描述

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

1)键盘实现功能:

设置角度值、角度的增加及减小。

2)显示部分:

显示实时的角度值、调节时间、及系统误差。

2、程序设计思路

根据题目要求实现键盘控制风扇风力以及帆板转角,设定了角度模式。

在角度模式下,用按键调整设定角度再利用PID控制算法对角度进行控制,进而给出风扇转速的控制量再通过PID控制算法对风扇转速进行稳定,从而实现稳定的帆板转角控制。

同时,为了测试方便设定45°角的一键锁定模式,锁定之后进行声光提示。

3.2.2程序流程图

1、主程序流程图

主程序流程图

4测试方案与测试结果

4.1测试方案

4.1.1硬件测试

通过示波器对电机测速反馈电路进行测试,其波形如下图4.11所示:

图4.11

4.2测试条件与仪器

测试条件:

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

测试仪器:

高精度的数字毫伏表,模拟示波器,数字万用表。

4.3测试结果及分析

4.3.1测试结果(数据)

 

角度

距离

15°

30°

45°

60°

时间(s)

10cm

15

31

44

61

2.1

7cm

16

33

47

64

1.2

9cm

15

32

45

62

1.5

11cm

14

29

44

60

2.2

13cm

13

27

43

59

3.1

15cm

12

27

42

57

4.0

4.3.2测试分析与结论

根据上述测试数据,可以清楚地看出不同的距离、不同的风力、不同的风速的数据对比,由此可以得出以下结论:

1、电机驱动方案和电机很重要,一般的电机驱动方案和直流电机很难把帆板吹到60°;如果减轻帆板重量则抖动很厉害;如果连杆太粗糙角度不好控制。

2、闭环调速系统很必要,完整的闭环系统(在电机和电源工作范围内)不在乎距离和偏向角度的问题。

3、数据处理手段多样,不但要有实施监控的,还有整体宏观曲线,同时数据的分析与拟合等多种手段。

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

5.设计总结

经过四天三夜的辛勤努力,本设计实现了题目的基本要求,遗憾的是由于我们时间紧迫,任务重,没能完成发挥部分。

我们知道系统还存在许多可以改进的地方,比如电路布局、抗干扰性等方面还有很大的提升空间,经过改进,相信性能还会有进一步的提升。

通过本次的电子设计竞赛,使得我们学到了很多知识,更锻炼了我们自己学习新知识的能力。

由于理论到实际往往存在了大的距离,往往认为理论上正确的事,在实践中存在很多意想不到的问题和突发错误,这就考验了我们的心理,实验中遇到了很多的挫折与失败,并且我们也不知道结果是如何,但我们任然在不断地坚持到底,不断地探索,困难与希望并存,我们将继续努力争取更大的进步。

6.参考文献

[1]谭浩强.C程序设计(第三版)[M].北京:

清华大学出版社,2007.

[2]张义和,王敏男,许洪昌,余春长.例说51单片机(C语言版)[M].北京:

人民邮电出版社,2010.

[3]黄智伟.全国大学生电子设计竞赛常用电路模块制作[M].北京:

北京航空航天大学出版社,2011.

 

附录1:

电路原理图

 

附录2:

源程序

/**

******************************************************************************

*@filemain.c

*@authorfire

*@versionV1.0

*@date2015-8-2

*@brief风帆测试实验

******************************************************************************

*/

#include"stm32f10x.h"

#include"bsp_ili9341_lcd.h"

#include"bsp_SysTick.h"

#include"bsp_touch.h"

#include"bsp_spi_flash.h"

#include"bsp_sdfs_app.h"

#include"bsp_exti.h"

#include"bsp_usart1.h"

#include"bsp_breathing.h"

#include"bsp_adc.h"

#include"bsp_led.h"

extern__IOuint32_tADC_ConvertedValue[datashu];

externuint32_ts;

floatADC_ConvertedValueLocal_1;

floatADC_ConvertedValueLocal_2;

externvolatileunsignedchartouch_flag;

externuint16_tADC_LCD_NUM_Y;

uint16_tTIME1=400,TIME2=600;

/**

*@brief:

主函数

*/

intmain(void)

{

//PIO_Config();

SysTick_Init();//系统定时器

//EXTI_PC13_Config();

USART1_Config();//打印串口初始化A9,10

//ADC1_GPIO_Config();//PC0,1

//TIM5_Cap_Init();//PA0

//TIM3_Mode_Config();//PWM输出

Sd_fs_init();//SD卡初始化

LCD_Init();/LCD/初始化

PD0,1,4,5,7,8,9,10,14,15¡£PE7,8,9,10,11,12,13,14,15

SPI_FLASH_Init();//外部flash初始化PA4,5,6,7

Lcd_GramScan

(2);//RAM扫描方向

Touch_Init();//触摸屏和中断初始化PE0,2,3,4¡£D13

/*等待触摸屏校准完成*/

SPI_FLASH_BufferRead(&cal_flag,0,1);

if(cal_flag==0x55){

SPI_FLASH_BufferRead((void*)cal_p,1,sizeof(cal_p));

SPI_FLASH_CS_HIGH();

}

else{while(Touch_Calibrate()!

=0);}

Palette_Init();

while

(1)

{

if(touch_flag==1)

{

if(Get_touch_point(&display,Read_2046_2(),&touch_para)!

=DISABLE)

{

LCD_DisNum(display.x,display.y,display.x,BLACK);

LCD_DisNum(display.x,display.y+12,display.y,BLACK);

Palette_draw_point(display.x,display.y);

}

}

}

/*------------------------------------------endoffile----------------------------------------*/

Bsp_touch.c

#include"bsp_touch.h"

#include"bsp_gpio_spi.h"

#include"bsp_ili9341_lcd.h"

#include"bsp_SysTick.h"

#include"bsp_spi_flash.h"

#include"bsp_adc.h"

#include"bsp_SysTick.h"

#include"bsp_usart1.h"

#include"bsp_breathing.h"

//#defineGPIO_Write(GPIOA,x)P1=x

externvolatileunsignedchartouch_flag;

longdoubleaa1=0,bb1=0,cc1=0,aa2=0,bb2=0,cc2=0;

#defineTHRESHOLD2

CoordinateDisplaySample[4]=

{

{45,35},

{10,200},

{290,200},

{200,35}

};

Coordinatedisplay;

voidTouch_Init(void)

{

GPIO_SPI_Config();

}

/*

*us¼¶±ðÑÓʱ£¬²»ÊǺܾ«È·

*/

staticvoidDelayUS(vu32cnt)

{

uint16_ti;

for(i=0;i

{

uint8_tus=12;/*ÉèÖÃֵΪ12£¬´óÔ¼ÑÓ1΢Ãë*/

while(us--)/*ÑÓ1΢Ãë*/

{

;

}

}

}

staticvoidXPT2046_WriteCMD(unsignedcharcmd)

{

unsignedcharbuf;

unsignedchari;

//TP_CS

(1);

TP_DIN(0);

TP_DCLK(0);

//TP_CS(0);

for(i=0;i<8;i++)

{

buf=(cmd>>(7-i))&0x1;

TP_DIN(buf);

//Delayus(5);

DelayUS(5);

TP_DCLK

(1);

//Delayus(5);

DelayUS(5);

TP_DCLK(0);

}

}

 

staticunsignedshortXPT2046_ReadCMD(void)

{

unsignedshortbuf=0,temp;

unsignedchari;

TP_DIN(0);

TP_DCLK

(1);

for(i=0;i<12;i++)

{

TP_DCLK(0);

temp=(TP_DOUT)?

1:

0;

buf|=(temp<<(11-i));

TP_DCLK

(1);

}

buf&=0x0fff;

return(buf);

}

uint16_tXPT2046_ReadAdc(uint8_t_ucCh)

{

//uint16_tusAdc;

XPT2046_WriteCMD(_ucCh);

returnXPT2046_ReadCMD();

}

voidDrawCross(uint16_tx,uint16_ty)

{

LCD_Clear(x,y,20,1,RED);

LCD_Clear(x+10,y-10,1,20,RED);

}

/*

*¶ÁÈ¡TPxyµÄADÖµ(12bit£¬×î´óÊÇ4096)

*/

voidTouch_GetAdXY(int*x,int*y)

{

intadx,ady;

//adx=Read_X();

adx=XPT2046_ReadAdc(CHX);

DelayUS

(1);

//ady=Read_Y();

ady=XPT2046_ReadAdc(CHY);

*x=adx;

*y=ady;

}

Coordinate*Read_2046(void)

{

staticCoordinatescreen;

intm0,m1,m2,TP_X[1],TP_Y[1],temp[3];

uint8_tcount=0;

/*×ø±êXºÍY½øÐÐ9´Î²ÉÑù*/

intbuffer[2][9]={{0},{0}};

do

{

Touch_GetAdXY(TP_X,TP_Y);

buffer[0][count]=TP_X[0];

buffer[1][count]=TP_Y[0];

count++;

}

while(!

INT_IN_2046&&count<9);

/*Èç¹û´¥±Êµ¯Æð*/

if(INT_IN_2046==1)

{

touch_flag=0;

}

if(count==9)

{

temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;

temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;

temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;

m0=temp[0]-temp[1];

m1=temp[1]-temp[2];

m2=temp[2]-temp[0];

m0=m0>0?

m0:

(-m0);

m1=m1>0?

m1:

(-m1);

m2=m2>0?

m2:

(-m2);

if(m0>THRESHOLD&&m1>THRESHOLD&&m2>THRESHOLD)

return0;

if(m0

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

当前位置:首页 > 外语学习 > 日语学习

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

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