基于stm32平衡小车论文_第1页
基于stm32平衡小车论文_第2页
基于stm32平衡小车论文_第3页
基于stm32平衡小车论文_第4页
基于stm32平衡小车论文_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、 本科生毕业论文(设计)( 2015 )届 论文 (设计) 题目: 基于单片机的自平衡小车的设计与实现 学 院: 电子工程学院 专 业: 电子信息工程 学 号: 201113007619 姓 名: 何建安 指导老师姓名及职称: 丘森辉 助教 目 录第一章 绪论21.1研究背景31.2研究现状31.3研究意义31.4论文的组织结构3第二章 系统的方案设计与论证42.1系统设计要求42.2系统的总体设计52.3方案论证52.3.1 车体的比较与选择52.3.2 控制系统的比较与选择62.3.3 电机驱动的比较与选择72.3.4 电源及稳压模块的比较与选择72.3.5 调速模块的比较与选择72.3.

2、6 显示与提示音的选择82.3.7平衡槽的制作82.3.8系统框图92.3.9最终方案10第三章 系统硬件设计113.1 STC12C5A60S2单片机硬件结构113.2供电电源模块123.3 电机驱动的设计123.4路面检测模块设计143.5测速模块153.6显示电路设计153.7寻迹原理163.8金属探测仪17第四章 软件设计184.1循迹功能软件设计184.2 金属探测功能软件设计184.3 LCD1602液晶显示软件设计184.4 主程序流程图19第五章 测试数据、测试结果分析及结论205.1测试数据205.2测试结果分析21第六章 设计总结216.1 对设计的小结216.2 设计收获

3、体会216.3 对设计的进一步完善提出意见或建21致谢22第 0 页第 35 页广西师范大学漓江学院2015届本科生毕业论文(设计)基于单片机的自平衡小车的设计与实现 专业:电子信息工程 学号:201113007619 学生姓名:何建安 指导老师姓名:丘森辉内容摘要 本次设计的硬系统主要由供电电源模块、主控系统模块、直流电机驱动模块、路面检测模块和液晶显示模块几个部分组成。供电电源是整个系统的支持者,它给整个设计系统提供能量,使系统能够运转起来;主控系统是整个系统的控制者,它指挥整个系统的运行,是整个系统的大脑;整个系统运行的动力是直流电机驱动模块;路面检测模块则相当于整个系统的眼睛,它能够准

4、确地检测的路面的情况,并将路面的情况反馈给主控系统;液晶显示模块是将整个系统的运行情况显示出来。关键字: 80C51单片机 光电外红反射循迹 金属探测器 电动小车 PID算法 PWM调速第一章 绪论 智能可以按照预先设定的模式在自动的运作,可应用于科学勘探等等用途,智能电动车就是其中的一个体现。本设计的简易智能电动车,采用AT89C51单片机作为小车的检测和控制核心;利用金属探测器探测路面上的硬币,以及用陀螺仪控制平衡槽的角度,采用光电传感器来检测路上感应到的黑线,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺

5、着S形黑线行驶;采用1602LCD实时显示小车行驶的时间,小车停止行驶后,轮流显示小车行驶时间。1.1研究背景在科技不断发展进步的今天,对平衡小车的研究具有很重要的意义,现如今各高校在对小车平衡小车的研究上也在不断的投入资源,更是每一年的电子设计竞赛都会选择这类控制类的设计来刺激同学们对其相关控制策略的研究。这不仅提高了学生的学习积极性,更是提高了同学们对科学的认识。为此本设计主要是设计一个由AT89C51单片机控制器控制的智能小车平衡控制系统。系统为了直观的看出电动车的运行状态,用LCD1602液晶将电动车的所有参数显示出来。1.2研究现状平衡小车是一项机器人技术,它是一种前沿技术,领域更新

