基于STM32仿生六足机器人毕业设计.doc

上传人:文库蛋蛋多 文档编号:4148381 上传时间:2023-04-07 格式:DOC 页数:44 大小:7.61MB
返回 下载 相关 举报
基于STM32仿生六足机器人毕业设计.doc_第1页
第1页 / 共44页
基于STM32仿生六足机器人毕业设计.doc_第2页
第2页 / 共44页
基于STM32仿生六足机器人毕业设计.doc_第3页
第3页 / 共44页
基于STM32仿生六足机器人毕业设计.doc_第4页
第4页 / 共44页
基于STM32仿生六足机器人毕业设计.doc_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《基于STM32仿生六足机器人毕业设计.doc》由会员分享,可在线阅读,更多相关《基于STM32仿生六足机器人毕业设计.doc(44页珍藏版)》请在三一办公上搜索。

1、毕业设计(论文)基于STM32仿生六足机器人学院: 电子与信息工程学院 专业: XXXXXXXXXXXXXXXX 学号: XXXXXXXXXXX 作者: XXX 指导老师: XXX 基于STM32仿生六足机器人电子与信息工程学院 XXXXXXXXXXXX专业作者 XXX 指导教师 XXX【摘 要】在科技高速发展的信息社会,机器人在工业,军事,探测等各个领域起着越来越重要和不可替代的位置,机器人研究成为目前世界各国研究的热点。仿生六足机器人涉及仿生学、机械学、信息技术和传感技术等众多学科,是机器人研究的一大分支。仿生六足机器人模仿生物界爬行动物的肢体结构,具有良好的机动性和自适应能力,在军事运输

2、、矿山开采、星球探测等众多领域具有广阔前景。本设计采用ARM内核结构(Cortex-M3)的STM32F103RBT6为主控芯片,通过内部定时器产生脉宽调制信号,以及使用74HC138进行分时复用来控制六足机器人的关节,即18个MG955舵机。通过BMX-02蓝牙转串口模块连接手机和机器人,实现手机蓝牙遥控。采用UN2003A电机驱动芯片驱动步进电机,并配合红外传感器使机器人实现智能避障。由于该机器人拥有18自由度,肢体灵活,还可实现各种类似舞蹈的特殊动作。【关键词】 仿生六足机器人;STM32F103RBT6;舵机控制 目录1绪论1 1.1 课题研究背景意义 1 1.2 仿生六足机器人的现状

3、1 1.3 本设计系统结构2 1.4 本论文的组织结构22肢体结构和步态规划3 2.1 肢体结构设计3 2.2 步态规划3 2.2.1 三角步态3 2.3 本章小结43硬件设计介绍与系统各部分工作原理5 3.1主控芯片STM32F103RBT6简介5 3.2 STM32F103RBT6最小系统电路5 3.2.1 主芯片原理图5 3.2.2 晶振电路6 3.2.3 复位电路6 3.2.4下载电路7 3.3 舵机原理与控制7 3.3.1 舵机内部结构7 3.3.2 舵机的工作原理7 3.3.3 舵机控制方法8 3.3.4 辉盛MG995舵机相关参数8 3.4 舵机驱动电路9 3.5 步进电机驱动电

4、路9 3.6 蓝牙接收电路10 3.7 供电系统介绍10 3.7.1舵机供电10 3.7.2主芯片及其他电路供电10 3.8 本章小结104软件流程设计与开发工具介绍10 4.1 软件流程框图10 4.2 PWM脉冲信号的形成11 4.3 行走程序介绍13 4.4 蓝牙上位机设计14 4.5 蓝牙接收程序介绍15 4.6 舞蹈子程序介绍16 4.7 避障子程序介绍17 4.8 本章小结175设计制作与调试过程17 5.1 硬件电路设计17 5.1.1 原理图PCB电路与制作工艺设计18 5.1.2 PCB板的检测18 5.2 初步软件编程与调试18 5.3 调试过程中出现的问题186结束语18

