电子竞赛论文 风力摆控制系统(B题)_第1页
电子竞赛论文 风力摆控制系统(B题)_第2页
电子竞赛论文 风力摆控制系统(B题)_第3页
电子竞赛论文 风力摆控制系统(B题)_第4页
电子竞赛论文 风力摆控制系统(B题)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、2015年全国大学生电子设计竞赛风力摆控制系统(B题)2015年8月15日摘 要 风力摆控制系统是一电机驱动测控系统,本系统以STC89C52单片机为控制核心,由轴流风机进行驱动,MPU6050三维角度传感器进行检测,应用PID控制算法,轴流风机调速使摆臂在一定角度范围内做自由摆及圆周运动,同时可以通过显示模块显示风力摆所处状态的各种参数。本系统结构简洁分明,达到了赛题所要求的基本功能。关键词:风力摆;STC89C52;轴流风机;PID;目 录一、 系统方案论证与选择11.系统方案12.方案比较与论证1(1)控制模块的选择与论证1(2)电机驱动模块的论证与选择1(3)角度检测模块的论证与选择1

2、(4)显示方案的论证与选择2二、系统理论分析与计算21.机械结构的设计22.风力摆状态的检测与计算23.风力摆运动状态的分析34. 驱动与控制算法3(1)电机驱动3(2)控制算法3三、电路及程序设计41.电路设计4(1)风机驱动电路设计4(2)显示模块52.程序设计5四、测试结果与分析61.测试仪器62.测试方案与结果6(1)风力摆做自由摆动的测试6(2)风力摆做幅度可控摆动的测试7(3)静止状态恢复测试73.测试结果分析7五、总结7参考文献9附录A 主要元器件清单10附录B 电路原理图11附录C 源程序12一、 系统方案论证与选择1.系统方案本系统主要由单片机控制模块、电机驱动模块、角度检测

3、模块、电源模块组成,键盘模块,显示模块组成。2.方案比较与论证(1)控制模块的选择与论证方案一:采用MSP430单片机MSP430系列单片机采用精简指令集结构,具有丰富的寻址方式,以及强大的处理能力并且具有超低的功耗。在运算速度方面,能在 8MHz 晶体的驱动下,实现 125ns 的指令周期。但是所占的指令空间较大,资料也比较少。方案二:采用STC89C51单片机STC89C51单片机算术运算功能强,软件编程灵活 、 自由度大,可用软件编程实现各种算法和逻辑控制 。由于其功耗低、体积小、技术 成熟和成本低等优点,各个领域应用广泛。并且由于芯片引脚少,在硬件很容易实现。综合上述两种方案,方案二较

4、为简单,可以满足设计要求。(2)电机驱动模块的论证与选择方案一:采用自搭接的H桥电路选用大功率达林顿管或场效应管自制H桥电路,电路原理简单,具有高效,低功率等特点,但是性能不够稳定,电路调试复杂方案二:采用L298N电机驱动模块L298N是一款单片集成的高电压、高电流、双路全桥式电机驱动。最高工作电压可达46v,内含两个H桥的高电压大电流全桥式驱动器,采用标准逻辑电平信号控制。电子开关的速度很快,稳定性也极强。综合考虑,我们选择方案二。(3)角度检测模块的论证与选择方案一:采用MPU6050芯片MPU6050集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP,

5、可用I2C接口连接一个第三方的数字传感器。并且容易上手。方案二:采用WDS35D芯片WDS35D传感器其测量范围为0360,输出电压范围与输入电压有关,输出精度为1mv,测量精度为0.1度,线性度好,长期稳定行好,灵敏度高,可实现对角位移的精确测量。结合我们自身综合考虑,我们选择方案一。(4)显示方案的论证与选择方案一:采用LED数码管显示LED显示具有硬件电路结构简单、调试方便、软件容易实现等优点,但是数码管只能显示简单的数字,显示信息量少,不能够满足此本设计的要求。方案二:采用1602字符液晶LCD液晶显示具有功耗低、显示内容丰富、清晰、且显示信息量大等优点而得到广泛应用。综合以上两种方案

6、选择,本设计选择方案二。二、系统理论分析与计算1.机械结构的设计 风力摆支架采用木条自行搭建,整体高100cm,臂杆长50cm,摆杆采用长65cm的碳维纤管,并通过万向节固定在臂杆上一端。摆杆下端悬挂二个直流风机,并在其下端安装一个向下的激光笔。碳维纤管具有强度高,质量轻,低密度等优点,广泛应用于航模,转轴等机械设备。符合本设计的要求。风力摆整体结构如图2.1所示。摆杆臂杆轴流风机图2.1 风力摆结构示意图2.风力摆状态的检测与计算采用高精度的角度传感器MPU6050不断采集风力摆姿态角数据。MPU6050集成了3轴MEMS陀螺仪,3轴MEMS加速器,以及一个可扩展的数字运动处理器DMP。MP

