电子设计大赛报告_第1页
电子设计大赛报告_第2页
电子设计大赛报告_第3页
电子设计大赛报告_第4页
电子设计大赛报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、2013年全国大学生电子设计竞赛设 计 报 告 【本科组】2013年9月7日26 / 27文档可自由编辑打印摘 要 本系统以单片机为控制核心,采用角度传感器(ADXL345)实时采集自由摆旋转角度及方向,通过直流电机开环控制旋转角度,以实现控制要求。此外,为方便实验和调试,专门有1602液晶显示旋转角度模块和按键模块。本设计以PWM调速来控制角度的调整,这种外部事件驱动的程序设计方法能够及时响应摆杆角度的变化,总体程序设计简洁,响应时间快,控制精度高。由于直流电机速度大,且不易控制,因此我们根据单摆在运动过程中的状态,实时调节单摆的速度,使其在运动过程中,更加平稳。关键字: 角度传感器(ADX

2、L345) 单摆平稳运动 直流电机 AbstractThis design by STC15F2K60S2 microcontroller as the control core, system variable is obtained by Angle sensor, the application of PID control algorithm, PWM motor speed to control level inverted pendulum, realize stand in certain Angle range of dynamic balance. At the same t

3、ime can be set by keyboard operation mode and the related point of value, has a good man-machine interface. System design has simple structure, low production cost, high control precision, has the high cost performance.Key words: single chip microcomputer; Level 1 inverted pendulum; The PID目 录一、系统方案

4、分析31.1 主控制器件的选择41.2 角度测量获取模块的选择5二、系统理论分析与计算52.1 电机驱动模块的选择52.2倒立摆的控制分析52.2.1 简易旋转倒立摆及控制装置62.2.2 倒立摆旋转角度分析72.3角度测量分析以及功能介绍7三、电路与程序设计93.1电路的设计9系统总体框图如图6所示。9电路原理图详见附录1。93.2程序设计103.2.1程序功能描述103.2.2具体的程序分析设计103.2.3源程序11部分源程序见附录2。11四、测试方案与测试结果11五、总结11附录1:电路原理图13附录2:部分源程序15简易旋转倒立摆及控制装置(C题) 一、系统方案分析设计并制作一套简易

5、旋转倒立摆及其控制装置。旋转倒立摆的结构如后面文中的图2所示。电动机A固定在支架B上,通过转轴F驱动旋转臂C旋转。摆杆E通过转轴D固定在旋转臂C的一端,当旋转臂C在电动机A驱动下作往复旋转运动时,带动摆杆E在垂直于旋转臂C的平面作自由旋转。在实时控制时,对自由摆的摆角、摆速及摆动方向的测量十分关键,传感器的的精度和单摆相应速度也直接决定着最终的控制效果。据此,本系统采用以单片机为核心的倒立摆控制系统主要由以下几个功能模块构成:1、单片机控制模块2、角度测量获取模块 3、传感器平衡控制模块4、电机驱动模块5、角度值显示模块系统框图如图1所示。单片机控制角度测量获取控制平稳运动驱动 角度值显示 图

6、1 系统组成框图1.1 主控制器件的选择方案一:采用在面包板上搭建简易单片机系统在面包板上搭建单片机系统可以方便的对硬件做随时修改,也易于搭建,但是系统连线较多,不仅相互干扰,使电路杂乱无章,而且系统可靠性低,不适合本系统使用。方案二:自制单片机印刷电路板自制印刷电路实现较为困难,实现周期长,此外也会花费较多的时间,影响整体设计进程。不宜采用该方案。方案三:采用单片机最小系统。单片机最小系统包含了、A/D、D/A以及独立键盘等模块,能明显减少外围电路的设计,降低系统设计的难度,非常适合本系统的设计。综合以上三种方案,我们最终选择方案三。简单易行,又能锻炼我们自身的能力。我们选用STC15F2K