6、速度很快,他涉及了很多科学技术,比如计算机技术,通信技术,人工智能技术,材料科学,物理方法,仿生学等各种高新技术。自从控制小车出现,就迅速成为了人们研究学习控制理论的一个很好的选择平台,其具有很大的理论学习意义。近年以来,平衡小车引起了国内外很多研究机构和机器人爱好者,以及各高校的极大关注,各种基于不同目的,不同的设计方法以及不同的控制策略的平衡系统孕育而生,呈现出一种积极的研究姿态。1.3研究意义自平衡小车是机器人科学研究中一个很重要的领域,它随着相关的科技领域的进步不断的进步与发展。自平衡小车属于移动机器人领域,与航天技术一样,机器人领域的水平同样可以体现出一个国家科技技术的能力。平衡小车

7、是可以看做一个复杂的小系统,它由多样模块来对他进行各种控制以及实现很多功能,同样在它身上,我们对它的各种控制方法进行比较,有助于我们更好的学习控制类方面以及其它知识。1.4论文的组织结构第一章 本设计的设计任务;第二章 系统总体设计:主要阐述系统的功能和总体方案的选择;第三章 系统的硬件设计:主要阐述系统硬件电路的分析及实现;第四章 系统的软件设计:主要阐述系统软件设计及具体实现;第五章 系统测试:主要阐述系统功能、性能测试和结果分析;第六章 结论:主要阐述系统设计的原理、功能、实现方式。第2章 系统的方案设计与论证2.1系统设计要求 设计并制作一辆带有自动平衡系统的电动寻线智能小车,其结构如

8、图1 、图2所示。在电动小车上通过支架固定安装一台电机,钢珠导槽固定在电机转轴上;驱动电机可以控制导槽摆动; 小车能通过寻线自动从场地(图3)A点走到车库F点。要求(1)当电动车从中心点A发车时,会沿着黑色是引导线驶向终点F,且电动车在此过程中要一直在黑色引导线上。(2)在AB段引导线当电动车遇到硬币时,电动车会发出声光指示信号并同时会停车五秒。(3)小车能在DE的上坡段中停车5秒(四个车轮都应在斜坡上),并且发出声光指示。(4)当电动车行驶到F点(车体中心点在F点)后立即停车,整个行驶过程的时间差不能超过120S。(5)电动车在全程运行过程中能自动调整导槽角度使钢珠尽量接

9、近O点(6)实时显示电动车行驶时间和路程。2.2系统的总体设计按照题目的具体要求,总结出以下方案:我先是确定小车的基本模形以及它传动方案,同时在小车上安装红外对管检测器,用红外对管来检测小车的行驶的速度、和具体的行驶位置、以及它的行驶运行状况,在本设计用选用MPU6050陀螺仪来对平衡槽进行控制,用金属探测器来探测硬币,而后将测量的数据传达到主控板进行处理转换,然后由单片机主控板根据所测量的每一种数据来实行对小车以及智能控制。2.3方案论证 2.3.1 车体的比较与选择方案一:用现有的玩具小车改装。玩具电动车车身上有着完善的驱动、传动单元,而只有传动装置是我所需要的。它的缺陷在于,玩具类电动车

10、用的是一般的直流电机,其负载的能力差,在速度控制上对程序编写要求相对高,且玩具电动车的行驶转向是用前轮马达来带动前轮转动的方向完成,它的误差率是比较高的。方案二:采用自己设计安装的车架。自己安装主动轮四个直流减速电机的小车底盘,实现它的直走或者左转右转以及倒车等相关动作采用的是两个电机之间转速差的方法。减速电机的扭矩比较大,其转速也相对慢,比较容易对其速度进行控制和调试,符合避障小车的要求。所以综上我们选择方案二。如图3-1 图3-1 2.3.2 控制系统的比较与选择方案一:主控制器采用MP430。MSP430控制器的处理速度快,并且功耗低、成本低。但是它主要是用于电源控制类的系统中,且电路比

11、较复杂,所以该方案最终舍弃。方案二:主控制采用stm32。stm32f103VE的晶振是72MHZ,在程序的执行速度上可谓是一流的选择,并且stm32f103VE的可开发性很广,便于系统的二次开发。但是该主控芯片的成本较高,综合考虑到成本的问题,所以该方案最终舍弃。方案三:主控制器采用STC89C52RC。STC89C52RC芯片是一款基于STC89C51RC之后更完善更稳定的芯片,它自身带有8K的flash存储空间,可实现软件的擦除、烧写等功能。该芯片能读取C语音,所以在编写程序上较为简单。它设计出的最小系统,电路简单,元器件材料便宜。并且它的I/O资源足以满足该系统设计的需求,所以根据比较

