六脚爬虫机器人机械结构设计和控制系统搭建

上传人:沈*** 文档编号:99760049 上传时间:2022-06-01 格式:DOC 页数:64 大小:1.22MB
收藏 版权申诉 举报 下载
六脚爬虫机器人机械结构设计和控制系统搭建_第1页
第1页 / 共64页
六脚爬虫机器人机械结构设计和控制系统搭建_第2页
第2页 / 共64页
六脚爬虫机器人机械结构设计和控制系统搭建_第3页
第3页 / 共64页
资源描述:

《六脚爬虫机器人机械结构设计和控制系统搭建》由会员分享,可在线阅读,更多相关《六脚爬虫机器人机械结构设计和控制系统搭建(64页珍藏版)》请在装配图网上搜索。

1、. .摘要本文详细介绍了六脚爬虫机器人的机械结构以及控制程序的编写。机械结构采用了对称式设计,结构简单;其行走功能由六只脚、18个舵机实现,自由度较高,稳定性、灵活性较好。控制程序的主体是C语言。包括基本步态的编写,以及传感器的在机器人上的高级应用,这样,机器人在满足基本行走运动的同时,也能感知外界环境,并通过控制器对接收到的外界信号进行处理,并控制机器人运动。关键词:对称式结构,舵机控制器,步态,传感器AbstractThe thesis describes in detail that the mechanic design of Hexcrawlerand the compiling o

2、f control program. The structure of the robot is in symmetric expression, a simple mechanism; the function of walking is supported by six legs, and eighteen motors, with multiple degrees of freedom. Besides, it is of high stability and flexibility. The program to control the robot is written in C la

3、nguage, including basic gait, the advanced application of sensors. Thereby, the robot can walk in several gaits. At the same time, it can sense the condition around it. Then, it will process the data it received, and control the motion of the robot.Keywords: symmetric expression,PSCU,gait, sensor目录摘

4、要IAbstractII目录III1 绪论- 1 -1.1课题来源- 1 -1.2本课题的目的及其意义- 1 -1.3国外发展现状- 1 -1.4本课题的研究容- 5 -2 机械结构设计介绍- 6 -2.1 功能需求与分析- 6 -2.2 材料选择与结构设计介绍- 6 -3 舵机控制板原理与应用- 9 -3.1舵机原理介绍- 9 -3.2舵机控制板原理介绍- 10 -3.3 如何使用舵机控制板- 12-3.4控制板程序编写- 14 -4 STM32开发板介绍与程序编写- 18 -4.1 STM32F107芯片简介- 18 -4.2 软件与编程初始准备- 18 -4.3GPIO与AFIO设置与应

5、用- 18 -4.31 GPIO设置与应用.184.32AFIO-I/O口重映射.224.4 USART设置与应用- 22 -4.5外部中断设置与应用- 26 -4.6系统时钟设置与应用- 29 -4.61 系统时钟简介与应用.294.62定时器配置314.7机器人行走步态程序编写- 32 -4.71 机器人行走步态简介334.72三脚步态.354.73四脚步态.374.74 单脚波动步态.384.75 转弯与横爬步态.404.8多传感器应用与程序编写- 43 -4.81 指南针传感器.434.82 红外、光敏传感器.454.83 柔性力传感器.464.84 温湿度、发声、射频识别RFID传感

6、器.484.85 无线Zigbee传感器.494.86 超声传感器525总结- 55 -致- 56 -参考文献- 57 - 59 - / 641 绪论1.1课题来源本项目来源于华中科技大学与伍斯特理工学院合作的WPI项目。1.2本课题的目的及其意义机器人是高级整合控制论、机械电子、计算机、材料和仿生学的产物。现在,机器人已经发展到一个全新阶段,各种机器人应运而生,从简单地追求功能到神似,到个性化;从单单发展工业机器人到工业、家用机器人全面开花,并取得了长足进步。六脚机器人作为行走机器人的一种,具有结构简单,稳定性好等优点,而本课题也并未在很高深的机器人理论花大量功夫,而更多地着眼于为大专院校提