7、60S2单片机作为控制核心。1.2 角度测量获取模块的选择方案一:采用加速度传感器加速度传感器采用模拟量输出,需要放大电路及A/D完成角度的测量,并在1602上显示出来。方案二:采用电位器作为角度传感器自由摆系统的角度测量也可采用可变电阻器。精密的可变电阻器具易获得、价格低廉、重复性高、分辨率高、高频响应特性好、易使用等特点。但是可变电阻器也是模拟信号输出,需要A/D信号的转换,增加系统复杂性,而且安装要求较高,带来了硬件设计的不便。方案三:采用增量式光电旋转编码器光电编码器是一种角度(角速度)检测装置,它将输入给轴的角度量,利用光电转换原理转换成相应的电脉冲。旋转编码器具有体积小,精度高,工

8、作可靠,接口数字化等优点。但是旋转编码器操作较为麻烦,实现条件较高。综合以上三种方案,我们最终选择方案一。我们选择角度传感器ADXL345作为量化角度的器件,精度达到0.1度。ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13位),测量范围达±16g。数字输出数据为16位二进制补码格式,可通过SPI(3或4线)或I2C数字接口访问。ADXL345非常适合移动设备应用。它可以在倾检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。其高分辨率(3.9mg/LSB),能够测量不到1.0°的倾斜角度变化。二、系统理论分析与计算2.1 电机驱动模块的选择

9、步进电动机的速率较慢,对本题的部分功能例如倒立等动作的实现是十分困难的。所以我们采用PWM方式控制的直流电机。直流电机速度大,便于实现题目中旋转一周,倒立等动作,同时可以通过实时控制单摆的速率来使单摆运行更平稳,且直流电机较步进电机控制较为简单,对本系统来说较为合适。采用L298直流电机驱动模块:最大可提供2A驱动电流和24V驱动电压,可驱动小车直流电机作精确运动。2.2倒立摆的控制分析2.2.1 简易旋转倒立摆及控制装置(1) 建立倒立摆运动模型,由于系统是由轻杆和直流电机等组成,相较于直流电机,轻杆质量很小,可以近似认为旋转臂重心在直流电机中心即支架的中心附近,摆杆在沿一定半径自由摆动。(

10、2) 示意图如图2所示:图2 旋转倒立摆结构示意图 (1)在最低位置时单摆将达到最大速度,因此在不计空气阻力及固定点摩擦力的情况下利用能量守恒定律有:,得出在不超过60°,l=1.0m的情况下。计算得v=2.236m/s,由角速度与线速度之间的关系,得出= =2.236rad/s=128/s(2)自由摆周期计算根据单摆的周期计算公式;得单摆周期T=1.986ms(3)使单摆左右转摆角达到或超过-60° +60°的模型分析在自由摆在一个小角度时摆动时,自由摆运动模型便是一个物理单摆模型。本系统由于受直流电机控制,速度变化较大,不易控制,在实验初期发现单摆基本是在旋转

11、臂惯性的作用下机械的移动,于是我们通过软件控制,使其在上升过程中通过增加占空比加速,下降过程中减小占空比减速,通过不断调试,最终单摆可以平滑的运动。 在做圆周运动时,先给单摆一个较大的初速度,等到转到最高点时,给它一个反向的速度,使其反方向做圆周运动。2.2.2 倒立摆旋转角度分析对于基础部分(1),为使摆杆从处于自然下垂状态(摆角0°)开始,驱动电机带动旋转臂作往复旋转使摆杆摆动,并尽快使摆角达到或超过-60° +60°;需要保持C旋转臂始终垂直于自由摆臂E。本实验倒立摆的圆周运动,以及角度的显现是通过该角度传感器的角度特性,比较容易实现。2.3角度测量分析以及

12、功能介绍ADXL345是加速度传感器,根据重力在xyz轴上的分量,有反正弦以及反正切函数可以求得各个面或者各个轴上偏转的夹角。本系统偏转角为-180+180,由于单摆的变化始终在一个面内,所以选择X轴的偏转角,作为采样以及处理的数据。原理图如图3所示:图3 ADXL345原理图ADXL345测得的精度为0.1度,能够灵敏的检测到单摆的移动,根据传感器的返回值可以准确的控制单摆的动作。以下图4为ADXL345的功能框图,图5为引脚配置图,表1为功能描述。图4 ADXL的功能框图图5 ADXL345引脚图表1 ADXL345功能描述表三、电路与程序设计3.1电路的设计系统总体框图如图6所示。图6

