基于stm32的仿生机械手的设计与实现毕业论文

上传人:QQ40****828 文档编号:443187 上传时间:2018-10-02 格式:DOCX 页数:40 大小:33.12KB
返回 下载 相关 举报
基于stm32的仿生机械手的设计与实现毕业论文_第1页
第1页 / 共40页
基于stm32的仿生机械手的设计与实现毕业论文_第2页
第2页 / 共40页
基于stm32的仿生机械手的设计与实现毕业论文_第3页
第3页 / 共40页
点击查看更多>>
资源描述
学年论文题目:基于 stm32 的仿生机械手的设计与实现学生姓名:学 号:专业班级: 指导教师:年 8月 5日目录第 1章 引言1第 2章 STM32 的基本理论知识32.1 STM32芯片的介绍32.2 STM32的库函数10第 3章 设计的主体内容123.1 大脑STM32 开发板123.2 思想用库函数写程序.123.3 实物的机械设计273.4 实物的花样展示27第 4章 结果的分析与讨论28第 5章 结论28参考文献 .291第 1章 引言世界首个走向市场的最先进的仿生手“i-LIMB”赢得英国科技创新头奖。仿生手手有 5根可自由活动的手指,它击败了其他进入决赛的三项发明,荣获英国皇家工程学院 2008年的麦克罗伯特(MacRobert)杰出科技创新奖。在此次评奖中,其它进入决赛的三项发明包括一套照看保存在零度以下的数百万份生物样品的机器人系统、一个可以探测早期疾病迹象的化学传感器和一种专为柴油汽车设计的压缩型过滤器。截至 2007年 7月,这项仿生手技术已用在 200多人身上,包括在伊拉克战争中失去四肢的美国士兵和截肢者协会首席执行官雷爱德华兹等。英国最早配备这种装置的爱德华兹 1987年因患霍奇金病而导致手脚都截肢了,他在装上 i-LIMB仿生手 1个月后说它改变了他的生活。触摸仿生公司首席执行官斯图亚特米德说:“i-LIMB 仿生手是世界假肢市场中最引人注目的产品之一。这种仿生手有 2个主要的独特特点。2一是我们把发电机放进每个手指,让每个手指通过关节连接具有独立性;二是它的拇指能像我们的拇指一样弯曲90度。它是首个在形状和功能上模仿人手的仿生手。 ”触摸仿生公司小组的努力获得了英国科技界的认可,他们这次获得 5英镑的奖金和一块金牌。公众可以在 2008年 9月前到伦敦科学博物馆观看 i-LIMB仿生手。仿生手最早是为了帮助受镇静催眠药撒利多胺危害的儿童,作为一项研究项目的一部分,i-LIMB 看起来和动起来就像真手一样。之后,世界第一家“仿生手”工厂触摸仿生公司在英国苏格兰正式成立,并开始为客户量身定做这种假手。如今经过改进的仿生手采用了最前沿的电子和机械技术,并由高强度的塑料制成,此轻便手首次成了世界新一代假肢产品。3第 2章 STM32 的基本理论知识2.1 STM32芯片的介绍STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的 ARM Cortex-M3内核,按内核架构分为不同产品:其中 STM32F1系列有:STM32F103“增强型”系列STM32F101“基本型”系列STM32F105、STM32F107“互联型”系列增强型系列时钟频率达到 72MHz,是同类产品中性能最高的产品;基本型时钟频率为 36MHz,以 16位产品的价格得到比 16位产品大幅提升的性能,是 32位产品用户的最佳选择。两个系列都内置 32K到 128K的闪存,不同的是 SRAM的最大容量和外设接口的组合。时钟频率 72MHz时,从闪存执行代码,STM32功耗 36mA,是 32位市场上功耗最低的产品,相当于40.5mA/MHz。内核:ARM32 位 Cortex-M3 CPU,最高工作频率72MHz,1.25DMIPS/MHz。单周期乘法和硬件除法。存储器:片上集成 32-512KB的 Flash存储器。6-64KB 的SRAM存储器。时钟、复位和电源管理:2.0-3.6V 的电源供电和 I/O接口的驱动电压。上电复位(POR) 、掉电复位(PDR)和可编程的电压探测器(PVD) 。4-16MHz 的晶振。内嵌出厂前调校的8MHz RC振荡电路。内部 40 kHz的 RC振荡电路。用于 CPU时钟的 PLL。带校准用于 RTC的 32kHz的晶振。低功耗:3 种低功耗模式:休眠,停止,待机模式。为 RTC和备份寄存器供电的 VBAT。调试模式:串行调试(SWD)和 JTAG接口。DMA:12 通道 DMA控制器。支持的外设:定时器,ADC,DAC,SPI,IIC 和 UART。3个 12位的 us级的 A/D转换器(16 通道):A/D 测量范围:0-3.6V。双采样和保持能力。片上集成一个温度传感器。5最多高达 112个的快速 I/O端口:根据型号的不同,有 26,37,51,80,和 112的 I/O端口,所有的端口都可以映射到 16个外部中断向量。除了模拟输入,所有的都可以接受 5V以内的输入。最多多达 11个定时器:4 个 16位定时器,每个定时器有 4个 IC/OC/PWM或者脉冲计数器。2 个 16位的 6通道高级控制定时器:最多 6个通道可用于 PWM输出。2 个看门狗定时器(独立看门狗和窗口看门狗) 。Systick 定时器:24位倒计数器。2 个 16位基本定时器用于驱动 DAC。最多多达 13个通信接口:2 个 IIC接口(SMBus/PMBus) 。5个 USART接口(ISO7816 接口,LIN,IrDA 兼容,调试控制) 。3 个 SPI接口(18 Mbit/s) ,两个和 IIS复用。CAN接口(2.0B) 。USB 2.0 全速接口。SDIO 接口。ECOPACK封装:STM32F103xx 系列微控制器采用 ECOPACK封装形式。系统作用1、集成嵌入式 Flash和 SRAM存储器的 ARM Cortex-M3内核。和 8/16位设备相比,ARM Cortex-M3 32位 RISC处理器提供了更高的代码效率。STM32F103xx 微控制器带有一个6嵌入式的 ARM核,所以可以兼容所有的 ARM工具和软件。2、嵌入式 Flash存储器和 RAM存储器:内置多达 512KB的嵌入式 Flash,可用于存储程序和数据。多达 64KB的嵌入式 SRAM可以以 CPU的时钟速度进行读写(不待等待状态) 。3、可变静态存储器(FSMC):FSMC 嵌入在STM32F103xC,STM32F103xD,STM32F103xE中,带有 4个片选,支持四种模式:Flash,RAM,PSRAM,NOR 和 NAND。3 个 FSMC中断线经过 OR后连接到 NVIC。没有读/写 FIFO,除 PCCARD之外,代码都是从外部存储器执行,不支持 Boot,目标频率等于 SYSCLK/2,所以当系统时钟是 72MHz时,外部访问按照 36MHz进行。4、嵌套矢量中断控制器(NVIC):可以处理 43个可屏蔽中断通道(不包括 Cortex-M3的 16根中断线) ,提供 16个中断优先级。紧密耦合的 NVIC实现了更低的中断处理延迟,直接向内核传递中断入口向量表地址,紧密耦合的 NVIC内核接口,允许中断提前处理,对后到的更高优先级的中断进行处理,支持尾链,自动保存处理器状态,中断入口在中断退出时自动恢复,不需要指令干预。75、外部中断/事件控制器(EXTI):外部中断/事件控制器由用于 19条产生中断/事件请求的边沿探测器线组成。每条线可以被单独配置用于选择触发事件(上升沿,下降沿,或者两者都可以) ,也可以被单独屏蔽。有一个挂起寄存器来维护中断请求的状态。当外部线上出现长度超过内部 APB2时钟周期的脉冲时,EXTI 能够探测到。多达 112个 GPIO连接到 16个外部中断线。6、时钟和启动:在启动的时候还是要进行系统时钟选择,但复位的时候内部 8MHz的晶振被选用作 CPU时钟。可以选择一个外部的 4-16MHz的时钟,并且会被监视来判定是否成功。在这期间,控制器被禁止并且软件中断管理也随后被禁止。同时,如果有需要(例如碰到一个间接使用的晶振失败) ,PLL 时钟的中断管理完全可用。多个预比较器可以用于配置 AHB频率,包括高速 APB(PB2)和低速 APB(APB1) ,高速 APB最高的频率为 72MHz,低速 APB最高的频率为 36MHz。87、Boot 模式:在启动的时候,Boot 引脚被用来在 3种 Boot选项种选择一种:从用户 Flash导入,从系统存储器导入,从 SRAM导入。Boot导入程序位于系统存储器,用于通过 USART1重新对Flash存储器编程。8、电源供电方案:VDD ,电压范围为 2.0V-3.6V,外部电源通过 VDD引脚提供,用于 I/O和内部调压器。VSSA 和 VDDA,电压范围为 2.0-3.6V,外部模拟电压输入,用于 ADC,复位模块,RC 和PLL,在 VDD范围之内(ADC 被限制在 2.4V) ,VSSA 和 VDDA必须相应连接到 VSS和 VDD。VBAT,电压范围为 1.8-3.6V,当 VDD无效时为 RTC,外部 32KHz晶振和备份寄存器供电(通过电源切换实现) 。9、电源管理:设备有一个完整的上电复位(POR)和掉电复位(PDR)电路。这条电路一直有效,用于确保从 2V启动或者掉到 2V的时候进行一些必要的操作。当 VDD低于一个特定的下限 VPOR/PDR时,不需要外部复位电路,设备也9可以保持在复位模式。设备特有一个嵌入的可编程电压探测器(PVD) ,PVD 用于检测 VDD,并且和 VPVD限值比较,当 VDD低于 VPVD或者 VDD大于 VPVD时会产生一个中断。中断服务程序可以产生一个警告信息或者将 MCU置为一个安全状态。PVD 由软件使能。10、电压调节:调压器有 3种运行模式:主(MR) ,低功耗(LPR)和掉电。MR用在传统意义上的调节模式(运行模式) ,LPR 用在停止模式,掉电用在待机模式:调压器输出为高阻,核心电路掉电,包括零消耗(寄存器和 SRAM的内容不会丢失) 。11、低功耗模式:STM32F103xx支持 3种低功耗模式,从而在低功耗,短启动时间和可用唤醒源之间达到一个最好的平衡点。休眠模式:只有 CPU停止工作,所有外设继续运行,在中断/事件发生时唤醒 CPU;停止模式:允许以最小的功耗来保持 SRAM和寄存器的内容。1.8V 区域的时钟都停止,PLL,HSI 和 HSE RC振荡器被禁能,调压器也被置为正常或者低功耗模式。10设备可以通过外部中断线从停止模式唤醒。外部中断源可以使 16个外部中断线之一,PVD 输出或者 TRC警告。12、待机模式:追求最少的功耗,内部调压器被关闭,这样 1.8V区域断电。PLL,HSI和 HSE RC振荡器也被关闭。在进入待机模式之后,除了备份寄存器和待机电路,SRAM 和寄存器的内容也会丢失。当外部复位(NRST 引脚) ,IWDG 复位,WKUP 引脚出现上升沿或者 TRC警告发生时,设备退出待机模式。进入停止模式或者待机模式时,TRC,IWDG 和相关的时钟源不会停止。112.2 STM32的库函数意法半导体在推出 STM32微控制器之初,也同时提供了一套完整细致的固件开发包,里面包含了在 STM32开发过程中所涉及到的所有底层操作。通过在程序开发中引入这样的固件开发包,可以使开发人员从复杂冗余的底层寄存器操作中解放出来,将精力专注应用程序的开发上,这便是 ST推出这样一个开发包的初衷。但这对于许多从 51/AVR这类单片机的开发转到 STM32平台的开发人员来说,势必有一个不适应的过程。因为程序开发不再是从寄存器层次起始,而要首先去熟悉 STM32所提供的固件库。那是否一定要使用固件库呢?当然不是。但 STM32微控制器的寄存器规模可不是常见的 8位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间,并且对于程序后续的维护,升级来说也会增加资源的消耗。对于当前“时间就是金钱”的行业竞争环境,无疑使用库函数进行 STM32的产品开发是更好的选择。本文将通12过一个简单的例子对 STM32的库函数做一个简单的剖析。以最常用的 GPIO设备的初始化函数为例,如下程序段一:GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA , while(1)14 if(anjian=0) shouzhang();tiaoxin();Systick.c#include “systick.h“void delay_ms(u32 i)u32 temp;SysTick-LOAD=9000*i; SysTick-CTRL=0X01;SysTick-VAL=0;do15temp=SysTick-CTRL; while(tempSysTick-VAL=0;Systick.h#ifndef _systick_H#define _systick_H#includevoid delay_us(u32 i);void delay_ms(u32 i);#endifPwm.c16void pwm_init()GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE|RCC_APB2Periph_TIM1,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM5|RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOA,17GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOB,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,TIM_TimeBaseInitStructure.TIM_Period = 9999; TIM_TimeBaseInitStructure.TIM_Prescaler = 143;TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, TIM_TimeBaseInitStructure);TIM_TimeBaseInit(TIM3,TIM_TimeBaseInit(TIM4,18TIM_TimeBaseInit(TIM5, TIM_TimeBaseInitStructure);TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure); GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC1Init(TIM3,TIM_OC2Init(TIM3,TIM_OC3Init(TIM3,TIM_OC4Init(TIM3,TIM_OC1Init(TIM5,TIM_OC4Init(TIM5,TIM_OC2Init(TIM5,TIM_OC3Init(TIM5,TIM_OC1Init(TIM4,19TIM_OC2Init(TIM4,TIM_OC3Init(TIM4,TIM_OC4Init(TIM4,TIM_OC3Init(TIM2,TIM_OC4Init(TIM2,TIM_OC2Init TIM_OCInit TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);TIM_OC2PreloadConfig(TIM5, TIM_OCPreload_Enable);TIM_OC3PreloadConfig(TIM5,TIM_OCPreload_Enable);20TIM_OC4PreloadConfig(TIM5,TIM_OCPreload_Enable);TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable); TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_EnablTIM_ARRPreloadConfig(TIM3, ENABLE);TIM_ARRPreloadConfig(TIM2, ENABLE);TIM_ARRPreloadConfig(TIM4, ENABLE);TIM_ARRPreloadConfig(TIM5, ENABLE);TIM_CtrlPWMOutputs(TIM2,ENABLE);TIM_CtrlPWMOutputs(TIM3,ENABLE);TIM_CtrlPWMOutputs(TIM4,ENABLE);TIM_CtrlPWMOutputs(TIM5,ENABLE);TIM_Cmd(TIM3,ENABLE);TIM_Cmd(TIM4,ENABLE);21TIM_Cmd(TIM5,ENABLE);TIM_Cmd(TIM2,ENABLE);Pwm.h#ifndef _pwm_H#define _pwm_H#include “stm32f10x.h“void pwm_init(void);#define anjian GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)#endifJixieshou.cvoid tiaoxin()22 swxz=1250;swqh=950;TIM_SetCompare4(TIM3, swqh);delay_ms(500);TIM_SetCompare4(TIM4, swxz);delay_ms(700);szqd=460;szzd=270;szhd=300;zzqd=410;zzzd=270;zzhd=270;wmzqd=385;wmzzd=270;wmzhd=400;23dmzhd=700;dmzzd=270;dmzqd=430;TIM_SetCompare1(TIM3, szqd);delay_ms(500);TIM_SetCompare2(TIM3, szzd);delay_ms(500);TIM_SetCompare3(TIM3, szhd);delay_ms(500);TIM_SetCompare2(TIM5, zzqd);delay_ms(500);TIM_SetCompare3(TIM5, zzzd);delay_ms(500);TIM_SetCompare4(TIM5, zzhd);delay_ms(500);TIM_SetCompare3(TIM2, wmzqd);24delay_ms(500);TIM_SetCompare4(TIM2, wmzzd);delay_ms(500);TIM_SetCompare1(TIM5, wmzhd);delay_ms(500);TIM_SetCompare3(TIM4, dmzhd);delay_ms(500);TIM_SetCompare2(TIM4, dmzzd);delay_ms(500);TIM_SetCompare1(TIM4, dmzqd);delay_ms(500);swxz=280;TIM_SetCompare4(TIM4, swxz);delay_ms(700);szqd=800;25szzd=760; szhd=800;TIM_SetCompare3(TIM3, szhd);delay_ms(500);TIM_SetCompare2(TIM3, szzd);delay_ms(500);TIM_SetCompare1(TIM3, szqd);delay_ms(500);dmzhd=900;dmzzd=270;dmzqd=270;TIM_SetCompare3(TIM4, dmzhd);delay_ms(500);TIM_SetCompare2(TIM4, dmzzd);delay_ms(500);TIM_SetCompare1(TIM4, dmzqd);26delay_ms(500);swqh=500;TIM_SetCompare4(TIM3, swqh);delay_ms(1000);swqh=950;TIM_SetCompare4(TIM3, swqh);delay_ms(1000);swxz=1250;TIM_SetCompare4(TIM4, swxz);delay_ms(700);swqh=1250;TIM_SetCompare4(TIM3, swqh);delay_ms(1000);szqd=800;szzd=760; szhd=800;27zzqd=800;zzzd=720; zzhd=800;wmzqd=750;wmzzd=760; wmzhd=850;dmzqd=680;dmzzd=760; dmzhd=600;TIM_SetCompare3(TIM4, dmzhd);TIM_SetCompare2(TIM4, dmzzd);TIM_SetCompare1(TIM4, dmzqd);delay_ms(500); TIM_SetCompare1(TIM3, szqd);TIM_SetCompare2(TIM3, szzd);TIM_SetCompare3(TIM3, szhd);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


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

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


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