7、供机器人教学平台,或者用于科技馆展览。本课题所设计的机器人最大的特点是:理论通俗易懂、操作方便、便于二次开发。对于一些入门者初步掌握控制论、机械设计、机械电子只是来说,很容易便能被引领入机器人研究的殿堂。1.3国外发展现状对于仿生机器人,尤其是多足机器人,国外均有大量研究。1990年,美国卡基梅隆大学研制出用于外星探测的六脚步行机器人AMBLER。该机器人采用了新型的腿机构,并由一台32位的处理机来规划系统运动路线、制运动和监视系统的状态。但由于体积和质量太大,最终没被用于行星探测计划。1993年,卡基梅隆大学开发出有缆的八足步行机器人DANTE,用于对南极的埃里伯斯火山进行了考察,其改进型也

8、在实际中得到了应用。1994年二代对距离安克雷奇145km的斯伯火山进行了考察,并传回了各种数据及图像。日本对多足步行机的研究从20世纪80年代开始,并不断进行着技术创新,随着计算机和控制技术的发展,其机械结构由复杂到简单,其功能由单一功能到组合功能,并已研究出各种类型的步行机。主要有四足步行机、爬壁机器人、腿轮分离型步行机器人和手脚统一型步行机器人。1994年,日本电气通信大学的木村浩等研制成功四足步行机器人Patrush二代。该机器人用两个微处理机控制,采用直流伺服电机驱动,每个关节安装了一个光电码盘,每只脚安装了两个微开关,采用基于神经振荡子模型CPG的控制策略,能够实现不规则地面的自适

9、应动态步行,显示了生物激励控制对未知的不规则地面有自适应能力的特点。200020XX,木村浩等又研制成功四足步行机器人Tekken。该机器人用一台PC机系统控制,用瑞士Maxon直流伺服电机驱动,能适应中等不规则表面的自适应步行。我国对于多足机器人的研究起步则较晚。1989年,航空航天大学在启先教授的指导下,汉旭博士进行了四足步行机的研究,试制成功一台四足步行机。钱晋武博士研究地壁两用六脚步行机器人,并进行了步态和运动学方面的研究。1990年中国科学院自动化研究所研制出全方位六脚步行机,不仅能在平地步行,还能上楼梯。1991年,交通大学马培荪等研制出JTUWM系列四足步行机器人。20XX,马培

10、荪等对第一代形状记忆合金SMA驱动的微型六脚机器人进行改进,开发出具有全方位运动能力的微型双三足步行机器人其每条腿的自由度变为3个自由度。20XX工程大学的孟庆鑫、袁鹏等进行了两栖仿生机器蟹的研究,通过研究多足步行机的单足周期运动规律,提出适合于两栖仿生机器蟹的单足运动路线规划方法,建立了生成周期运动的神经振荡子模型。目前市场上几款六脚机器人对比如下:一DEPUSH HexCrawlerHexCrawlerCompanyDEPUSHMaterial5052 alloy aluminum, 1/16 thick with clear anodizingLeg Movement2 DOFDimen

11、sionsBody: 49.68 x 40 cm, Height: between 12.3 and 15.2 cmCost$350+二Lynxmotion RB-Lyn-248RB-Lyn-248CompanyLynxmotionMaterial5052 alloy aluminum, 1/16 thick with black anodizingLeg Movement3 DOFDimensionsBody: 19.1 x 14.9 cm, Height: between 5.1 and 13.3 cm, Ground Clearance: up to 8.9 cmCost$261.35+

12、三HexCrawler HDATSHexCrawler HDATSCompanyDEPUSHMaterial5052 alloy aluminum, 1/16 thick with clear anodizingLeg Movement3 DOFDimensionsBody: 52 x 49.7 cm, Height: between 12.3 and 15.2 cm, Ground clearance: 12.7 cmCost 10,000 其中HexCrawler一代机器人使用的编程软件为Parallax公司提供的教育发展版芯片。图1.1为Phoenix公司提供的六脚机器人,图1.2则为D

13、epush公司的六脚机器人一代外形,其每个脚仅有两个自由度。图1.1Phoenix Hexapod图1.2 DEPUSH HexCrawler 1.01.4本课题的研究容六脚机器人基本结构的设计,首先使之能够实现三脚步态、四脚步态、波动步态等,以满足行走要求;然后,能够感知外界环境的变化,实现避障报警等功能;最后,实现对机器人的远距离控制。具体要求为:设计机器人机械结构,使其可以完成前进,后退,左转,右转,侧移,扭动身躯等简单动作;可以完成抬脚,简单舞蹈等动作;1、编写机器人各种基本动作的软件代码,使其能完成以上动作;2、机器人可以接受电脑无线控制,编写相应无线控制程序;3、机器人可感知外界环