13、系统总体框图电路原理图详见附录1。3.2程序设计3.2.1程序功能描述主程序根据不同的要求设定不同的控制模式,在各个模式间切换。根据设计要求,我们把程序归为几个模式,由按键切换模式。具体分配如下:模式一对应为基本要求一,即摆杆从处于自然下垂状态(摆角0°)开始,驱动电机带动旋转臂作往复旋转使摆杆摆动,并尽快使摆角达到或超过-60° +60°。模式二对应为基本要求二,即使摆尽快的旋转做圆周运动。模式三对应基本要求三,倒立摆在外力的作用下,通过角度传感器以一定的方式倒立状态不小于5秒钟,且保证摆臂C旋转角度不大于90度。3.2.2具体的程序分析设计 (1)主程序分析设

14、计图7 主程序流程图主程序流程图如图7所示,主程序由三个按键控制三个模式的选择。当系统启动时,S1按下选择模式一,S2按下选择模式二;若S3按下,那么执行模式三。(2)模式三的角度测量分析论证模式三的角度测量中断服务判断程序。选择模式三后,摆杆缓慢拉到一定的角度,同时单片机获得送来的脉冲并记录下来,拉到一定角度后摆杆停止,此时,单片机就获得了最后的角度值。按键开始后,单片机根据获取的角度值,换算为电机的转动脉冲数,送给电机,电机立即开始转动,保持平板对摆杆的垂直。最后,电机锁定,避免电机的抖动。3.2.3源程序部分源程序见附录2。四、测试方案与测试结果1测量验证摆臂带动自由摆转动角度测试方法:

15、在最低点处保持摆臂水平,启动电机开始转动,同时单摆摆动,用量角器测出摆臂偏离水平的角度是否符合模式一的要求。 2完成圆周运动测试方法:从摆杆处于自然下垂状态开始,启动电机并启动定时器,尽快增大运转速度,直至完成圆周运动。如果在30秒内仍然没有完成完美的圆周运动,则要调节电机驱动的加速模块,在30秒内尽快完成圆周运动。3外力撤除同时,启动控制旋转臂使摆杆保持倒立状态时间不少于5s;期间旋转臂的转动角度不大于90°。测试方法:将摆杆推至一个角度165度,在旋转杆上绑定角速度传感器,启动系统后,利用定时器达到这一目的。五、总结此次基于自由摆的平板控制系统设计,以STC15F2K60S2单片

16、机为控制核心,采用直流电机开环控制旋转臂E转动,利用加速度传感器ADXL345,以实现控制要求。通过不断地调试程序,不断地用自己的方法制作精美的装置,虽然很辛苦,但感受到了有史以来最大的满足感,不仅锻炼了我们坚持不懈的品质,还培养了我们敢于吃苦的精神。通过这次大赛,让我们懂得了团队合作无比的重要,让我们学到了以前没有有学到的知识,更锻炼了我们的自学能力。在此表示深深地谢意。 参考文献1全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编M.北京:北京理工大学出版社,2007.2刘宝延.步进电机直流电机及其驱动控制系统M.哈尔滨:哈尔滨工业大学出版社,1972.3周航慈.单片机应用程

17、序设计技术M.北京:北京航空航天大学出版社,1991.4 郁有文.传感器原理及工程应用M.西安:西安电子科技大学出版社,2008.5 吴建平.传感器原理及应用M.北京:机械工业出版社,2009.6 宋戈.51单片机应用开发范例大全M.北京:人民邮电出版社,2010.7 唐继贤.51单片机工程应用实例M.北京:北京航空航天大学出版社,2009.附录1:电路原理图附录2:部分源程序ADXL345 模块#include<IAP15F2K61S2.h>#include<function.h>#include<stdio.h>#include<math.h>