12、,最终选取该方案。 2.3.3 电机驱动的比较与选择方案一:采用L298N直流电机驱动芯片。现在很多人都是用L298N芯片来给电机驱动。L298N偶两个TTL/COMS的兼容电平输入,拥有很好的抗外干扰性能,利用单片机的I/O口给其发送的信号,电路框架简单易懂,用起来也比较容易,同时相对稳定,具有性价比相对高。方案二:采用大功率的二极管,三极管,电容电阻等元件来搭两个H桥,通过对各路的放大信号来驱动小车的电机,原理相对简单。但放大后的信号一定要一至,这是很难做到的。当小车电机运行功率较大时信号会很不稳定,其精确度更是难以控制。综合上以上二种方案,选择方案一。 2.3.4 电源及稳压模块的比较与

13、选择方案一:采用蓄电池供电蓄电池体积比较大,重量也过大,会对小车的运行带去不必要的状况。方案二:采用18650干电池组进行供电干电池我是用电池盒来组装,它的体积和重量都很小。由于单片机上的单元供电用的是5V,所以我用的L298N模块上5V降压模块来供单片机及其他单元器件供电,另取干电池为电机及光电开关供电。这样电机以及单片机个单元在工作中就不会受到同一电压干扰了。的综上所述,采用方案二。 2.3.5 调速模块的比较与选择方案一:选择单片机内PCA模块来进行PWM调节速度,速度调节准确且容易对其编程,控制方便。方案二:用L9110马达控制驱动芯片搭建硬件电路进行调速。 考虑到控制的灵活性,采用方

14、案一。 2.3.6 显示与提示音的选择方案一:显示模块用lcd12864。lcd12864这款液晶显示屏的分辨率是128*64,它能够显示数字、汉字、字母、符号等且显示效果直观、清晰。可以用来做系统的显示界面,但是它功耗大,价格相对于一般的显示屏较贵,考虑到成本的问题,所以该方案最终舍弃。方案二:显示模块用数码管。选择数码管来作为该系统的显示界面,虽然显示亮度高,但是数码管只能显示数字和一些简单的字母,这个在显示方面上就起到了很大的局限性,让显示效果很单调不能很清晰的看出显示的内容。并且数码管在电路设计上需要制作自己的驱动板,所以该方案最终舍弃。 方案三:显示模块选用LCD1602。它能够显示

15、字母、数字、符号等简单的字符且体积小、外围电路简单、显示界面稳定、功耗低。占用I/O口少。综合上述介绍,lcd1602能满足该系统的设计要求,所以根据比较,最终选取该方案。在提示音方面,所以我直接采用的是蜂鸣器。蜂鸣器的电路设计比较简单,整个模块电路是由1个三极管8550、1个100欧电阻、还有一个有源的蜂鸣器组成。有源蜂鸣器内部本身就具有振荡源,我们只需要给定一个低电平就能让其正常发声。无源蜂鸣器内部自身并没有振荡源,所以要让其发出响声必须要求单片机给出的脉冲要有震荡的频率。8550三级管起到的是放大电流的作用。 2.3.7平衡槽的制作方案一:采用PCB覆铜板加上串联电阻,板子两端加上电压,

16、通过小球的滑动返回电压值,从而实时监控小球的位置(相当于滑动变阻器的原理),达到使小球平衡的目的。但是我们发现小球的质量太轻,接触不是很好。如图3-2图 3-2方案二:采用激光发射激光,对面端放置光敏电阻,中间是小球的位置,通过光敏电阻返回的值来判断小球的位置,此方法可行性很好。图3-3,故选方二。2.3.8系统框图小车前进框图衡槽的控制89C51控制小车平衡光敏接受电路2.3.9最终方案1、控制模块:采用AT89C51单片机最小系统做控制器;2、电源模块:采用3个4V的干电池用LM7805芯片作为稳压芯片;3、电机驱动模块:采用L298N直流电机驱动模块4、显示模块:采用低功耗的LCD160