5、7致谢19 参考文献20英文摘要21附录一:原理图22附录二:PCB图25附录三:实物图27附录四:器件清单28附录五:部分程序291.绪论1.1 课题研究背景意义机器人是集合了电子技术、机械技术、传感器技术、智能控制技术等于一体的高科技产品。各国现今大力的对它研究,研究机器人的水平在一定程度上反应了该国科技的水平。随着科技的发展,人们对机器人的需求也越来越高,人们希望机器人能在复杂环境中既具有高移动能力,又具有高可靠性。过去的机器人结构多为轮式结构,这种机器人只局限于二维平面的运动,对于那些崎岖不平以及有高度差的路面将失去灵活性,因此外形类似人类或昆虫的两足甚至多足机器人诞生了。仿生六足机器

6、人是基于仿生学原理与电子技术相结合的足式机器人。和轮式或着履带式的机器人相比较,六足机器人自由度比较多、相对灵活、但结构复杂、控制繁琐1。由于六足机器人的腿部是离散结构,具有较好的机动性,它可以选择最优的立足点来实现自身的平衡,从而实现一些轮式或履带式机器人无法实现的工作,例如攀爬阶梯,横跨沟,坎等,即使在不平的路面,也能通过控制腿的伸缩使机身保持水平。由于以上的诸多特点,足式的机器人成为当今的科技研究热点。1.2 仿生六足机器人的现状 最近在国外科技会展上出现了一款基于仿生学的六足机器人。这款命名为“蟑螂”的机器能够模仿昆虫行走,有较强通过性。“MANTIS(蟑螂)”行走机器人是由名为mic

7、romagic systems的公司制造,驾驶舱内能够容纳一名驾驶员。MANTIS机器人模仿了六足行进模式的昆虫,六足机器人行走的时候腿分为两组,不断的重复脚抬高、前进、落下动作,抬起的三条腿正好连成三角形形状,这样就能够确保行走时的稳定性,这种行走方法速度比较慢,但是很适合在复杂的地形行走。图1-1MANTIS模仿昆虫行走模式由上海交通大学设计研发出的“六爪章鱼”救援机器人进行了载人试验。“六爪章鱼”由18个直流电机作为驱动,高度为1米,伸展时的大小能达到4米。它是通过远程控制,能够非常灵敏的向各个方向行走,速度最高能达1.2千米/小时,能载重200kg的物体。“六爪章鱼”吸引人的地方不只是

8、它的外表,它的用途主要是用来救援和环境的探测,能够在核电站等具有高辐射的恶劣环境下工作,并且带着检测工具进入危险环境作业。同时该机器人还可在火灾、水下、地震灾区进行搜索救援任务。 图1-1 2013年5月上海科技 图1-2 2012年上海工博会,美 节上,小朋友体验六足机器人 女与机器人大跳“江南style” 1.3 本设计系统结构该机器人采用STM32为主控芯片,通过按键进行功能选择。当选择蓝牙控制功能时,机器人将通过蓝牙接收电路接收手机端发来的信号,主芯片对蓝牙信号进行处理,使机器人做出相应动作。当选择避障功能时,主芯片控制步进电机电路使步进电机带动红外传感器旋转,红外传感器对外部环境扫描

9、并判断,反馈给主芯片,主芯片对红外传感器传来信息处理并控制舵机转动,使机器人产生相应动作。当选择舞蹈功能时,机器人将自动跳出有节奏的动作。手机蓝牙信号蓝牙串口接收功能选择按键 STM32F103RBT6 核心处理芯片光耦隔离驱动电路脉宽调制控制避障 红外传感器台式电脑电源供电18个MG955舵机方向控制根据红外检测、蓝牙遥控进行行走舞蹈等动作 步进电机图1-3 系统结构1.4本论文的组织结构第一章阐述课题的背景,课题的研究意义,国内外发展现状,并介绍了本课题的主要工作内容和系统框图。第二章介绍仿生六足机器人的步态规划,详细介绍三角步态的原理及机器人实现行走的动作控制,以及机器人的肢体结构。第三