18、;#include"PWM.h"#define slaveaddress_I2C 0xa6double xtemp,ytemp,ztemp;float x,y,z;uchar date_xyz6;int xyz_value3;uchar xtab8,ytab8,ztab8;bit w1byte_ADXL345_I2C(uchar regaddress,uchar date)start_I2C();w1byte_I2C(slaveaddress_I2C);if(ack=0)return 0;w1byte_I2C(regaddress);if(ack=0)return 0;w1

19、byte_I2C(date);if(ack=0)return 0;stop_I2C();return 1;uchar r1byte_ADXL345_I2C(uchar regaddress)uchar temp;start_I2C();w1byte_I2C(slaveaddress_I2C);w1byte_I2C(regaddress);start_I2C();w1byte_I2C(slaveaddress_I2C+1);temp=r1byte_I2C();ack_I2C(1);stop_I2C();return temp;void readxyz_ADXL345_I2C()uchar i;s

20、tart_I2C();w1byte_I2C(slaveaddress_I2C);w1byte_I2C(0x32);start_I2C();w1byte_I2C(slaveaddress_I2C+1);for(i=0;i<6;i+)date_xyzi=r1byte_I2C();if(i=5)ack_I2C(1);else ack_I2C(0);stop_I2C();delayms(5);void get_xyz_value()readxyz_ADXL345_I2C();xyz_value0=(date_xyz1<<8)|date_xyz0;xyz_value1=(date_xy

21、z3<<8)|date_xyz2;xyz_value2=(date_xyz5<<8)|date_xyz4;void init_ADXL345()uchar i;int tempx=0,tempy=0,tempz=0; char x,y,z; w1byte_ADXL345_I2C(0x31,0x2B); /测量范围,正负16g,13位模式 w1byte_ADXL345_I2C(0x2C,0x0a); /速率设定为12.5 参考pdf13页 w1byte_ADXL345_I2C(0x2D,0x08); /选择电源模式 参考pdf24页 w1byte_ADXL345_I2C(

22、0x2E,0x80); /不使能 DATA_READY 中断 w1byte_ADXL345_I2C(0x1E,0x06); /X 偏移量 根据测试传感器的状态写入pdf29页 w1byte_ADXL345_I2C(0x1F,0x00); /Y 偏移量 根据测试传感器的状态写入pdf29页 w1byte_ADXL345_I2C(0x20,0x00); /Z 偏移量 根据测试传感器的状态写入pdf29页for(i=0;i<50;i+)get_xyz_value();tempx+=xyz_value0;tempy+=xyz_value1;tempz+=xyz_value2;x=-(tempx/

23、50/4+0.5);y=-(tempy/50/4+0.5);z=-(tempz/50-256)/4+0.5); w1byte_ADXL345_I2C(0x1E,x); /X 偏移量 根据测试传感器的状态写入pdf29页 w1byte_ADXL345_I2C(0x1F,y); /Y 偏移量 根据测试传感器的状态写入pdf29页 w1byte_ADXL345_I2C(0x20,z); /Z 偏移量 根据测试传感器的状态写入pdf29页 void getdate()get_xyz_value();x=xyz_value0*3.9/1000.0;y=xyz_value1*3.9/1000.0;z=xy

