最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于stm32平衡小车论文

来源:动视网 责编:小OO 时间:2025-09-24 12:23:06
文档

基于stm32平衡小车论文

本科生毕业论文(设计)(2015)届论文(设计)题目:基于单片机的自平衡小车的设计与实现学院:电子工程学院专业:电子信息工程学号:201113007619姓名:何建安指导老师姓名及职称:丘森辉助教目录第一章绪论(2)1.1研究背景(3)1.2研究现状(3)1.3研究意义(3)1.4论文的组织结构(3)第二章系统的方案设计与论证(4)2.1系统设计要求(4)2.2系统的总体设计(5)2.3方案论证(5)2.3.1车体的比较与选择(5)2.3.2控制系统的比较与选择(6)2.3.3电机驱动的比较与
推荐度:
导读本科生毕业论文(设计)(2015)届论文(设计)题目:基于单片机的自平衡小车的设计与实现学院:电子工程学院专业:电子信息工程学号:201113007619姓名:何建安指导老师姓名及职称:丘森辉助教目录第一章绪论(2)1.1研究背景(3)1.2研究现状(3)1.3研究意义(3)1.4论文的组织结构(3)第二章系统的方案设计与论证(4)2.1系统设计要求(4)2.2系统的总体设计(5)2.3方案论证(5)2.3.1车体的比较与选择(5)2.3.2控制系统的比较与选择(6)2.3.3电机驱动的比较与
本科生毕业论文(设计)

(2015)届

论文(设计)题目:基于单片机的自平衡小车的设计与实现学院:电子工程学院

专业:电子信息工程

学号:201113007619

姓名:何建安

指导老师姓名及职称:丘森辉助教目录

第一章绪论 (2)

1.1研究背景 (3)

1.2研究现状 (3)

1.3研究意义 (3)

1.4论文的组织结构 (3)

第二章系统的方案设计与论证 (4)

2.1系统设计要求 (4)

2.2系统的总体设计 (5)

2.3方案论证 (5)

2.3.1车体的比较与选择 (5)

2.3.2控制系统的比较与选择 (6)

2.3.3电机驱动的比较与选择 (7)

2.3.4电源及稳压模块的比较与选择 (7)

2.3.5调速模块的比较与选择 (7)

2.3.6显示与提示音的选择 (8)

2.3.7平衡槽的制作 (8)

2.3.8系统框图 (9)

2.3.9最终方案 (10)

第三章系统硬件设计 (11)

3.1STC12C5A60S2单片机硬件结构 (11)

3.2供电电源模块 (12)

3.3电机驱动的设计 (12)

3.4路面检测模块设计 (14)

3.5测速模块 (15)

3.6显示电路设计 (15)

3.7寻迹原理 (16)

3.8金属探测仪 (17)

第四章软件设计 (18)

4.1循迹功能软件设计 (18)

4.2金属探测功能软件设计 (18)

4.3LCD1602液晶显示软件设计 (18)

4.4主程序流程图 (19)

第五章测试数据、测试结果分析及结论 (20)

5.1测试数据 (20)

5.2测试结果分析 (21)

第六章设计总结 (21)

6.1对设计的小结 (21)

6.2设计收获体会 (21)

6.3对设计的进一步完善提出意见或建 (22)

致谢 (22)基于单片机的自平衡小车的设计与实现

专业:电子信息工程学号:201113007619

学生姓名:何建安指导老师姓名:丘森辉

内容摘要

本次设计的硬系统主要由供电电源模块、主控系统模块、直流电机驱动模块、路面检测模块和液晶显示模块几个部分组成。供电电源是整个系统的支持者,它给整个设计系统提供能量,使系统能够运转起来;主控系统是整个系统的控制者,它指挥整个系统的运行,是整个系统的大脑;整个系统运行的动力是直流电机驱动模块;路面检测模块则相当于整个系统的眼睛,它能够准确地检测的路面的情况,并将路面的情况反馈给主控系统;液晶显示模块是将整个系统的运行情况显示出来。

关键字:80C51单片机光电外红反射循迹金属探测器电动小车PID算法PWM调速

第一章绪论

智能可以按照预先设定的模式在自动的运作,可应用于科学勘探等等用途,智能电动车就是其中的一个体现。本设计的简易智能电动车,采用ATC51单片机作为小车的检测和控制核心;利用金属探测器探测路面上的硬币,以及用陀螺仪控制平衡槽的角度,采用光电传感器来检测路上感应到的黑线,从而把反馈到的信号送单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着S形黑线行驶;采用1602LCD实时显示小车行驶的时间,小车停止行驶后,轮流显示小车行驶时间。