7、U6050和所有设备寄存器之间的通信采用400KHz的I2C接口。实现高速通信。内置的可编程卡尔曼滤波器,采用最优化自回归数据处理算法精确测量风力摆当前姿态角。MPU6050对陀螺仪和加速计分别用了三个16位的ADC,将其测量的模拟量转化为可输出的数字量,通过DMP处理器读取测量数据然后通过串口输出。3.风力摆运动状态的分析风力摆采用4个36W的直流风机为动力驱动系统,角度检测模块采集风力摆姿态角。然后将采集到的信息传送到单片机,单片机处理姿态角信息调节输出PWM的占空比,进而控制四个电机的工作状态,从而实现对风力摆的控制。4. 驱动与控制算法(1)电机驱动对于普通的直流电机,其控制方法比较简

8、单,只需给电机的两根控制线加适当的电压即可使电机转动起来,电压越高则电机转速越高。对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。PWM调速就是使加在直流电机两端的电压为方波形式,加在电机两端的电压就在VLoad和0V之间不停的跳变,对应的电机电压波形如图 2.4.1所示:T1UoThOV图2.2 PWM调速原理图此时加在电机两端的平均电压Uo=Th/(Th+Tl)*VLoad,可以通过调整PWM的占空比来改变Th和Tl的比值。这样就可以通过PWM调节加在电机两端的平均电压,从而改变电机的转速。(2)控制算法风力摆的运动是连续运动,摆杆的变化也是连续的渐变过程,因此我们

9、采用PID控制算法。对直流电机为执行器件的系统中,基本采用增量试PID算法进行控制。数字PID控制算法是以模拟PID调节器控制为基础的,由于单片机是一种采样控制,只能根据采样时刻的偏差计算控制量。但是如果采样周期T取得足够小,采样数值计算方法逼近可相当准确,被控过程与连续控制十分接近。离散化后的PID算式为:式中:K:比例系数,:偏差为零时的控制作用,:积分时间,:微分时间,T:采样时间,以上公式称为位置式算法。有它可推出增量式算法:式中各系数由反复实践后确定,实验证明,这种控制方式可以加快系统阶跃响应、减小超调量,并具有较高的精度。三、电路及程序设计1.电路设计整个系统分为系统模块、编码器模

10、块、电机驱动模块、电机模块、电源模块、键盘模块、显示模块。各模块的系统框图如图3.1所示。角度检测模块键盘模块风机模块显示模块电源模块控制模块控制模块图 3.1 系统框图(1)风机驱动电路设计L298N是ST公司生产的一种高电压,大电流电机驱动芯片。该芯片最高工作电压课高达45V,输出电流大,瞬间峰值电流可达到3A,持续工作电流为2A,额定功率25W。内含两个H桥的高电压大电流全桥式驱动器。其电路图如图3.1.1.所示。图3.1.1. 电机驱动模块(2)显示模块图3.12 LCD液晶显示模块2.程序设计本系统的软件部分主要有角度测量模块、驱动PWM模块、PID控制模块函数组成,当单片机上电后,

11、进入初始化界面,根据不同的按键,单片机进入不同的工作方式,按照不同的要求工作。角度检测传感器检测风力摆的姿态,输出电压信号,进而对直流风机控制,使风力摆做不同的摆动。流程框图如图3.2所示。结束开始初始化调用键盘程序基本要求一基本要求二基本要求三基本要求四角度检测传感器风机驱动模块图3.2 程序框图四、测试结果与分析1.测试仪器测试仪器包括秒表,量角器,米尺,自制方向图纸2.测试方案与结果(1)风力摆做自由摆动的测试从静止开始驱动风力摆,使其做类似自由摆运动,在15秒内使激光笔稳定地在自制方向图纸上画出一条长度不短于50cm的直线其线性度偏差不大于2.5cm,并具有较好的重复性。测试结果如表1

12、所示。表1 风力摆画长于50cm直线测试测试次数完成所需时间(t)偏差结果第一次测试16s3cm失败第二次测试15s2.3cm成功第三次测试13s2cm成功(2)风力摆做幅度可控摆动的测试从静止开始启动风力摆,使其15秒内完场幅度可控的摆动,长度偏差不大于2.5cm。测试结果如表2所示。表2 风力摆做幅度可控的测试测试次数完成所需时间(t)偏差结果第一次测试13s2,1cm成功第二次测试15s2.3cm成功第三次测试12s2.4cm成功(3)静止状态恢复测试将风力摆拉起一定角度(3045)放开,使其5秒内达到静止。测试结果如表4所示。测试次数完成所需时间(t)结果第一次测试6s失败第二次测试5

