毕业设计-基于stm32的智能小车设计_第1页
毕业设计-基于stm32的智能小车设计_第2页
毕业设计-基于stm32的智能小车设计_第3页
毕业设计-基于stm32的智能小车设计_第4页
毕业设计-基于stm32的智能小车设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

基于stm32基于stm32的智能小车设计--#-基于stm32的智能小车设计{farward_Low();delay_ms(10);}}2。2电机驱动模块Stm32对小车的控制,就是对电机的控制,通过控制电机的转向,小车的运动状态就会发生改变。电机驱动模块的主要器件为LM293N,我们下面就详细讲解下电机驱动模块.2。2。1驱动模块结构及其原理电机驱动模块的实物图如图2.8所示:图2。8驱动电路实物图电机驱动模块的主要器件是芯片LM293D,内部原理图如图2.9所示:OUT]mOUTaOITT4OUT]mOUTaOITT4"f以顺图2。9电机驱动内部原理图全桥式驱动电路的4只开关管都工作在斩波状态,如图1。2所示,K1、K2为一组,K3、K4为另一组,两组的状态互补,一组导通则另一组必定关断。当K1、K2导通时,K3、K4关断,电机两端加正向电压,电机实现正转或反转制动;当K3、K4导通时,K1、K2关断,电机两端为反向电压,电机实现反转或正转制动。

