基于stm32的仿生機械手的設(shè)計與實現(xiàn)畢業(yè)論文
《基于stm32的仿生機械手的設(shè)計與實現(xiàn)畢業(yè)論文》由會員分享,可在線閱讀,更多相關(guān)《基于stm32的仿生機械手的設(shè)計與實現(xiàn)畢業(yè)論文(40頁珍藏版)》請在裝配圖網(wǎng)上搜索。
學(xué)年論文題目:基于 stm32 的仿生機械手的設(shè)計與實現(xiàn)學(xué)生姓名:學(xué) 號:專業(yè)班級: 指導(dǎo)教師:年 8月 5日目錄第 1章 引言…………………………………………………1第 2章 STM32 的基本理論知識…………………………32.1 STM32芯片的介紹………………………………32.2 STM32的庫函數(shù)…………………………………10第 3章 設(shè)計的主體內(nèi)容…………………………………123.1 大腦——STM32 開發(fā)板…………………………123.2 思想——用庫函數(shù)寫程序……………………….123.3 實物的機械設(shè)計…………………………………273.4 實物的花樣展示…………………………………27第 4章 結(jié)果的分析與討論………………………………28第 5章 結(jié)論………………………………………………28參考文獻 ………………………………………………….291第 1章 引言世界首個走向市場的最先進的仿生手“i-LIMB”贏得英國科技創(chuàng)新頭獎。仿生手手有 5根可自由活動的手指,它擊敗了其他進入決賽的三項發(fā)明,榮獲英國皇家工程學(xué)院 2008年的麥克羅伯特(MacRobert)杰出科技創(chuàng)新獎。在此次評獎中,其它進入決賽的三項發(fā)明包括一套照看保存在零度以下的數(shù)百萬份生物樣品的機器人系統(tǒng)、一個可以探測早期疾病跡象的化學(xué)傳感器和一種專為柴油汽車設(shè)計的壓縮型過濾器。截至 2007年 7月,這項仿生手技術(shù)已用在 200多人身上,包括在伊拉克戰(zhàn)爭中失去四肢的美國士兵和截肢者協(xié)會首席執(zhí)行官雷·愛德華茲等。英國最早配備這種裝置的愛德華茲 1987年因患霍奇金病而導(dǎo)致手腳都截肢了,他在裝上 i-LIMB仿生手 1個月后說它改變了他的生活。觸摸仿生公司首席執(zhí)行官斯圖亞特·米德說:“i-LIMB 仿生手是世界假肢市場中最引人注目的產(chǎn)品之一。這種仿生手有 2個主要的獨特特點。2一是我們把發(fā)電機放進每個手指,讓每個手指通過關(guān)節(jié)連接具有獨立性;二是它的拇指能像我們的拇指一樣彎曲90度。它是首個在形狀和功能上模仿人手的仿生手。 ”觸摸仿生公司小組的努力獲得了英國科技界的認可,他們這次獲得 5英鎊的獎金和一塊金牌。公眾可以在 2008年 9月前到倫敦科學(xué)博物館觀看 i-LIMB仿生手。仿生手最早是為了幫助受鎮(zhèn)靜催眠藥撒利多胺危害的兒童,作為一項研究項目的一部分,i-LIMB 看起來和動起來就像真手一樣。之后,世界第一家“仿生手”工廠――觸摸仿生公司在英國蘇格蘭正式成立,并開始為客戶量身定做這種假手。如今經(jīng)過改進的仿生手采用了最前沿的電子和機械技術(shù),并由高強度的塑料制成,此輕便手首次成了世界新一代假肢產(chǎn)品。3第 2章 STM32 的基本理論知識2.1 STM32芯片的介紹STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應(yīng)用專門設(shè)計的 ARM Cortex-M3內(nèi)核,按內(nèi)核架構(gòu)分為不同產(chǎn)品:其中 STM32F1系列有:STM32F103“增強型”系列STM32F101“基本型”系列STM32F105、STM32F107“互聯(lián)型”系列增強型系列時鐘頻率達到 72MHz,是同類產(chǎn)品中性能最高的產(chǎn)品;基本型時鐘頻率為 36MHz,以 16位產(chǎn)品的價格得到比 16位產(chǎn)品大幅提升的性能,是 32位產(chǎn)品用戶的最佳選擇。兩個系列都內(nèi)置 32K到 128K的閃存,不同的是 SRAM的最大容量和外設(shè)接口的組合。時鐘頻率 72MHz時,從閃存執(zhí)行代碼,STM32功耗 36mA,是 32位市場上功耗最低的產(chǎn)品,相當于40.5mA/MHz。內(nèi)核:ARM32 位 Cortex-M3 CPU,最高工作頻率72MHz,1.25DMIPS/MHz。單周期乘法和硬件除法。存儲器:片上集成 32-512KB的 Flash存儲器。6-64KB 的SRAM存儲器。時鐘、復(fù)位和電源管理:2.0-3.6V 的電源供電和 I/O接口的驅(qū)動電壓。上電復(fù)位(POR) 、掉電復(fù)位(PDR)和可編程的電壓探測器(PVD) 。4-16MHz 的晶振。內(nèi)嵌出廠前調(diào)校的8MHz RC振蕩電路。內(nèi)部 40 kHz的 RC振蕩電路。用于 CPU時鐘的 PLL。帶校準用于 RTC的 32kHz的晶振。低功耗:3 種低功耗模式:休眠,停止,待機模式。為 RTC和備份寄存器供電的 VBAT。調(diào)試模式:串行調(diào)試(SWD)和 JTAG接口。DMA:12 通道 DMA控制器。支持的外設(shè):定時器,ADC,DAC,SPI,IIC 和 UART。3個 12位的 us級的 A/D轉(zhuǎn)換器(16 通道):A/D 測量范圍:0-3.6V。雙采樣和保持能力。片上集成一個溫度傳感器。5最多高達 112個的快速 I/O端口:根據(jù)型號的不同,有 26,37,51,80,和 112的 I/O端口,所有的端口都可以映射到 16個外部中斷向量。除了模擬輸入,所有的都可以接受 5V以內(nèi)的輸入。最多多達 11個定時器:4 個 16位定時器,每個定時器有 4個 IC/OC/PWM或者脈沖計數(shù)器。2 個 16位的 6通道高級控制定時器:最多 6個通道可用于 PWM輸出。2 個看門狗定時器(獨立看門狗和窗口看門狗) 。Systick 定時器:24位倒計數(shù)器。2 個 16位基本定時器用于驅(qū)動 DAC。最多多達 13個通信接口:2 個 IIC接口(SMBus/PMBus) 。5個 USART接口(ISO7816 接口,LIN,IrDA 兼容,調(diào)試控制) 。3 個 SPI接口(18 Mbit/s) ,兩個和 IIS復(fù)用。CAN接口(2.0B) 。USB 2.0 全速接口。SDIO 接口。ECOPACK封裝:STM32F103xx 系列微控制器采用 ECOPACK封裝形式。系統(tǒng)作用1、集成嵌入式 Flash和 SRAM存儲器的 ARM Cortex-M3內(nèi)核。和 8/16位設(shè)備相比,ARM Cortex-M3 32位 RISC處理器提供了更高的代碼效率。STM32F103xx 微控制器帶有一個6嵌入式的 ARM核,所以可以兼容所有的 ARM工具和軟件。2、嵌入式 Flash存儲器和 RAM存儲器:內(nèi)置多達 512KB的嵌入式 Flash,可用于存儲程序和數(shù)據(jù)。多達 64KB的嵌入式 SRAM可以以 CPU的時鐘速度進行讀寫(不待等待狀態(tài)) 。3、可變靜態(tài)存儲器(FSMC):FSMC 嵌入在STM32F103xC,STM32F103xD,STM32F103xE中,帶有 4個片選,支持四種模式:Flash,RAM,PSRAM,NOR 和 NAND。3 個 FSMC中斷線經(jīng)過 OR后連接到 NVIC。沒有讀/寫 FIFO,除 PCCARD之外,代碼都是從外部存儲器執(zhí)行,不支持 Boot,目標頻率等于 SYSCLK/2,所以當系統(tǒng)時鐘是 72MHz時,外部訪問按照 36MHz進行。4、嵌套矢量中斷控制器(NVIC):可以處理 43個可屏蔽中斷通道(不包括 Cortex-M3的 16根中斷線) ,提供 16個中斷優(yōu)先級。緊密耦合的 NVIC實現(xiàn)了更低的中斷處理延遲,直接向內(nèi)核傳遞中斷入口向量表地址,緊密耦合的 NVIC內(nèi)核接口,允許中斷提前處理,對后到的更高優(yōu)先級的中斷進行處理,支持尾鏈,自動保存處理器狀態(tài),中斷入口在中斷退出時自動恢復(fù),不需要指令干預(yù)。75、外部中斷/事件控制器(EXTI):外部中斷/事件控制器由用于 19條產(chǎn)生中斷/事件請求的邊沿探測器線組成。每條線可以被單獨配置用于選擇觸發(fā)事件(上升沿,下降沿,或者兩者都可以) ,也可以被單獨屏蔽。有一個掛起寄存器來維護中斷請求的狀態(tài)。當外部線上出現(xiàn)長度超過內(nèi)部 APB2時鐘周期的脈沖時,EXTI 能夠探測到。多達 112個 GPIO連接到 16個外部中斷線。6、時鐘和啟動:在啟動的時候還是要進行系統(tǒng)時鐘選擇,但復(fù)位的時候內(nèi)部 8MHz的晶振被選用作 CPU時鐘??梢赃x擇一個外部的 4-16MHz的時鐘,并且會被監(jiān)視來判定是否成功。在這期間,控制器被禁止并且軟件中斷管理也隨后被禁止。同時,如果有需要(例如碰到一個間接使用的晶振失?。?,PLL 時鐘的中斷管理完全可用。多個預(yù)比較器可以用于配置 AHB頻率,包括高速 APB(PB2)和低速 APB(APB1) ,高速 APB最高的頻率為 72MHz,低速 APB最高的頻率為 36MHz。87、Boot 模式:在啟動的時候,Boot 引腳被用來在 3種 Boot選項種選擇一種:從用戶 Flash導(dǎo)入,從系統(tǒng)存儲器導(dǎo)入,從 SRAM導(dǎo)入。Boot導(dǎo)入程序位于系統(tǒng)存儲器,用于通過 USART1重新對Flash存儲器編程。8、電源供電方案:VDD ,電壓范圍為 2.0V-3.6V,外部電源通過 VDD引腳提供,用于 I/O和內(nèi)部調(diào)壓器。VSSA 和 VDDA,電壓范圍為 2.0-3.6V,外部模擬電壓輸入,用于 ADC,復(fù)位模塊,RC 和PLL,在 VDD范圍之內(nèi)(ADC 被限制在 2.4V) ,VSSA 和 VDDA必須相應(yīng)連接到 VSS和 VDD。VBAT,電壓范圍為 1.8-3.6V,當 VDD無效時為 RTC,外部 32KHz晶振和備份寄存器供電(通過電源切換實現(xiàn)) 。9、電源管理:設(shè)備有一個完整的上電復(fù)位(POR)和掉電復(fù)位(PDR)電路。這條電路一直有效,用于確保從 2V啟動或者掉到 2V的時候進行一些必要的操作。當 VDD低于一個特定的下限 VPOR/PDR時,不需要外部復(fù)位電路,設(shè)備也9可以保持在復(fù)位模式。設(shè)備特有一個嵌入的可編程電壓探測器(PVD) ,PVD 用于檢測 VDD,并且和 VPVD限值比較,當 VDD低于 VPVD或者 VDD大于 VPVD時會產(chǎn)生一個中斷。中斷服務(wù)程序可以產(chǎn)生一個警告信息或者將 MCU置為一個安全狀態(tài)。PVD 由軟件使能。10、電壓調(diào)節(jié):調(diào)壓器有 3種運行模式:主(MR) ,低功耗(LPR)和掉電。MR用在傳統(tǒng)意義上的調(diào)節(jié)模式(運行模式) ,LPR 用在停止模式,掉電用在待機模式:調(diào)壓器輸出為高阻,核心電路掉電,包括零消耗(寄存器和 SRAM的內(nèi)容不會丟失) 。11、低功耗模式:STM32F103xx支持 3種低功耗模式,從而在低功耗,短啟動時間和可用喚醒源之間達到一個最好的平衡點。休眠模式:只有 CPU停止工作,所有外設(shè)繼續(xù)運行,在中斷/事件發(fā)生時喚醒 CPU;停止模式:允許以最小的功耗來保持 SRAM和寄存器的內(nèi)容。1.8V 區(qū)域的時鐘都停止,PLL,HSI 和 HSE RC振蕩器被禁能,調(diào)壓器也被置為正?;蛘叩凸哪J健?0設(shè)備可以通過外部中斷線從停止模式喚醒。外部中斷源可以使 16個外部中斷線之一,PVD 輸出或者 TRC警告。12、待機模式:追求最少的功耗,內(nèi)部調(diào)壓器被關(guān)閉,這樣 1.8V區(qū)域斷電。PLL,HSI和 HSE RC振蕩器也被關(guān)閉。在進入待機模式之后,除了備份寄存器和待機電路,SRAM 和寄存器的內(nèi)容也會丟失。當外部復(fù)位(NRST 引腳) ,IWDG 復(fù)位,WKUP 引腳出現(xiàn)上升沿或者 TRC警告發(fā)生時,設(shè)備退出待機模式。進入停止模式或者待機模式時,TRC,IWDG 和相關(guān)的時鐘源不會停止。112.2 STM32的庫函數(shù)意法半導(dǎo)體在推出 STM32微控制器之初,也同時提供了一套完整細致的固件開發(fā)包,里面包含了在 STM32開發(fā)過程中所涉及到的所有底層操作。通過在程序開發(fā)中引入這樣的固件開發(fā)包,可以使開發(fā)人員從復(fù)雜冗余的底層寄存器操作中解放出來,將精力專注應(yīng)用程序的開發(fā)上,這便是 ST推出這樣一個開發(fā)包的初衷。但這對于許多從 51/AVR這類單片機的開發(fā)轉(zhuǎn)到 STM32平臺的開發(fā)人員來說,勢必有一個不適應(yīng)的過程。因為程序開發(fā)不再是從寄存器層次起始,而要首先去熟悉 STM32所提供的固件庫。那是否一定要使用固件庫呢?當然不是。但 STM32微控制器的寄存器規(guī)??刹皇浅R姷?8位單片機可以比擬,若自己細細琢磨各個寄存器的意義,必然會消耗相當?shù)臅r間,并且對于程序后續(xù)的維護,升級來說也會增加資源的消耗。對于當前“時間就是金錢”的行業(yè)競爭環(huán)境,無疑使用庫函數(shù)進行 STM32的產(chǎn)品開發(fā)是更好的選擇。本文將通12過一個簡單的例子對 STM32的庫函數(shù)做一個簡單的剖析。以最常用的 GPIO設(shè)備的初始化函數(shù)為例,如下程序段一: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;do15{temp=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);- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 stm32 仿生 機械手 設(shè)計 實現(xiàn) 畢業(yè)論文
鏈接地址:http://m.appdesigncorp.com/p-443187.html