17、2液晶显示;5、调速模块:单片机内部PCA6、提示音:采用蜂鸣器7、金属探测器:8、平衡槽角度控制:选用MPU6050陀螺仪第三章 系统硬件设计 本次设计的硬件系统主要由供电电源模块、主控系统模块、直流电机驱动模块、路面检测模块和液晶显示模块和金属探测器以及陀螺仪几个部分组成。供电电源是整个系统的支持者,它给整个设计系统提供能量,使系统能够运转起来;主控系统是整个系统的控制者,它指挥整个系统的运行,是整个系统的大脑;本系统动力是依赖直流电机驱动模块;路面检测模块则相当于整个系统的眼睛,它能够准确地检测的路面的情况,并将路面的情况反馈给主控系统;液晶显示模块是将整个系统的运行情况显示出来。3.1

18、 STC12C5A60S2单片机硬件结构我用的是以STC89C52RC为主控芯片的最小系统,此主控板的主要组成包括:电源电路、晶振电路、复位电路等基本电路。其中STC89C52RC芯片是一款可以实现程序的读取执行和擦除并且它本身自带有8K的flash存储空间。这款芯片的工电压是5V,需要的工作电流小,功耗低。电源电路由极性电容、开关、电阻、LED等元器件组成。电容起着滤波的作用,LED是电源指示灯。复位电路由按键、电容、上拉电阻组成,作用是让STC89C52RC芯片初始化工作。晶振电路由1个11.0592MHZ的外接晶振,2个30P的滤波电容组成。最小系统原理图如图3.1所示。 图6-13.2

19、供电电源模块供电电源主要由3节4V的电池串联提供,电池可以提供12V的电压给直流电机驱动模块,但是主控系统的供电电压是5V,所以必须要把电池的电压降到5V后再提供给主控系统。电源模块主要用L298N上自带的5V降压模块将12V的电池电压稳压在5V,然后提供给主控系统。 3.3 电机驱动的设计L298N芯片机构与功能介绍 L298N芯片内部结构和功能如图6-2、6-3所示图6-2 图6-3 本次设计主要采用单片机控制PWM输出,PWM输出到LM298N模块,然后LM298N模块输出信号来控制直流电机的转动。PWM波的占空比越大,直流电机的转速就越快,反之则直流电机的转速越慢,从而达到控制直流电机

20、的转速。具体控制过程为:1、 把编写好的程序输入控制芯片,再由主控芯片向PWM发送驱动信号,PWM输出信号作为L298N的输入信号,再经L298N输出控制信号让小车电机转动,带动车轮转动,让小车前进后退。2、 我们可以用PWM输出信号的高低来控制直流电机的转动速度。其在占空比大时,转速高,在占空比小时,转速低,所以电机停止运行时PWM输出占空比为0。3、 当小车右轮停止运行,左轮转动,则小车向左转。当小车左轮停止运行,右轮转,小车向右转。小车的前后退是通过两路PWM输出的正负顺序转换来控制,从而可以使小车前进和后退。4、 电机驱动芯片L298N的典型接法,如图6-4所示:图6-43.4路面检测

21、模块设计 路面检测采用4个红外对管,安装在车头盘下,离地面大约两厘米。如何控制小车行驶中的速度和方向呢?我设计的是通过金属传感器检测到地面上的黑线时给主控板发出信号,主控板再根据收到的信号运行相应程序来改变PWM的电压占空比差来控制电机的速度达到控制小车的速度以及方向。如图6-5所示:图6-5红外对管的处理: 红外对管主要由发射管和接收管两个部分组成,发射管发射红外光,当发射的红外光被其他物体挡住后会反射回来,接收管就会接收到脉冲信号,从而把脉冲信号传输到单片机处理。但是当发射管发射的红外光被黑线挡住时,红外光就会被吸收了,此时接收管就不会接收到反射的红外光,从而传输给单片机的是另一种脉冲信号