2。2.2驱动模块电路设计电机驱动模块的电路原理如图2。10所示:图2。10驱动模块电路原理图表2—2是各个端口状态与运动方向的关系,其关系如下表所示:表2—2端口与运动方向关系表电机M1IN1IN2电机M2IN3IN4停止00停止00正转10正转10反转01反转0111113驱动软件程序设计车轮电机的动作由GPIO口的输出实现,本节主要配置运动方向和运动速度,对于运动速度的控制,我们必须使用PWM,通过改变PWM的占空比来调节速度的大小,其主要代码设计如下所示:voidTIM3_PWM_Init(u16arr,u16psc){….}要想使stm32的通用定时器TIMx产生PWM输出,需要用到的寄存器有:预分频寄存器(1牌*_「50、自动重装载寄存器(TIMx_ARR)、捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER、捕获/比较寄存器(TIMx_CCR*4)。我们先介绍这几个寄存器然后介绍如何使用库函数产生^输出.下面我们就简单介绍下这些寄存:器首先是预分频寄存器门凶乂_「5*该寄存器可以用设置对时钟进行分频然后在提供给计数器作为计数器的时钟。该寄存器的各位功能如图所示:

L5二工工」1匚WE:EE= 2 1 [QP5C[15:0]rir?2^rrrr ivrurvr;kkrvrvr/尊rvP5qi5:fl]:顼分强器的I(Pres㈤那value)计斑器的时管例率CK/NT:等于匕产』FSC包含:营需三豆新高七声三事登人三『受西葬令存箭为鬲更道孝•用包至于女圣在TlM_EG3的UG记者1或缸作在复也麟前油控削落清丁.图2.11TIMx_PSC寄存器各位描述接下来介绍自动重装载寄存器(TIMx_ARR),该寄存器的各位描述如下图所示:li工1二」1: § £ :i1 : 1 0ARR[15:0]rirnnnrn?nrvtvn17rwrsnrrsFri<515:0ARR[l5:(q:自动豆率费幽1{配5周/value)AR时含了樵娥嚷际的目犯魏沛整施.隹嗽学33百台朝R曲更翻咻兰二下居耍的(1F空出廿盥器不二E.图2.12TIMx_ARR寄存器各位描述通过设置这两个寄存器,我们就可以算出PWM的输出周期,计算公式为:Tout=((arr+1)*(psc+1))/Tclk。其中Tclk为系统时钟周期。其次我们介绍捕获/比较模式寄存器(TIMx_CCMR1/2),总共有两个,TIMx_CCMR1和TIMx_CCMR2,TIMx_CCMR1控制通道CH1和CH2,TIMx_CCMR2控制CH3和CH4。因为这2个寄存器差不多,我们仅以通道CH1为例,介绍其中的TIMx_CCMR1为例,该寄存器的各位描述如下图所示:三W二12 」工E £ - 6 5 4 3 2 1 00C:M[2:0:CC2F3CG2PE工£1:上工匚CC1:<2:C:C€1?EDC1FEtnm二:匚1二汗;:工IC2PSC[l:0::ClF:j:0]二口无匚1:工r^oiTriFDri^rrnirwrvrwrvrwrsrrwr#图2。13TIMx_CCMR1/2寄存器各位描述这里我们只介绍该寄存器的OCxM位,我们就以TIMx_CCMR1中的OC1M(控制通道CH1)为例,该位功能如下图所示:

©6-4OC1M[2:a]言比比碧1岁式.gut口utC口rni汨咫1mode)怎3上定式了越己奇有专弓REF的或比:与OC1REF枳定QC1N在恒.OC1REF是位本平有效商CJCL0slN七有效电平取在于CC1ICC1MPB。口。:沫笠.芍土无敦芍存器TIMx_CCRl与仃默豁TIMjCMT闫的比篁可QC1REF不和作用;DQ1:匹配F设堂漉道1为有翕电二.当丁敛毒TIMXJDNT的生与捷茂/比皮苛存器1(TIMx_CCR1}相同时,强=0C1REF为高.310:匹史学波鳖直道1为无数圭工■.三丁落聚TIM^CMT的直与捶是/比或音存器1(TIMX-C0R1}相同时.强加0C1REF为唯.311=空舞.TlMx_COR-=TIMx_CNTF?,即转QC1REF为巨平.100:强制为王散电二.强M。C1REF为•氐.ioi:强制为有弘有三.起制qciREF为百.110:PWM漠式1一在向上计该成,一旦丁小快_匚忖《71悼;<_匚匚艮1尸通道1米有池三平,百』与无筮电三;在向三一虻时,一亘TIMk_CNT〉T向K_CCR1后通逗1为三效电三。C1REFF),否则为有效电平gC1REF=1).111-P'WM哇三2一在应上计数好,一旦「卜快_£可丁=71H:、匚白k1村通道1为壬料三平,百I.&有鱼主三;三底下号坐回,-B.TlMx_CNT>TIMz_CCR1E?1fl ,至二l由壬新生平.注1.一旦工心区辗曳设为显TIMX—EDT艮野存埼=的1_。=1<生)关旦CC伯=口讥谆遭道王亘成书出)则该位不能被检也.注2:在FWM模式ISZFWM模式2=,只有当上玻花果改变了家在输出比较模式="徐运模式及空到嘤三芝,CCIREF毛匚M改变.图2.14OC1M功能描述我们使用的是PWM输出模式,所以OC1M必须设置为110/111.OC2M(控制通道CH2)各位描述与OC1M相同,我们这要不在叙述.然后我们介绍捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入/输出通道的开关,对于该寄存器,各位描述如下图所示:图2。15TIMx_CCER寄存器描述该寄存器比较简单,因为我们只介绍通道1,所以我们只讲CC1E位。如果我们想使能输入/捕获1,我们只需使用CC1E位。要想使PWM从I/O口输出,此位必须设置为1。最后介绍捕获/比较寄存器(TIMx_CCR1〜4),总共有4个,分别对应CH厂4,因为这4个寄存器相似,我们仅以TIMx_CCR1为例,该寄存器的给位介绍如下图所示:15W"W11 10 ?a7G5 13 2 1 。CCR1[1B:D]rTnritnriwnr nr ivnrrvrwr¥nr-12,15:0CCR1[15:O]邙捌比洋垣超1的值(Capl.regcmpare1val目营iCC1州道配置为躲;山ac尺1m咨了妾入三三咕芸,比笠1富存器的hi对芸.生11>.;言左TMjCCT,团夺存罂(白白P二F中未独择孽藏量W前,三人三短EW之即传乔W三丁营可梧中.三7:三春当至考季件亘上过.,:三装裁工才怜世至考的地田出超1高存静〒一¥前打却H.存吁卑•瓶土国计酬SiTlMjLChT的tLK.亡=0Cl比匚二在三支出位三.若匚£1向道闺管为腕人:CCR1包密丁由上一次精讨期字件必1段超附■虻出i.图2.16TIMx_CCR1寄存器各位描述在输出模式下,该寄存器的值与CNT中的值进行比较,根据结果,实现电平的翻转。至此,我们把用到的几个寄存器都介绍完毕,下面我们就介绍如何通过库函数来配置实现PWM三路输出。>开启TIM3时钟以及复用功能输出。使能GPIO和端口复用功能时钟。库函数使能TIM3、GPIO以及复用功能时钟的方法是:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOAIRCC_APB2Periph_AFIO,ENABLE);>初始化TIM3,设置TIM3的PSC和ARR.在开启了丁国3的时钟之后,我们要设置PSC和ARR寄存器的值来控制PWM的输出周期。调用的格式如下:TIM_TimeBaseStructure.TIM_Period=arr;TIM_TimeBaseStructure 。TIM_Prescaler=psc;TIM_TimeBaseStructure。TIM_ClockDivision=0;TIM_TimeBaseStructure。 TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);>设置TIM3_CH1、CH2、CH3的PWM模式,使能TIM3的CH1、CH2、CH3输出.在库函数中PWM通道设置是通过TIM_OC1Init〜TIM_OC4Init来设置的,这里我们需要3路PWM输出,所以我们需要使用函数TIM_OC1InitTIM_OC2InitTIM_OC3Init库函数的调用格式如下:TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_EnableTIM_OCInitStructure.TIM_Pulse=0;TIM_OCInitStructureTIM_OCPolarity=TIM_OCPolarity_HighTIM_OC2Init(TIIM3&TIM_OCInitStructureTIM_OC1Init(TIIM3&TIM_OCInitStructu)eTIM_OC3InitCTIM3,&TIM_OCInitStructu)e;>使能TIM3。完成以上配置后,我们要使能定时器IM3。库函数调用格式如下:TIM_Cmd(TIM3,ENABLE);>通过修改TIM3_CCRx(x为1,2,3)来控制占空比库函数格式如下:VoidTIM_SetCompareXTIM3,uintl6_tCompar82;我们可以知道,通过定时器3控制PWM波的占空比,从而实现速度方面的控制。其中arr和psc可以控制PWM波的周期,TIM3_CCRx可以控制PWM波的占空比。我们只需要调用此函数就可以实现不同的速度控制.对于运动方向控制的代码我们就以后退为例,由于端口寄存器过于简单,我们不在此介绍端口的寄存器。我们仅介绍如何通过库函数进行端口配置.对各个I/O端口配置的过程相似我们仅以PD8为例:主要过程如下所示:>使能I/O口时钟,调用格式如下所示:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD IRCC_APB2Periph_GPIOCENABLE);>初始化I/O参数,调用格式如下所示GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8GPIO_InitStructureGPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStructure);>操作I/O口GPIO_SetBits(GPIOD,GPIO_Pin_8);PD8置1GPIO_ResetBits(GPIOD,GPIO_Pin_8);PD8置0我们知道了如何对端口进行操作之后就可以随意的控制小车的运动啦,运动方向的程序设计,其基本函数单元如下所示:voidLeft_Low(void);"…我们调用这些函数,就可以实现不同运动方向的控制。主要代码详见附录3.2。3避障模块设计在人类身体构造系统中,眼睛可以使我们非常方便的采集到外界环境的信息,然后把信息及时的传输到大脑,并对外界环境信息的变化做出相应的处理.而对智能小车来说,避障模块之于小车就相当于眼睛之于人类。避障模块可以采集外部地形数据,然后把所采集的地形数据传输到中央处理模块,从而实现躲避障碍的功能。避障模块所采用的器件在市场中有许多类型,比如红外检测,光位移检测,超声波检测等。本次试验我们使用的是HC—SR04超声波检测,超声波由于具有检测能力强,传播路径宽,因此我们决定使用HC—SR04器件。

在使用HC—SR04模块进行超声波测距的同时,我们可以使用舵机进行辅助.舵机的主要作用是改变HC-SR04模块的照射方向,从而控制超声波的发射方向。在程序编写过程中,如果小车前方遇见障碍时,我们可以直接控制舵机的转向,而小车的车身可以保持不变,在测量结束后,小车再做相应的动作。2。3.1避障模块器件结构及其原理HC-SR04超声波测距模块测量范围在2cm-400cm之间,可以实现无接触式测距功能.HC—SR04超声波测距模块由一个超声波发射器、一个超声波接收器和控制电路组成,避障模块的实物结构图如图2。17所示:闾忸发■口勺就KM闾忸发■口勺就KM聃府弓幅£GNDFCI第。上ft

3图2。17实物正反面结构图如结构图所示VCC提供5v电源,GND为接地线,TRIG为触发信号线,ECHO为回向信号输出线。基本原理如下:采用IO口TRIG触发测距,给至少10us的高电平信号,在TRIG触发沿到来后,超声波发射器会自动发出8个40KHz的方波,并且检测是否有信号返回,当超声波接收器接收到超声波时,表明有信号返回,通过IO口ECHO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。因此测量距离二(高电平持续时间*340m/s)/2。测量时序图如图2。18所示:

叫唱的JTL瞅短侑号 闻格田浙仲□na门口nn「模比内邮 I删阳II 发出体号徜出回喃回晌电平福巴信号 与检测距离成比例图2。18超声波时序图我们根据时序图,可以编写相应的程序代码.为了防止发射信号对回向信号的影响,我们的测量周期不易过小。并且由于HC-SR04的感应角度不大于15°,所以测距时,为了防止发射信号丢失,我们要求被测物体的面积不应小于0。5平方米,否则可能导致测量结果不准确。舵机在避障模块的主要作用前面已经提到,本节主要讲解舵机的工作特性。舵机的实物图如图2。19所示:图2。19舵机实物图舵机的工作工作原理是stm32微处理器发出数据给舵机,舵机内部有一个基准电路,它会产生周期为20ms,宽度为1。5ms的基准信号,它将微处理器传输的直流偏置电压与电位器的电压数据进行比较,获得电压差输出。经由电路板上的IC判断转动方向,再驱动无核心马达开始转动,透过减速齿轮将动力传至摆臂同时由位置检测器送回反馈信号。舵机的转动角度与stm32所提供的PWM信号相关.标准信号PWM周期为20ms,理论上来讲脉宽为1〜2ms,实际我们的脉宽为0.5〜2.5ms,脉宽与所转的角度一一对应。角度与脉宽的对应图如图2。20所示:

IpwII-1350微挣taOdegreas20IpwII-1350微挣taOdegreas20舵机角度与脉宽对应图2.3.2HC—SR04模块硬件电路设计超声波模块硬件原理图如下图所示:图2。21超声波硬件原理图HC—SR04模块主要由发射器、接收器和部分电路组成。在此试验中,我们只需简单了解电路的设计,对于其基本原理可以不用过多涉猎,我们只需明白它们的工作原理,并且能够简单运用即可。2。3。3HC—SR04模块程序设计根据硬件电路的设计,我们对避障子程序进行设计,程序流程图如图2。22所示:

避障子程序结束图2.22避障程序流程图避障模块在程序设计中,我们的工作主要是:1、控制超声波的扫描周期2、采集超声波发射到接受的高电平持续时间t3、对采集的高电平持续时间t进行处理,判断前方是否有障碍下面我们就详细介绍我们是怎么通过软件设计来完成这几个步骤的:1、控制超声波的扫描周期根据表2—2,我们采用的是TIM2来控制超声波的扫描周期。首先我们把TIM2设置为定时器中断模式,代码格式为voidTIM2_Int_Init(u16arr,u16psc);由于配置定时器中断模式十分简单,我们就不在详细介绍,其详细代码见附录4。定时器TIM2的中断周期计算公式为1二((arr+1)*(psc+1))/Tclk。Tclk为系统周期,一般为72Mhz.我们在中断服务程序中控制超声波的发射 ,我们采用PC7作为触发信号,根据超声波时序图,我们需要在中断程序中给PC7一个持续10ms的高电平,中断服务程序如下:voidTIM2_IRQHandler(void)//TIM2中断{if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET){TIM_ClearITPendingBit(TIM2,TIM_IT_Update);GPIO_SetBits(GPIOC,GPIO_Pin_7);delay_ms(10);GPIO_ResetBits(GPIOC,GPIO_Pin_7);}}2、采集超声波发射到接受的持续时间t在本节试验中,我们使用了通用定时器TIM5的输入捕获功能,输入捕获模式具有测量频率或者测量脉冲的宽度的功能.我们开启TIM5通道CH1(定时器5)的输入捕获模式,采集ECHO端口的高电平持续时间。配置定时器5代码格式为:voidTIM5_Cap_Init(u16arr,u16psc){…}下面我们就详细讲解一下,如何开启并使用通用定时器的输入捕获功能。输入捕获的原理,简单的讲就是通过检测TIM5(定时器)通道CH1的边沿信号,当边沿信号发生变化时,当前寄存器的值TIM1_CNT存放到通道的捕获/比较寄存器(TIM5_CCR1)里面.我们的实验就是采集捕获/比较寄存器(TIM5_CCR1)中的值并进行处理,完成相应的动作。为了使丁国5通道CH1具有捕获功能,我们需要用到TIM5_PSC、TIM5_ARR、捕获/比较模式寄存器(TIM5_CCMR1)、捕获/比较使能寄存器(TIM5_CCER)、捕获/比较寄存器(TIM5_CCR1)、DMA/中断使能寄存器(TIM5_DIER)、控制寄存器(TIM5_CR1)。我们下面就简单介绍下下这几个寄存器。TIM5_PSC、TIM5_ARR、TIM5_CCR1这3个寄存器用法与前节中相同,我们就不在赘述,而在本实验中,捕获/比较寄存器TIM5_CCMR1非常重要,该寄存器的各位描述如下图所示:

15 ]; 13 12 111C9 & 7 6 £5KgE0C2FIXIC=K调停叩IXLiEOC1FEKxFSCrisOj工口”3间nrrrmzttvtcrrervnrniterwitttQ7:4iClFf^Oi:福入洋蚯1%金餐QniHJlwRtiire1Filler)退几曲立文:TT11翰人的果尾城作三效早池iSU■&度一景学沈流H由一小,#台数将时%电运求JJN中学普磨金严生一个期右弟吃空,0M0:无滤湮推,以知必畀再 1MM:栗犍苑#fwEHL—lLN=60M1,累惮旗奉L™1ntiTel11rf.N-J 1M1,墨洋要却血广缶N=fi0010:嘉博惠家lsAHPUN&=fw_HT.N-4 ItJlO;梁律5!翼iHWFJhld印16,H=50011;东隹或至ilAWRJFE^CKWT,N_5 1011;果悔瑟曲■「!《底因1;二看同।&"RtJIQQ.果艳素季kMrtPii幅=Tg/2,H=t 118,芸拒裁WTzuM=bTW0H=8Oltll:栗惮草:搴小^X鹏犬5典,W:B 1f01:呆憎耙堂fiR产七邛/理.M=50110:黑弊融3:1的皿样,N=6 111074猴皂阳,鹏01117流怦理辛lMMPM=rg4iN=S U11:采抻尊卑TM>tMC=tal$凸2N=3szlClF5Cp;ti7笆八/3陕1审方尊群UniMJlspkirelprescalerj这2拉丘克T81输入0C1]为鼻分思堂改.-S.CCtEMKT[M\.CCEFl^ ).即三才就拚Jt®,DO,无覆处场后,靖装gn上也如制的母一个边通耳怙出一次埔之:D1:岳?个孑性零烹一二薄狂:io:哥存布本特至st-友捷旅;11; 个EtF主篁一式用葩,fcl.Occi5[l;q:措fly/猊1逢准仁叩IuiNCwiphESefettin}这赳i宜义淳遭动内法f者/没就上莫的生红”OO;UC1谡道造翼为建出二D1:CX1通逗展五暨力精入心1映给在用1上;ID:CGIilil咬至富为博人,IC1即时衽1吁上:11: 球独BEa为期入,16票骷荏TRC上-北:穗大收工僧荏力范性女福期人攻,途中时《由1TIMX.3MCR饰寻春的TS位之滓1由51匕%三遭道会用时曾琳^/亡辞需再罂为81苣司h星可雪的.图2.23TIMx_CCMR1各位描述我们使用的是TIM5捕获/比较通道CHI,所以图中只介绍[7:0]位.本次试验我们设置CC1S[1:0]=01,IC1PSC[1:0]=00,IC1F[3:0]=0000。接着我们再来看看捕获/比较使能寄存器TIMx_CCER,本节用到了CC1E和CC1P两位,描述如下图所示:也1CC1P:粒M蜻技逸出粒性[E如rwongsl加gig⑻MCX1通道配置为帕甜:0:Ml寻型平智效;1:QC1低皂平考效.CC1通遒配置为输入:谡生近库是心1正是位1的发耀信号作为笠金或技法信号.■不反郴相拿戈士在21的上升沿:当局也界花看发日廿一IC1不反事1:友用;指获发生在£1的F篙泊:当用蚱畀笆触发器时rIC1反旄.S:一且LQCKSi别(TIMlBDTR哥名是中为LOCK也澄赶J眼,创球它不黯破堂衰.但口cciE:格入出或1旗上名能〔ca昭j值c口mpa史1加1皿即加啊a恻道配■为输出;&主历一0C1禁止编舟.为此。C1的第出电平生戟子MOE一OSSI.OSSR,OISVOISTN聚CCIhE也的直.1:天售一81信号■学群对正的就壬引买,工赣日电事前殖于MOE.OSSLOSSR,0IS1,Q喏INSCCIHE也的H81通道配置力输入二读之注定了计费器的或盘舌骷挂塞入TMx_CC用寄存疆.0:娜帆:;ft/些便能.图2.24TIMx_CCER最低两位描述所以要使能通道CH1输入捕获,CC1E必须设置为1,而CC1P则可以根据实际情况设置.其次,我们再看看DMA/中断使能寄存器(TIM5_DIER),因为我们使用的是通道CH1,所以我们仅介绍控制通道CH1的位,如下图所示:15U13K11 10 9 3 7 ( 3I3 2 1QIDECOliES浇■:C:i(tlDE0E31ETIE加it正0C3IECCSIECCLHUjEeftrreffitrsnrwTWT^r^Twrrr^也1CC1IE:允招1点ft憾仲的(CapluielConvare1interruptenable)0:单止第制比我伸粕1:克诩(那峨伸乐图2。25TIMx_DIER各位描述通过此图我们知道,我们需要设置CC1IE为1即可。然后,我们再看看控制寄存器TIMx_CR1,我们只用到了最低位,所以我们仅介绍位0的功能,TIMx_CR1寄存器各位描述及位0功能描述如下如所示:图2。26TIMx_CR1寄存器各位描述及位0功能描述我们要使能计数器,所以位0设置为1。至此,我们所使用的寄存器一一介绍完毕,下面介绍怎么配置输入/捕获步骤:开启TIM5时钟以及GPIOA时钟。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);初始化TIM5,设置TIM5的psc和arr.TIM_TimeBaseStructure。TIM_Period=arr;TIM_TimeBaseStructure.TIM_Prescaler二psc;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure。TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);设置TIM5的输入比较参数,开启捕获模式。TIM5_ICInitStructure。 TIM_Channel=TIM_Channel_1 ;TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;TIM5_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;TIM5_ICInitStructure。TIM_ICPrescaler=TIM_ICPSC_DIV1;TIM5_ICInitStructure。TIM_ICFilter=0x00;//IC1F=0000TIM_ICInit(TIM5,&TIM5_ICInitStructure);设置TIM5的DIER寄存器,使能捕获和更新中断功能。TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);> 设置中断分组并编写中断服务函数NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure 。NVIC_IRQChannelSubPriority=0;NVIC_InitStructure。NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);>使能定时器TIM_Cmd(TIM5,ENABLE);我们知道了如何设置TIM5的CH1为输入捕获模式,我们是在TIM5的中断服务函数中采集持续时间t的,TIM5CH1_CAPTURE_STA为输入捕获状态,TIM5CH1_CAPTURE_VAL为输入捕获值,中断服务函数如下所示:if((TIM5CH1_CAPTURE_STA&0X80)==0)〃还未成功捕获{if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=RESET){if(TIM5CH1_CAPTURE_STA&0X40)〃已经捕获到高电平了{if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了{ TIM5CH1_CAPTURE_STA|=0X80;〃标记成功捕获了一次TIM5CH1_CAPTURE_VAL=0XFFFF;}elseTIM5CH1_CAPTURE_STA++;}}if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)//捕获1发生捕获事件{if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿{TIM5CH1_CAPTURE_STA|=0X80; 〃标记成功捕获到一次上升沿TIM5CH1_CAPTURE_VAL二TIM_GetCapture1(TIM5);TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);//CC1P=0设置为上升沿捕获}else 〃还未开始,第一次捕获上升沿{TIM5CH1_CAPTURE_STA=0; 〃清空TIM5CH1_CAPTURE_VAL=0;TIM_SetCounter(TIM5,0);TIM5CH1_CAPTURE_STA|=0X40; 〃标记捕获到了上升沿TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1设置为下降沿捕获}}}3、对采集的时间t进行处理,判断前方是否有障碍我们对采集时间t的处理也是在TIM5的中断服务函数中的,我们根据因测量距离二(高电平持续时间t*340m/s)/2,得出只要高电平持续时间t<1500us,距离就小于25cm,就会判定前方有障碍,其详细代码如下:if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿{temp=TIM5CH1_CAPTURE_STA&0X3F;temp*=65536;〃溢出时间总和temp+=TIM5CH1_CAPTURE_VAL;〃得到总的高电平时间TIM_Cmd(TIM2,DISABLE);if(temp〈1500){stopward();t++;flag++;if(t==1){Midstate=temp;TIM_SetCompare2(TIM3,60);〃舵机右转}

