基于FPGA的智能小车系统

news2024/11/15 21:52:33

目 录

前 言 1
第1章 系统总体方案设计 4
§1.1 系统任务描述 4
§1.2 控制系统要求 4
§1.3 方案设计与论证 4
§1.3.1 小车载体选择 4
§1.3.2 主控制器选择 5
§1.3.3 传感器选择 5
§1.3.4 电机驱动选择 6
§1.3.5 稳压电源选择 7
§1.3.6 智能小车系统最终方案 7
§1.4 系统总体设计 8
§1.4.1 系统组成 8
§1.4.2 系统工作原理 8
§1.5 本章小结 9
第2章 硬件设计 10
§2.1 主控电路设计 10
§2.1.1 FPGA硬件结构简介 10
§2.1.2 最小应用系统设计 12
§2.2 电机驱动电路的设计 15
§2.2.1 智能小车系统驱动电机的要求 15
§2.2.2 直流电机调速原理 16
§2.2.3 L298N电机驱动原理 17
§2.3 障碍物检测电路设计 22
§2.4 报警电路设计 23
§2.5 稳压电源电路设计 24
§2.6 系统整体电路设计 25
§2.7 本章小结 26
第3章 软件设计简介 27
§3.1 主程序模块 27
§3.1.1 程序控制设计 27
§3.1.2 主程序流程图 27
§3.2 初始化模块 29
§3.3 延时模块 29
§3.4 中断模块 29
§3.5 报警模块 29
§3.6 驱动模块 29
§3.7 本章小结 30
第4章 系统的仿真与调试 31
§4.1 仿真步骤 31
§4.2 系统调试 31
§4.2.1 硬件调试 31
§4.2.2 软件调试 32
§4.2.3 联合调试 32
§4.3 本章小结 32
结 论 33
参考文献 34
致 谢 35
附 录 36
第1章 系统总体方案设计

§1.1 系统任务描述
该系统的任务就是让智能小车在行进的过程中,能够自动检测存在的障碍物、并且采取有效的措施。

§1.2 控制系统要求
该控制系统要满足以下几点要求:
(1)能对车体四周的环境进行探测以获得障碍物的存在情况。
(2)实时性要求。
(3)交互功能。主要是设定小车正常行进、转弯时驱动电机的速度;初始化系统时的一些参数设定。
(4)驱动电机稳速运行要求。
(5)控制系统工作可靠、耐用,抗干扰能力强。

§1.3 方案设计与论证

§1.3.1 小车载体选择
由于水平有限无法制作出双足行走小车,因此本设计选择小车作为智能小车系统的载体。
方案一:自己设计制作车架
自己制作小车底盘,用两个直流减速电机作为主动轮,利用两电机的转速差完成直行、左转、右转、左后转、右后转、倒车等动作。减速电机扭矩大,转速较慢,易于控制和调速,符合小车的要求。而且自己制作小车框架,可以根据电路板及传感器仿真需求设计空间,使得车体美观紧凑。但自己制作小车设计制作周期较长,且费用较高。
方案二:购买玩具电动车
玩具电动车价格低廉,有完整的驱动、传动和控制单元,其中传动装置是本设计所需的,缩短了开发周期。但玩具电动车采用普通直流电机驱动,带负载能力差,调速方面对程序要求较高。同时,玩具电动车转向依靠前轮电机带动前轮转向完成,精度低。
综合考虑到制作周期和精度问题,最终选择了在淘宝购买小车车体零部件自己组装。这样不仅精度有保障,也增加了设计的灵活性。

§1.3.2 主控制器选择
处理器可以选择采用DSP或51FPGA,DSP适合用于控制电机,功能强大。51FPGA应用广泛,能满足一般控制的需要。由于对51FPGA比较熟练,价格便宜,而DSP控制相对而言复杂,故采用51FPGA。
市场上流通很多种类的FPGA,在一般性能上都可以达到要求,例如AT89C51、ATFPGA等都可以用于控制小车,唯一缺点在于不能在线下载,造成了不便的烦恼,下载器,AT系列FPGA价钱比较贵,不利于小资本实验。而STC系列FPGA价钱容易接受,可以在线下载,下载器也比较容易购买到,方便携带应用。故本设计采用FPGA作为该智能小车系统控制模块的核心,通过FPGA利用程序来精确控制小车的运动,从而实现对小车的自动控制,在对于智能小车系统的控制方面,FPGA是一个超低功耗,和标准51系列FPGA相比较具有运算速度快,抗干扰能力强,支持ISP在线编程,片内含8k空间的可反复擦写1000次的Flash只读存储器,具有256 bytes的随机存取数据存储器(RAM),32个I/O口,3个16位可编程定时计数器。其指令系统和传统的8051系列FPGA指令系统兼容,降低了系统软件设计的难度,电路设计简单、价格低廉。且在运用过程中FPGA的精确度和运算速度也都完全符合系统的要求。
综合以上分析选用了比较普通的且更为熟悉的FPGA为整个系统的控制核心。