1.1研究背景

在科技不断发展进步的今天,对平衡小车的研究具有很重要的意义,现如今各高校在对小车平衡小车的研究上也在不断的投入资源,更是每一年的电子设计竞赛都会选择这类控制类的设计来刺激同学们对其相关控制策略的研究。这不仅提高了学生的学习积极性,更是提高了同学们对科学的认识。为此本设计主要是设计一个由ATC51单片机控制器控制的智能小车平衡控制系统。系统为了直观的看出电动车的运行状态,用LCD1602液晶将电动车的所有参数显示出来。

1.2研究现状

平衡小车是一项机器人技术,它是一种前沿技术,领域更新速度很快,他涉及了很多科学技术,比如计算机技术,通信技术,人工智能技术,材料科学,物理方法,仿生学等各种高新技术。自从控制小车出现,就迅速成为了人们研究学习控制理论的一个很好的选择平台,其具有很大的理论学习意义。

近年以来,平衡小车引起了国内外很多研究机构和机器人爱好者,以及各高校的极大关注,各种基于不同目的,不同的设计方法以及不同的控制策略的平衡系统孕育而生,呈现出一种积极的研究姿态。

1.3研究意义

自平衡小车是机器人科学研究中一个很重要的领域,它随着相关的科技领域的进步不断的进步与发展。自平衡小车属于移动机器人领域,与航天技术一样,机器人领域的水平同样可以体现出一个国家科技技术的能力。

平衡小车是可以看做一个复杂的小系统,它由多样模块来对他进行各种控制以及实现很多功能,同样在它身上,我们对它的各种控制方法进行比较,有助于我们更好的学习控制类方面以及其它知识。

1.4论文的组织结构

第一章本设计的设计任务;

第二章系统总体设计:主要阐述系统的功能和总体方案的选择;

第三章系统的硬件设计:主要阐述系统硬件电路的分析及实现;

第四章系统的软件设计:主要阐述系统软件设计及具体实现;第五章系统测试:主要阐述系统功能、性能测试和结果分析;

第六章结论:主要阐述系统设计的原理、功能、实现方式。

第二章系统的方案设计与论证

2.1系统设计要求

设计并制作一辆带有自动平衡系统的电动寻线智能小车,其结构如图1、图2所示。在电动小车上通过支架固定安装一台电机,导槽固定在电机转轴上;驱动电机可以控制导槽摆动;小车能通过寻线自动从场地(图3)A点走到车库F点。

要求

(1)当电动车从中心点A发车时,会沿着黑色是引导线驶向终点F,且电动车在此过程中要一直在黑色引导线上。

(2)在AB段引导线当电动车遇到硬币时,电动车会发出声光指示信号并同时会停车五秒。

(3)小车能在DE的上坡段中停车5秒(四个车轮都应在斜坡上),并且发出声光指示。

(4)当电动车行驶到F点(车体中心点在F点)后立即停车,整个行驶过程的时间差不能超过120S。

(5)电动车在全程运行过程中能自动调整导槽角度使尽量接近O点(6)实时显示电动车行驶时间和路程。

2.2系统的总体设计

按照题目的具体要求,总结出以下方案:我先是确定小车的基本模形以及它传动方案,同时在小车上安装红外对管检测器,用红外对管来检测小车的行驶的速度、和具体的行驶位置、以及它的行驶运行状况,在本设计用选用MPU6050陀螺仪来对平衡槽进行控制,用金属探测器来探测硬币,而后将测量的数据传达到主控板进行处理转换,然后由单片机主控板根据所测量的每一种数据来实行对小车以及智能控制。

2.3方案论证

2.3.1车体的比较与选择

方案一:用现有的玩具小车改装。玩具电动车车身上有着完善的驱动、传动单元,而只有传动装置是我所需要的。它的缺陷在于,玩具类电动车用的是一般的直流电机,其负载的能力差,在速度控制上对程序编写要求相对高,且玩具电动车的行驶转向是用前轮马达来带动前轮转动的方向完成,它的误差率是比较高

的。

方案二:采用自己设计安装的车架。自己安装主动轮四个直流减速电机的小车底盘,实现它的直走或者左转右转以及倒车等相关动作采用的是两个电机之间转速差的方法。减速电机的扭矩比较大,其转速也相对慢,比较容易对其速度进行控制和调试,符合避障小车的要求。所以综上我们选择方案二。

