全国大学生电子设计竞赛B题风力摆设计报告
- 格式:docx
- 大小:23.73 KB
- 文档页数:12
2015年全国大学生电子设计竞赛风力摆控制系统( B 题)2015 年8 月15 日本文以IAP单片机为控制核心,可以在运行过程中对User Flash的部分区域进行烧写;MPU605是陀螺仪与加速度传感器的结合,可实时检测出风力摆的状态并由单片机处理后通过PID控制算法实现闭环调节,实现对直流电机转速的控制以此来达到风力摆的动态平衡。
系统设计结构简单,制作成本低,控制精度高。
风力摆运行状态由液晶显示,智能性好,反应速度快,具有良好的人机交互界面。
目录一、系统方案 (1)1、电机的论证与选择12、单片机的论证与选择...............................................................13、电机驱动电路的论证与选择1二、系统理论分析与计算22.1保证系统稳定性的方法 (2)⑴选取合适的材料搭建支架 (2)(2)选取适宜的硬件提高精准度 (2)1、小型直流电机电路32、显示模块的电路33、电机驱动电路3三、系统设计31、系统流程图32、程序设计(见附录) ................................................................3四、测试方案及结果31、测试仪器32、测试结果33、测试分析 (5)五、结论与心得5六、参考文献5附录1 :源程序 (6)风力摆控制系统( B 题)【本科组】一、系统方案本系统主要由控制处理模块、角度,加速度检测模块、驱动模块、电源模块、显示组成,下面分别论证这几个模块的选择。
1、电机的论证与选择方案一:采用步进电机。
步进电机具有动态响应快、易于起停,易于正反转及变速的优点。
但缺点是它以步进式跟进,角度小于一个步距角时是系统响应盲区,而且经过测试步进电机在控制旋转臂时,抖动性大并且容易出现卡顿现象,所以不适合风力摆的控制。
方案二:采用小型轴流风机。
扭矩大,体积小,驱动电路简单,稳定强,负载能力强等优点。
综合比较以上两种电机,结合设计所需平稳的控制摆杆处于竖直状态,故选择小型轴流风机。
2、单片机的论证与选择方案一:采用AT89C52 单片机。
AT89C52 单片机是一种低功耗、高性能CMOS 8 位微控制器,具有8K 在系统可编程Flash 存储器。
方案二:采用IAP15F2K61S2 单片机。
IAP 系列单片机具有低功耗、高速度、超强抗干扰等优点。
方案三:采用STC89C52RC 单片机本身带有有8 路十位AD 转换和2 路PWM ,而且处理速度比一般单片机要快,精度高。
综合比较以上三种单片机。
为了更方便、高精度、高速度地控制系统,完成题目要求,故选择IAP15F2K61S2 单片机为主控芯片。
3、电机驱动电路的论证与选择方案一:使用L298N 芯片。
L298N 是一种高电压、大电流电机驱动芯片,最高工作电压可达46V ,峰值电流可达3A ,持续工作电流为2A 。
可以通过I/O 口提供信号方便地控制直流电机或步进电机,但是容易发烫。
方案二:使用BTS7960芯片。
BTS7960芯片是集成的大电流半桥驱动,其内部包含一片NMOS、一片PMOS和一片半桥门集驱动。
其输入信号为标准的TTL电平,直接与单片机相连就可以,降低系统的不稳定因素,而且可以用PWM调速。
综合比较以上两种驱动芯片,由于电路要求精度高、稳定性好,能满足速度变换要求,故选择L298N芯片为驱动芯片。
二、系统理论分析与计算2.1保证系统稳定性的方法经分析计算,本设计的稳定性主要有2个方面。
与外围硬件设备稳定性有关,包括支架的稳定性、检测及控制模块安装的稳定性。
控制稳定性,包括电机的转动稳定性,单片机输出电平的稳定性。
本设计从以下方面减小损耗以提高效率:(1) 选取合适的材料搭建支架采用合适大小的木棍作为支架的材料,不仅更容易加工,还具有相当一定程度的稳定性。
然后传感与控制模块用胶枪打胶凝住,不仅稳固,还不易损坏器件,便于器件的回收利用。
(2) 选取适宜的硬件提高精准度为让控制更稳定,选用了IAP15F2K61S2单片机作为主控芯片,MPU6050作为角度与加速度传感模块。
使系统更具稳定性。
2.2各有关量的计算单摆的周期对于本系统具有重要作用,公式为T=2 n^ l / g);而需要控制电机的输出功率来控制所需力的大小,公式为P=1.732X U X I X cost,即有用功功率;在提供纸板上需用激光笔画出制定长度的线段,所以就要利用单摆的长及高度计算所画的线段长,公式为D=(Lcos 0 +h)tan B。
三、电路与程序设计1、小型直流电机电路图1 小型直流机电路图2、显示模块的电路由于1602 采用并口传输,速度比12864 串口快。
数码管就不说了,没有驱动要加CD4511 等外加电路。
1602内部集成有显示芯片,可以识别英文字母、阿拉伯数字,所以我们选用1602 液晶显示屏作为显示模块。
图2 显示模块电路图3、电机驱动电路图3 电机驱动电路图三、系统设计1、系统流程图图4 系统程序流程图2、程序设计(见附录)四、测试方案及结果1、测试仪器秒表、自制风力摆、量角器、长直尺、小型风扇、带方向角度的硬纸板。
2、测试结果①驱动风力摆工作,使激光笔稳定地在地面画出一条长度不短于50cm的直线段,来回五次,记录其由静止至开始自由摆时间及最大偏差距离。
测试结果如表1 所示。
②设置风力摆画线长度,驱动风力摆工作,记录其由静止至稳定摆动的时间及在画不同长度直线时的最大偏差距离。
测试结果如表2所示③设置风力摆画线长度,驱动风力摆工作,记录其由静止至稳定摆动的时间及在画不同角度直线时的最大偏差。
测试结果如表3所示。
④将风力摆拉起一定角度放开,驱动风力摆工作,测试风力摆制动达静止状态所用时间。
测试结果如表4所示:⑤以风力摆静止时激光笔的光点为圆心,设置风力摆画圆半径,驱动风力摆用激光笔在地面画圆,记录其画三次圆所用时间以及最大偏差距离,重复测试三次。
改变圆半径再次测试,重复以上操作四次。
测试结果如表5所示:⑥在⑤的基础上,使用一台60W台扇在距离风力摆1m距离处向其吹5s后静止, 记录风力摆恢复画圆状态时间及偏差测试结果如表6所示。
3、测试分析系统总体上达到较好的性能。
风力摆能够实现功能,且运行的时间误差在允许范围内。
风力摆运行性能较好,制作成本低,性价比较高。
倒立摆控制的误差主要来源于小型轴流风机、传感器和风力摆机械结构。
在运动中摩擦力不均匀。
因此,采用具有更好启动、制动和调速特性直流电机、精度更高的传感器改进硬件结构,以消除控制误差, 使控制精度更高。
五、结论与心得在此次比赛中我们感觉最难做的就是角度控制这方面,在这次风力摆系统中,我们采用了四个轴流风机控制风力摆。
在控制过程中只要有一个电机速度过快或者过慢就会影响这个系统的运动,所以对这次程序设计及其调节带来很大的难度。
为了更好的控制, 我们利用了陀螺仪,根据加速度变化来调节每个电机转速,从而解决了这一难题。
六、参考文献[1] ?谭浩强.C语言程序设计[M].北京:清华大学出版社,2012[2] 姚金生郑小利等编着元器件电子工业出版社,2004年10月第1版[M][3] 张德江.计算机控制系统.北京.机械工业出版社附录1:源程序#include "lcd1602.h"#include <intrins.h>/*********************************************** 函数名称:Delay_us功能:STC仃单片机1us延时程序入口参数:us:延时的微秒数返回值:无备注:内部时钟11.0592MHz************************************************ void Delay_us(unsigned int us){while( us--){_nop_();}}/************************************** 函数名: LCD1602_WriteCMD* 函数功能: 向lcd1 602写指令* 入口参数: cmd: 指令* 返回: 无* 备注:无**************************************/void LCD1602_WriteCMD(unsigned char cmd) {EN=0;RS=0;RW=0;Delay_us(10);EN=1;Delay_us(10);DataPort=cmd;Delay_us(10);EN=0;}/*********************************************** 函数名称:LCD1602_WriteDAT 功能:向lcd1602 写数据入口参数:dat :数据返回值:无备注:无************************************************/ void LCD1602_WriteDAT(unsigned char dat) EN=0;RS=1;RW=0;{Delay_us(10);EN=1;Delay_us(10);DataPort=dat;Delay_us(10);EN=0;}/***********************************************函数名称:LCD1602_CheckBusy功能:检测lcd1602 忙信号入口参数:无返回值:无备注:无************************************************/void LCD1602_CheckBusy(void){unsigned char temp;DataPort=0xff; //做输入先置高,12c 系列单片机需转换端口模式while(1){} }EN=0;RS=0;RW=1;Delay_us(10);EN=1;Delay_us(10);temp=DataPort; //读取忙通道数据Delay_us(10);EN=0;if((temp&0x80)!=0x80){break;}。