10、章详细的介绍了系统硬件的具体实现。把硬件部分一一的列举出来,并分析各个硬件的工作原理,引脚的连接。第四章介绍了软件开发工具和软件的具体实现方法。包括开发环境介绍,脉宽调制信号的生成,机器人行走的软件设计,蓝牙信号的接收设计等。第五章总结了系统的工作,以及对整个系统的展望。2.肢体结构设计及步态规划2.1肢体结构设计 一期方案:采用0.8mm铝板为肢体原料,通过铁皮剪刀裁剪出机器人肢体的各个部分形状,通过铁钉钻孔,螺丝固定,组装成肢体架构。此方案完全为自主设计,成本较低,但由于铝板较薄,硬度不够,负重能力较差,且铝板裁剪过程中难免存在误差,造成机器人灵活性下降。以下为采用方案一制作出的第一版机器

11、人,仅能实现行走。 二期方案:在吸取方案一的经验教训后,对肢体结构进行改造,采用3mm的硬质支架,从而解决了由于支架造成的影响。 图2-1 方案一支架 图2-2 方案二支架2.2六足机器人步态规划2.2.1三角步态:为了实现六足机器人的平衡与运动,采用了三角步态的工作方式 。行走的时后将六条腿划分成两组,每组腿构成三角形,不断的重复着抬起、前进、放下动作,这样就可以保证行进过程的稳定性2。 六足机器人的舵机分布如图2-3所示,因为一足的运动需要3个舵机,根据六足的不同位置,将18个舵机进行命名,分别为头右1,头右2,头右3,中右1,中右2,中右3,尾右1,尾右2,尾右3,头左1,头左2,头左3

12、,中左1,中左2,中左3,尾左1,尾左2,尾左3。 图2-3 舵机分布命名前进时每支腿的运动情况如下:第一步骤:头右2、尾右2、中左2抬起; 第二步骤:头右1、尾右1、中左1,前转,同时头左1、尾左1、中右1归位;第三步骤:头左2、尾右2、中右2放下;第四步骤:头左2、尾左2、中右2抬起;第五步骤:头左1、尾左1、中右1前移,同时头右1、尾右1、中左1,归位;第六步骤:头左2、尾左2、中右2放下;后退时每支腿的运动情况如下:第一步骤:头右2、尾右2、中左2抬起; 第二步骤:头右1、尾右1、中左1,后转,同时头左1、尾左1、中右1归位;第三步骤:头左2、尾右2、中右2放下;第四步骤:头左2、尾左

13、2、中右2抬起;第五步骤:头左1、尾左1、中右1后转,同时头右1、尾右1、中左1,归位;第六步骤:头左2、尾左2、中右2放下;在需要左右移动时,没有选择螃蟹横移法,而是需要先转向,然后再前进或后退。左转时每支腿的运动情况如下:第一步骤:头右2、尾右2、中左2抬起; 第二步骤:头右1、尾右1、中左1,前转,同时头左1、尾左1、中右1归位;第三步骤:头左2、尾右2、中右2放下;第四步骤:头左2、尾左2、中右2抬起;第五步骤:头左1、尾左1、中右1后转,同时头右1、尾右1、中左1,归位;第六步骤:头左2、尾左2、中右2放下;右转时每支腿的运动情况如下:第一步骤:头右2、尾右2、中左2抬起; 第二步骤

14、:头右1、尾右1、中左1后转,同时头左1、尾左1、中右1归位;第三步骤:头左2、尾右2、中右2放下;第四步骤:头左2、尾左2、中右2抬起;第五步骤:头左1、尾左1、中右1前转,同时头右1、尾右1、中左1,归位;第六步骤:头左2、尾左2、中右2放下;2.3本章小结 本章介绍两种方案的六足机器人肢体结构,经过实践后分析出两种方案的利弊,为后续研究提供可靠的硬件平台。其次分析了六足机器人的行走步态,采用模仿蜘蛛行走的三角步态,并针对基本的行走动作做了详细的分析。3. 硬件设计介绍与系统各部分工作原理4. 3.1主控芯片STM32F103RBT6简介STM32F103RBT6是一款中端32位ARM微控

