机电课程设计报告_第1页
机电课程设计报告_第2页
机电课程设计报告_第3页
免费预览已结束,剩余11页可下载查看

下载本文档

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

文档简介

1、机电测控综合训练课程设计报告姓 名:梁志开班 级:机实 1001 班学 号: U201010585 指导老师:何岭松陶凌阳林向南目录一、设计背景3二、设计内容3三、程序框图4四、程序编写6五、设计小结9六、程序附件9一、设计背景 本次课程设计名为机电测控综合训练课程设计,以课程提供的 测控实践平台的实验条件为基础, 自选一个机电测控方面的题目, 在 3周时间内完成一个小型机电测控系统的设计与制作工作。课程设计 旨在帮助我们了解和掌握机电测控产品设计、 开发的实施过程和主要 环节,培养根据工程任务,综合应用四年所学光、机、电、计算机等 知识,提出解决方案、实施解决方案、完成工程任务的能力以及理论

2、 联系实际的设计思想和解决工程实际问题的能力。 本次课程设计所选的机器人小车为德普施科技有限公司生产的宝贝车机器人,采用的51单片机问8位的AT89S52单片机,可反复 擦写 1 000次,配置十分灵活,可扩展性强。二、设计内容 根据本次课程设计的宗旨与条件,我们组经过思考确定了设计 项目,即安全指南车。 本组安全指南车的项目采用的机器人小车为德 普施科技有限公司友情提供的宝贝车机器人,采用AT89S52单片机对 小车轮上的舵机进行控制,传感器使用的是HM55甘旨南针模块和超声 波传感器各一个。经过硬件的组装与调试之后,通过HM55BW南针模 块能够对该车进行持续不断的角度测量, 并通过舵机控

3、制使该样车实 现在初始方向任意的情况下均能自动转向, 最终旨向南方行驶; 接着, 又考虑到旨南车在一直朝南行驶的途中可能会撞到障碍物, 会给旨南 车带来安全问题, 因此,本旨南车又使用超声波传感器进行距离测量, 当测量到与障碍物的距离达到危险距离的时候,程序控制指南车停止 行驶,保障指南车的安全,是为安全指南车。本次安全指南车的设计过程总共设计到三个设计内容,分别由本组的3个人分别承担完成。三个设计内容包括传感器测控电路的设 计、制作、调试(由本组的王健同学完成),单片机测控程序的设计、 编写、调试(由本组的梁志开同学完成),LabView测控程序的设计、 编写、调试(由本组的梅志远同学完成)

4、。下面的报告内容将着重介绍由我自己完成的 keil单片机C程序 的设计内容。三、程序框图任何程序的设计首先都需要进行程序思路的探索,本次课程设 计的安全指南车也经过了这一过程。下图为安全指南车的程序思路流 程图。如上图可以知道本次设计的安全指南车的程序思路流程,首先小车执行指南针指南程序,能够在任意方位都转成朝南方行驶,接着执 行超声波测距程序,持续与前方物体经行距离测量,遇到障碍物时, 如果行驶至距离障碍物的安全距离以内时, 单片机程序控制舵机停止 转动进而使小车停止行驶,从而保证指南车的安全。有了程序思路流程图之后,就需要设计正规的程序框图,下面即四、程序编与本部分内容仅介绍几个重要部分的