§1.3.3 传感器选择
方案一:使用超声波传感器
在壁障模块中,可以选择超声波壁障。其优点是反应速度灵敏,距离远。但由于声波衍射现象较严重,且波包散面太大,易造成障碍物的错误判断。超声波受环境影响较大,电路复杂,而且地面对超声波的反射,会影响系统对障碍物的判断。
方案二:使用视频采集处理装置
使用CCD实时采集小车前进路线上的图像并进行实时传输及处理,这是最精确的障碍物信息采集方案,可以对障碍物进行精确定位和测距。但是使用视频采集会大大增加小车成本和设计开发难度,而且考虑到本设计的小车只是进行简单的,因而使用视频采集在实际应用中是个很大的浪费,所以本设计放弃了这一方案。
方案三:使用红外传感器
使用红外传感器,这是一种集发射与接收于一体的光电传感器,其有效探测距离3~80cm可调,且抗外界背景光干扰能力强,价格便宜、易于装配、使用方便,可在日光下正常工作(理论上应避免日光和强光源的直接照射)。
相比方案一与方案三,由于两者价格相差不大,红外传感器体积更小,精度更高,反应更快,因此,本课题将采用红外传感器来实现智能小车的。

§1.3.4 电机驱动选择
方案一:采用继电器控制
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的进行调整。此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。
方案二:使用分立原件搭建电机驱动电路
使用分立原件搭建电机驱动电路造价低廉,在大规模生产中使用广泛。但分立原件H桥电路工作性能不够稳定,较易出现硬件上的故障,故本设计放弃了这一方案。
方案三:使用L298N芯片驱动电机
L298N是一个内含两个H桥的高电压大电流双H桥式驱动芯片,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用FPGA的IO口提供信号,而且带有使能端,方便PWM调速,电路简单,性能稳定,使用比较方便。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,正好符合本设计小车两个二相电机的驱动要求。
因此,采用L298N芯片驱动电机。
§1.3.5 稳压电源选择
方案一:采用单一电源供电
这样供电比较简单,但是由于电动机启动瞬间电流很大,会造成电压不稳、有毛刺等干扰,严重时可能会造成FPGA系统掉电,使之不能完成预定行程。
方案二:采用双电源供电
电动机驱动电源采用5节五号电池,FPGA及其外围电路电源采用5V钮扣电池供电,两路电源完全分开,这样做虽然可以将电动机驱动所造成的干扰彻底消除,提高了系统稳定性。但是不如单电源方便灵活。
由于本设计采用的L298N电机驱动电路板可以提供+5V输出,可以方便给5V的FPGA供电,因此采用单电源供电即可。只有给L298N电机驱动电路板供电大于6V时,才能输出+5V电压。综合考虑到本设计采用的直流电机为强磁电机以及线路压降,因此本设计选择了7.2V的镍镉充电电池组来供电。

§1.3.6 智能小车系统最终方案
经过上面的思考和分析最终确定智能小车系统的最终方案如下:
(1)采用FPGA作为整个电路的控制核心。
(2)采用可充电镍镉电池组提供基准电源。
(3)采用小车底盘作为小车载体,强磁直流减速电机作为小车系统的驱动电机。
(4)采用电机专用驱动芯片L298N作为直流电机的驱动芯片。
(5)采用红外传感器进行障碍检测。