13、s成功第三次测试6s失败3.测试结果分析测试结果分析,系统总体上达到较好的性能,完成了赛题要求的部分功能。但是在测试过程中,在直流风机自身的重力及较弱风力的影响下,对于部分基本功能没有能够很好的完成,直流风机驱动设计上存在部分缺陷,驱动力不足,使风力摆在部分基本功能上没有很好地完成要求。如资金充足五、总结风力摆是一种复杂、时变、非线性、自然不稳定的高阶系统,许多抽象的控制理念概论都可以通过风力摆直观的直观的表现出来。本设计通过分析控制器的基本原理,结合风力摆系统实际参数,然后通过控制理论设计控制器。采用PID控制算法对直流风机调速,进而控制风力摆的运动姿态,使其达到所需要的要求。在本设计中遇到

14、的最大问题就是驱动不足,之前考虑过多种方案,但由于时间紧,任务重,系统还有一些功能未能实现,比如摆杆做类似圆周运动。若经改进,相信性能还会有进一步的提升。本次四天三夜的竞赛极大的锻炼了我们各方面的能力,虽然在结果上没能达到预想中的程度,但总体上成功与挫折交替,困难与希望并存。我们会继续努力争取更大的进去,在此路上走的更远。参考文献1 谭浩强.C语言程序设计M.北京:清华大学出版社.20122 康华光主编. 电子技术基础M. 华中理工大学电子学教研室.20103 康华光、陈大钦主编. 电子技术基础数字部份M.高等教育出版社.20104 郭天祥主编. 51单片机C语言教程M. 电子工业出版社.20

15、085 王宜怀、吴瑾、蒋银珍编著.单片机原理与应用M. 电子工业出版社.20056蒋焕文,孙续.电子测量M.3版.北京:中国计量出版社,20087蔡惟铮.集成电子技术.北京:高等教育出版社,20048李立功,等.现代电子测量计数M.2版.北京:国防工业出版社,20089 辛晓宁王晓旭. PWM调制的设计与实现 J. 电子设计工程2013,2(4):12212410高吉祥,唐朝京.全国大学生电子设计竞赛培训系列教程(电子仪器仪表设计)M.北京:电子工业出版社,2007附录A 主要元器件清单序号元器件名称型号规格数量1电阻50个102电阻100个103电阻100K个104电阻200K个105轴流风

16、机个46角度传感器MPU6050片17碳维纤管65cm根18万向节连接杆直径=10mm个19激光笔个110单片机芯片STC89C52片111液晶显示屏1602个112电机驱动模块L298N个113单片机最小系统51系列个1附录B 电路原理图附录C 源程序#include #include /Keil library #include /Keil library#include typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint;/ 定义51单片机端口#define DataPor

17、t P0 /LCD1602数据端口sbit SCL=P10;/IIC时钟引脚定义sbit SDA=P11;/IIC数据引脚定义sbit LCM_RS=P33;/LCD1602命令端口sbit LCM_RW=P34;/LCD1602命令端口sbit LCM_EN=P35;/LCD1602命令端口 sbit PWM1=P20;/1号电机sbitPWM2=P21;/2号电机/ 定义MPU6050内部地址#defineSMPLRT_DIV0x19/陀螺仪采样率,典型值:0x07(125Hz)#defineCONFIG 0x1A/低通滤波频率,典型值:0x06(5Hz)#defineGYRO_CONFI

18、G0x1B/陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#defineACCEL_CONFIG0x1C/加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)#defineACCEL_XOUT_H0x3B#defineACCEL_XOUT_L0x3C#defineACCEL_YOUT_H0x3D#defineACCEL_YOUT_L0x3E#defineACCEL_ZOUT_H0x3F#defineACCEL_ZOUT_L0x40#defineTEMP_OUT_H0x41#defineTEMP_OUT_L0x42#defineGYRO_XOUT_H

19、0x43#defineGYRO_XOUT_L0x44#defineGYRO_YOUT_H0x45#defineGYRO_YOUT_L0x46#defineGYRO_ZOUT_H0x47#defineGYRO_ZOUT_L0x48#definePWR_MGMT_10x6B/电源管理,典型值:0x00(正常启用)#defineWHO_AM_I0x75/IIC地址寄存器(默认数值0x68,只读)#defineSlaveAddress0xD0/IIC写入时的地址字节数据,+1为读取/定义类型及变量uchar dis4;/显示数字(-511至512)的字符数组intdis_data;/变量unsigne

20、d char count;/intTemperature,Temp_h,Temp_l;/温度及高低位数据/函数声明void delay(unsigned int k);/延时/LCD相关函数void InitLcd();/初始化lcd1602void lcd_printf(uchar *s,int temp_data);void WriteDataLCM(uchar dataW);/LCD数据void WriteCommandLCM(uchar CMD,uchar Attribc);/LCD指令void DisplayOneChar(uchar X,uchar Y,uchar DData);/