if(t==2){Leftstate=temp;TIM_SetCompare2(TIM3,250); 〃舵机左转}if(t==3){t=0;Rightstate=temp;TIM_SetCompare2(TIM3,150);rotate_Left();}}else{if(flag==0){farward_Low();}if(flag==1){turn_Left();}if(flag==2){turn_Right();}if(flag>=3){flag=0;rotate_Left();}TIM_SetCompare2(TIM3,150);t=0;flag=0;}TIM_Cmd(TIM2,ENABLE);TIM5CH1_CAPTURE_STA=0;//开启下一次捕获}}2.4循迹模块设计这节要完成的任务是使小车沿着黑带运动。要想使小车沿着黑带运动,必须使小车感应到黑迹在什么地方,然后让小车的中央处理单元驱动硬件电路完成相应的行为动作。循迹模块的设计就是使小车能准确的识别黑带的轨迹。小车的中央处理模块从循迹模块获得数据,然后中央处理模块根据采集的数据驱动电机模块完成相应的动作。考虑到成本和操作,本实验使用的红外探测器。2.4。1循迹模块结构及其原理红外探测器(IR)是由红外发射管、红外接收管和部分电路组成。要做到4路循迹,需要使用4个独立的红外探测器器件.我们使用的IR5是一个集成模块,这个集成模块由5个红外探测器组成.其中中间的1个IR探测器在本实验中并未使用。红外循迹模块实物图如图2。27所示:

图2.27红外模块正反面本实验使用的IR5集成模块是由5个相同的IR探测器电路组成的,所以我们只需要了解一个IR探测器的工作原理即可。我们知道IR探测器是由红外发射管、红外接收管和部分电路组成。基本原理是红外发射管发射红外光经地面反射,在黑色区域红外光被吸收,在非黑色区域红外光被反射,红外接收管根据反射光的强度为比较器提供模拟量,从而输出相应的电平量.其单个IR探测器电路原理图如图2。28所示:VCCDF3 PSZKfh g速GNE'图2。28IR探测器电路原理图根据原理图详解下IR探测器的工作原理:VCC为模块提供电源,是IR探测器工作的前提条件,红外发射管DF2发射红外光到达“地面”,经反射后红外光会到达DS2红外接收管,由于不同颜色的地面会对光的吸收有着不同的效果,所以发射后的光的强度也会不同,反射强度不同,LM339的5脚会输入一个变化的电压量,LM339是一个电压较器,当LM339的“+”端输入信号大于“一"端的比较信号后,LM339的输出端截止,在外部的上拉电源的作用下,使IR探测器的输出端输出+5v的电压。同理,在“+”端电压小于“一"端电压时,LM339输出端电压饱和使IR探测器输出为低电压。因此可以通过调节R2的电阻值,改变比较电压的大小即“-”端电压的大小,从而控制探测的距离.R4是整个正反馈电路的重要组成部分,由于“+”输入端电压会经常发生在比较电压附近扰动的现象,这些微小的扰动都会造成输出端的巨大变化,因此,我们采用正反馈的方式避免这种现象的发生。加入R4电阻,就成为人们所说的“施密特触发器”,其特性图如图2.29