如图3-1

图3-1

2.3.2控制系统的比较与选择

方案一:主控制器采用MP430。MSP430控制器的处理速度快,并且功耗低、成本低。但是它主要是用于电源控制类的系统中,且电路比较复杂,所以该方案最终舍弃。

方案二:主控制采用stm32。stm32f103VE的晶振是72MHZ,在程序的执行速度上可谓是一流的选择,并且stm32f103VE的可开发性很广,便于系统的二次开发。但是该主控芯片的成本较高,综合考虑到成本的问题,所以该方案最终舍弃。

方案三:主控制器采用STCC52RC。STCC52RC芯片是一款基于STCC51RC 之后更完善更稳定的芯片,它自身带有8K的flash存储空间,可实现软件的擦除、烧写等功能。该芯片能读取C语音,所以在编写程序上较为简单。它设计出的最小系统,电路简单,元器件材料便宜。并且它的I/O资源足以满足该系统设计的需求,所以根据比较,最终选取该方案。

2.3.3电机驱动的比较与选择

方案一:采用L298N直流电机驱动芯片。现在很多人都是用L298N芯片来给电机驱动。L298N偶两个TTL/COMS的兼容电平输入,拥有很好的抗外干扰性能,利用单片机的I/O口给其发送的信号,电路框架简单易懂,用起来也比较容易,同时相对稳定,具有性价比相对高。

方案二:采用大功率的二极管,三极管,电容电阻等元件来搭两个H桥,通过对各路的放大信号来驱动小车的电机,原理相对简单。但放大后的信号一定要一至,这是很难做到的。当小车电机运行功率较大时信号会很不稳定,其精确度更是难以控制。

综合上以上二种方案,选择方案一。

2.3.4电源及稳压模块的比较与选择

方案一:采用蓄电池供电

蓄电池体积比较大,重量也过大,会对小车的运行带去不必要的状况。

方案二:采用18650干电池组进行供电

干电池我是用电池盒来组装,它的体积和重量都很小。由于单片机上的单元供电用的是5V,所以我用的L298N模块上5V降压模块来供单片机及其他单元器件供电,另取干电池为电机及光电开关供电。这样电机以及单片机个单元在工作中就不会受到同一电压干扰了。的综上所述,采用方案二。

2.3.5调速模块的比较与选择

方案一:选择单片机内PCA模块来进行PWM调节速度,速度调节准确且容易对其编程,控制方便。

方案二:用L9110马达控制驱动芯片搭建硬件电路进行调速。

考虑到控制的灵活性,采用方案一。

2.3.6显示与提示音的选择

方案一:显示模块用lcd128。lcd128这款液晶显示屏的分辨率是128*,它能够显示数字、汉字、字母、符号等且显示效果直观、清晰。可以用来做系统的显示界面,但是它功耗大,价格相对于一般的显示屏较贵,考虑到成本的问题,所以该方案最终舍弃。

方案二:显示模块用数码管。选择数码管来作为该系统的显示界面,虽然显示亮度高,但是数码管只能显示数字和一些简单的字母,这个在显示方面上就起到了很大的局限性,让显示效果很单调不能很清晰的看出显示的内容。并且数码管在电路设计上需要制作自己的驱动板,所以该方案最终舍弃。

方案三:显示模块选用LCD1602。它能够显示字母、数字、符号等简单的字符且体积小、外围电路简单、显示界面稳定、功耗低。占用I/O口少。综合上述介绍,lcd1602能满足该系统的设计要求,所以根据比较,最终选取该方案。

在提示音方面,所以我直接采用的是蜂鸣器。蜂鸣器的电路设计比较简单,整个模块电路是由1个三极管8550、1个100欧电阻、还有一个有源的蜂鸣器组成。有源蜂鸣器内部本身就具有振荡源,我们只需要给定一个低电平就能让其正常发声。无源蜂鸣器内部自身并没有振荡源,所以要让其发出响声必须要求单片机给出的脉冲要有震荡的频率。8550三级管起到的是放大电流的作用。

2.3.7平衡槽的制作

方案一:采用PCB覆铜板加上串联电阻,板子两端加上电压,通过小球的滑动返回电压值,从而实时监控小球的位置(相当于滑动变阻器的原理),达到使小球平衡的目的。但是我们发现小球的质量太轻,接触不是很好。如图3-2图3-2