15、制器,该芯片是由意法半导体(ST)公司生产,其核心是ARM的32位Cortex - M3 CPU 。该芯片Flash大小是容量128K 。芯片集成了USB ,CAN ,有4个定时器,每个定时器都可以产生出4 路PWM脉冲,2个ADC ,SPI,I2C , USB , UART等3。内核:ARM的32位Cortex -M3 CPU ; 最高的工作频率为72MHZ。内存:闪存程序存储器128K字节。低功耗:睡眠,关机和待机模式,VBAT为RTC和后备寄存器。ADC:两个12位ADC ,1微秒转换时间(多达16个输入通道);转换范围为03.6V;具有保持和双采样的功能,含有内部的温度传感器。DMA

16、:DMA通道有2个( 七个DMA1通道,5个DMA2通道),2 个DMA的控制器,51个I/O口,所有I / O端口映像到16个外部中断,几乎所有的端口可以容忍5V信号。支持外设定时器,ADC ,SPI,USB ,IIC和UART 。调试模式:串行线调试(SWD)和JTAG接口。计算单位:CRC计算单元,96个新一批的唯一代码。封装:ECOPACK封装。3.2 STM32F103RBT6最小系统电路最小系统电路由主芯片、晶振电路、复位电路、电源电路、下载电路、外部引脚外扩电路组成,各部分介绍如下:3.2.1主芯片原理图STM32F103RBT6有64个引脚,有PA、PB、PC、PD四组I/O口

17、,其中定时器各个通道所对应的引脚为:TIME1_CH1:PA8 TIME1_CH2:PA9 TIME1_CH3:PA10 TIME1_CH4:PA11TIME2_CH1:PA0 TIME2_CH2:PA1 TIME2_CH3:PA2 TIME2_CH4:PA3TIME3_CH1:PA6 TIME3_CH2:PA7 TIME3_CH3:PB0 TIME3_CH4:PB1TIME4_CH1:PB6 TIME4_CH2:PB7 TIME4_CH3:PB8 TIME4_CH4:PB9STM32F103RBT6管脚排列如下: 图3-1 STM32F103RBT6芯片原理图3.2.2 晶振电路STM32共

18、有5个时钟源,分别是:HSE时钟:高速外部时钟信号,本设计中采用8MHZ外部陶瓷晶振。HSI时钟:内部高速时钟信号,是由8MHz的内部RC振荡器产生的,能够作为系统时钟或2分频之后作为 PLL输入。PLL 时钟:内部PLL,能够倍频HSI、RC的时钟输出或着HSE晶体的时钟输出。LSE时钟:低速外部时钟信号,LSE的32.768kHz晶体是一种低速外部晶体或陶瓷谐振器4。它提供了 低功耗和精确的时钟源的实时时钟或其它定时功能。LSI时钟:低速内部时钟,LSI 的RC发挥低功耗时钟源的作用,它可以保持在关机和待机模式下运行。 LSI的时钟频率为40kHz左右(30kHz和60kHz的之间)。以下

19、为HSE时钟和LSE时钟电路:图3-2 晶振电路3.2.3复位电路nRST 接主芯片第7脚,按动按键K1可使芯片复位,电路原理图如下所示: 图3-3 复位电路3.2.4下载电路STM32支持多种下载方式,本设计采用JTAG及串口下载两种方式,当使用串口下载时,PA10为RX,PA9为TX,需接RX232电平转换电路进行下载,下载软件采用mcuisp,下载方式选择DTR的低电平复位,RST高电平进BootLoader。当下载完成时应将BOOT0接地,此时程序才可执行。原理图如图3-4、图3-5所示: 图3-4 ISP下载电路 图3-5 JTAG下载电路3.3舵机原理与控制3.3.1舵机内部结构舵