所示:图2。29施密特触发器特性图当输入端的电压发生转化时,只要在比较电压值附近的干扰不超过du之值,输出的电压就不会改变。R4正反馈的引入,不仅提高了电路的处理速度,而且可以免除由于寄生电路耦合而产生的自己震荡。但是,在提升电路的处理速度的同时,带来的缺点就是分辨率降低,因为只要在du附近输出的电压值就不会改变。2。4。2循迹模块电路设计IR5探测器的集成模块的电路原理图如图2。30所示:iir图2。30红外循迹模块电路图2.4.3红外循迹模块程序设计根据电路原理图,我们对循迹子程序进行设计,循迹子程序流程图如图2。31所示:是,,循迹子程序结束图2.31循迹子程序流程图我们在循迹程序设计中,主要工作为:1、配置管脚与红外探测器的对应关系当红外探测器模块在黑带上方时,输出为0.当红外探测器模块在白色上方时,输出为1。因此我们采用中断的方式进行循迹因为采用的是4路循迹,所以我们需要4个管脚与其一一对应,对应关系如下表:表2—3管脚与红外探测器位置对应关系表管脚名称红外探测器位置PE1PE2最左PE3PE4最右在配置好管脚与红外位置关系之后,我们就需要进行中断初始化,中断程序上文2.1。4节中已经讲过,我们在这里就不做介绍。2、编写中断服务函数我们在中断初始化之后,就需要写中断服务函数啦,我们就以PE1为例,当PE1的值发生变化时,我们就进入中断服务函数,在中断服务函数中判断红外探测器是否在黑带上方,如果在,此时我们需要使小车向左转,如果不在黑带上方,小车就继续前进。其中断服务函数代码如下:#defineKEY3GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)voidEXTI1_IRQHandler(void){ if(KEY3==0) {Right_Low();}EXTI_ClearITPendingBit(EXTI_Line1);}〃清除LINE2上的中断标志位3.软件调试上文提到了各个模块的电路设计及其程序设计本章就根据各个模块的电路设计进行相应的编程我们使用keil3软件进行程序仿真,然后使用mcuscip软件把我们得到的目标文件烧到处理器中,即程序下载。3。1程序仿真区丫附口心源自德国的KEIL公司,是RealViewMDK的简称。支持ARM7,ARM9,和最新的Cortrx—M3核处理器,自动配置启动代码,具有强大的软件仿真功能,而且具有启动代码小,性能高的优点,软件keil3的操作主界面如图3.1所示:图3.1Keil主界面在程序仿真中,我们只能观察PC7脚位的电平变化,来判断是否满足超声波的发射条件,而对于超声波发射到接受的高电平持续时间t,我们在程序仿真中是无法观测到的。因此我们只能通过对硬件进行测试,来完成对整个产品设计的考核。PC7的软件仿真结果如下图所示:图3。2PC7脚电平仿真图