方案二:采用激光发射激光,对面端放置光敏电阻,中间是小球的位置,通过光敏电阻返回的值来判断小球的位置,此方法可行性很好。图3-3,故选方二。

2.3.8系统框图

小车前进框图

衡槽的控制

2.3.9最终方案

1、控制模块:采用ATC51单片机最小系统做控制器;

2、电源模块:采用3个4V 的干电池用LM7805芯片作为稳压芯片;

3、电机驱动模块:采用L298N 直流电机驱动模块

4、显示模块:采用低功耗的LCD1602液晶显示;

5、调速模块:单片机内部PCA

6、提示音:采用蜂鸣器

7、金属探测器:

8、平衡槽角度控制:选用MPU6050陀螺仪C51光敏接受电路控制小车

平衡

本次设计的硬件系统主要由供电电源模块、主控系统模块、直流电机驱动模块、路面检测模块和液晶显示模块和金属探测器以及陀螺仪几个部分组成。供电电源是整个系统的支持者,它给整个设计系统提供能量,使系统能够运转起来;主控系统是整个系统的控制者,它指挥整个系统的运行,是整个系统的大脑;本系统动力是依赖直流电机驱动模块;路面检测模块则相当于整个系统的眼睛,它能够准确地检测的路面的情况,并将路面的情况反馈给主控系统;液晶显示模块是将整个系统的运行情况显示出来。

3.1STC12C5A60S2单片机硬件结构

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

最小系统原理图如图3.1所示。

图6-1

3.2供电电源模块

供电电源主要由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波的占空比越大,直流电机的转速就越快,反之则直流电机的转速越慢,从而达到控制直流电机的转速。

具体控制过程为:

1、把编写好的程序输入控制芯片,再由主控芯片向PWM发送驱动信号,PWM 输出信号作为L298N的输入信号,再经L298N输出控制信号让小车电机转动,带动车轮转动,让小车前进后退。

2、我们可以用PWM输出信号的高低来控制直流电机的转动速度。其在占空比大时,转速高,在占空比小时,转速低,所以电机停止运行时PWM输出占空比为0。

3、当小车右轮停止运行,左轮转动,则小车向左转。当小车左轮停止运行,右轮转,小车向右转。小车的前后退是通过两路PWM输出的正负顺序转换来控制,从而可以使小车前进和后退。

4、电机驱动芯片L298N的典型接法,如图6-4所示:图6-4

3.4路面检测模块设计

路面检测采用4个红外对管,安装在车头盘下,离地面大约两厘米。如何控制小车行驶中的速度和方向呢?我设计的是通过金属传感器检测到地面上的黑线时给主控板发出信号,主控板再根据收到的信号运行相应程序来改变PWM的电压占空比差来控制电机的速度达到控制小车的速度以及方向。如图6-5所示:

图6-5

红外对管的处理:

红外对管主要由发射管和接收管两个部分组成,发射管发射红外光,当发射的红外光被其他物体挡住后会反射回来,接收管就会接收到脉冲信号,从而把脉冲信号传输到单片机处理。但是当发射管发射的红外光被黑线挡住时,红外光就会被吸收了,此时接收管就不会接收到反射的红外光,从而传输给单片机的是另一种脉冲信号,单片机会做出相应的处理。

3.5测速模块

测速是通过霍尔元件感应磁铁产生脉冲,每个车轮均匀放置4个小磁铁,并计算其在1秒内所产生的脉冲数量,再计算出轮子1秒小车轮子转动的圈数,量出小车轮子的周长,可计算出小车当前速度,叠加起来可以得到当前行走的路程。原理图如6-6

图6-6

3.6显示电路设计

此系统的显示我用的是lcd1602,它体积小,功耗低,而且能显示各种英文字母、符号、数字等。液晶共有3个控制端口,8个数据传输端口。共占用11个单片机的I/O口。3个控制端口是:寄存器选择端、数据读写端、使能端,分别占用P2^5、P2^6、P2^7这三个端口。另外8个数据传输端口正好接满P0口。此设计是8线传输模式,之所以没有用4线传输的模式,是因为考虑到此系统外部模块较少,有大量的I/O口剩余,为了提高系统数据的传输的速度以及稳定性,所以选择了8线传输的方式。液晶的外围电路需要接入了一个10k的可调电阻,作用是调节显示屏上的背光效果。如下图

图6-7

3.7寻迹原理