14、境,编写相应传感器处理程序;4、对所有程序进行综合处理,协调各程序之间的关系。2 六脚机器人机械结构设计介绍2.1 功能需求与分析作为六脚仿生机器人,在追求神似的同时,关键在于能否像爬虫一样完成各种行走动作。本课题对机械结构的要求不高,但需要满足下面几点:灵活度高、稳定性好、能够实现多足机器人的基本步态。针对这几点,同时按照德普士公司的要求,再参照目前市面上存在的六脚仿生机器人,最终拟定的机械结构设计方案为:在DEPUSH HexCrawler 1.0图1.2的基础上每只脚增加一个舵机,即将自由度由两个提升为三个。2.2材料选择与结构设计介绍根据目前市面上的六脚仿真机器人,本课题选用5052铝

15、合金作为机器人的主要材料,这样机器人既能满足强度要求,也能满足轻便性要求。同时,对外表进行烤漆处理,显得厚实而稳重,富有质感。如图2.1为机械结构的总三维图。图2.1 六脚机器人三维总图机器人整体上采用对称式结构,由六只脚和底架身体组成。每只脚有三个关节,每个关节处为采用舵机连接,可在固定平面旋转180,如图2.2所示。其中舵机1控制机器人脚前后摆动;舵机2控制机器人上下摆动;舵机3控制机器人外伸缩。三个舵机配合即可实现机器人的走动。图2.2 六脚机器人单脚结构图机器人身体图2.3、脚图2.2上均布满各种镂空图案,主要有两点作用:一、减轻机器人重量;二、增加机器人的美观度。由于机器人的完全对称

16、性结构,其前后由认为设定,即图2.1中Leg1、Leg4在前,Leg3、Leg6在后。图2.3 六脚机器人底架结构图 机器人的主要尺寸为: 机器人全长:500.0mm; 底架身体宽:228.0mm; 舵机1Leg1距底架最前方距离:60.0mm; Leg1与Leg2距离:195.0mm; Leg1与Leg3距离:390.0mm;每只脚上舵机2与舵机3距离:120.0mm; 舵机3与脚底距离:150.0mm。3 舵机及舵机控制板原理与应用本章主要介绍舵机以及舵机控制板PSCU的原理、使用方法与程序编写。3.1 舵机原理介绍舵机是一个通过输出轴的转动来控制物体转动的装置。它在特定编码的驱使下可以转

17、动到工作围的任意给定位置。因为它的轻便,位置控制简易且精确,在机器人中使用尤多。多舵机的协调工作可满足机器人的多自由度要求。舵机可以实现0180的旋转,当轴处于正确位置时,舵机将停止运动;当所在位置不对时,电路则驱动电机运转到需求位置。舵机是采用比例调节方式控制速度。当舵机转动的距离大时,则加载在舵机上的能量就大,反之亦然。而舵机的转动角度控制是由加载在控制线上的脉冲周期完成的,即所谓的脉冲编码调制。舵机设定为每隔20ms接受一个脉冲,这样的话,实际脉冲长度就可用来控制舵机转动的角度。如图3.1,例如1.5ms的脉冲可使舵机转动90。图3.1 舵机转角与脉冲周期关系图本项目采用的事Hi-Tec

18、公司生产的HS-322HD舵机,如图3.6。图3.6 HS-322HD舵机其主要技术参数如下:重量:43g尺寸:402036.5mm拉力:4.8V 3Kg.cm拉力:6.0V 3.7Kg.cm转速:4.8V 0.19sec/60转速:6.0V 0.15sec/60计算电流:0.35A当舵机安装好后,需要获取其初始位置值,为编程做准备,具体可见3.3节关于PSCI软件的介绍。3.2 舵机控制板原理介绍由上述机械结构介绍可知,本六脚机器人是通过控制18个舵机来实现机器人的运动的。但如何协调好各舵机的动作,让其满足功能需求?这就需要用到舵机控制板。舵机控制板按控制舵机数目接口数的多少,可分为8路舵机