20、机内部包括小型直流电动机,齿轮组,一个可调反馈电位器,电路控制板。直流电动机的高速旋转,以提供原始动力并带动减速齿轮组,从而产生一个高输出扭矩,变速传动比大的舵机的输出转矩也越大,意味着越能承受较大的重量,但是转速也较低5。 图3-6 舵机的内部结构图3.3.2舵机的工作原理舵机是一个闭环的反馈系统,其原理可由图3-7表示:图3-7 舵机的工作原理图减速齿轮组是由电机驱动的,它的输出端有一个线性的比例电位器作为位置的检测,这个电位器会把转角所对应的坐标转换为成相应比例的电压并反馈给控制线路板,控制线路板将收到的电压信号同输入的控制脉冲信号进行对比,就会产生纠正脉冲,同时驱动直流电机正向或反向地

21、转动,使齿轮组的输出位置与所期望的数值相同,让纠正脉冲逐渐的趋于零,通过这种方法使舵机达到精确定位的目的。63.3.3 舵机控制方法MG955舵机有3条引出的导线,分别是电源线、地线、和信号控制线,其中红色的为电源线,棕色的为地线,橙色的为控制信号线,电源线接5V电压7。 图3-8 标准舵机电源线和地线给舵机内部的直流电机和控制电路供电。电压范围为37V,本设计采用5V供电,由于该机器人共需舵机18个,每个舵机的驱动电流大约为200毫安到500毫安左右,18个舵机所需电流为2A到10A,因此给舵机供电电源应能提供足够的功率,本设计采用了台式电脑电源,保证了足够的功率。控制线要输入一个周期为20

22、ms的方波脉冲信号8。 当方波脉冲的宽度发生变化的时候,舵机的角度就相应的发生改变,脉冲的宽度变化和角度的改变是成正比例的。MG955舵机的舵机信号控制图如图3-9表示。 图3-9 舵机信号控制图3.3.4辉盛MG995舵机相关参数结构材质:采用金属的铜齿 ,电机采用空心杯电机。连接线 :30CM,信号线(黄色)、电源线(红色)、地线(暗红色)。尺寸大小:40.7mm*19.7mm*42.9mm工作死区:4us重量 :55g转速和反应:无负载时速度为0.17秒/60度(4.8V时);0.13秒/60度(6V时)扭矩:13KG/cm工作电压:3.0V-7.2V温度范围:负30度到正60度。附件:

23、、固定的螺钉、舵盘。3.4舵机驱动电路该机器人需要实现6条腿的运动,且各条腿能做出不同动作,每条腿需要3个舵机对其进行控制,因此要求舵机驱动电路能产生18路的pwm脉宽调制信号。由于我采用的主控芯片为STM32F103RBT6,该芯片有TIM1,TIM2,TIM3,TIM4四个定时器,每个定时器可产生4路pwm脉宽调制信号,这样一共可产生16路pwm。由于不足18路,所以我的控制方法是:腿部的12个舵机每个直接由一路pwm控制,而与机器人身体连接的6个舵机则采用74HC138分时复用方式,由一路pwm控制2个舵机。这样一共使用了15路的pwm,还剩1路未使用。为防止舵机对主控芯片的影响以及系统

24、工作的稳定性,采用光耦对其进行隔离。每个舵机所对应的I/O口为: 头左1:PA8(PC8=0) 头右1:PA8(PC8=1) 中左1:PB6(PD2=0) 中右1:PB6 (PD2=1) 尾左1:PB7(PB5=0) 尾右1:PB7(PB5=1) 头左2:PB9 头右2:PA11 中左2:PB8 中右2:PA10 尾左2:PA2 尾右2:PA6 头左3:PA0 头右3:PB0 中左3:PA1 中右3:PB1 尾左3:PA3 尾右3:PA7其中PC8、PD2、PB5对舵机进行选择,当为高电平时选择右端舵机,当为低电平时选择左端舵机。以下是74HC1389复用电路及光耦隔离电路部分原理图。 图3-

