(毕业生论文)基于嵌入式系统小车寻物的设计与实现.doc_第1页
(毕业生论文)基于嵌入式系统小车寻物的设计与实现.doc_第2页
(毕业生论文)基于嵌入式系统小车寻物的设计与实现.doc_第3页
(毕业生论文)基于嵌入式系统小车寻物的设计与实现.doc_第4页
(毕业生论文)基于嵌入式系统小车寻物的设计与实现.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第一章绪论1.1设计背景20XX年4月,为促进校企合作,引导企业参与赛项设计、提供技术支持和后援保障,推动工学结合人才培养模式的改革与创新,引导高职教育在嵌入式技术高速发展背景下的相应专业领域的教学改革与专业调整,检验高职学生在嵌入式技术应用方面的职业能力以及质量、效率、成本和安全意识。全国职业院校技能大赛组委会决定将“嵌入式产品开发”作为竞赛项目之一。1.2嵌入式Linux发展现状及趋势关于嵌入式系统(Embedded Systems)的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。举例来说,大到油田的集散控制系统和工厂流水线,小到家用VCD机或手机,甚至组成普通PC终端设备的键盘、鼠标、软驱、硬盘、显示卡、显示器、Modem、网卡、声卡等均是由嵌入式处理器控制的,嵌入式系统市场的深度和广度,由此可见一斑。尽管如此,它的市场价值也许仍然超过了您的想象:今天,嵌入式系统带来的工业年产值已超过了1万亿美元。自由开源软件在嵌入式应用上受到青睐,Linux日益成为主流的嵌入式操作系统之一。随着MOTOROLA手机A760、IBM智能型手表Watch Pad、SharpPDA、Zaurus等一款款高性能“智能数码产品”的出现,以及Motorola、Samsung、MontaVista、Philips、Nokia、IBM、SUN等众多国际巨头的加入,嵌入式Linux的队伍越来越庞大了。目前不少大学、研究机构和知名公司加入了嵌入式Linux的开发工作,成熟的嵌入式Linux产品不断涌现。20XX年全球嵌入式Linux市场规模已达9150万美元,20XX年有1.336亿美元,20XX年有1.633亿美元,20XX年已达2.011亿美元,每年平均增长30%。一个完整的系统,当然要包括硬件和软件两个部分,这就好像必须要有丈夫和妻子,才能组成一个完整的家庭。尽管嵌入式系统有着无比广阔的市场需求和发展前景,但嵌入式系统的发展,多年来却经历了一个比相对后期产生的个人计算机(PC)更为曲折和痛苦的历程。随着微处理器的产生,价格低廉、结构小巧的CPU和外设连接提供了稳定可靠的硬件架构,那么限制嵌入式系统发展的瓶颈,就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS、Neculeus和Windowss CE,但仍然有大量的嵌入式系统摒弃操作系统于不顾,而仅仅包括一些控制流程。当然,我们可以说在嵌入式系统相对简单的情况下,这些控制流程足以应付。但是,当嵌入式系统的功能复杂后,也就是说需要提供更完善的服务的时候,简单控制逻辑就不够用了。毋庸置疑,对于任何一个产品来说,服务的内容和质量,都是价值的源泉和生存的基础。我们不妨做一个夸张而又通俗的比喻,也许雇一个保姆,能够解决生活的一部分后顾之忧,但一个真正意义上的家庭,必须需要一位妻子。那么是什么造成嵌入式系统领域大量的黄金、钻石王老五至今孑然一身呢?特殊的人才有特殊的需求,显然我们需要的是一个身材苗条、容貌姣好、身体健康、聪慧善良、上得厅堂下得厨房,甚至不向我们的工资袋多看一眼的贤内助,也就是说,嵌入式系统需要的是一套高度简练、友善界面、质量可靠、应用广泛、易开发、多任务,并且价格低廉的操作系统。 人们可以发现,以上所说的要求简直就是在形容Linux。更为令人心动的是,除上述优点之外,Linux与生俱来的优秀网络血统,更为今后的发展铺平了一条宽广平坦的大路。这里的网络,并不仅仅指Internet,关于Linux在Internet中的优势,将需要专门著文论述,这里仅仅提醒大家注意的是另一个也许可以说较Internet更为广阔的市场:家庭网络。尽管全世界每分每秒都有成千上万的优秀软件工程师致力于将个人电脑(PC)的操作系统变得更加简单易用,但令人遗憾的是,对某些特定的年龄和社会阶层的人群来说,要想开启精彩的网络世界大门,依然有一道难以逾越的门槛。事实就是社会上关于个人电脑的普及班和书籍依然铺天盖地,而我们却从未听说过关于操作电视或者空调的培训。LINUX系统和嵌入式设备的结合,无疑将会对智能住宅及数字家电事业,注入无限澎湃的动力。这并不是什么超前的设想,许多具有高前瞻性的企业,已经从研发阶段过渡到生产阶段,推出了多姿多彩的嵌入式LINUX操作系统的PDA、相机、或者更为概念化的咨讯家电。如推出全球最小的嵌入式操作系统内核夸克(QUARK),而闻名于世的网虎国际(XLinux),已与Intel成功合作,将夸克应用于Intel去年推出的strongARM芯片上。人们可以在这一平台上享受上网和听MP3的乐趣。而据我所知, LINUS本人在归家的途中已经在利用手机指令家中的咖啡壶为自己准备咖啡了。1.3方案论证基于嵌入式Linux智能小车基本组成是:1)主控模块主要采用三星公司的S3C2440作为主控芯片,它是一种低功耗,32位ARM9处理器,具有强大的嵌入式操作系统运行能力,并具有丰富的外设接口,核心板下面是扩展MCU外围部件的一块电路板,包括SD卡接口、USB接口、多媒体(扬声器和话筒等)接口、网卡接口、摄像头接口、串行通信接口、LCD液晶显示接口、按键和LED指示接口、I2C和SPI接口、GPIO接口、实时时钟电源和系统总线扩展口等。2)光电隔离接口驱动模块负责对整个机器人的供电系统进行控制,采用两组电源,一组用于驱动电机运转,另一组用于MCU系统及接口电路供电,当两组之间的器件需要信号传输的,可以有效的通过光电隔离进行,从而可靠的防止信号串扰,避免因电机运转产生的强电磁波通过线路产生干扰。3)该模块还实现将ARM发出的驱动信号通过光电隔离传送到电机驱动芯片上,从而控制四只直流电机的运转和停止。具体的,可控制直流电机转动方向、速度(脉冲宽度控制,简称PWM)4)机器人摄像头接口模块,该模块实现对ARM和摄像头之间的信号进行传输。一方面,ARM通过该板下达对摄像头的采集命令;另一方面ARM板通过元线网卡把采集到的图像传到上位机上,以便实时观察仓库中的物品。1.4采用的基本设计思路和要实现的基本功能1)利用光电循迹技术,编程获取轨道信息,控制嵌入式智能小车能在轨道上前进、后退、左转和右转。2)当光电循迹板检测到特定的停止位置信息后,通过GPIO接口,将停止信息传送给ARM,ARM立即下达命令停止直流电机运转,使嵌入式智能小车在规定的标记点上停止。3)小车将停止点的信息用摄像头把实时图像用无线网卡传送到后台服务器,服务器根据图像特征再给小车发送下一步运行指令。(应该是奇数页开始)第二章嵌入式Linux应用2.1 嵌入式Linux开发环境建立通过运用crosstool-0.43.tar.gz脚本工具包来制作自己的交叉编译器。并且此编译器能够编译u-boot-1.3.4,linux-2.6.14内核。本实验旨在让读者学会一种编译制作交叉编译器的方法。在实际开发中,大多根据编译目标,选择一些编译好的、经过测试的交叉编译器。crosstool是由美国人Dan Kegel(毕业于加(利福尼亚)州工学院)开发的一套可以自动编译不同匹配版本gcc和glibc,并作测试的脚本程序。下载地址:kegel/crosstool/crosstool-0.43.tar.gz在kegel/crosstool/crosstool-0.43/buildlogs/可以看到各种CPU和GCC+Glibc版本,哪些已经编译成功,哪些部分成功,哪些彻底失败。制作之前确保你的系统中已经安装了下面的工具包:bison,flex,build-essential。如果系统没有这些软件包,必须进行安装。在ubuntu发行版中,使用apt-get命令即可非常方便的进行安装。安装方法:一、ubuntu 系统中可以使用超级用户(root),调用 apt-get 命令#apt-get d install flex 二、可以使用dpkg 命令安装已经下载的软件包 如:我们将下载包放到 /home/linux/downloads/下,可以使用如下命令安装flex。2.2U-boot的移植2.2.1U-boot简介 U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。其它系列的处理器和操作系统基本是在20XX年11 月PPCBOOT改名为U-Boot后逐步扩充的。从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心Wolfgang Denk以下简称W.D本人精湛专业水平和持着不懈的努力。当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOT LOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。2.2.2U-boot目录结构* board 目标板相关文件,主要包含SDRAM、FLASH驱动;* mon 独立于处理器体系结构的通用代码,如内存大小探测与故障检测; * cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件; * driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好) * doc U-Boot的说明文档; * examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c; * include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件; * lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件; * net 与网络功能相关的文件目录,如bootp,nfs,tftp; * post 上电自检文件目录。尚有待于进一步完善; * rtc RTC驱动程序; * tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具。2.2.3主要功能* 系统引导 支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统 * 支持NFS挂载、从FLASH中引导压缩或非压缩系统内核; * 基本辅助功能 强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲; * 支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM; * CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好; * 设备驱动 串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持; * 上电自检功能 SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号; * 特殊功能 XIP内核引导。2.2.4移植u-boot建立自己的平台类型(1)解压文件#tar jxvf u-boot-1.3.4.tar.bz2(2)进入U-Boot源码目录#cd u-boot-1.3.4(3)创建自己的开发板:#cd board#cp smdk2410 qq2440 a#cd qq2440#mv smdk2410.c qq2440.c#vi Makefile (将smdk2410修改为qq2440)#cd ././include/configs#cp smdk2410.h qq2440.h退回U-Boot根目录:#cd ././(4)建立编译选项#vi Makefilesmdk2410_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t smdk2410 NULL s3c24x0qq2440_config:unconfig$(MKCONFIG) $(:_config=) arm arm920t qq2440 NULL s3c24x0arm: CPU的架构(ARCH)arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。qq2440: 开发板的型号(BOARD),对应于board/qq2440目录。NULL: 开发者/或经销商(vender),本例为空s3c24x0: 片上系统(SOC)(5)编译将:ifeq ($(ARCH),arm)CROSS_PILE = arm-linux-endif修改为:ifeq ($(ARCH),arm)CROSS_PILE = arm-softfloat-linux-gnu- (arm gcc 为3.4.5)endif #make qq2440_config;#make all本步骤将编译u-boot.bin文件,但此时还无法运行在qq2440v3开发板上。修改部分:1) 修改中断禁止部分 (cpu/arm920t/start.S)# if defined(CONFIG_S3C2410)ldr r1, =0x7ff /*根据2410芯片手册,INTSUBMSK有11位可用 */ldr r0, =INTSUBMSKstr r1, r0# endif 2) 修改SDRAM的配置(board/samsung/smdk2410/lowlevel_init.S)#define REFT1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */改为:(参考K4S561632手册“8192 refresh cycles / 64ms”可知刷新的周期为:7.8125us)#define REFT1268 /* period=7.8125us,HCLK=100Mhz, */3) 时钟的配置 (board/smdk2410/ smdk2410.c)在board/ smdk2410/ smdk2410.c的board_init函数,首先修改为异步总线模式:具体修改在clk_power-LOCKTIME = 0xFFFFFF之前加上:_asm_(“mcr,0,r1,c1,c0,0n” “orr r1, #0xc0000000n”, “mcr p15,0,r1,c1,c0,0n”);4) 支持NOR FLASH(SST39VF1601)(include/configs/ smdk2410.h)现在还无法通过UBOOT的命令来操作NOR FLASH,在配置文件include/configs/ smdk2410.h里默认的型号是AM29LV400,而我们的是SST39VF1601。修改如下:添加:#define CONFIG_SST_39VF1601 1#define CFG_MAX_FLASH_BANKS 1#define PHYS_FLASH_SIZE 0x200000 /* 2MB */#define CFG_MAX_FLASH_SECT (512) /* max number of sectors on one chip */#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x30000) /* addr of environment */接下来我们修改board/ smdk2410/flash.c:将:#define MAIN_SECT_SIZE 0x10000 /* 64 KB */修改为:#define MAIN_SECT_SIZE 0x1000 /* 4 KB */(按sector操作)将:#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 1)#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA 1)修改为:#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000005555 1)#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AAA 1)5) 内核参数的传递支持只需要在include/configs/ smdk2410.h里增加两个宏,分别是:#define CONFIG_SETUP_MEMORY_TAGS 1 /向内核传递内存分布信息 #define CONFIG_CMDLINE_TAG 1 /向内核传递命令行参数6) 将tool/mkimage工具拷贝到主机linux系统的/bin目录下面。为以后做内核镜像使用。7) 支持dm9000ep网卡驱动,只需在include/configs/smdk2410.h添加即可:#define CONFIG_DRIVER_DM9000 1#define CONFIG_DM9000_BASE 0x20000300#define DM9000_IO CONFIG_DM9000_BASE#define DM9000_DATA (CONFIG_DM9000_BASE+4)#define CONFIG_DM9000_USE_16BIT交叉编译U-BOOT#make distclean /彻底删除#make smdk2410_config#make ARCH=arm CROSS_PILE=arm-linux- (1.设置主机交叉编译器环境变量2.u-boot.bin在根目录)生成的u-boot.bin即为我们移植后的结果。下载到开发板上运行!2.3Linux内核移植2.3.1配置Linux内核(1)修改内核目录树根下的的Makefile,指明交叉编译器:$vim Makefile找到ARCH和CROSS_PILE,修改ARCH = armCROSS_PILE = arm-softfloat-linux-gnu-保存退出,然后设置你的PATH环境变量,使其可以找到你的交叉编译工具链:$echo $PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games如果路径为/home/linux/cossstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gun/bin,不用再进行设置,如果不是则进行下面步骤进行设置:$exportPATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:(动态加载环境变量,终端关闭后,自己所加载的环境变量立即消失)。 或者修改./bashrc文件:(静态加载环境变量,不随终端的关闭而消失)$ vim /.bashrc 在文件最后添加PATH=$PATH:/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin:export PATH(2)添加程序文件将 2410GPIO_TEST_drv.c 文件拷贝到内核代码目录 drivers/char 中 修改Makefile和Kconfig文件进入内核的 drivers/char 目录$vim Makefile 找到在 obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o ,在其下一行添加: obj-$(CONFIG_2410GPIO_TEST_DRV) += 2410GPIO_TEST_drv.o保存退出vim(3)修改Kconfig文件$vim Kconfig 在以下代码段下面menu Character devices加入以下信息: config 2410GPIO_TEST_DRV tristate S3C2410 test drv Device Support depends on ARCH_S3C2410 -help- support led test device driver on FS2410 develop board(4)编译内核产生zImage.img文件, 并将zImge.img拷贝到/tftpboot目录中,复位开发板,重新启动。编译命令:#make zImage#cd arch/arm/boot# mkimage -n linux- -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img#cp zImage.img /tftpboot (5)交叉编译 2410GPIO_TEST_APP.c/home/linux/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc 2410GPIO_TEST_APP.c o gpio_test(6)复制 gpio_test 到 /source/rootfs/sbin/gpio_test(7)创建 GPIO_TEST 设备节点,在开发板上运行如下命令:#mknod -m 666 /dev/GPIO_TEST c 252 0(8)运行 gpio_test 测试,在开发板上运行如下命令: #/sbin/gpio_test(9)重新配置编译内核,将GPIO_TESt编译成模块,动态加载2.3.2网卡驱动添加(1)添加网卡驱动到内核 将cs8900a.h和cs8900a.c文件拷贝到内核代码目录drivers/net中:rootfarsight:/source/kernel/linux-# cp /mnt/hgfs/disk/cs8900a.* drivers/net (2)修改Makefile和Kconfig文件 rootfarsight:/source/kernel/linux-# vim drivers/net/Makefile 在文件中添加: obj-$(CONFIG_CS8900a) +=cs8900a.o (3)保存退出,修改Kconfig文件rootfarsight:/source/kernel/linux-# vim drivers/net/Kconfig 在以下代码段下面config DM9000 tristate DM9000 support depends on ARM & NET_ETHERNET select CRC32 select MII -help- Support for DM9000 chipset. To pile this driver as a module, choose M here and read .The module willbe called dm9000.加入以下信息:config CS8900a tristate CS8900a support #(注意开头使用TAB键,下同)depends on ARM & NET_ETHERNET -help- Support for cs8900a chipset. To pile this driver as a module, choose M here and read. (4)配置内核支持CS8900A网卡rootfarsight:/source/kernel/linux-# make menuconfig Device Drivers - /配置网卡驱动:Network device support - * Network device support Ethernet (10 or 100Mbit) - * Ethernet (10 or 100Mbit) CS8900a support 保存退出,产生.config文件. (5)编译内核产生zImage文件, 并将arch/arm/boot/zImge拷贝到/tftpboot目录中,在linux源码的顶层目录执行 #make zImage#cd arch/arm/boot# mkimage -n linux- -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage zImage.img #cp zImage.img /tftpboot (6)拷贝rootfs-farsight.tar.gz到配置了tftp及nfs服务的ubantu7.04环境中假定/source/rootfs为nfs的服务目录,则:rootfarsight:/source# cp rootfs-farsight.tar.gz /sourcerootfarsight:/source# tar zxvf rootfs-farsight.tar.gz在目录/souce/rootfs下存放着一个可用的文件系统(文件系统的实验在后面的实验中会涉及到)。确保主机端tftp及nfs服务是开启的。rootfarsight:/source# cd rootfsrootfarsight:/source/rootfs# mknod dev/console c 5 1(7)修改内核启动参数FS2410# setenv bootcmd tftp 30008000 zImage.img; bootm 30008000FS2410# setenv bootargs root=nfs nfsroot=3:/source/rootfs ip=34 console=ttySAC0,115200 init=/linuxrcFS2410#saveenv(8)启动开发平台,在超级终端观察现象FS2410# boot如果顺利,可以在串口终端显示linux命令行终端了!第三章系统硬件设计寻物小车共有四部分电路组成,分别是:控制主板、电源电路、驱动电路、寻迹电路。寻物小车整车电路接口框架图如图3-1所示:循循迹板S摄像头S3C2440核心板8 路循迹接口电 路PWM光电隔离驱动接 口驱动电路测速电路WIFI无线网卡扩展功能接口板左右轮电机图3-1整车电路板框架图3.1控制主板控制主板由核心板和功能接口板组成。核心板包含有32位的ARM微处理器及其ROM、RAM等存储器,完成程序运行、数据暂存等,是控制和指挥小车各个功能部件协调有序工作的指挥中心。该板照片如图3-2所示。图 3-2 MCU核心板S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。S3C2410X芯片集成了大量的功能单元,列举如下:(1) 内核采用1.8 V供电,存储单元采用3.3 V独立供电,外部IO采用3.3 V独立供电,16 KB数据Cache,16 KB指令Cache,MMU。(2) 内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。 (3) LCD控制器(最高4K色STN和256K彩色TFT),一个LCD专用DMA。 (4) 4路带外部请求线的DMA。 (5) 3个通用异步串行端口,2通道SPI。(6) 一个多主IIC总线,一个IIS总线控制器。 (7) SD主接口版本1.0和多媒体卡协议版本2.11兼容。(8) 2个USB Host接口,一个USB Device(VER1.1)接口。(9) 4个PWM定时器和一个内部定时器。 (10) 看门狗定时器。 (11) 117个通用I/O。 (12) 24个外部中断。(13) 电源控制模式:标准、慢速、休眠、掉电。 (14) 8通道10位ADC和触摸屏接口。 (15) 带日历功能的实时时钟。 (16) 芯片内置PLL。(17) 16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。(18) ARM带MMU的先进体系结构,支持Windows CE、EPOC32、Linux。 (19) 指令缓存(Cache)、数据缓存、写缓冲和物理地址 TAG RAM,减小了对主存储器带宽和性能的影响。(20) ARM920T CPU核支持ARM调试体系结构。 (21) 内部先进的位控制器总线(AMBA2.0、AHB/APB)。系统管理方面的特点如下:(1) 小端/大端支持。(2) 地址空间:每个BANK为128 MB(全部为1 GB)。(3) 每个BANK可编程为8/16/32位数据总线。 (4) BANK 0BANK 6为固定起始地址。(5) BANK 7可编程BANK的起始地址和大小。 (6) 共有8个存储器BANK。 (7) 6个存储器BANK用于ROM、SRAM及其他。 (8) 2个存储器BANK用于ROM、SRAM及同步DRAM。 (9) 每个存储器BANK可编程存取周期。(10) 支持等待信号,用以扩展总线周功能接口板是扩展S3C2440外围部件的一块电路板,包括SD卡接口、USB接口、多媒体(扬声器和话筒等)接口、网卡接口、摄像头接口、串行通信接口、LCD液晶显示接口、按键和LED指示接口、I2C和SPI接口、GPIO接口、实时时钟、电源和系统总线扩展口等。3.2电源电路的设计与分析电源电路如图3-3所示。图3-3 电源电路电源电路分为两部分,一是系统用电源,包括接口电路和ARM核心板用电源;二是驱动电源,主要提供给电机驱动和电机接口电路用。这两路电源采用不同的“地”,通过光电耦合器(后续介绍)实现在电气上的隔离但却实现信号上的联通。其主要作用是为了防止电机通断瞬间产生的高频高压电磁波对ARM系统的影响,各自可单独供电。两路电源采用相同的电路结构。这两路电源均采用LM2576开关电源模块做主电源,LM2576-5是内置52KHz振荡频率的高频开关电源模块,外围电路简单,输出纹波电压低,工作可靠;另外,其内部还包含过流保护、过热保护等保护装置,输入电压低至6V即可稳定输出5V/3A的驱动输出,特别适合做含MCU控制器的电源。JP1和JP2均是锂电池插入接口,为标配的12V/20C2200mAh 的航模锂电池,S1和S2是自锁开关,按一下电源接通,再按一下电源关闭;D1和D3是锂电池防反接二极管,当锂电池反接是二极管处于截至状态,可以有效防止因电源反接引起的损毁;C1和C4是输入滤波电容;C2、C3和C5、C6是输出滤波电容;L1、L2是滤波电感;D2、D4是续流二极管;LED1和LED2是电源工作指示灯;JP10为接入ARM系统板的5V电源接口。ARM系统板供电为3.3V,其板上已设计包含有低压差线性稳压源AS2815AR-3.3 IC 芯片稳压,提供给实验板所需要的3.3V 电源。在核心板上CPU 内核电压1.25V采用低噪声、低压差线性稳压源MAX8860EUA 稳压芯片。这两种芯片核心板上已包含,这里不做详细介绍。3.3驱动电路的设计与分析底层驱动电路由电机驱动驱动电路、光电隔离电路、光耦光电管驱动电路、码盘测速电路等部分组成。3.3.1电机驱动电路的设计与分析电机驱动电路如图3-4所示。图3-4 左轮和右轮电机驱动电路ARM之GPIO的某六个接口信号通过光电耦合器(后续介绍)接左、右电机功放电路,每路需要三个接口控制信号,以左边为例,分别为LIFT PWM、LIFT DIR、LIFT EN,这三个信号连接到双路功放电桥LN298的输入端,从输出端接出两个电机控制信号,JP3和JP4,可驱动电机做向前、向后、速度控制等运动。其中D5、D6用作电机内部线圈(电感)的续流二极管电桥。其中的右路控制方法与左路一致,这里不再赘述。3.3.2光电隔离电路的设计与分析光电隔离电路如图3-5所示。图3-5 光电隔离电路光电隔离电路实现ARM的输出信号到电机的驱动信号之间的电气隔离,但控制信号仍然通过,可有效的防止干扰源破坏ARM系统的正常工作。由于PWM信号频率较高,这里采用高速光电隔离器6N137,其余如DIR(方向)、EN(允许)端所需的信号只要低频光电隔离器TLP521即可。3.3.3光耦光电管驱动电路设计与分析光耦光电管驱动电路如图3-6所示。由于光电隔离器TL521和6N137的光电管需要较大的电流才能导电发光,因此需要加上ULN20XX。ULN20XX 是高耐压、大电流达林顿陈列,由七个硅NPN 达林顿管组成。该电路的特点如下:图3-6 光耦光电管驱动电路ULN20XX 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL 和CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。ULN20XX 工作电压高,工作电流大,灌电流可达500mA,并且能够在关态时承受50V 的电压,输出还可以在高负载电流并行运行。3.3.4码盘测速接口电路设计与分析码盘测速接口电路如图3-7所示。图3-7 码盘测速接口电路每个直流电机上均配有测速码盘,均内置两只光电对管和一个遮光板,见图3-7中的虚线框内所示。其中左侧的两个发光管是串联的,则流过的是相同的电流,右侧的两个光电接收管的发射极已连接,集电极各自独立,所以每只码盘只需要引出四个引线即可。因此,底版中只需要安装三个电阻,200R的是限流电阻,另两个10K的是外部上拉电阻。当电机运转时,遮光板也跟着运转,并不停的挡住和放开红外光线,使得右侧的两个三极管不断的轮流导通和截至。则L-SPEED和L-B及R-SPEED和R-B不断的产生高低电平变换,被连接至ARM接口板,从而读出电机运转的速度信息。电机减速此轮按80:1的变比,因此,电机每运转一圈,码盘光电管被导通和截至80次。按此,可以计量车体的行进距离,也可计算其速度信息。由于每只码盘有两只对管,他们被挡光的次序信息可以用来被测量电机的运转方向,也可以用这两路光电接收信息通过软件处理实现抗干扰。3.4寻迹电路设计与分析3.4.1红外发射与接收管的基本工作原理小车寻迹板主要作用是根据红外接收射管接收到物体反射回的红外线来判定小车所处的状态,例如红外管遇到反光较强的物体时(表面为白色或近似白色时)光被折回,引起光电三极管导通,输出低电平,如果遇到反射光不强的物体时,光大部分被接收,光电三极管截止,输出高电平(如图3-8),S3C2440通过高低电平来对反光差别较大的两种颜色识别,从而给驱动板发命令控制小车,达到寻迹的目的。+5V+5V1K100R+Out- 控制开关三极管9012图3-8红外接收与发射电路3.4.2红外寻迹电路板的整体分布与抗干扰设计本寻迹板采用8个红发射对管等间距排列,传感器的间距为12mm(如图3-9),由于传感器发射的是一个锥形光,传感器与地面的高度影响到红外线的照射范围,也影响红外线的接受灵敏度,所以红外线与地面高度的选择对与小车寻迹的正图3-9红外寻迹板传感器分布图2mm130mm传感器1传感器2传感器4传感器5传感器6传感器7传感器3传感器8确性至关重要,通过实践小车高度选定在2cm左右,并通过调节各自红外管的灵敏度,能将干扰大幅减小,但是实践证明虽然干扰有所降低,但是误判断的现象还是时有发生,当小车通过比较平坦的路段时,各传感器的工作正常,且误判现象几乎没有,但是当小车路过不平坦地段时,小车多有误判、跑飞现象,通过分析测量发现是由于红外接收管在接收物体反射回的光的时候,由于地面不平而产生漫反射,相邻的红外管也会误接收到红外光,小车可能会根据错误信息而产生误判(如图3-10)。接收发射有褶皱误接收产生干扰平坦发射有效距离正常接收图3-10红外接收管干扰示意图由于上图寻迹板采用8个红外发射管同时收发,然后根据电平来判断小车状态,控制小车行走,由于地面不可能达到理想的平坦状态,干扰因素也不可预知,通过大量实践和分析采用循环动态扫描方式,在一个红外管发射与等待接收同时,其他红外管都通过一个开关三极管关闭,这样就杜绝了红外管因接收干扰而产生的误判的现象(如图3-11)。接收发射有褶皱产生干扰关闭不接收关闭不接收图3-11红外接收管干扰示意图3.4.3红外寻迹板的基本工作原理本电路采用各自单独40KHz调制和解调方式进行收发、并循环动态扫描的设计方案,由于扫描周期很短,并不影响小车的响应时间,可以忽略不计。通过大量实验证明小车能对各种路段及时做出正确的判断,彻底解决了一个发射管发射,多个接收管接收的干扰现象。电路如图3-12(单路)所示:8个红外发射与接收管的发射管阴极都接一个开关三极管与74HC138相连,当八路红外管中有一路三极管通过74HC138选通时,这一路红外管工作,其他的红外发射与接收管都不工作,接收管电路根据反射回不同强度的红外光输而开关量与比较器比较,通过比较器置0或置1送给八路选择器,由八路选择器单独选通送给单片机进行数据处理输出。图3-12红外寻迹板(单路)电路原理第四章系统软件设计小车软件设计主要分为两部分:驱动程序(寻迹板的驱动、PWM的驱动)和小车寻物程序。4.1主程序的设计在接到上位机发出的启动命令后,智能小车启动主寻物程序。首先是对所使用的资源进行初始化,接着判断路况并执行相应的命令和完成预设的任务,等待上位机的停止命令。 图4-1 寻物主程序流程图4.2寻迹算法寻迹程序采用的是枚举法,枚举法就是在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法。本次设计共用八对红外对管,路况共有256种(2的8次方种),若是一一列出并且每一种都配以相应的处理,这将是一个很繁杂的工程,故不可取。而是将小车可能遇到的路况,进行推算归纳,将要作出速度和方向调整的路况数据保留下来,没有影响的路况做保持上一状态处理。如图4-2 枚举法推测路况图,八个点代表八个红外对管,黑色的点代表探测的红外对管测的是黑色区域也就是寻迹轨道,白色的点为跑道的空白区域。图4-2 枚举法推测路况然后把采集的数据作为PID算法的参数,PID控制以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。PID控制,实际中也有PI和PD控制。PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控制的,其控制规律的数学模型为:其中:u(t

温馨提示

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

评论

0/150

提交评论