19、控制器,16路舵机控制器,32路舵机控制器等等。考虑到成本以及控制舵机的数量,本课题采用两块16路舵机控制器串联的方式来控制舵机。选用型号为PARALLAX公司提供的Propeller Servo Controller USB。如图3.2所示:图3.2 舵机控制板PSCU具有下述多项特点:可串联两块控制板实现32路舵机控制; 独立的螺旋式接线柱为控制板供电,舵机则可通过开关控制关停; 其所用固件开放源代码; 可通过USB接口或者串行通信接口编程; 舵机速度可控。 PSCU规格及性能: 电源要求:逻辑电平5VDC60mA,4.87.5VDC控制舵机; 通信:异步串行通信2400bps或者38.4

20、kbpsTTL或USB; 工作温度:32158F070C; 尺寸:2.26x1.80x0.65in;3.3如何使用舵机控制板在使用控制板前,需通过螺旋式接线柱给控制板提供4.87.5V的直流电,同时为使舵机运动,还需给舵机提供5V的直流电。此项可通过USB接口如图3.3或者通过舵机控制板左上方的Serial In 处的杜邦针供电TTL电平,如图3.4。图3.3 PSCU-USB供电电路连接图图3.4 PSCU-主控制板供电电路连接图USB调试:安装FTDIVCP驱动下载地址:.parallax./usbdrivers;安装PSCI软件访问网址.parallax.,并搜索28823。双击软件图标

21、,即可获得图3.5所示,连接好USB线,在界面上选择COM口,获取PSC版本,即可使用。图3.5 PSCI控制界面图中每个channel的进度条,可发现对应舵机会向相应方向发生一定度数的旋转。这可用来进行舵机控制调试,从而获取舵机位置值,来书写步态。注意:图中数据在编入ARM程序中时,应先除以2倍,才是实际数据,即图中的中心出1500对应实际的750。更多功能可参照PARALLAX公司提供的Propeller Servo Controller USB说明文档。当使用双块板时,其连接方式为:首先将主板的Serial In两排,选上排引出按高低电平信号线要求插在主控制板STM32板上,其中红色线接

22、5V电源,黑色线接地,白色线接信号线,即PA9。然后将副板的Serial In上排引出插在主板的Serial In处下排。最后通上电源即可。了解了PSCI的基本功能,并按要求连接好电路后,首要做的就是将舵机位置的初始值找出。通过拖动进度条,并观察机器人各腿的位置,从而确定舵机初值。笔者提供的舵机初始值均为六脚与身体垂直时的值,且2、3关节夹角近似为90。3.4 控制板程序编写基本工作准备与注意事项:前述工作准备停当,即可开始程序的编写。PARALLAX公司提供的说明文档中提供了BS2程序,需要通过C语言转译,才可供ARM板识别。首先注意的是PSCU板的默认波特率为2400bps,所以在编写串行

23、通信程序时,应将串行通信的波特率设置为2400bps具体见4.4节关于USART设置的介绍。当然本控制板亦可通过程序设置,将波特率改为38.4kbps,具体容下面会介绍到。此外,控制板接收的异步通信数据格式要求还有,正相,8个数据位,无奇偶校验位,1个或2个停止位。其次控制板分为主副板,则对应的舵机控制通道号即为031;即副板的通道号再原号基础上加16即可。如果按序连接舵机,可使编程变得较为简单,通过简单的数学关系进行数据处理,但线路凌乱,看起来不是很美观;本课题采用的是对称连线,即选用通道号08,2331;当然,这样编程相对就复杂一些。最后关于主副板的界定还需提醒一句,由于硬件可能出现bug

24、,实际上控制板可能通道号等没有按照说明书的来,在调试过程中,可多试几次,按照实际结果编程。本课题在调试过程中即出现了问题,实际的主副板是颠倒的,且必须将副板与主控制板STM32连接才可使用。通信协议规则:PSCU为用户提供了多种控制功能,但每种控制字符串均是以!SC开始,以0x0D结束,中间有间隔4个主控制字符,下面将一一介绍:位置命令设置舵机的位置控制字符串为:!SC 其中channel为通道号,即前述的031;ramp speed为一字节值,用于舵机转速控制,其变化围为063,且数值越大,转速越小;lowbyte为舵机位置的低字节,highbyte为舵机位置的高字节。通过改变lowbyte