25、10 74HC138复用电路部分原理图 图3-11 光耦隔离电路部分原理图3.5步进电机驱动电路在避障过程中由于需要红外传感器不断的扫描外部环境,所以需要步进电机不断旋转,步进电机采用ULN2003A驱动,其中IN1接PC3,IN2接PC1,IN3接PC0,IN4接PC2。以下为驱动电路原理图:图3-12 步进电机驱动电路3.6蓝牙接收电路蓝牙模块采用英国CSR公司blueCore4-Ext芯片,遵循V2.1+EDR蓝牙规范,支持主从一体,支持SPI编程接口,内置8Mbit Flash,本模块为3.3V供电,其中使用的引脚为VCC、GND、RX、TX四个引脚。图3-13为蓝牙模块原理图。图3-

26、13蓝牙模块原理图3.7供电系统介绍 本设计需要对18个舵机及步进电机供电,还有主芯片,蓝牙接收电路,红外传感等供电。需要有5V和3.3V电压。3.7.1舵机供电 由于18个舵机需要2-10A左右的电流,普通电池和7805稳压电路无法驱动,本设计采用废旧的台式电脑电源对机器人供电,台式电脑电源由市电220V经变压处理后得到5V电压,该开关电源最大负载电流18A,且电压平稳,非常适合给舵机供电。3.7.2主芯片及其他电路供电主芯片及其他电路需要3.3V供电,为了防止舵机对主芯片的影响,必须采用双电源供电,本设计采用7.4V航模锂电池,经AMS117稳压芯片降压为3.3V给主芯片及其他电路供电。3

27、.8本章小结本章对硬件体系结构进行分解并逐一介绍,包括STM32F103RBT6芯片介绍,及最小系统原理图介绍,舵机的原理及舵机驱动电路介绍,步进电机驱动电路介绍,蓝牙接收电路介绍,供电系统的分析。4.软件流程设计与开发工具介绍4.1软件流程框图由于本设计中的机器人具有多种功能,因此采用按键进行模式选择,可选择的模式有蓝牙遥控模式、舞蹈模式、避障模式。以下通过流程图方式介绍软件的设计思路:开始 系统初始化否是否按键? 键值判断是Key3(PB13=0)Key1(PB12=0)Key2(PB14=0)蓝牙遥控功能 避障功能 舞蹈功能 图4-1 软件流程框图4.2PWM脉冲信号的形成脉冲宽度调制(

28、PWM),是“Pulse Width Modulation”缩写,简称为脉宽调制,它是利用微处理器数字输出对模拟电路进行控制的一种有效的技术10。也就是对脉冲的宽度控制。STM32F103RBT6的定时器TIM1、TIM2、TIM3、TIM4都可以用来分别同时产生4路PWM,所以,STM32F103RBT6最多可以同时产生16路PWM输出。以下仅介绍TIM3的CH2产生一路PWM输出。其他路的PWM输出程序详见附件。要使STM32F103RBT6的定时器TIM3产生PWM输出,必须要设置3个寄存器来控制PWM。首先是捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有2个,TIMx

29、 _CCMR1和TIMx _CCMR2。TIMx_CCMR1控制CH1和CH2,TIMx_CCMR1控制CH3和CH4。 图4-2 TIMx_CCMR1寄存器各位的描述该寄存器在不同模式下有些位的功能会不同,因此上图就把寄存器分成上下2层,第一层对应输出而第二层则对应输入。模式设置位OCxM是由3位组成的,一共能设置成7种模式,本设计是PWM模式,因此这3位要设置成为110/111。这两种模式的不同之处就是输出高低电平不同,一个是输出高,另一个是输出低。接下来,介绍捕获/比较使能寄存器(TIMx_CCER),这个寄存器是用来控制输入输出通道开关的11。该寄存器的各位描述如下: 图4-3 捕获/