1、红外探测方法:红外探测,就是利用红外线在不同的颜色物体表面不同的反射性质特点,在小车行驶过程中不间断地向着地面发射红外光,当红外光遇到白色纸质地板时候发生漫反射,车上接收管接收反射光,而遇到黑线则红外光被吸收,则小车上的接收管接收不到返回的红外光。单片机判断是否收到反射回来的红外光来确认黑线的位置和小车行驶的路线。因为红外探测器探测距离是有限的,所以一般来说最大不应高于3厘米。

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

图6-8

3.8金属探测仪

金属探测器其实是利用电磁感应的原理,并且利用交流电通过的线圈,产生迅速变化的磁场,而这个磁场能在金属物内部产生涡电流,然而涡电流又会产生磁场,反过来影响到原来的磁场,使得探测器发出鸣声

3.9平衡槽的控制

在设计平衡槽的角度控制中我选用MPU6050陀螺仪对其角度进行控制,主控板接收来自平衡槽中的红外探测信息,主控板再反馈给陀螺仪信号,进而控制它的平衡。陀螺仪参数以及内部结构图如下

1.VLOGIC振幅必须≤VDD振幅

2.VDD上升时间(TVDDR)为实际值的10%到90%之间

3.VDD上升时间(TVDDR)≤100ms

4.VLOGIC上升时间(TVLGR)为实际值的10%到90%之间

5.VLOGIC上升时间(TVLGR)≤3ms

6.TVLG-VDD为从VDD上升沿到VLOGIC上升沿的时间

7.VDD和VLOGIC必须是单调边沿

第四章软件设计

系统软件编程主要采用STM32单片机模块化的编写方式,即将所有系统程序分成一些的模块程序,各个程序块都具有自己相对的性,各个程序块之间主要是通过文件包含、函数互调的方式联系在一起。模块化编程的思想是先将每个模块进行单个调试,然后通过每个模块的测试队其进行验证,最后再将所有模块整合在一起调试,这样可以消除模块之间的干扰影响,有利于对个体和整体的测试和验证,有利于软件的调试和验证。

4.1循迹功能软件设计

循迹主要通过小车底部按照两个红外对管传感器,当左边的红外对管检测到黑线的时候,控制器会控制小车向左转动,当右边的红外对管检测到黑线的时候,控制器会控制小车向右边转动,使小车一直沿着黑线的轨迹运动。

4.2金属探测功能软件设计

金属传感器当检测到金属时,小车停止运动,并发出声、光报警,然后再继续前进。

4.3LCD1602液晶显示软件设计

LCD1602液晶显示的数据可以通过并行和串行两张方式进行传输,并且传输速度快。LCD1602液晶总共有16个管脚,但是主要的控制脚只有3个,主要是:RS(数据命令选择端),R/W(读写命令选择端),E(使能信号)。本次设计采用的是8位数据并行传输的方式,将AD采样得到的电动车电池电压数据在LCD1602液晶上显示出来。

4.4主程序流程图

初始化

N

开关是否按下

Y

小车低速行驶

N

是否遇到黑线?

Y

计时开始

计里程开始

小车高速行驶

Y

是否偏离转向子程序

N

Y N

Y

N

图7-1

第五章测试数据、测试结果分析及结论

5.1测试数据

测试仪器,测试软件和测试软件检测硬币停车5秒实际停4.9秒

是否有障碍(硬币)

是否有坡度

发声光并停车5秒

驶向斜坡

停车

斜坡上发声光并停车5秒

5.2测试结果分析

表3硬件电路测试结果

小车的性能跟电池的电量有关系。比如说小车的电池电量比较多时,电动车的转速会比较快,所以要对小车的速度进行控制。实现对小车车速进行控制,同时也是对小车的保护。

传感器容易受到外界干扰影响,所用到的元器件不一定都是按照线性变换,也可能会受到温度变化等环境因素的影响。

总的来说,该单片机的智能小车系统的设计是成功的,系统具有较高的研究价值,有待进一步研究优化,实现系统的市场价值。

第六章设计总结

6.1对设计的小结

本设计能够基本完成基本的要求。

6.2设计收获体会

小车主要的部分不仅在硬件系统上更还有的是程序部分,智能小车系统也是一个挺庞大的系统,在编程时我遇到了内存不够用,IO不够用的各种情况,这令我对MCU的内部资源更加了解,使用起来更加熟练;更大的收获是心灵上的6.3对设计的进一步完善提出意见或建