25、与highbyte值即可改变舵机位置,其值变化围为2501250。位置命令控制板最基本的命令,往往也是唯一用到的功能。通过此命令,可以实现舵机按要求的转动,从而满足行走等多功能要求。SBR设置波特率控制字符串为:!SCSBR 其中mode是用来设置波特率的,0代表2400bps,1代表38.4kbps。控制板的默认波特率为2400bps,无需设置,但如果需要使用38.4bps的波特率进行通信时,可使用该程序对波特率进行更改。RSP返回位置值控制字符串为:!SCRSP 其中channel为通道号。与VER?一样,需要进行输入输出的设置,方能返回位置值,这对编程很有用处,可以通过读取位置值,判断其

26、是否到位来实现延迟,精确性较高。本课题未使用。读者可拓展功能。PSS设置软件口控制字符串为: !SCPSS 其中mode为0代表015;1代表1631。可能由于板子的问题,实际过程中并未起作用,当控制板没问题时,可以根据个人喜好设置控制板的端口号,为编程提供便利。PSD使端口无效控制字符串为: !SCPSD 其中channel为通道号。此功能与PSE功能配合使用,在适当时候可能才生意想不到的效果。PSE使端口恢复有效控制字符串为: !SCPSE 其中channel为通道号。此功能用于PSD后,用来恢复端口的正常使用。其余的功能控制命令此处便不再赘述,因为一般情况下无法用到。C语言程序编写简介:

27、由于说明书中只提供了BS2程序,较难普及,需使用应用较广的C语言编写。从控制命令的格式可以看出,无论哪种方式,都是8字节的字符串,于是,可定义一个联合体结构体亦可,来储存这一串字节:typedef union _SERVO_PACKET char stream8;struct char CR : 8;char B3 : 8;char B2 : 8;char B1 : 8;char B0 : 8;unsigned SC : 24; packet; SERVO_PACKET; SERVO_PACKET pac;并将三字节的SC初始化为0x215343或!SC,将CR初始化为0x0D。这样在编写各种

28、控制命令函数时,只要改变B0B3的值即可。例,位置命令函数:void SendPacket int i = 0;pac.packet.B0 = Channel;pac.packet.B1 = RS;pac.packet.B2 = LOWBYTE;pac.packet.B3 = HIGHBYTE;for= 0 ; i- ser_putbyte; /该函数4.4节介绍,作用为发送单个字节 其中LOWBYTE、HIGHBYTE函数的定义为:#define LOWBYTE #define HIGHBYTE 8其功能为获取数值位置值的低八位与高八位。这即可为编程提供很大方便。以此类推,其它命令的函数可以

29、根据需要只要参考上述的位置命令函数编写即可。在此基础上以及之前用PSCI软件调试出的舵机初始值,即可编写舵机初始化程序了。void Initservo int i=0;fori=0;i SendPacket; delay_ms; 其中,15为舵机转速,channelno18数组储存舵机号,initposi18数组储存相应舵机的初始位置值。4STM32开发板介绍与程序编写本章主要介绍STM32开发板的使用,以及各种应用程序的编写说明。4.1 STM32F107芯片简介STM32系列是基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3核。在STM32F103、STM3

30、2F105的基础上,意法半导体公司又推出了一款性能较强的全新STM32互连型Connectivity系列微控制器中产品STM32F107。该芯片集成了各种高性能工业标准接口,且STM32不同型号产品在引脚和软件上具有完美的兼容性,可以轻松适应更多的应用。 基于STM32F107的强大功能,以及数量众多的I/O口,本课题选用STM32F107VC芯片作为总控制芯片。4.2 软件与编程初始准备 在使用开始学习使用STM32开发板前,需要安装两个软件:RealViwe MDK用于编程,在注册是注意Target应选择ARM;JLINK仿真器驱动器,下载地址为:.segger./pub/jlink/Se

31、tup_JLinkARM_V402c.zip,用于烧写程序。 安装好软件后,先新建一个程序文件夹,将Libraries与obj文件夹拷贝进去,如果用到触屏,还需包含Source文件夹具体使用时,可拷贝现成程序文件夹,修改主程序即可,打开Keil4,新建一个工程,即可开始编程,注意每写一个H文件,都需要将#includestm32f10x.h置入文件的首部。4.3 GPIO与AFIO设置与应用4.31 GPIO设置与应用 STM32F10x处理器上共有7个I/O端口:A、B、C、D、E、F、G,每个端口有16个引脚。每个GPIO端口都对应2个32位配置寄存器GPIOx_CRL,GPIOx_CRH