22、,单片机会做出相应的处理。3.5测速模块 测速是通过霍尔元件感应磁铁产生脉冲,每个车轮均匀放置4个小磁铁,并计算其在1秒内所产生的脉冲数量,再计算出轮子1秒小车轮子转动的圈数,量出小车轮子的周长,可计算出小车当前速度,叠加起来可以得到当前行走的路程。原理图如6-6 图6-63.6显示电路设计此系统的显示我用的是lcd1602,它体积小,功耗低,而且能显示各种英文字母、符号、数字等。液晶共有3个控制端口,8个数据传输端口。共占用11个单片机的I/O口。3个控制端口是:寄存器选择端、数据读写端、使能端,分别占用P25、P26、P27这三个端口。另外8个数据传输端口正好接满P0口。此设计是8线传输模

23、式,之所以没有用4线传输的模式,是因为考虑到此系统外部模块较少,有大量的I/O口剩余,为了提高系统数据的传输的速度以及稳定性,所以选择了8线传输的方式。液晶的外围电路需要接入了一个10k的可调电阻,作用是调节显示屏上的背光效果。如下图图6-73.7寻迹原理1、 红外探测方法:红外探测,就是利用红外线在不同的颜色物体表面不同的反射性质特点,在小车行驶过程中不间断地向着地面发射红外光,当红外光遇到白色纸质地板时候发生漫反射,车上接收管接收反射光,而遇到黑线则红外光被吸收,则小车上的接收管接收不到返回的红外光。单片机判断是否收到反射回来的红外光来确认黑线的位置和小车行驶的路线。因为红外探测器探测距离

24、是有限的,所以一般来说最大不应高于3厘米。2、 寻迹具体方案介绍:设计里的寻迹通俗的说法是指小车在白色地板上寻黑线行走走,利用TCRT5000型光电对管来完成系统的寻迹任务。寻迹电路的设计是用来实现小车沿着场地的黑线弧形引导轨迹来进行前进拐弯和位置校正的,并且小车不能偏离轨迹,我的设计用的TCRT5000型光电对管能完成系统寻迹的任务,传感器的数据线输出信号做为开关量,可以直接与单片机中的I/O引脚相对接,硬件电路实现相对简单,它的灵敏度通过调节多圈电位调来实现。在寻迹检测传感器的设计中,的车体底盘的前端装有3个传感器,用来检测黑线轨迹,起到寻迹前进的作用。具体寻线电路如下图:图6-83.8金

25、属探测仪金属探测器其实是利用电磁感应的原理,并且利用交流电通过的线圈,产生迅速变化的磁场,而这个磁场能在金属物内部产生涡电流,然而涡电流又会产生磁场,反过来影响到原来的磁场,使得探测器发出鸣声3.9平衡槽的控制 在设计平衡槽的角度控制中我选用MPU6050陀螺仪对其角度进行控制,主控板接收来自平衡槽中的红外探测信息,主控板再反馈给陀螺仪信号,进而控制它的平衡。陀螺仪参数以及内部结构图如下 1.VLOGIC振幅必须VDD振幅 2.VDD上升时间(TVDDR)为实际值的10%到90%之间3.VDD上升时间(TVDDR)100ms 4.VLOGIC上升时间(TVLGR)为实际值的10%到90%之间5

26、.VLOGIC上升时间(TVLGR)3ms 6.TVLG-VDD为从VDD上升沿到VLOGIC上升沿的时间7.VDD和VLOGIC必须是单调边沿 第4章 软件设计系统软件编程主要采用STM32单片机模块化的编写方式,即将所有系统程序分成一些独立的模块程序,各个程序块都具有自己相对的独立性,各个程序块之间主要是通过文件包含、函数互调的方式联系在一起。模块化编程的思想是先将每个模块进行单个调试,然后通过每个模块的测试队其进行验证,最后再将所有模块整合在一起调试,这样可以消除模块之间的干扰影响,有利于对个体和整体的测试和验证,有利于软件的调试和验证。4.1循迹功能软件设计循迹主要通过小车底部按照两个