我们觉得整个车体的难点在于球的平衡,要改进的地方有放球的槽子的制作,并寻找更好的方案去解决这个问题。还有一个就是平衡的算法,目前我们利用的是PID算法,算法的优化和稳定程度都不是很高,值得改进。

致谢

毕业设计就此告一段落,通过本次毕业设计,我无论是在理论知识的学习上,还是科研技术的提高上,都有了很大的进步,这为我今后进入社会参加工作打下了良好的基础。在完成设计的期间,我得到了同学以及指导老师的热心帮助和大力支持,师兄和学姐一定程度上给了我很大的帮助,包括硬件、软件设计及论文写作方面的帮助。对此我很感谢帮助及关心我的老师和同学。

大学四年中,我有三年的时间是在学院的实验室中度过的,实验室为我们提高很多学习和研究所需要的仪器,正因为有这样的环境和条件,我才有了比较明确的学习目标,在实验室努力学习,刻苦钻研,积极参加学院学校组织的电子竞赛活动,让我获益匪浅!

时光飞逝,大学四年的美好生活即将结束。求学过程是艰辛的,同时也有许多快乐。回顾这四年的点点滴滴,很感激此期间的同窗好友,我深深体会到你们的友好热情、积极奋进,是你们让我觉得四年时间是那么的短暂,陪我度过了人生最美好的时光,我真心的祝福你们拥有一个美好的未来。

感谢所有给予我支持和帮助的老师、同学和朋友们,我的一切收获与成就都离不开你们,你们是我最好的指引者。

参考文献:

【1】《单片机原理及接口》陈忠平等编著.北京:清华大学出版社,2007.3

【2】郭天祥《51单片机C语言教程》电子工程出版社,2009.01

【3】韩毅,杨天.基于HCS12单片机的智能寻迹模型车的设计与实现

[J].学术期刊,2008

【3】谭浩强《C语言程序设计》——3版.北京:清华大学出版社,2005

【4】谢文和《传感技术及其应用》,高等教育出版社,2002.

【5】黄智伟《全国大学生电子设计竞赛技能训练》,北京航空航天大学出版社,2008.

【6】《模拟电子技术基础简明教程》杨素行主编——3版.

北京:高等教育出版社2006.5

附件1:

程序

平衡槽控制:

#include

#include //Keil library

#include //Keil library

#include

"lcd1602.h"

#include

"mpu6050.h"

#include "steering.h"

#include"pid.h"

unsigned char mpu[]="0000";

unsigned char pid[] ="000000";

sbit light1=P1^0;

sbit light2=P1^1;

sbit light3=P1^2;

sbit light4=P1^3;

sbit light5=P1^4;

sbit light6=P1^5;

sbit light7=P1^6;

sbit light8=P1^7;

sbit qingxie=

P2^4;

int y_data=0;

int x_data=0;

char time_mpu=

0;

bit flag_1ms=0;

bit flag_50ms=0;

bit pid_ball=0;

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()

;

init_pid(&EP

ID);

TMOD|=

0x10;

TH1=

0x0FC;

TL1=0x66;

EA=1;ET1=1;

TR1=1;

steering_pwm _set(steering);

OUT=0;

//lcd1602_dis play_string(0,0,mpu);

//lcd1602_dis play_string(0,1,pid);

//lcd_printf(m pu,chushi_x);

//lcd1602_display_ string(7,2,mpu);

delay(5000);

while(1)

{

if (flag_50ms==1)

{

flag_50ms=0;

y_data=

(mpu6050_getdata(AC CEL_YOUT_H));

y_data/=;

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>-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;

}

else

{

qingxie=1;

pid_ball=1;

}

}

if (pid_ball==1)

{

add+=

pidcalc_add(&EPID, y_data);

if(add<-150)

add=-150;

else if(add>150)

add=150;

steering=steering

+add;

if(steering>=

1550)

steering=

1550;

else if(steering<=

1250)

steering=

1250;

steering_pwm_set(s

teering);

}

lcd_printf(mpu,

y_data);

lcd1602_display_st

ring(0,0,mpu);

lcd_printf(mpu,

time_mpu);

lcd1602_display_st

ring(7,0,mpu);

//lcd_printf(pid,

steering);

sprintf(pid,"%d.

steering);

lcd1602_display_st

ring(0,1,pid);

}

if

(pid_ball==0)