32、,2个32位数据寄存器GPIOx_IDR,GPIOx_ODR、1个32位置位/复位寄存器GPIOx_BSRR、1个16位复位寄存器GPIOx_BRR和1个32位锁定寄存器GPIOx_LCKR。 I/O口设置包括端口号设置,传输方式设置,输出速度设置。 这三种设置是相互关联的,有些I/O口只能用作输入口,有些只能用作输出口,这是由于在实际的电路中,有些I/O口采取了固化措施,设定了特定功能,例如PE的所有I/O口都被用于触摸屏,不能额外分配;PA0口作为输入口时,正常时为高电平,发生中断时为低电平。传输模式包括:浮空输入、输入上拉、输入下拉、模拟输入、开漏输入、推挽式输出、推挽式复用功能、开漏式

33、复用功能等模式。不同的输入输出模式可能会产生不同的结果。开漏输出,输出端相当于三极管的集电极,要得到高电平需上拉电阻,适合于做电流型的驱动;推挽输出可以输出高低电平,连接数字器件。但在本应用中,均连接数字器件,故只需将输入模式设置为浮空输入,输出模式设置为推挽输出即可。当为输出模式时,有3种输出速度可选2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的响应速度而非输出信号的速度,后者与程序有关芯片部在I/O口的输出部分安排了多个不同响应速度的输出驱动电路,用户可以根据需要选择合适的驱动电路。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,

34、噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。以USART1的I/O口配置为例:void GPIO_Configuration GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /usart1 发送GPIO_InitStructure.GPIO_Mode = GP

35、IO_Mode_AF_PP;/推挽输出GPIO_Init; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /usart1 接收GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入GPIO_Init; 其中PA9配置为推挽输出模式,PA10则配置为浮空输入模式。其它的I/O口配置方式与上述一样。具体采用什么I/O口,下面会一一介绍。因为程序需求,往往一个I/O口即要被配置成输入口,同时也要转换成输出口,遇到这种情况,如果像上述一样编程,势必会使程序显得繁杂,此时可采用写寄存器的方式来更换I/O

36、口的传输模式。具体写法如下:#define DAT_OUT GPIOD-CRL=CRL&0x0000000F|0x00000003CRL=CRL&0x0000000F|0x0000000404其中第一行将PD1设置为推挽输出模式,第二行将PD1设置为浮空输入模式。在使用时,只需在程序前,加入一行DAT_OUT;或者DAT_IN来切换PD1输入输出。当书写其它I/O口的程序时,只需将GPIOD换成相应I/O口,如果端口号为07,则只需将右边的04改成端口号*4的积,例如PA0则为00,如果端口号为815,则需将CRL换成CRH,同时右边的04改成端口号-8*4,例如PB13则为20。在程序中配置

37、I/O口之前,还需对I/O口进行初始化,即开启系统时钟,例如,使能PA口:RCC_APB2PeriphClockCmd/使能APB2总线外设时钟。这样就可以配置完整I/O口了。当学会配置好I/O口后,根据开发板中LED灯得I/O口如图4.1,即可书写一个简单的控制LED等闪烁的程序。图4.1 LED灯电路图程序为:void ledflash GPIO_SetBits; /LED1 delay_ms; GPIO_ResetBits; delay_ms; GPIO_SetBits; /LED2 delay_ms; GPIO_ResetBits; delay_ms; GPIO_SetBits; /L

38、ED3 delay_ms; GPIO_ResetBits; delay_ms; GPIO_SetBits; /LED4 delay_ms; GPIO_ResetBits; delay_ms; 此程序的功能是,使LED灯依次闪烁。4.32 AFIO-I/O口重映射 为了使不同器件封装的外设I/O口功能数量达到最优,可以把一些复用功能重新映射到其他一些脚上可参照4.4节表4.1。可通过软件编程来实现。当使用了重映射功能后,原始引脚便不再具备原先设定的功能。以USART1为例,原先输出口为PA9,经重映射后,输出口则改为PB6,而PA9则可作为其它外设的输入输出口使用。具体使用方法为:首先,开启AF