24、z_value2*3.9/1000.0;void getangle()xtemp=atan2(y,x);xtemp=xtemp/3.1415926*180;ytemp=atan2(sqrt(x*x+y*y+z*z),y);ytemp=ytemp/3.1415926*180;/ztemp=atan2(z,sqrt(y*y+x*x);/ztemp=ztemp/3.1415926*180-180;void xianshi() init_I2C();init_1602();init_ADXL345(); writestring_1602(0,0,"ADXL345:");if(r1b

25、yte_ADXL345_I2C(0)!=0xe5)writestring_1602(1,0,"no found");while(1);elsewhile(1)getdate();getangle();sprintf(xtab,"x:%3.1fxdf",xtemp);writestring_1602(0,8,xtab);delayms(10);/sprintf(ytab,"y:%3.1fxdf",ytemp);writestring_1602(1,0,ytab);/delayms(10);/sprintf(ztab,"z:%3

26、.1fxdf",z);writestring_1602(1,9,ztab);/delayms(300); 定义函数#define uchar unsigned char#define uint unsigned intsbit scl=P16;sbit sda=P17;/sbit lcdrs=P45;/sbit lcdwr=P55;/sbit lcden=P54;/extern bit ack;extern void init_I2C();extern void start_I2C();extern void stop_I2C();extern void ack_I2C(bit a)

27、;extern void w1byte_I2C(uchar date);extern uchar r1byte_I2C();extern void delayms(uint ms);extern void init_1602();extern void writestring_1602(uchar hang,uchar lie,uchar *string);/extern uchar date_xyz6;extern int xyz_value3;extern void init_ADXL345();extern void getdate();extern void getangle();ex

28、tern void xianshi();extern void _165_();extern void readxyz_ADXL345_I2C();extern uchar r1byte_ADXL345_I2C(uchar regaddress);extern bit w1byte_ADXL345_I2C(uchar regaddress,uchar date);extern void get_xyz_value();#ifndef _PWM_H_#define _PWM_H_#define uchar unsigned char #define uint unsigned int#defin

29、e full_speed 80/#define correct_speed 0sbit IN1=P10; sbit IN2=P11;sbit ENA=P12;sbit key1=P25;sbit key2=P26;sbit key3=P27;extern void delay(uint xms);extern void init();extern void zheng();extern void zhengjia();extern void zhengjian();extern void fan();extern void fanjia();extern void fanjian();exte

30、rn void stop();extern void tiyi();extern void tier();#endifIIC函数#include<IAP15F2K61S2.h>#include<function.h>#include<intrins.h>bit ack;void delay_I2C()uchar i;_nop_();_nop_();i = 12;while (-i);void init_I2C()sda=1;scl=1;delay_I2C();void start_I2C()sda=1;scl=1;delay_I2C();sda=0;dela

31、y_I2C();scl=0;void stop_I2C()sda=0;scl=1;delay_I2C();sda=1;delay_I2C();/sda=0;/scl=0;void ack_I2C(bit a)/a=1是非应答位,0是应答位if(a=0)sda=0;else sda=1;scl=1;delay_I2C();scl=0;if(a=0)sda=1;else sda=0;void w1byte_I2C(uchar date)uchar i2cnt,wtemp;wtemp=date;for(i2cnt=0;i2cnt<8;i2cnt+)wtemp=wtemp<<1;sd

32、a=CY;scl=1;delay_I2C();scl=0; sda=1;scl=1;if(sda=0)ack=1;else ack=0;scl=0;uchar r1byte_I2C()uchar i2cnt,retc;for(i2cnt=0;i2cnt<8;i2cnt+)sda=1;scl=1;retc=(retc<<1)|sda;scl=0; return (retc);1602液晶串口显示#include<IAP15f2K61S2.h>#include<intrins.h>#define uint unsigned int#define uchar

33、 unsigned charsbit SCL=P07;sbit SDA=P06;/uchar num1;void delay();void delayms(uchar i)uchar j;while(i-)for(j=110;j>0;j-);void IIC_init()SCL=1;delay(); SDA=1;delay(); void IIC_start()SDA=1;delay(); SCL=1;delay(); SDA=0;delay(); void IIC_stop()SDA=0;delay(); SCL=1;delay(); SDA=1;delay(); void IIC_r

34、espons()uchar i;SCL=1;delay();while(SDA=1)&&(i<255) i+;SCL=0;delay(); void Writebyte(uchar byte)uchar i,temp;temp=byte;for(i=0;i<8;i+)temp=temp<<1;SCL=0;delay(); SDA=CY;delay(); SCL=1;delay(); SCL=0;delay(); SDA=1;delay(); void Write_add(uchar address)IIC_start();Writebyte(0x4e);IIC_respons();Writebyte(address);IIC_respons();

温馨提示

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

评论

0/150

提交评论