30、比较使能寄存器各位描述最后是捕获/比较寄存器(TIMx_CCR14),这个寄存器一共有4个,对应的分别是通道1到通道4。这4个寄存器都差不多,这里只介绍TIMx_CCR1,该寄存器的各个位描述如下:图4-4 捕获/比较寄存器(TIMx_CCR14)各位描述输出的模式下,该寄存器和CNT值相比,根据比较的结果产生相对应的动作。利用这点,我们只要设置该寄存器,就可能实现PWM的输出脉宽控制。到这里就把要用到的TIMx相关寄存器介绍完了,接下来就是如何达到设计的要求。要利用TIM3的CH2输出PWM来控制舵机,就要在软件上控制TIM3_CH2的PWM输出。以下介绍达到这个目的5个步骤:1)把PA7设

31、置成为复用输出功能,打开TIM3的时钟。要使用TIM3,必须要把TIM3的时钟打开(通过设置APB1ENR),这里还要把PA7配置为复用输出,因为TIM3_CH2通道是以IO复用的形式连接到PA7上的,这里要使用复用输出的功能。2)设置TIM3的ARR和PSC。在打开TIM3的时钟后,要设置ARR和PSC这两个寄存器的值来控制输出PWM周期。这里要设置的PWM周期为20ms。3)设置TIM3_CH2的PWM模式。接下来,把TIM3_CH2设置为PMW模式(这里是默认冻结的),要通过设置TIM3_CCMR1相关的位来控制TIM3_CH2的模式。4)使能TIM3的CH2输出,使能TIM3。以上设置

32、完成了以后,通过TIM3_CCER1设置来打开TIM3通道2的输出。通过设置TIM3_CR1来打开TIM3,是整个TIM3的总开关。配置好这两个寄存器后,就能在TIM3通道2上看到有PWM波的输出。5)修改TIM3_CCR2来控制占空比。经过了以上4步的设置,已经有PWM输出,但是其周期和占空比都是不变的,需要通过设置TIM3_CCR2来控制输出的占空比。其中高电平占空比时间为1ms到2ms才能使舵机转动。以下为PWM输出初始化部分程序:/PWM输出初始化/arr:自动重装值/psc:时钟预分频数void PWM_Init(u16 arr,u16 psc) RCC-APB1ENR|=1CRL&

33、=0X00FFFFFF;GPIOA-CRL|=0XBB000000; GPIOA-ODR|=1ODR|=1CRL&=0XFFFFFF00;GPIOB-CRL|=0X000000BB; GPIOB-ODR|=1ODR|=1ARR=arr;TIM3-PSC=psc;TIM3-CCMR1|=7CCMR1|=1CCMR1|=7CCMR1|=1CCMR2|=7CCMR2|=1CCMR2|=7CCMR2|=1CCER|=1CCER|=1CCER|=1CCER|=1CR1=0x8000; TIM3-CR1|=0x01; 设置好初始化程序后,只需在主程序里写入PWM_Init(14399,99);即设置了自动