39、IO时钟,如下:RCC_APB2PeriphClockCmd;然后,在I/O口配置之前,使能复用:GPIO_PinRemapConfig;最后,按规定配置I/O口。由于本项目使用的STM32功能较简单,所以并未用到重映射功能,但却要开启AFIO时钟,具体原因在4.5节讲中断时会提到。4.4USART设置与应用 USART 即STM32F10x处理器的通用同步异步收发器单元。每个STM32板提供25个独立的异步串行通信接口,可工作于中断和DMA模式两种模式。USART单元支持同步单工、双工通信和半双工单线通信,也支持LINLocal Interconnection Network、智能卡协议和I

40、rDA红外SIR ENDEC规,以及调制解调器CTS/RTS操作,并允许多处理器通信。USART的配置很简单,用起来也较方便。以配置查询方式的USART1为例,如下:void USART1_Configuration USART_InitTypeDef USART_InitStructure; /串口设置恢复默认参数USART_ClockInitTypeDef USART_ClockInitStructure; /初始化参数设置 USART_InitStructure.USART_BaudRate = 2400; /波特率2400 USART_InitStructure.USART_WordL

41、ength = USART_WordLength_8b; /字长8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; /1位停止字节USART_InitStructure.USART_Parity = USART_Parity_No; /无奇偶校验 USART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None; /无流控制/打开Rx接收和Tx发送功能 USART_InitStructure.USART_Mode = USART_Mode_R

42、x | USART_Mode_Tx; USART_Init; /初始化/USART时钟配置 USART_ClockInitStructure.USART_Clock= USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_High; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit; USA

43、RT_Cmd; /启动串口前面提到过在配置异步通信时,需要注意波特率的配置,对于PSCU板,其所需波特率为2400bps,但是4.8节提到的无线通信传感器ZIGBEE则需要9600bps,需对USART重新配置。而是否需要USART时钟配置,则根据实际需要,如果单纯是控制舵机,时钟配置这一段可省略。当然在配置USART之前需要进行两项工作,首先和GPIO一样需配置时钟:RCC_APB2PeriphClockCmd;因为STM32板有多个USART串口,常用的有13,而USART2、USART3的时钟配置不同于USART1,因为它们在APB1上,而后者在APB2上。应如下配置:RCC_APB1P

44、eriphClockCmd;配置完时钟,便需配置GPIO口,U1在上节已配置,U2、U3的配置与U1一致,但是需要更换I/O口。具体见下表:USARTPINGPIOAFIOUSART1TXPA9PB6RXPA10PB7USART2TXPA2PD5RXPA3PD6USART3TXPB10PC10RXPB11PC11表4.1 串行通信GPIO口及复用GPIO口注:表中的AFIO列为复用I/O口配置完USART后,便是如何使用了,这包括数据发送和接收。发送单个字节函数一:char ser_putbyte USART_SendDataUSART1, data;whileUSART_GetFlagSta

45、tus = RESET;USART1-DR = ; return ; 函数二:int SendChar USART_SendDataUSART1, ch; while !SR & USART_FLAG_TXE; return ; 上述两个函数的功能等同,在写程序时可以随意调用,例如3.4节提到的SendPacket函数便调用了上述的函数一。接收一个字节u8 RByte u8 out=0;whileUSART_GetFlagStatus = RESET /等待接收完毕out = USART_ReceiveData; /接收一个字节return out;该函数用于接收单个字节,在无线通信时可用到。

46、发送一个字符串void Print_String/发送一串数据 while USART_SendData; whileUSART_GetFlagStatus = RESET 当连续发送的字符很多时,可以选用该函数以字符串形式发送。接收一个字符串void SerialIn unsigned char i;for i = 0; i bufi = RByte;同样,当需要连续发送多个字节数据时,则可选用该函数。上面提到的都是USART1的设置以及拓展功能函数的书写。而其它串口通信的设置与U1一致,功能函数则只需将U1换成U2或U3即可。由于主板的问题,本项目中并未使用U2、U3来实现其它串口通信,而

47、是将所有的串口通信均由U1来实现,这也是权宜之计,即采用分时复用的原理。具体说来,就是发声传感器和无线传感器都需要通过异步传输来与处理器通信。对于每个传感器以及PSCU,它们能够识别的信号是由特定字符串组成的。这样,只要将PA9、PA10口多引出几个引脚,分别接到传感器以及PSCU的相应口即可,在传输指令时,分时传送,对于无法识别的字符串,则不处理,这样便解决了串口不够的问题。如果要实现抢占,则将它们配置成中断模式即可,并配置好优先级。4.5外部中断设置与应用当主控制板遇到异常时,便会触发中断,并进行处理。NVIC,中文叫做嵌套矢量中断控制器,是用来处理中断的对于STM32F107的普通用户来