5、程序编写内容,更加完整的kei 1单片机C程序将会在第六节程序附件中展示。1、指南针坐标值获取程序void Coirpas3_Get( unsigned char status;x = 0x0000;Y - 0x0000;HIGH_EN;LOWEN;ShiftOut(MSBFIRSI, Reset, 4);HIGH_EN;LOWEN;ShiftOut(MSBFIRST, Measuze, £status = 0;doLOW_EN;ShifWut MSBFIR.ST, Report, ;status = Shiftln(MSBFIRST, 4;while (status != Read

6、y);x = Shiftln(MSBFIRST, 11;y = Shiftin(MSBFIRST, 11;HIGH_EN;if (y & 0x0400)V = y I NeqMak;if (x & 0x0400)x - x | NcgMask;由指南针传感器的工作原理可知,指南针的指南原理即算出地 磁场的坐标在指南针所处位置坐标上的坐标值x、y,经过angle 0=arctan(-y/x)的计算即可算出方向角0的值。因此,必须首先获得x、y的值。2、指南车指南程序void rLain ()<ufirt Imt (;whiled) =Compass_Get_Axe5 ()

7、;/MSangle =(y, x;radian - angle * 100;degrees = radian*5.29;degrees = (degrees/!0)+1E00;degrees - degrees/10;printf ("x=%d f y-%d f degree5=%dnTTf xr y, degrees);if (degrees 100fidegree3<-23Right_Tum (;1 _else it(degrees>=20£degrees<-100)<break;else Lefc_Turn();/delay nnta (100

8、J ; _dis (;经过计算得出B值之后,再转化为弧度即得到角度的测量。然后通过if语句判断不同角度情况下调用不同的运动函数(因为指南针传感器安装时其前方并非对着车前方,而是有90度的偏离,故在程序中看到的判断角度与之前程序框图的角度有90度的偏离)。指南车转向南方之后便跳出循环,进入dis()函数即超声波距离测 量函数。3、超声波测距程序void dis (IO znit(): test»0; timeH=0; riireL=0;SIG = 0; whiled)EA=3;SIG - 1;delay_nus(5);SIG =_0;delay_nus(750; succeed fla

9、g=9;5IG-1;EA=1;EX0=l;TH0=0;TL0=0;TF0-0;TR0=-1;delay_nms(20;TR0=0;EX0=0;if (succeed f lag=l) _distance=tiiue/5°prinvf (*Ttie distance is h); prinEf(n%d cmAn",distance); if(diBtance>=10)For_Ward(); _else if(distance<10)Stop ();break;while (1) Stop ();:-先经过初始化,然后在信号端给触发信号使超声波传感器发射超生波,然后

10、经反射回来的超声波测出超声波反射时间,进而通过公式算出距离,然后判断与障碍物之间的距离,若距离大于安全距离则继 续向前行驶,并继续重复超声波测距的程序,反之若小于安全距离则 调用停止程序,并跳出超声波测距的循环程序。五、设计小结通过为期3周的机电测控综合训练课程设计, 我认为自己在复习 以前学过的知识的同时,也让我学到了不少工科生所应该具备的能 力,动手实践的能力、团队合作的能力、与人沟通的能力等等。在顺 利完成本次课程设计的同时, 也让我感受到学习机械的乐趣, 将机械 知识运用在实际生活娱乐中的乐趣, 运用机械改善生活美化生活的乐 趣。下面就说一说在承担这个项目kei 1程序编写中遇到的几个

11、问 题以及解决方法吧。1、完全指南无法实现因为本程序是每次测量之后会调用相关的运动函数, 故存在一个 最小的运动角,所以本程序有南方左右误差 10 度。2、如何提高指南车的运动精度与运动平稳性 同上,提高的方法有两个:减小最小运动角,减小方向误差角 度。六、程序附件以下是完整的kei1程序。#include<AT89X52.h>#include<uart.h> #include<math.h>#include <stdio.h>#include<intrins.h>#include "serial.h"#inclu

12、de "boebot.h"#define SIG P3_2#define HIGH_ENP2_2 = 1#define LOW_EN P2_2 = 0#define Reset 0x00#define Measure 0x08#define Report 0x0C#define Ready 0x0C#define NegMask 0xF800 int succeed_flag,test,timeH,timeL,time,distance;double angle;int flag=0;int x;int y;int counter;int radian;int degree

13、s;double angle;void Stop(void)for(counter=1;counter<=5;counter+) / 停止P1_1=1;delay_nus(1500);P1_1=0;P1_0=1;delay_nus(1500);P1_0=0;delay_nms(20);void For_Ward(void)向前for(counter=1;counter<=5;counter+) /P1_1=1;delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0;delay_nms(200);void Left_Turn(voi

14、d)for(counter=1;counter<=5;counter+)/ 向左转 1/4 圈 P1_1=1;delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0;delay_nms(20);void Right_Turn(void)for(counter=1;counter<=5;counter+)/ 向右转 1/4 圈 P1_1=1;delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0; delay_nms(20);void Back_Ward(void)for(coun

15、ter=1;counter<=5;counter+)/ 向后退P1_1=1; delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0; delay_nms(20);void IO_init()/ 定时器 0 用于测量脉冲宽度TMOD |= 0x01;TF0 = 0;TR0 = 0;IT0 = 0;/ 定时器 1 为工作模式 1(16 位自动重装模式 )/ 溢出标志清零/ 开启定时器 , 但定时器的触发由 /INT0 决定/ 外部中断由低电平触发 ,也可设置为 1, 用下降沿触发,而在此时,是高电平;ET0 = 1;EA = 1;/ 允许

16、定时器 0 中断/ 全局允许中断/ 定时器 1 用于硬件串口通信TMOD |= 0x20; /SCON = 0x50; /TH1 = 0xFD; /TL1 = 0xFD;TR1 = 1; /TI = 1;定时器 0 方式 2.8 位自动重装模式 模式 1,8 位数据波特率为 9600起动定时器void dis()IO_init(); test=0;timeH=0; timeL=0;SIG = 0;while(1)EA=0;SIG = 1; delay_nus(5);SIG = 0; delay_nus(750); succeed_flag=0;SIG=1;EA=1;EX0=1;TH0=0;TL

17、0=0;TF0=0;TR0=1; delay_nms(20);TR0=0;EX0=0; if(succeed_flag=1) time=timeH*256+timeL; distance=time/58; printf("The distance is "); printf("%d cm.n",distance); if(distance>=10)For_Ward();else if(distance<10)Stop();break;while(1) Stop();void exter() interrupt 0timeH=TH0; time

18、L=TL0; succeed_flag=1;EX0=0;void timer0() interrupt 3TH0=0;TL0=0;void Compass_Get_Axes()unsigned char status;x = 0x0000;/EN 为低电平有效/ 输入 Reset 指令,并执行y = 0x0000;HIGH_EN;LOW_EN;ShiftOut(MSBFIRST, Reset, 4); HIGH_EN;LOW_EN;ShiftOut(MSBFIRST, Measure, 4); / 输入测量指令,测量 status = 0;doHIGH_EN;LOW_EN;ShiftOut(MSBFIRST, Report, 4); / 输入 Report 指令,返回校验字符 statu

温馨提示

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

评论

0/150

提交评论