3。2程序下载串口下载软件使用mcuisp,该软件属于第三方软件,由单片机在线编程网提供,该软件启动界面如图3。2所示:图3。2mcuisp启动界面我们使用mcuisp软件进行程序下载,程序下载图如下所示:mcukpVO_99m一甲户机在魏!fl程专等--图3。2mcuisp启动界面我们使用mcuisp软件进行程序下载,程序下载图如下所示:mcukpVO_99m一甲户机在魏!fl程专等--a系鼓|WffiaZlUnguag«雀工=口的PndiCOMSb口小5破0EWTTKUnp.EE笆朝色片国F/侬御郎「财底机下胸描前孜住■ 开发在手齐蛉山*、g*,小川"小麻卜切...手抒H用肃和ES上1回身群砌凿I-PC2K--J5P谈3件值HP] 吟芯出门 后『中DTRW千殳戛H-3-+12Kr?ia^3E5RT5ie*5开泊宓楼一,端橙旗立LH在日匚亡逅圣康或功目缈呵『之培■七二芯片内BootCdHriJEiHS:本号:2.Z石ErFUkSH哥:1TE13KE芯后安gggl®《比佶图衰生却■端,步能手芯月U不也青比值患)0百々的七片等一事刊号,3flFrj,03QZ5D5«]ClCe42^^a*d用施孽苧TI居亚固dFFD阳固0FFt。F附dETCUF用d士.用品安赞戊牌绍W军步『二七•务好开引入3E£r之型1加七・牝酎曰1普节学度功取口如也MM充的互行WWW.IKUimpaMfi向您正看.会当K号充率■■一程正图3。3mcuisp程序下载图4.系统测试在程序调试中,我们知道PC7的电平变化已经满足了超声波的发射条件,我们本节就是对硬件进行测试,验证本次方案是否成功。小车实物图如下所示图4.1智能小车实物图当小车前方遇到障碍时,小车舵机左转,观测左侧是否有障碍物,测试图如下:图4。2智能小车检测障碍图小车检测到前方有障碍时,舵机左转,检测小车左方是否有障碍,如果无,则小车左转,测试图如下图所示:图4。3智能小车避障图循迹模块采用的是中断的方式工作的,stm32微处理器通过采集红外探测器的