21、显示一个字符void DisplayListChar(uchar X,uchar Y,uchar *DData,L);/显示字符串/MPU6050操作函数void InitMPU6050();/初始化MPU6050void Delay5us();void I2C_Start();void I2C_Stop();void I2C_SendACK(bit ack);bit I2C_RecvACK();void I2C_SendByte(uchar dat);uchar I2C_RecvByte();void I2C_ReadPage();void I2C_WritePage();void disp

22、lay_ACCEL_x();void display_ACCEL_y();void display_ACCEL_z();uchar Single_ReadI2C(uchar REG_Address);/读取I2C数据void Single_WriteI2C(uchar REG_Address,uchar REG_data);/向I2C写入数据/整数转字符串void lcd_printf(uchar *s,int temp_data)if(temp_data0)temp_data=-temp_data;*s=-;else *s= ;*+s =temp_data/100+0x30;temp_dat

23、a=temp_data%100; /取余运算*+s =temp_data/10+0x30;temp_data=temp_data%10; /取余运算*+s =temp_data+0x30; /延时void delay(unsigned int k)unsigned int i,j;for(i=0;ik;i+)for(j=0;j121;j+);/LCD1602初始化void InitLcd()WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCo

24、mmandLCM(0x0c,1);DisplayOneChar(0,0,A);DisplayOneChar(0,1,G); /LCD1602写允许void WaitForEnable(void)DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();while(DataPort&0x80);LCM_EN=0;/LCD1602写入命令void WriteCommandLCM(uchar CMD,uchar Attribc)if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_(

25、);DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602写入数据/*void WriteDataLCM(uchar dataW)WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/LCD1602写入一个字符/*void DisplayOneChar(uchar X,uchar Y,uchar DData)Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;

26、WriteCommandLCM(X,0);WriteDataLCM(DData);/*/LCD1602显示字符串/*void DisplayListChar(uchar X,uchar Y,uchar *DData,L)uchar ListLength=0; Y&=0x1; X&=0xF; while(L-) DisplayOneChar(X,Y,DDataListLength);ListLength+; X+; /*/延时5微秒(STC90C52RC12M)/不同的工作环境,需要调整此函数/当改用1T的MCU时,请调整此延时函数/*void Delay5us()_nop_();_nop_()

27、;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*/I2C起始信号/*void I2C_Start() SDA = 1; /拉高数据线 SCL = 1; /拉高时钟线 Delay5us(); /延时 SDA = 0; /产生下降沿 Delay5us(); /延时 SCL = 0; /拉低时钟

28、线/*/I2C停止信号/*void I2C_Stop() SDA = 0; /拉低数据线 SCL = 1; /拉高时钟线 Delay5us(); /延时 SDA = 1; /产生上升沿 Delay5us(); /延时/*/I2C发送应答信号/入口参数:ack (0:ACK 1:NAK)/*void I2C_SendACK(bit ack) SDA = ack; /写应答信号 SCL = 1; /拉高时钟线 Delay5us(); /延时 SCL = 0; /拉低时钟线 Delay5us(); /延时/*/I2C接收应答信号/*bit I2C_RecvACK() SCL = 1; /拉高时钟线

29、Delay5us(); /延时 CY = SDA; /读应答信号 SCL = 0; /拉低时钟线 Delay5us(); /延时 return CY;/*/向I2C总线发送一个字节数据/*void I2C_SendByte(uchar dat) uchar i; for (i=0; i8; i+) /8位计数器 dat = 1; /移出数据的最高位 SDA = CY; /送数据口 SCL = 1; /拉高时钟线 Delay5us(); /延时 SCL = 0; /拉低时钟线 Delay5us(); /延时 I2C_RecvACK();/*/从I2C总线接收一个字节数据/*uchar I2C_R

30、ecvByte() uchar i; uchar dat = 0; SDA = 1; /使能内部上拉,准备读取数据, for (i=0; i8; i+) /8位计数器 dat = 1; SCL = 1; /拉高时钟线 Delay5us(); /延时 dat |= SDA; /读数据 SCL = 0; /拉低时钟线 Delay5us(); /延时 return dat;/*/向I2C设备写入一个字节数据/*void Single_WriteI2C(uchar REG_Address,uchar REG_data) I2C_Start(); /起始信号 I2C_SendByte(SlaveAddress); /发送设备地址+写信号 I2C_SendByte(REG_Address); /内部寄存器地址, I2C_SendByte(REG_data); /内部寄存器数据, I2C_Stop(); /发送停止信号/*/从I2C设备读取一个字节数据/*uchar Single_ReadI2C(uchar REG_Address)uchar REG_data;I2C_Start(); /起始信号I2C_SendBy

温馨提示

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

评论

0/150

提交评论