34、重装值和时钟预分频数,99是指预分频数为100,即PWM频率=72000/100=72Khz,周期为(14399+1)/72khz=20ms,以后只需令PA7=7201440即可实现舵机从0度到90度转动。4.3行走程序介绍通过4.2的介绍,我们知道只需要改变PWM脉宽就可以控制舵机。2.2已经介绍了前进时各个舵机的运动,本节通过软件设置各个舵机的PWM输出,以下截取前进子程序:其中720对应20ms脉冲周期内有1ms的高电平;1440对应20ms脉冲周期内有2ms的高电平,其他依次类推。/*前进子程序*void forword(void)while(1)/*头右2,尾右2,中左2抬起*PB9

35、=1200; /头左2 /*头右2,尾右2,中左2放下* PB8=1440; /中左2PA2=1200; /尾左2PA11=720;/头右2PA10=960;/中右2PA6=720;/尾右2 delay_ms(250);/*头右1,尾右1,中左1前转,头左1,尾左1,中右1复位*PC8=1;PA8=920;/头右1PB5=1;PB7=920;/尾右1PD2=0;PB6=1240; /中左1delay_ms(100);PC8=0;PA8=1080;/头左1PD2=1;PB6=1080;/中右1PB5=0;PB7=1080;/尾左1delay_ms(250);/*头右2,尾右2,中左2放下*PB9

36、=1200; /头左2 PB8=1200; /中左2PA2=1200; /尾左2PA11=960;/头右2PA10=960;/中右2PA6=960;/尾右2 delay_ms(250);/*头左,尾左2,中右2抬起* PB9=1440; /头左2 PB8=1200; /中左2PA2=1440; /尾左2 PA11=960;/头右2PA10=720;/中右2PA6=960;/尾右2 delay_ms(250);/*头左1,尾左1,中右1前转,头右1,尾右1,中左1复位*PC8=0;PA8=1240;/头左1PB5=0;PB7=1240;/尾左1PD2=1;PB6=920;/中右1delay_ms

37、(250);PC8=1;PA8=1080;/头右1PB5=1;PB7=1080;/尾右1PD2=0;PB6=1080; /中左1 delay_ms(250);/*头左,尾左2,中右2放下*PB9=1200; /头左2 PB8=1200; /中左2PA2=1200; /尾左2PA11=960;/头右2PA10=960;/中右2PA6=960;/尾右2 delay_ms(250); 4.4蓝牙上位机设计机器人采用手机蓝牙遥控,上位机软件采用Google公司的一款Android程序云端开发工具: App Inventor。此款软件开发方式类似于VB,同样是在可视化界面添加控件,然后对控件进行编程。与

38、VB不同的是此款软件的编程语言为Java,其编程特色就是采用搭积木方式组装程序,使编程变得简单易懂。以下是我设计的上位机控制界面:图4-5蓝牙上位机控制界面当按下select server按键后,手机将自动搜索附近可识别的蓝牙,并列表显示出来,我们选择机器人携带的蓝牙从机。然后按下Connect按键后将和机器人蓝牙从机建立连接,连接成功后将在中间的文本框中显示connect succeed。此时便和机器人建立连接,就可以对机器人进行控制了。以下为部分上位机程序:图4-6 上位机程序4.5蓝牙接收程序介绍蓝牙接收使用串口接收方式,由于STM32的RX和TX对应的I/O已用来产生PWM输出,不可再

39、用作串口接收,本设计借用一片STC89C52芯片接收蓝牙信号,然后将接收到的信号转化为I/O口的电平变化,STM32通过读取52芯片I/O信号,从而执行相应程序。以下为52单片机蓝牙接收程序: #include #include #define uchar unsigned char12 #define uint unsigned int sfr T2MOD = 0xC9; uchar tmp; sbit pA12=P15; sbit pB10=P26; sbit pB11=P27; sbit pC4=P14; sbit pC5=P25; sbit pC6=P33; sbit pC7=P34;

40、 sbit pC9=P35; /*程序初始化*/ void init() T2MOD=0x00; T2CON=0x00; TH2 = (65536-100)/256; TL2 = (65536-100)%256; RCAP2H =(65536-100)/256; /上面两个装满则系统会自动的重装 RCAP2L =(65536-100)%256; EA=1; /打开总中断 ET2=1; /打开外部中断方式2 TR2=1;/启动定时器2 void main() init();/*开启外部中断方式0*/ EX0=1;/开启外部中断方式0 IT0=1; EA=1; TMOD |= 0x20;/ 定时器1工作在8位的自动重加载模式, 产生波特率 TH1 = 0xFD;/ 波特率设置为9600 TL1 = 0xFD; SCON = 0x50; PCON &= 0xef;/ 波特率不产生倍增 TR1 = 1;/ 开启定时器1 while(1) if(RI)/ 判断是否有数据来到 RI = 0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号