{if (light1)

{

steering_pwm_set( 1350);

delay(100);delay(1 50);//while(1);

steering_pwm_set( 1400);

}

else if(light2)

{ steering-=60;

steering_pwm_set( 1360);

delay(150);delay(1 50);

steering_pwm_set( 1400);

}

else if(light3)

{

steering-=50;

steering_pwm_set(

1370);

delay(200);delay(1

50);

steering_pwm_set(

1400);

}

else if(light4)

{

steering-=40;

steering_pwm_set(

1380);

delay(200);delay(2

00);

steering_pwm_set(

1400);

}

else if(light5)

{

steering+=40;

steering_pwm_set(

1420);

delay(200);delay(2

00);

steering_pwm_set(

1400);

}

else if(light6)

{

steering+=60;

steering_pwm_set(

1430);

delay(200);delay(1

50);

steering_pwm_set(

1400);}

else if(light7)

{ steering+=80;

steering_pwm_set( 1440);

delay(150);delay(1 50);

steering_pwm_set( 1400);

}

else if(light8)

{ steering+=90;

steering_pwm_set( 1450);

delay(100);delay(1 50);

steering_pwm_set(1400);

}

}

}

}

void

delay(unsigned int k)

{

unsigned int

i,j;

for(i=0;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=te

mp_data%100;

//È¡ÓàÔËËã

*++s

=temp_data/10+0x30;

temp_data=te

mp_data%10;

//È¡ÓàÔËËã

*++s

=temp_data+0x30;

}

void

time_20ms(void)

interrupt1

{

if(OUT)

{

TH0=TH_L;

//ÖØÐ¸³ÖµTL0=TL_L;

}

else

{

TH0=TH_H;

//ÖØÐ¸³Öµ

TL0=TL_H;

}

OUT=!OUT;

}

void

time_1ms(void) interrupt3

{

time_all++;

if(time_all ==50)

{

time_all =0;

flag_50ms=1;

}

TH1=0x0FC;

TL1=0x66;

flag_1ms=1;

}

小车:

#include

#include"motor.h"

#include

"lcd1602.h"

sbit beep=P3^7;

sbit stopl=P3^5;

sbit stopr=P3^6;

sbit qingxie=

P3^0;

bit flag_T0=0;

bit flag_stop=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[]={"run:000

cm

unsigned char

table_time[]=

{"Time:000s

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;//10us

TH1=0xff;

TL1=0x84;

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_interr

upt();

}

if(qingxie==1&&

flag_qingxie==0)

{

//lcd1602_display_

string(10,2,

stoptemp);-7

flag_qingxie=1;

beep=0;

motor_all_stop();

delay(1000);

beep=1;

motor_set_mrspd(3

5);

motor_set_mlspd(3

5);

delay(50);

}

//תÍäÌõ¼þ¿ª¹ØÅÐ

¶Ï

switch(P1&0xf0)

{

case0x00:

motor_mr_forward()

;

motor_ml_forward()

;

motor_set_mrspd(35);

motor_set_mlspd(3 5);

//SIGNAL_set= 16;

break;

case0x10:

//00001100Æ«ÓÒ

motor_mr_reversio n();

motor_ml_forward() ;

motor_set_mrspd(2 0);

motor_set_mlspd(60);

flag_finish=1;

break;

case0x20:

//00001000Æ«ÓÒ

motor_mr_reversio

n();

motor_ml_forward()

;

motor_set_mrspd(2

0);

motor_set_mlspd(6

0);

break;

case0x30:

//00001110Æ«ÓÒ

motor_mr_reversio

n();

motor_ml_forward()

;

motor_set_mrspd(2

0);

motor_set_mlspd(6

0);

flag_finish=1;

break;

case0x40:

//00000010Æ«×ó

motor_mr_forward()

;motor_ml_reversio n();

motor_set_mrspd(6 0);

motor_set_mlspd(2 0);

break;

case0x50:

//00000011Æ«×ó

//flag_finish= 1;

//SIGNAL_set= 14;

break;

case0x60:

//00000001Æ«×ó

motor_mr_forward()

;

motor_ml_forward()

;

motor_set_mrspd(3

5);

motor_set_mlspd(3

5);

break;

case0x70:

//00000111Æ«×ó

motor_mr_reversio

n();

motor_ml_forward()

;

motor_set_mrspd(2

0);

motor_set_mlspd(6

0);

flag_finish=

1;

break;

case0x80:

//00000110Æ«×ó

motor_mr_forward()

;

motor_ml_reversio

n();

motor_set_mrspd(6

0);motor_set_mlspd(2 0);

flag_finish=1;

break;

case0x90:

//00000000Æ«×ó

//flag_finish= 1;

//SIGNAL_set= 14;

break;

case0xA0:

//00000000Æ«×ó

//flag_finish= 1;

//SIGNAL_set=

15;

break;

case0xB0:

//00000000Æ«×ó

motor_mr_reversio

n();

motor_ml_forward()

;

motor_set_mrspd(2

0);

motor_set_mlspd(6

0);

flag_finish=

1;

break;

case0xC0:

//00000000Æ«×ó

motor_mr_forward()

;

motor_ml_reversio

n();

motor_set_mrspd(6

0);

motor_set_mlspd(2

0);

flag_finish=

1;

break;

case0xD0:

//00000000Æ«×ómotor_mr_forward() ;

motor_ml_reversio n();

motor_set_mrspd(6 0);

motor_set_mlspd(2 0);

flag_finish= 1;

break;

case0xE0:

//00000000Æ«×ó

motor_mr_forward() ;

motor_ml_reversio n();

motor_set_mrspd(6

0);

motor_set_mlspd(2

0);

flag_finish=

1;

break;

case0xF0:

//00000000Æ«×ó

motor_mr_forward()

;

motor_ml_forward()

;

motor_set_mrspd(3

5);

motor_set_mlspd(3

5);

flag_finish=

1;

break;

default:

//SIGNAL_set=

14;

break;

}

}

//

ÏÔʾ³µµÄƵÂʼÆÊ

ý

if

(flag_T0==1)

{flag_T0=0; while(1)

{

countth2= TH2;

counttl2= TL2;

if(countth2 ==TH2)

break;

}

pulse_count= (countth2*256+ counttl2);

car_rad+= pulse_count/3;

dis_count=

dis_count+car_rad* 4;

car_rad=0;

pulse_count=0;

countth2=0;

counttl2=0;

TH2=0;

TL2=0;

table[4]=

dis_count/100+48;

table[5]=

dis_count%100/10+

48;

table[6]=

dis_count%100%10

+48;

lcd1602_display_st

ring(0,0,table);

table_time[5]=

car_time/100+48;

table_time[6]=

car_time%100/10+

48;

table_time[7]=

car_time%100%10+

48;

lcd1602_display_st

ring(0,1,table_time);

}

//ÖÕµãÍ£³µ

if(flag_finish==1)

{

if((stopr==1&&

stopl==1)||(stopr==0

&&stopl==1)||(stopr

==1&&stopl==0))

{

EA=0;

motor_all_stop();

flag_stop=1;

}

}

}

}