#ifndef _MOTOR_H_
#define _MOTOR_H_
#include <reg52.h>   //包含52FPGA头文件
#define uint unsigned int
#define uchar unsigned char
sbit IN1=P1^0;	       //电机1的控制位 IN1,IN2的值控制电机的正转,反转,停止	,IN1=1,IN2=0电机正转,IN1=0,IN2=1电机反转,IN1=0,IN2=0电机停止转动;
sbit IN2=P1^1;       //在C语言里,如果直接写P1^1,C编译器并不能识别所以利用sbit换名,使编译器识别对其进行位操作。
sbit INA=P1^4;	      // 电机1的使能位 INA=1,电机开始工作,INA=0,电机停止工作
sbit IN3=P1^2;	        //电机2的控制位 IN3,IN4的值控制电机的正转,反转,停止	,IN3=1,IN4=0电机正转,IN3=0,IN4=1电机反转,IN3=0,IN4=0电机停止转动;
sbit IN4=P1^3;
sbit INB=P1^5;	        // 电机2的使能位 INB=1,电机开始工作,INB=0,电机停止工作
sbit P17=P1^7;         //传感器输入,遇障碍物输出低电平
sbit P20=P2^0;         //蜂鸣器输入,低电平有效

extern uint speed1,speed2;		          // speed1电机速度值,t1电机一个周期的时间,PWM=speed/t;
extern void delay(uint xms);				  //一个简短的延时函数
extern void go(uchar spe1,uchar spe2);		  //电机加速函数,通过spe1,spe2控制电机速度
extern void qianjin();						  //电机前进函数
extern void back();							  //电机后退函数
extern void turn_left();					     //电机左转
extern void turn_right();					  //电机右转
extern void start();						     //电机启动函数
extern void stop();							  //电机停止函数
extern void ISP_init();						  //定时器初始化函数
extern void dd();                         //蜂鸣器报警函数
#endif
/*motor.c*/
#include "motor.h"
uint speed1=0,speed2=0;
void delay(uint xms)	                    //简单的延时
{
  uint i;
  uchar j;
  for(i=xms;i>0;i--)
    for(j=110;j>0;j--);                 //for双层循环当j减为0时i减一
}

void dd()
{
	P20=0;
	delay(500);
	P20=!P20;
	delay(500);
	P20=!P20;
	delay(500);
	P20=!P20;
	delay(500);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java开发】 Spring 07 :Spring AOP 实践详解(通过 AOP 打印数据访问层)

AOP 指是面向切面编程&#xff08;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术&#xff09;&#xff0c;利用AOP可以对业务逻辑的各个部分进行隔离&#xff0c;从而使得业务逻辑各部分之间的耦合度降低&#xff0c;提高程序的可重用性&#xff0c;同时提…

SpringBoot 3.0 新特性,内置声明式 HTTP 客户端

http interface 从 Spring 6 和 Spring Boot 3 开始&#xff0c;Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface。类似的库&#xff0c;如 OpenFeign 和 Retrofit 仍然可以使用&#xff0c;但 http interface 为 Spring 框架添加内置支持。 什么是…

RabbitMQ之集群方案原理

对于无状态应用&#xff08;如普通的微服务&#xff09;很容易实现负载均衡、高可用集群。而对于有状态的系统&#xff08;如数据库等&#xff09;就比较复杂。 1、业界实践 主备模式&#xff1a;单活&#xff0c;容量对等&#xff0c;可以实现故障转移。使用独立存储时需要借…

【Matplotlib绘制图像大全】(二十五):Matplotlib使用figure()添加画布

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

2022re:Invent:亚马逊云科技拥有超过15年的数据创新经验

在探索适合企业的数据战略的道路上&#xff0c;企业并不孤单。亚马逊云科技有着超过15年的数据领域创新经验。并一直在尝试通过创新的方法去改进数据存储和分析的过程&#xff1a;亚马逊云科技在云中提供了第一个可扩展存储服务S3、发布了云上第一个专门构建的数据库DynamoDB和…

easyrecovery2023免费版电脑数据恢复软件下载功能介绍

误删了重要文件&#xff1f;电脑中毒数据丢失&#xff1f;本想拷贝却手抖格式化了&#xff1f;那可以试试easyrecovery&#xff0c;这是一款十分强大的电脑数据恢复软件&#xff0c;界面简洁明了&#xff0c;操作也是十分的简单&#xff0c;只需要根据文字提示来进行操作即可进…

B端产品实战课读书笔记:第七章B端产品常用功能设计

目录 一、工作台 二、列表 三、搜索/筛选 3.1输入框搜索 3.2 单选/复选筛选 3.3 独立/联动筛选 3.4 其他 四、审批 4.1概念 4.2扩展功能 4.3设计要点 五、用户--角色--权限 5.1 什么是RBAC模型 5.2单系统的用户权限设计 5.3多系统的用户权限设计 六、可视化 6.…

用HTML+CSS做一个漂亮简单的音乐网站

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]计算机毕业设计springboot新能源汽车租赁

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于STM32G431嵌入式学习笔记——九、IIC总线(一)EEPROM