27、红外对管传感器,当左边的红外对管检测到黑线的时候,控制器会控制小车向左转动,当右边的红外对管检测到黑线的时候,控制器会控制小车向右边转动,使小车一直沿着黑线的轨迹运动。4.2 金属探测功能软件设计金属传感器当检测到金属时,小车停止运动,并发出声、光报警,然后再继续前进。4.3 LCD1602液晶显示软件设计LCD1602液晶显示的数据可以通过并行和串行两张方式进行传输,并且传输速度快。LCD1602液晶总共有16个管脚,但是主要的控制脚只有3个,主要是:RS(数据命令选择端),R/W(读写命令选择端),E(使能信号)。本次设计采用的是8位数据并行传输的方式,将AD采样得到的电动车电池电压数据在

28、LCD1602液晶上显示出来。4.4 主程序流程图 初始化N开关是否按下NNNN Y 小车低速行驶是否遇到黑线?N Y计时开始计里程开始小车高速行驶转向子程序是否偏离Y是否有障碍(硬币)N发声光并停车5秒YN是否有坡度在斜坡上发声光并停车5秒驶向斜坡Y停车N 图7-1第五章 测试数据、测试结果分析及结论5.1测试数据测试仪器,测试软件和测试软件名称、型号、规格数量UT61E 数字万用表1台黑胶布1卷硬币1个钢珠1个 检测硬币停车5秒 实际停4.9秒 在DE中点停车 实际+-3cm5.2测试结果分析 测试单元测试结果硬件电源工作指示灯正常,硬件的电压VCC为3.3V,各线路连接正常,无短路单片机

29、的晶振电路测得振荡频率为8MHz单片机复位电路重新上电后,单片机自动复位传感器传感器工作正常表3硬件电路测试结果小车的性能跟电池的电量有关系。比如说小车的电池电量比较多时,电动车的转速会比较快,所以要对小车的速度进行控制。实现对小车车速进行控制,同时也是对小车的保护。传感器容易受到外界干扰影响,所用到的元器件不一定都是按照线性变换,也可能会受到温度变化等环境因素的影响。总的来说,该单片机的智能小车系统的设计是成功的,系统具有较高的研究价值,有待进一步研究优化,实现系统的市场价值。第六章 设计总结6.1 对设计的小结 本设计能够基本完成基本的要求。6.2 设计收获体会 小车主要的部分不仅在硬件系

30、统上更还有的是程序部分,智能小车系统也是一个挺庞大的系统,在编程时我遇到了内存不够用,IO不够用的各种情况,这令我对MCU的内部资源更加了解,使用起来更加熟练;更大的收获是心灵上的6.3 对设计的进一步完善提出意见或建 我们觉得整个车体的难点在于球的平衡,要改进的地方有放球的槽子的制作,并寻找更好的方案去解决这个问题。还有一个就是平衡的算法,目前我们利用的是PID算法,算法的优化和稳定程度都不是很高,值得改进。致谢毕业设计就此告一段落,通过本次毕业设计,我无论是在理论知识的学习上,还是科研技术的提高上,都有了很大的进步,这为我今后进入社会参加工作打下了良好的基础。在完成设计的期间,我得到了同学

31、以及指导老师的热心帮助和大力支持,师兄和学姐一定程度上给了我很大的帮助,包括硬件、软件设计及论文写作方面的帮助。对此我很感谢帮助及关心我的老师和同学。大学四年中,我有三年的时间是在学院的实验室中度过的,实验室为我们提高很多学习和研究所需要的仪器,正因为有这样的环境和条件,我才有了比较明确的学习目标,在实验室努力学习,刻苦钻研,积极参加学院学校组织的电子竞赛活动,让我获益匪浅!时光飞逝,大学四年的美好生活即将结束。求学过程是艰辛的,同时也有许多快乐。回顾这四年的点点滴滴,很感激此期间的同窗好友,我深深体会到你们的友好热情、积极奋进,是你们让我觉得四年时间是那么的短暂,陪我度过了人生最美好的时光,