48、说,只要掌握EXTI线中断,USART中断以及TIM中断即可。下面仅对EXTI中断作简略介绍。外部中断/事件控制器EXTI由19个产生事件/中断请求的边沿检测器组成。每个输入线可独立地配置输入类型和对应的触发事件上升沿、下降沿或双边沿触发每个输入线都可以被独立地屏蔽,由挂起寄存器保持着状态线的中断要求。如果要产生外部中断,首先必须配置好并激活中断线。配置容包括:根据需要的边沿检测设置2个触发寄存器、在中断屏蔽寄存器的相应位写1以允许中断请求。当外部中断线上出现设定的边沿信号时,将产生一个中断请求等待处理。完成中断服务后,可以清除该中断请求。下面具体介绍如何配置硬件中断/事件请求。1首先要了解中

49、断线与I/O口的关系,如图4.2可知,PAPE的015口分别对应EXTI的015口;EXTI16与PVD输出连接、EXTI17与RTC闹钟事件连接、EXTI18与USB唤醒事件连接。图4.2 中断线与GPIO口对应关系2对EXTI线配置,以EXTI0为例,配置函数如下:void NVIC_ConfigurationNVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAMNVIC_SetVectorTable;#elseNVIC_SetVectorTable;#endifNVIC_PriorityGroupConfig;NVIC_InitSt

50、ructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init; 为中断地址配置;表示选择优先级1组,即占先式优先级以1位数字表示,副优先级以三位数字表示,如表4.2所示表4.2 中断优先级分组表示选用EXTI0中断线,注意在有些教材中等号右边为EXTI0_

51、IRQChannel,但在实际操作中,可能无法编译,应写成上面形式。如果是选用中断线EXTI11,应写作EXTI15_10_IRQn;EXTI8则为EXTI9_5_IRQn。为配置占先式优先级主优先级:高占先式优先级的中断会打断当前的主程序/中断程序运行,即所谓的中断嵌套。优先级数值越大,优先级越低。为配置副优先级子优先级:在占先式优先级相同的情况下。在低副优先级中断运行中,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应非抢断式响应。但如果同时这两个中断同时到达,则先执行中断优先级高的,执行完后,再执行低优先级中断;如果两个中断的所有优先级均一样,则哪个中断先到达,就先执

52、行哪个中断。对于副优先级,数值越大,优先级越低。3对中断线进行I/O口配置从图4.2中可知,每个中断线对应5个I/O口,所以在使用前,一定要先进行I/O口配置。仍以EXTI0为例,由开发板原理图可知,PA0可直接配置为EXTI0中断,无需电路设计。如有需要,也可按照图4.3所示,配置其它中断。图4.3 PA0中断线电路配置程序为:void EXTI_Configuration EXTI_InitTypeDef EXTI_InitStructure; GPIO_EXTILineConfig; EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_Init

53、Structure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init; 即表示选用PA0配置中断;表示中断线为EXTI0;表示下降沿触发中断。4配置中断处理程序外部中断关键在于使用,下面为通过EXTI0中断来控制LED灯的程序:void EXTI0_IRQHandler ifEXTI_GetITStatus!= RESET ledflash; /LED闪烁函数,见4

54、.31节 EXTI_ClearITPendingBit; /清除中断屏蔽位 只要改变ledflash行,即可在中断产生时,进入不同的中断处理程序。由此多配置几个中断线,并配合行走程序,便可设计一个手柄或控制面板来控制使机器人完成前进后退等动作。 在开发板上还配备一个PC13的中断引脚,其电路图与PA0一致,但是在调试过程中却出现了bug,无法调通,这就是为什么在4.32节介绍AFIO时提到的需要使能AFIO。虽然没有进行任何重映射,但程序中必须加入AFIO使能这一行,PC13的中断程序才能执行。在调试过程中需要注意这一点。 4.6系统时钟与定时器设置与应用4.61系统时钟简介与应用Cortex-M3 的核中包含一个4 位的递减计数器SysTick 时钟。当设定了SysTick的初值并使能后,每经过 1 个系统时钟周期,计数值就减 1。当计数到

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!