一、基础原理剖析 先前的实验中我们都是通过程序设计语言去调用串口、定时器、引脚等硬件设备进行从0到有的功能实现&#xff0c;所有的指令以及数据均来自程序设计语言&#xff0c;而没有想计算机一样将一些必要数据存入存储器中。 IIC总线是我们嵌入式板子上进行数据传输的主…

太简单了,一文彻底搞懂Jenkins的用法

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store 你想要的&#xff0c;这里都有&#xff01; 我在前公司的某个部门做过一年CV算法工程师&#xff0c;部门推崇全栈式开发。换句话说&#xff0c;做算法&#xff0c;不能只聚焦于算法&#xff0c;要全流…

阿里云NAS存储部署简介

近期在阿里云上部署OCP需要用到NAS&#xff0c;其中遇到NAS无法扩容的问题&#xff0c;在此简单笔记。 1、部署NAS 参照github.com\kubernetes-sigs\alibaba-cloud-csi-driver\docs\nas.md部署说明&#xff0c;需要执行以下步骤&#xff1a; Step 1: Create RBAC resource …

四、伊森商城 前端基础-Vue MVVM思想Vue安装单向绑定 p21

目录 一、MVVM 思想 二、Vue 简介 2.1、安装 2.1.1、初始化vue项目 -y默认确定 2.1.2、安装上vue的2.6.11版本 三、Vue的单向绑定 一、MVVM 思想 M&#xff1a;即 Model&#xff0c;模型&#xff0c;包括数据和一些基本操作 V&#xff1a;即 View&#xff0c;视图&#xf…

【Docker】常用命令总结

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build&#xff0c;Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;使用户的APP&#xff08;可以是一个WEB应用或数据库应用等等&#xff09;及其运…

容器开发运维人员的 Linux 操作机配置优化建议

"工欲善其事必先利其器", 作为一个PAAS平台架构师, 容器相关技术(docker, k8s等)是必不可少的. 本文简单介绍下我自己的Linux操作机配置. 提升工作效率, 提高使用体验. :heart::heart::heart: :exclamation: 注意: 本文以CentOS 7.6 为例, RHEL7.6 操作类似. Ubuntu系…

为什么简历上不要轻易写“精通分布式”,一线大厂为什么面试必问分布式?

为什么要学习分布式&#xff1f; 作为一名后端 Java 程序员&#xff0c;我们在找工作写简历的时候除了高并发经验。一般情况下都还会写上自己熟悉/了解/掌握/精通分布式系统&#xff0c;所以高并发和分布式大多是成对出现的。 在某直聘网站上搜到的 Java 岗位 这么多金的一个知…

Shiro-SpringBoot (二)

在上一节中实现了在SpringBoot中使用Shiro做权限控制&#xff0c;但是针对上一节留下的不足点&#xff0c;在这里进行一下优化和改造&#xff0c;主要有一下几点: 支持AJAX请求支持FreeMarker模板URL拦截提取到yml配置文件 (一) 支持AJAX请求 如果是AJAX请求URL接口&#xff0…

软件外包公司真的去不得吗?

各位小伙伴们&#xff01;好&#xff01;啊&#xff01;最近全国大部分地区都降温了&#xff0c;大家记得做好保暖&#xff0c;不要生病。 无论是应届毕业生&#xff0c;还是准备跳槽的测试人&#xff0c;都有面对“软件外包”公司的可能。有些人说进入外包公司就相当于给履历…

电子招标采购商城系统:优化传统采购业务,提速企业数字化升级

后疫情时代&#xff0c;电子元器件供应链发生了巨大的变化&#xff0c;缺货已经影响了大多数企业&#xff0c;电子元器件采购人员每天被“缺货”“涨价”的字眼包围着&#xff0c;对电子元器件企业的发展带来了极大的限制。当前&#xff0c;借助数字化技术对电子元器件采购管理…

[附源码]计算机毕业设计在线票务系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…