32、我真心的祝福你们拥有一个美好的未来。感谢所有给予我支持和帮助的老师、同学和朋友们,我的一切收获与成就都离不开你们,你们是我最好的指引者。参考文献: 【1】单片机原理及接口陈忠平等编著.北京:清华大学出版社,2007.3【2】 郭天祥51单片机C语言教程电子工程出版社,2009.01【3】 韩毅,杨天.基于HCS12单片机的智能寻迹模型车的设计与实现 J.学术期刊,2008【3】 谭浩强C语言程序设计3版.北京:清华大学出版社,2005【4】 谢文和传感技术及其应用,高等教育出版社,2002.【5】 黄智伟全国大学生电子设计竞赛技能训练,北京航空航天大学出版社,2008.【6】模拟电子技术基础简

33、明教程杨素行主编3版.北京:高等教育出版社2006.5附件1:程序平衡槽控制:#include <STC12C5A60S2.H>#include <math.h> /Keil library #include <stdio.h> /Keil library#include "lcd1602.h"#include "mpu6050.h"#include "steering.h"#include "pid.h"unsigned char mpu = "0000"u

34、nsigned char pid = "000000"sbit light1 = P10;sbit light2 = P11;sbit light3 = P12;sbit light4 = P13;sbit light5 = P14;sbit light6 = P15;sbit light7 = P16;sbit light8 = P17;sbit qingxie = P24;int y_data = 0;int x_data = 0;char time_mpu = 0;bit flag_1ms = 0;bit flag_50ms = 0;bit pid_ball = 0;

35、unsigned int time_all = 0;extern unsigned char TH_H,TL_H,TH_L,TL_L;void delay(unsigned int k);void lcd_printf(unsigned char *s,int temp_data);void main()unsigned int steering = 1400;int add = 0;char chushi_x = 0;char qingxie_x = 0;PID EPID;init_lcd1602();init_mpu6050();init_steering();init_lcd1602()

36、;init_pid(&EPID);TMOD |= 0x10;TH1 = 0x0FC;TL1 = 0x66;EA = 1;ET1 = 1;TR1 = 1;steering_pwm_set(steering);OUT = 0;/lcd1602_display_string(0, 0, mpu);/lcd1602_display_string(0, 1, pid);/lcd_printf(mpu, chushi_x);/lcd1602_display_string(7, 2, mpu);delay(5000);while(1)if (flag_50ms = 1)flag_50ms = 0;y