数据,对电机发出不同的命令,下图为智能小车在循迹过程中所拍摄的画面:5.总结本文根据毕业设计开题报告书所布置的任务,制定了详细的设计方案并按照此方案逐步完成了电路原理图的设计以及软件程序的设计。本文的重点是基于stm32微处理器为核心,添加其他外围电路为辅助,并且加载必要的程序设计,使小车智能化行动。整个智能小车系统以stm32微处理器为核心,外围电路包括避障电路、循迹电路、电机驱动电路等这些外围电路通过stm32微处理器结合起来,使得各个模块在保证工作准确性的同时,提高了小车的智能化。论文首先分析了研究智能小车的研究意义,对于此次研究的必要性进行了可行性分析。然后分析了国内外的研究概况,最后再此基础上提出了设计思路与程序流程,对于设计思路进行了可行性的分析.接着分别介绍了各个模块的硬件设计方案以及软件设计方案。在硬件设计方案中包括对各个硬件电路所采用的器件进行分析和对硬件电路的设计分析,从而决定器件的使用方案,以及硬件电路图的设计.而在软件设计方案中,我们只分析软流程件设计,以确定对应的程序编码。最后我们对软件、硬件进行测试,对于软件测试,我们使用keil软件进行程序仿真,而对于硬件测试,我们使用mcuisp硬件调试工具进行程序下载,验证了系统的稳定性和实用性。在本方案中,由于受到所采购的硬件模块尺寸的影响,循迹模块在进行工作的时候,受到外部影响的因素很大。在本次试验设计中,由于循迹探头的安装距离小车车轮很近,当循迹探头采集数据传输到CPU时,小车已经向前行驶了一段时间.假设小车的转弯时间为T,小车的转弯时的速度为V,我们要保证小车转弯的路程不超过额定值S,那么就有公式VT<=S.要解决此问题,有两种方案可供选择。>减小转弯时间T小车的转弯时间T与小车的转弯灵敏度成反比.在保证小车速度适当的情况下,我们只有减少小车的转弯时间来完成相应的行为动作,即提高小车的转弯灵敏度.小车的转弯灵敏度与小车的车轮直径有关,具体来讲就是:在车轮角速度一定的情况下,车轮直径越大,有公式V=3R,车轮的线速度就越大,那么在单位时间内有,小车的行驶距离就会变大。所以,小车的车轮直径与转弯灵敏度成反比,车轮直径越大,灵敏度就越小,相反车轮直径越小,灵敏度就越高。在本次试验中我们采用的车轮直径稍大,从而导致小车转弯的灵敏度大大下降。因此,我们可以通过减少小车车轮的直径大小来解决此问题。>增加转弯额定值S在本次试验中,循迹探头距小车的车轮距离太近,导致小车的额定值S过小,进而导致小车在循迹工作时误差较大。解决此问题,我们可以拉大车轮与循迹探头的距离。上文提到的两种方法,又受到所采购的器件的物理尺寸的影响。在本次试验中,器件的物理尺寸限制了小车转弯灵敏度的最大值,所以本实验的循迹模块不是很理想,但是只要我们采用上述的两种方法,一定可以提高循迹模块的执行效率.总的来说,设计方案是完善的,基本上达到了设计所要求的目标。致谢一个学期的学习和锻炼,使我的毕业论文设计基本完成。在这期间,我在所学的基础知识之上,去接触stm32,在接触之初,我不断的遇到问题,而我也知道不经一番寒彻骨,哪的梅香扑鼻来的道理,最终我克服了种种困难,不仅使自己的知识更加牢固,而且也锻炼了自己的心性。当然以上所有成绩的取得都离不开老师和同学的帮助.我首先要感谢的是我的母校,它为我提供了一个良好的学习环境,非常感谢学院领导对我们毕业设计相关工作精心合理的安排。当然,我的指导老师张健,我非常感谢他在我毕业设计的整个过程中始终予以的热情指导和督促,对我提出的疑惑耐心地指点,他的指点是我克服困难、完成设计的重要因素,对我一个月的实习也产生了鼓励和支持的作用。同时我还要感谢汤飞同学、柳晓峰同学的真诚指点,以及其他各位老师和同学的不吝指教,使我度过了紧张而又充实的三个月。毕业设计的这三个月,我不仅收获了知识、能力,也深刻的体会到了师情和友情的珍贵,这段时光将成为我人生中少有的美好回忆,路漫漫其修远兮,吾将上下而求索,我会以此激励自己继续努力,争取使自己的人生对社会产生些许积极的价值!参考文献[1]杜春雷。ARM体系结构与编程[M]。北京:清华大学出版社,2003—02—01[2]姚文详,宋岩。ARMCortex-M3权威指南[M].北京:北京航空航天大学出版社,2009—07[3]范书瑞.Cortex—M3嵌入式处理器原理与应用[M]。北京:电子工业出版社,2011-01-01[4]李宁。基于MDK的STM32处理器开发应用[M]。北京:北京航空航天大学出版社,2008:1—260。[5]刘军,张洋。原子教你玩STM32[M].北京:北京航空航天大学出版社201-05-01[6]彭刚,秦志强基于ARMCorte-M3的STM32系列[M]。北京:电子工业出版社,2011-01[7]张自强,晏英俊。基于stm32的步进电机转速控制实验设计[J]。实验室科学,2010-12,13(6):59-61[8]周柱,孟文,田环宇。基于stm32智能小车设计[J]。技术与市场,2011-06,18(6):1-2[9]李亚巨,樊东。基于stm32f103zet6的智能小车的制作[J]。电子制作,2013—11,(19):52-53[10]赵志昊.智能小车的制作[J].科技传播,2011-11,(21):202—203[11]李婕。基于STM32的智能小车的制无线视频监控智能小车设计[D]。兰州:兰州理工大学出版社,2014-4:1-56附录附录1voidTIM5_Cap_Init(u16arr,u16psc){GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);〃使能TIM5时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 〃使能GPIOA时钟GPIO_InitStructure。GPIO_Pin=GPIO_Pin_0;//PA0清除之前设置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//PA0输入GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_ResetBits(GPIOA,GPIO_Pin_0); //PA0下拉〃初始化定时器5TIM5TIM_TimeBaseStructure。TIM_Period=arr;〃设定计数器自动重装值TIM_TimeBaseStructure。TIM_Prescaler二psc; 〃预分频器TIM_TimeBaseStructure。TIM_ClockDivision=TIM_CKD_DIV1;//设置时钟分割:TDTS=Tck_timTIM_TimeBaseStructure。TIM_CounterMode=TIM_CounterMode_Up;//TIM向上计数模式TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);〃根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位〃初始化丁寓5输入捕获参数TIM5_ICInitStructure。TIM_Channel=TIM_Channel_1;//CC1S=01 选择输入端IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising; 〃上升沿捕获TIM5_ICInitStructure。TIM_ICSelection=TIM_ICSelection_DirectTI;//映射至ljTI1上TIM5_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; //配置输入分频,不分频TIM5_ICInitStructure。TIM_ICFilter=0x00;//IC1F=0000配置输入滤波器不滤波TIM_ICInit(TIM5,&TIM5_ICInitStructure);〃中断分组初始化NVIC_InitStructure。NVIC_IRQChannel=TIM5_IRQn;//TIM5中断NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority=1; 〃先占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; 〃从优先级。级NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道被使能NVIC_Init(&NVIC_InitStructure);〃根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允许更新中断,允许CC1IE捕获中断TIM_Cmd(TIM5,ENABLE); 〃使能定时器5}附录2voidEXTIX_Init(void){EXTI_InitTypeDefEXTI_InitStructure;NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);〃使能复用功能时钟//GPIODo2中断线以及中断初始化配置 下降沿触发GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1);EXTI_InitStructure。EXTI_Line=EXTI_Line1; 〃左1EXTI_InitStructure。EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling;EXTI_InitStructure。EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);EXTI_InitStructure。EXTI_Line=EXTI_Line2; 〃最左EXTI_InitStructure。EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising_Falling;EXTI_InitStructure。EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器//GPIODo3 中断线以及中断初始化配置下降沿触发〃右GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);EXTI_InitStructure。EXTI_Line=EXTI_Line3;EXTI_Init(&EXTI_InitStructure); 〃根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器//GPIOD.4中断线以及中断初始化配置下降沿触发〃最右GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource4);EXTI_InitStructure.EXTI_Line=EXTI_Line4;EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器NVIC_InitStructure。NVIC_IRQChannel=EXTI1_IRQn; //使能左1所在的外部中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; 〃抢占优先级2,NVIC_InitStructure。NVIC_IRQChannelSubPriority=0x06; //子优先级3NVIC_InitStructure。NVIC_IRQChannelCmd=ENABLE;〃使能外部中断通道NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure。NVIC_IRQChannel=EXTI2_IRQn; //使能最左所在的外部中断通道NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority=0x00; 〃抢占优先级2,NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x04; //子优先级2NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;〃使能外部中断通道NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn; 〃使能右1所在的外部中断通道NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority=0x00; 〃抢占优先级2NVIC_InitStructure。NVIC_IRQChannelSubPriority=0x07; //子优先级1NVIC_InitStructure。NVIC_IRQChannelCmd=ENABLE;〃使能外部中断通道NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器NVIC_InitStructure。NVIC_IRQChannel=EXTI4_IRQn; //使能最右所在的外部中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00; 〃抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x05; //子优先级0NVIC_InitStructure。NVIC_IRQChannelCmd=ENABLE;〃使能外部中断通道NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器EXTI_ClearITPendingBit(EXTI_Line1);〃清除LINE1上的中断标志位EXTI_ClearITPendingBit(EXTI_Line2);〃清除LINE1上的中断标志位EXTI_ClearITPendingBit(EXTI_Line3);〃清除LINE1上

温馨提示

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

评论

0/150

提交评论