void

delay(unsigned int ms)

{

unsigned int i =0;

unsigned char j=0;

for(i=0;i{

for(j=200;j>0;j--);

for(j=102;j>0;j--);

}

}

void int_ex0()

interrupt0

//½ðÊô̽²â

{

//lcd1602_dis

play_string(10,2,

beeptemp);

beep=0;

motor_all_sto

p();

delay(5000);

beep=1;

motor_set_ml

spd(35);

motor_set_mr

spd(35);

delay(50);

EX0=0;

}

void time_100us()

interrupt1

{

TH0=

0x0FF;

TL0=

0x0F7;//10us

flag_100us=

1;

}

void time_1s()

interrupt3

{

TH0=

0X4C;

//11.0592,50ms4C

TL0=

00;//

00

if

(timeX==20)

{

flag_T0=1;

timeX=0;

car_time+=1;

}

else

timeX+=1;

}

interrupt5

{

TF2=

0;//T2Èí¼þÇåÖжϱêÖ

¾

TH2=0;

TL2=0;

pulse_count= pulse_count+65535; }

文档

基于stm32平衡小车论文

本科生毕业论文(设计)(2015)届论文(设计)题目:基于单片机的自平衡小车的设计与实现学院:电子工程学院专业:电子信息工程学号:201113007619姓名:何建安指导老师姓名及职称:丘森辉助教目录第一章绪论(2)1.1研究背景(3)1.2研究现状(3)1.3研究意义(3)1.4论文的组织结构(3)第二章系统的方案设计与论证(4)2.1系统设计要求(4)2.2系统的总体设计(5)2.3方案论证(5)2.3.1车体的比较与选择(5)2.3.2控制系统的比较与选择(6)2.3.3电机驱动的比较与
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top