37、_data = (mpu6050_getdata(ACCEL_YOUT_H);y_data /= 64;if (y_data > 255)y_data = 255;else if (y_data <- 255)y_data = -255;time_mpu+;if (time_mpu = 1 | time_mpu = 2 | time_mpu = 3 | time_mpu = 4 | time_mpu = 5 | time_mpu = 6 | time_mpu = 7 | time_mpu = 8)if (y_data < 30 && y_data > -

38、30)qingxie_x = 0;time_mpu = 1;qingxie = 0;pid_ball = 0;else if (time_mpu = 9)time_mpu = 1;if (y_data < 30 && y_data > -30)qingxie_x = 0;time_mpu = 1;qingxie = 0;pid_ball = 0;elseqingxie = 1;pid_ball = 1;if (pid_ball = 1)add += pidcalc_add(&EPID, y_data);if (add < -150)add = -150

39、;else if (add > 150)add = 150;steering = steering + add;if (steering >= 1550)steering = 1550;else if (steering <= 1250)steering = 1250;steering_pwm_set(steering);lcd_printf(mpu, y_data);lcd1602_display_string(0, 0, mpu);lcd_printf(mpu, time_mpu);lcd1602_display_string(7, 0, mpu);/lcd_printf

40、(pid, steering);sprintf(pid, "%d.", steering);lcd1602_display_string(0, 1, pid);if (pid_ball = 0)if (light1)steering_pwm_set(1350);delay(100);delay(150);/while(1);steering_pwm_set(1400);else if (light2)steering -= 60;steering_pwm_set(1360);delay(150);delay(150);steering_pwm_set(1400);else

41、if (light3)steering -= 50;steering_pwm_set(1370);delay(200);delay(150);steering_pwm_set(1400);else if (light4)steering -= 40;steering_pwm_set(1380);delay(200);delay(200);steering_pwm_set(1400);else if (light5)steering += 40;steering_pwm_set(1420);delay(200);delay(200);steering_pwm_set(1400);else if

42、(light6)steering += 60;steering_pwm_set(1430);delay(200);delay(150);steering_pwm_set(1400);else if (light7)steering += 80;steering_pwm_set(1440);delay(150);delay(150);steering_pwm_set(1400);else if (light8)steering += 90;steering_pwm_set(1450);delay(100);delay(150);steering_pwm_set(1400);void delay(

43、unsigned int k)unsigned int i,j;for(i=0;i<k;i+)for(j=0;j<121;j+);void lcd_printf(unsigned char *s,int temp_data)if(temp_data<0)temp_data=-temp_data;*s='-'else *s=' '*+s =temp_data/100+0x30;temp_data=temp_data%100; /È¡ÓàÔËËã*+s =temp_da

44、ta/10+0x30;temp_data=temp_data%10; /È¡ÓàÔËËã*+s =temp_data+0x30; void time_20ms(void) interrupt 1if(OUT)TH0=TH_L; /ÖØÐ¸³ÖµTL0=TL_L;elseTH0=TH_H; /ÖØÐ¸³ÖµTL0=TL_H;OUT=!OUT;void ti

45、me_1ms(void) interrupt 3time_all+;if (time_all = 50)time_all = 0;flag_50ms = 1;TH1 = 0x0FC;TL1 = 0x66;flag_1ms = 1;小车:#include <reg52.h>#include "motor.h"#include "lcd1602.h"sbit beep =P37;sbit stopl = P35;sbit stopr = P36;sbit qingxie = P30;bit flag_T0 = 0;bit flag_stop =

46、0;bit flag_100us = 0;bit flag_finish = 0;bit flag_qingxie = 0;unsigned int car_time = 0;unsigned int car_rad = 0;unsigned long pulse_count = 0;unsigned long dis_count = 0;unsigned char countth2 = 0;unsigned char counttl2 = 0;unsigned char timeX = 0;unsigned char stop_flag = 0;unsigned char table = &

47、quot;run:000 cm"unsigned char table_time = "Time:000 s"unsigned char stoptemp = "stop"unsigned char beeptemp = "beep"void delay(unsigned int xms);void main() init_motor();init_lcd1602();TMOD = 0x01 | 0x10;C_T2 = 1;TH0 = 0x0FF; TL0 = 0x0F7;/10usTH1 = 0xff; TL1 = 0x8

48、4;TH2 = 0; TL2 = 0;EA = 1;EX0 = 1;IT0 = 0;ET0 = 1;ET1 = 1;ET2 = 1;TR0 = 1;TR1 = 1;TR2 = 1;qingxie = 0;while (1) if (flag_stop = 0)if (flag_100us)flag_100us = 0;motor_pwm_interrupt();if(qingxie = 1 && flag_qingxie = 0)/lcd1602_display_string(10, 2, stoptemp);-7flag_qingxie = 1;beep = 0;motor_

49、all_stop();delay(1000);beep = 1;motor_set_mrspd(35);motor_set_mlspd(35);delay(50);/תÍäÌõ¼þ¿ª¹ØÅжÏswitch(P1 & 0xf0)case 0x00:motor_mr_forward();motor_ml_forward();motor_set_mrspd(35);motor_set_mlspd(35);/SIGNAL_set

50、= 16;break;case 0x10: /00001100 Æ«ÓÒmotor_mr_reversion();motor_ml_forward();motor_set_mrspd(20);motor_set_mlspd(60); flag_finish = 1;break;case 0x20: /00001000 Æ«ÓÒmotor_mr_reversion();motor_ml_forward();motor_set_mrspd(20);motor_set_mlspd(60);break;case 0x30:

51、 /00001110 Æ«ÓÒmotor_mr_reversion();motor_ml_forward();motor_set_mrspd(20);motor_set_mlspd(60); flag_finish = 1;break;case 0x40: /00000010 Æ«×ómotor_mr_forward();motor_ml_reversion();motor_set_mrspd(60);motor_set_mlspd(20);break;case 0x50: /00000011 Æ«×ó/flag_finish = 1;/SIGNAL_set = 14;break;case 0x60: /00000001 Æ«×ómotor_mr_forward();motor_ml_forward();motor_set_mrsp

温馨提示

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

最新文档

评论

0/150

提交评论