第4章 机器人的微控制系统_第1页
第4章 机器人的微控制系统_第2页
第4章 机器人的微控制系统_第3页
第4章 机器人的微控制系统_第4页
第4章 机器人的微控制系统_第5页
已阅读5页,还剩140页未读, 继续免费阅读

下载本文档

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

文档简介

智能机器人导论

04-机器人的微控制系统4机器人的微控制系统

机器人的微控制系统

微控制系统位于机器人控制功能的核心位置,一方面连接机器人的各类传感器,检测机器人的运行状态和外部环境状态,另一方面连接机器人的驱动和作业部件,执行对应的功能,以达到作业目的。

此外,微控制系统还负责与外界的信息交互,实现接受作业指令和作业状态输出等功能。

本章将主要介绍与机器人平台相关的各类微控制器平台,包括由各类单片机、微处理器构成的可编程、高灵活度的开放平台和开发板为主的各类平台,而以PLC(可编程逻辑控制器,ProgrammableLogicController)为主的各类工业机器人控制系统不在介绍范围之内。4.1机器人微控制器平台

机器人常用的微处理器何谓“单片机/微处理器”?为什么机器人要使用他们?

常规ROV的底层控制系统以单片机/微处理器为核心,围绕执行机构和传感器等外部件的功能需求,合理的安排和调用其处理资源、存储资源和硬件接口资源,尤其是外围功能模块资源,以实现高效稳定地通信、检测和控制的功能

–

底层硬件设备管理–脑干

主流的微处理器核心构架包括MCS-51及各种增强型51单片机、ATMEL的AVR系列微处理器、ARM的ARM/Cortex系列微处理器内核、TI的430系列超低功耗微处理器、Renesas的R7系列处理器、NXP的LPC系列处理器等,这些处理器构架不同、应用范围也有所区别。4.1机器人微控制器平台

机器人常用的微处理器

(1)MCS-51单片机:严格意义上讲,MCS-51和各种增强型51并不被认定为微处理器,而是被称为单片机,但是增强型51单片机的出现以及基于51构架的各种SoC的出现,也模糊了其定位,但课程中暂还是将其称为51单片机。

原始的MCS-51(8051)单片机的内部包含了处理器单元(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM/EEPROM/FLASH)、通用输入输出端口(GPIO,P0、P1、P2和P3)、串行通信口(UART)、定时器(TIMER)、中断系统(INT)和特殊功能寄存器(SFR),所有功能通过片内单一总线连接,其基本模式为CPU外围扩展各个功能模块。4.1机器人微控制器平台

机器人常用的微处理器

基本型MCS-51单片机包含一个8位的处理器单元,内部包括运算器和控制器两部分,并增加了面向控制所使用的功能,除了可以进行正常运算外,还可以进行位运算、状态检测和中断处理等。4.1机器人微控制器平台

机器人常用的微处理器早期的增强型51单片机STC89C51RC内部功能和性能一览表特性性能参数特性性能参数CPU8位,40MHz电压3.3-5.5VFLASH4KBRAM512BGPIO32个定时器3个,16位外部中断4路UART1个工作电流4-7mA工作温度-40-+85℃其他功能ISP/IAP、EEPROM、Watchdog4.1机器人微控制器平台

机器人常用的微处理器近期的STC8A8K64S4A12内部主要功能和性能一览表特性性能参数特性性能参数CPU33MHz/24MHz/32KHz电压2.0-5.5VFLASH64KBRAM8KBGPIO59个定时器5个,16位,PWM中断22路,4个优先级UART2个工作电流<2.7mA工作温度-40-+85℃其他功能IAP、SPI、I2C、Watchdog、ADC、PCA、掉电唤醒定时器等4.1机器人微控制器平台

机器人常用的微处理器

STC8系列单片机的功能和性能已经接近了同期的MSP430、AVR和瑞萨单片机的水平,在内置晶振稳定性、宽工作电压、PWM输出功能、程序升级方式等方面甚至超越了上述单片机。除了上述的技术升级之外,STC还将STC8系列单片机的指令周期从MCS-51的12机器周期升级到了单机器周期,相当于单片机指令执行效率较MCS-51提升了12倍。

MCS-51核心的增强型51单片机除了AtmelAT89S5x系列,STCSTC8系列之外,还包括SiliconLabs的C8051系列单片机等,其中C8051F36x在3.0-3.6V电压下可达100MIPS,内置了32KBFlash、1280BRAM、10位高速ADC和DAC等特性。

MCS-51核心还被应用在了一些SoC上,如TI公司的CC2530ZigbeeSoC,该SoC除了包括一个单机器周期的32MHz的MCS-51核心、256KBFlash、8KBRAM、定时器、串口、Watchdog、GPIO等基本单片机功能外,还集成了2.4GHzIEEE802.15.4的收发器并硬件支持CSMA/CA、低功耗等Zigbee网络的特性。

尽管目前各增强型51单片机或基于51的SoC已经表现出强劲的性能和性价比,但其在现代ROV上应用仍较少,并未见将其作为ROV主控的公开资料。4.1机器人微控制器平台

机器人常用的微处理器

(2)AVR单片机:针对MCS-51所采用的复杂指令集(CISC,ComplexInstructionSetComputer)存在着指令系统不等长、指令数目多、CPU利用率低和执行速度慢的缺点,ATMEL公司(已经被Microchip收购)于1997年研发了一种采用精简指令集(RISC,ReducedInstructionSetComputer)的单片机,称为AVR。

RISC相对于早期的CISC,采用了流水线操作和等长指令体系,使得一条指令可以在一个单独操作中完成,实现在一个时钟周期内完成多条指令,同时RISC还可以采用通用快速寄存器结构,大量使用寄存器之间的操作,简化了CPU处理器、控制器和其他功能单元的设计复杂度。

这种优势使得RISC不仅仅应用在AVR单片机上,还广泛应用在ARM和Cortex处理器上,特别是最新的RISC-V开源指令集,在字长、核心芯片和工号等方面,更是实现了较大的进步,被企业广为重视。4.1机器人微控制器平台

机器人常用的微处理器

目前的AVR系列单片机主要8位产品,包括tinyAVR®、ATMega®和AVR®XMEGA三个产品线,其中的ATMega在开源硬件和教育领域应用广泛——Arduino系列开发板。

ATmega328P和ATmega2560内部主要功能和性能对比如下:单片机ATmega328PATmega2560CPU支持131指令,20MIPS@20MHz支持135指令,16MIPS@16MHzFLASH4KB/8KB/16KB/32KB64KB/128KB/256KBRAM512B/1KB/2KB8KBEEPROM256B/512B/1KB4KB定时器2个8位、1个16位2个8位、4个16位PWM6路4路8位、12路2-16位ADC6路或8路,10位16路,10位串行通信UART、SPI、I2C2个UART、SPI、I2CGPIO2386工作电压1.8-5.5V1.8-5.5V工作温度-40-+85℃-40-+85℃低功耗模式Active:0.2mA@1.8V/1MHz,Power-down:0.1μA@1.8VActive:0.5mA@1.8V/1MHz,Power-down:0.1μA@1.8V4.1机器人微控制器平台

Arduino系列开发板

以Arduino为代表的一批开源硬件系统的涌现,降低了基于微处理器的控制系统的开发难度、简化了电路设计和扩展步骤、提升了系统的开发速度。(1)跨平台性:以在Windows、MacOS和Linux上运行;(2)IDE易用性:ArduinoIDE基于ProcessingIDE开发,极易掌握,Arduino语言基于wiring语言开发,对硬件库进行了二次封装,无需要太多的单片机基础和编程基础;(3)开放性:Arduino的硬件原理图、电路图、IDE软件和库文件是开源的,用户可以在开源协议范围内自行制作和修改;(4)低成本:Arduino成本低,最基本的UNO市售价格仅在20元左右即可完成基本学习和开发。

在此基础上构建起来的庞大的Arduino生态圈已经成为微处理器控制系统领域的重要部分,包括了ArduinoUNO和ArduinoMega2560等二十余种类型的核心板,网络、Wi-Fi、SD卡和液晶屏幕等百余种扩展模块,使得Arduino相对于其他系统可以更简单的构建各类感知和识别、检测和控制系统。4.1机器人微控制器平台

Arduino系列开发板

常见Arduino系统板

UNOMega2560LeonardoDUEMKRWIFI1010MCU型号ATmega328ATmega2560ATmega32u4AT91SAM3X8ESAMD21时钟频率16MHz16MHz16MHz84MHz48MHzFlash32KB256KB32KB512KB256KBRAM2KB8KB2.5KB96KB32KBEEPROM1KB4KB1KB--工作电压5V5V5V3.3V5V数字I/O口145420548模拟输入口61612127PWM输出615712124.1机器人微控制器平台

Arduino系列开发板

(1)ArduinoUNO:目前最新的UNO版本是R3,是Arduino最主流、最具有代表性的产品,UNO的高性价比为Arduino带来了广阔的市场和发展前景。4.1机器人微控制器平台

Arduino系列开发板

UNOR3以ATmega328为核心,使用ATmega16u2作为USB串口转换控制器,具有14个数字I/O口、6个模拟输入口,此外还支持I2C接口。

在数字I/O的带载能力方面,UNO的每口最大输入输出电流可达40mA,但实际使用中应控制在20mA以下,并控制所有的输入输出电流值和不超过150mA。

在供电方式上,UNO支持USB供电、板载电源插针5V供电和DC5.5插座7-20V供电三种方式。4.1机器人微控制器平台

Arduino系列开发板

(2)ArduinoMega2560:提供了更加丰富的接口资源,在电源与调试接口一侧以及基本接口方面保持了与UNO的一致,可以方便的从UNO升级到Mega2560,资源方面Mega2560除了提供更大的Flash和RAM空间外,还提供更多的模拟输入、数字I/O和SPI接口。4.1机器人微控制器平台4.1机器人微控制器平台

Arduino系列开发板

(3)ArduinoDUE:DUE基于AT91SAM3X8E微处理器,也是第一个基于32位Cortex-M核心的系统板,外观大小与Mega2560相近,提供了更大的Flash和RAM,提供了54个数字I/O,12个模拟输入、12个PWM输出和UART、DAC等更加丰富的功能,最主要的是DUE相对于其他系统板,频率高达84MHz,提升了系统性能。4.1机器人微控制器平台4.1机器人微控制器平台

Arduino系列开发板

(4)各类扩展板:Arduino系统板预留了较为丰富的扩展接口,可以方便的扩展各类功能,目前在售的扩展板已经达到数百种,用户也可以根据自身需求设计扩展板,在供电和资源允许的条件下,Arduino理论上可以无限制的扩展各种功能板。4.1机器人微控制器平台

Arduino系列开发板(5)Arduino的软件开发:ArduinoIDE具有keil和IAR等平台所不具备的独到的跨平台优势,可以很好的在Windows、MacOS和Linux系统上运行,最大限度的扩展了用户群体。ArduinoIDE界面友好、语法简单,由Java、Processing、AVR-GCC等开源软件编写而成,其主界面如图所示。4.1机器人微控制器平台

Arduino系列开发板

ArduinoIDE附带了大量示例,可以用于参考、学习和测试系统板,以最基本的Blink为例,从菜单栏中打开文件->示例->01Basic->Blink,该程序的功能是控制LED的状态在亮灭之间每秒改变一次。

从该示例中可知,Arduino的程序中需要两个过程:voidsetup()和voidloop(),前者在系统板上电时执行一次,后者则重复执行,类似main()函数中的while(1)循环体。4.1机器人微控制器平台

Arduino系列开发板 voidsetup(){ //initializedigitalpinLED_BUILTINasanoutput. pinMode(LED_BUILTIN,OUTPUT); } //theloopfunctionrunsoverandoveragainforever voidloop(){ digitalWrite(LED_BUILTIN,HIGH);//turntheLEDon(HIGHisthevoltagelevel) delay(1000); //waitforasecond digitalWrite(LED_BUILTIN,LOW); //turntheLEDoffbymakingthevoltageLOW delay(1000); //waitforasecond }4.1机器人微控制器平台

Arduino系列开发板

Arduino软件开发可以使用的关键字包括if、if...else、for、switch、case、while、do...while、break、continue、return和goto,数据类型包括boolean、char、int、unsignedint、long、unsignedlong、float、double、string、array和void,每条语句需要以“;”结尾,每个程序段以“{}”括起来,Arduino的基本常用函数包括:(1)pinMode(pin,mode),数字I/O函数,用于配置引脚pin的模式为输入INPUT或者输出OUTPUT,INPUT用于读取数字I/O状态,OUTPUT用于输出高电平或低电平(UNO最大为40mA@5V);(2)digitalWrite(pin,value),数字I/O函数,用于配置引脚pin的输出电平为value,value为高电平HIGH或低电平LOW;(3)digitalRead(pin),数字I/O函数,在引脚设置为输入情况下,获取引脚的输入电平:高电平HIGH或者低电平LOW。4.1机器人微控制器平台

Arduino系列开发板(4)analogReference(type),模拟I/O函数,配置模拟输入引脚的参考电压类型:DEFAULT为默认参考电压5V,INTERNAL是内部基准电压2.56V,EXTERNAL为外部输入的参考电压,通过AREF引脚输入;(5)analogRead(pin),模拟I/O函数,对引脚pin的输入模拟电压进行AD转换,返回int类型值,10位有效位,每次转换时间约100us;(6)analogWrite(pin,value),PWM输出函数,在具有PWM输出功能的引脚上(带有“~”标示)输出PWM信号,PWM频率约490Hz,vlaue为占空比,有效位8位;(7)pluseIn(pin,state,timeout),高级I/O函数,用于读取引脚pin上的脉冲在状态state的时间长度,状态state可以是HIGH或者LOW,参数timeout表示超时时间;(8)delay(time),延时函数,延时time,单位毫秒;(9)delayMicroseconds(time),延时函数,延时time,单位微秒;4.1机器人微控制器平台

Arduino系列开发板(10)millis(),计时函数,获取系统板复位到当前所运行的时间,单位毫秒,返回类型是unsignedlong,系统最长的纪录时间约9小时22分,超出后归零重新开始;(11)micros(),与millis()功能类似,但单位为微秒,最长计时约70分钟;(12)attachInterrupt(Interrupt,function,mode),中断函数,用于设置中断,Interrupt表示中断源,具有中断功能的数字I/O,UNO中可选0、1分别对应数字I/O的2或者3,function是中断处理函数的函数名,mode是触发模式,有四种类型:低电平触发LOW、电平变化触发CHANGE、上升沿触发RISING和下降沿触发FALLING;(13)detachInterrupt(Interrupt),取消中断源Interrupt的中断;(14)Serial.begin(baud),设置串口比特率为baud,常用9600、19200、57600和115200等;(15)Serial.available(),判断串口是否接收到数据,Serial.available()>0时说明串口收到数据;4.1机器人微控制器平台

Arduino系列开发板(10)millis(),计时函数,获取系统板复位到当前所运行的时间,单位毫秒,返回类型是unsignedlong,系统最长的纪录时间约9小时22分,超出后归零重新开始;(16)Serial.read(),读入串口数据,返回值int,需配合Serial.available()使用,例如:(17)Serial.print(),向串口发送变量或字符串,例如: Serial.print("HelloOurEDA"); //向串口发送字符串HelloOurEDA Serial.print(x,DEC); //向串口以十进制发送x Serial.print(x,HEX); //向串口以十六进制发送x(17)Serial.println(),向串口发送变量或字符串并添换行;除上述基本函数之外,Arduino还提供了数学库、EEPROM库、Ethernet以太网库、Firmate串口协议库、SD卡库、Servo舵机库、Stepper步进电机库、Wi-Fi控制库等。4.1机器人微控制器平台机器人常用的微处理器

(3)ARM/Cortex架构:没有将ARM/Cortex直接描述成微处理器的名称,主要是由于ARM公司并不亲自生产基于ARM/Cortex构架的微处理器,而是将设计出的ARM/Cortex核心以不同级别的技术授权的形式各个设计开发厂商,分为架构授权、内核授权以及使用授权三个级别:

架构授权:指企业购买架构级的处理器设计和制造许可,厂商可以从整个架构和指令集方面入手,对ARM架构进行大幅度改造,甚至可以对ARM指令集进行扩展或缩减,以便达到更高性能、更低功耗或更低成本等不同目的。拥有架构授权的典型厂商包括苹果、高通、微软、华为和瑞芯微等行业巨头和新兴设计商。4.1机器人微控制器平台

机器人常用的微处理器

内核授权则:指用户可以将其所购买的ARM核心应用到其自行设计的芯片中,但用户不得对其购买的ARM核心本身进行修改。拥有内核级授权的厂商较多,包括德州仪器、博通、飞思卡尔和富士通等。由于ARM架构本身拥有非常良好的扩展性,因此,拥有内核授权的厂商亦可通过ARM架构的外围设计,在保持ARM处理器自身特性的前提下实现众多功能。

使用授权:作为最低的授权等级,拥有使用授权的用户只能购买已经封装好的ARM处理器核心,而如果想要实现更多功能和特性,则只能通过增加封装之外的DSP核心的形式来实现或通过对芯片的再封装方法来实现。4.1机器人微控制器平台

机器人常用的微处理器

在不同的授权级别上,厂商也研发和生产了不同的微处理器,如:

苹果A系列和M系列处理器。截至2020年11月,苹果公司最先进的A系列处理器是A14,M系列处理器是M1,A14该处理器代表了当时ARM架构的最高性能,其性能甚至接近了标准电压版的Inteli7处理器。处理器中集成了CPU、GPU(图形处理单元)、NPU(神经处理单元)、IMC(集成内存控制器)、ISP(图像信号处理器)、SEP(安全区域处理器)和显示引擎、存储控制器、HEVC解码和编码器等功能部件。其中GPU为苹果自研7核心图形处理单元,用于处理2D和3D图像图像,NPU为苹果自研的神经处理单元,用于加速在设备上本地执行与机器学习相关的任务,包括FaceID和TrueDepth传感器阵列面部识别、语音处理和增强现实等。而A14X部分仍基于ARM公司的架构授权完成,并重新设计了Cortex构架,采用当时最先进的5nm制程,包括4个性能内核和4个效率内核的设计形式,使其性能大幅度提升,甚至可以在iPadPro上运行完整版的PhotoshopCC等大型软件。4.1机器人微控制器平台

机器人常用的微处理器

高通骁龙855:高通公司与苹果公司同获得了ARM公司的架构授权,并开发了骁龙系列微处理器,其最新版本骁龙855也针对智能手机进行了一系列的设计开发,集成了GPU、ISP等功能,并针对手机的特性增加了对LTE、5G网络和802.11ax、802.11ay无线网络的支持。与A12X不同,骁龙855采用了ARM的BoC(BuiltonARMCortexTechnology)授权模式,其Kyro485CPU部分是基于CortexA76优化定制的,包括1个超级内核、3个性能内核和4个效率内核。

华为麒麟980、联发科HelioP90、三星Exynos9820:三款处理器同为手机领域的主流处理器,同为ARM的内核授权模式(华为为架构授权,但麒麟980仍为公版Cortex架构),所以其宣传上并没有强调自己的CPU类型,而是直接说明其CPU所采用的核心类型:麒麟980为Cortex-A76,HelioP90和Exynos9820为Cortex-A75和Cortex-A55,三家厂商仅可以在内核的基础上扩展自己的各种功能,如通信、AI和GPU等。4.1机器人微控制器平台

机器人常用的微处理器

(4)STM系列微处理器:STMicroelectronics的STM系列微处理器包括了8位STM8系列、32位的STM32F、STM32L和STM32W系列,其产品线如图所示。4.1机器人微控制器平台

机器人常用的微处理器:STM32F微处理器STM32F103ZET6STM32F407ZGT6CPU32位Cortex-M3核心、72MHz,有FPU32位Cortex-M4核心、168MHz,有FPUFLASH512KB1024KBRAM64KB192KB定时器4个16位+2个16位12个16位、2个32位PWM4个16位+2个12位12个16位、2个32位看门狗2个2个RTC1个1个ADC3路12位3路,12位DAC2路12位2路,2位串行通信5*USART、3*SPI、2*I2C、USBCAN、2*IIS、SDIO4*USART、3*SPI、3*I2C、2*USB2*CAN、2*IIS、SDIOGPIO112114工作电压2.0-3.6V1.7-3.6V4.1机器人微控制器平台

机器人常用的微处理器:STM32F

在程序的调试方面STM32F系列微处理器可以使用常见的ARM调试器进行在线调试,尤其是可以使用支持USB接口ST-Link,大大降低了程序开发的难度。

STMicroelectronics更重视中国市场,与国内高校建立了大量的联合实验室,以推广产品和培养人才,同时降低同类产品的销售价格,2020年时散片STM32F103ZET6和STM32F407ZET6在淘宝最低价仅售9.8元和21.5元,而STM32F系列微处理器尤其在芯片的中文资料和示例程序等方面更是远远优于竞品公司,吸引了大量学生群体在学习和竞赛中使用STM32F,也使得STM32F微处理器和各类开发板、调试器、下载器和配件等迅速占领了淘宝市场,收获了大量市场。4.1机器人微控制器平台

STM32系列单片机系统:STM32F

以STM32微处理器为核心、辅助以外围基本电路,则可以构成各类最小系统板,国内某些在线商城上在售的STM32最小系统板多达上千款,涵盖了大部分型号的STM32微处理器,用户在选择时,应考虑自身系统的功能需求、性能需求、供电需求和外形需求进行综合考虑。

(1)某STM32F103C8T6最小系统板STM32F103C8T6使用LQFP48封装,最高主频72MHz、内部集成了64KFLASH、20KSRAM、2个12位ADC、3个定时器(TIM1、TIM2和TIM3)以及USART、I2C、SPI和USB2.0等丰富的接口和功能。但其正常工作和连接外部设备仍需要必要外部元件配合。

该STM32F103C8T6最小系统板为微处理器配备了8MHz高频晶振、32768HzRTC晶振、SWD调试接口、BOOT选择跳线、复位按键、LDO、MicroUSB接口和GPIO的外部插针,可以方便使用连接杜邦线连接外部电路,并支持USB供电,且电路板尺寸与51系列常用的PDIP40封装相近,适合在小型设备中使用,但系统板未配置显示屏幕和按键,难以完成用户交互功能。4.1机器人微控制器平台

STM32系列单片机系统:STM32F

(1)某STM32F103C8T6最小系统板4.1机器人微控制器平台

STM32系列单片机系统:STM32F

(2)某STM32F107RCT6最小系统板:STM32F107RCT6属于STM32F1系列微处理器,F107相对于F103主要提升了存储密度,Flash和RAM分别提升到了256KB和64KB,并支持USBOTGFS和以太网。该最小系统板提供了更多的GPIO引出,同时也支持了LCD液晶显示屏幕、外置了一个1MB的Flash存储器可用于存储用户数据,增加了三个功能按键。4.1机器人微控制器平台

STM32系列单片机系统:STM32F

(3)STM32F4DISCOVERY:该评估板全为称STM32F4DISCOVERYEmbeddedST-LINK/V2STM32EvaluationDevelopmentBoard,是STM推出的一系列评估板之一,其板载资源通常较少,但集成了ST-LINK,用户在使用时无需再外接,此外该板板载了3轴加速度传感器、数字麦克风和集成耳机等功能。4.1机器人微控制器平台

树莓派开发系统

树莓派(RaspberryPi)定位于一款廉价PC机,能够提供比Arduino更高的运算性能、存储性能、通信性能和显示性能,也能够运行比Arduino更友好、更强大的的操作系统。2021年时,树莓派已经发展到了第四代,仅有4B一款产品。4.1机器人微控制器平台

树莓派开发系统

树莓派3B+和4B系统板主要参数

RaspberryPi3ModelB+RaspberryPi4ModelB+CPU型号BCM2837B0,Cortex-A5364-bit

BCM2711,四核Cortex-A7264-bitCPU频率1.4GHz1.5GHzRAM1GBLPDDR21/2/4/8GBLPDDR4-3200Wi-Fi2.4/5GHz802.11b/g/n/ac2.4/5GHz802.11b/g/n/ac蓝牙4.2BLE5.0BLE网口GigabitEthernet

300MbpsGigabitEthernet,PoEHDMI1080P4K60USB4×USB2.02×USB3.0,2×USB2.04.1机器人微控制器平台

树莓派开发系统

树莓派采用Linux操作系统,支持通过使用NOOBS(NewOutOfBoxSoftware)快速在树莓派系统板上部署Raspbian操作系统,此外,树莓派还支持运行UbuntuMATE、SnappyUbuntuCore、OSMC、Windows10IoTCore、LibreELEC、PiNet和RISCOS等多种操作系统。对于未部署操作系统的树莓派系统板,应通过NOOBS向SD卡中安装系统,基本步骤如下:(1)将不小于8GB容量的MicroSD卡格式化为FAT文件系统格式,如果卡容量超过32GB则应划分多个分区;(2)下载并解压缩NOOBS;(3)将解压缩的文件直接复制到卡的根目录下;(4)将MicroSD卡插到树莓派卡槽中,系统会自动调整恢复分区至最小,并在屏幕上显示可以选择安装的各个操作系统4.1机器人微控制器平台

树莓派开发系统

通过NOOBS安装和配置系统的过程4.1机器人微控制器平台

树莓派开发系统

Raspbian(

现在更名为RaspberryPiOS

)作为一种Linux发行版本,也包括了kernel和filesystem两个主要部分:内核部分决定了系统的主要功能和性能,Raspbian内核与Linux内核同步更新,用户可以通过rpi-update命令下载最新的内核版本并替换现有的内核,该命令下载的内核版本可能是unstable或testing内核,替换现有内核可能会导致系统功能丧失甚至系统崩溃,应谨慎升级系统内核,此外用户也可以通过自行编译内核的方式升级系统内核;

文件系统继承了标准的Linux文件系统特性,包括bin、boot、dev、etc、root和proc等目录,其功能与其他Linux发行版本类似,由于Raspbian默认用户为pi,因此用户的桌面和文档等都默认保存在/home/pi目录下。Raspbian使用时,需要具备以下基础:4.1机器人微控制器平台

树莓派开发系统(1)基本操作命令。Linux基本操作命令包括:列出目录内容命令ls、更改当前目录命令cd、列出当前所在目录名命令pwd、创建目录命令mkdir、删除空目录命令rmdir、删除文件和目录命令rm、复制文件和目录命令cp、移动文件和目录命令mv、设置时间戳或创建文件命令touch、列印文件内容命令cat、列印文件头内容命令head、列印文件尾内容命令tail、更改文件和目录权限命令chmod、更改文件和目录所有者和所属组命令chown、远程加密连接命令ssh、远程加密传输文件命令scp、越权执行命令sudo、此外还包括dd、df、unzip、tar、pipes、tree、wget、curl、man、grep、awk、find、whereis、ping、ifconfig、nslookup等。(2)文本编辑软件。包括基于命令行的编辑器:nano、vi/vim、emacs,基于图形界面的编辑器:leafpad、idle、gvim等。(3)用户管理命令。Raspbian的默认用户名pi、默认密码raspberry,命令方面包括创建用户命令adduser、修改密码命令passwd、删除用户命令userdel等。4.1机器人微控制器平台

树莓派开发系统(4)脚本。系统支持基本的shell脚本,用户也可以通过软件使系统python脚本、perl脚本等。(5)计划任务。主要是计划任务命令crontab,计划任务文件/etc/crontab。(6)用户配置文件。主要是保存在各个用户文件夹下的.bashrc文件。(7)自定义服务。主要是将服务配置文件保存在/etc/systemd/system/,并使用systemctl命令控制服务的使能systemctlenable、服务的启动systemctlstart和服务的停止systemctlstop。(8)自启动脚本。主要是配置系统的自动脚本文件/etc/rc.local。

此外,还应该具有系统软件管理和编程能力,主要是使用apt工具更新软件源列表包、搜索软件、安装软件、移除软件和更新软件。而且在使用树莓派系统时,还应该具备Python和Ruby开发能力。4.2微控制器的控制接口

微处理器内部的功能模块

(1)晶体振荡器(简称晶振)是一种较为通用的用于在电路中产生振荡频率的器件,常见的晶振由石英片封装制成,并且具有多种封装形式,为微处理器等器件提供稳定的时钟。

晶振在工作的过程中,会因为温度、电压和老化等问题造成振荡频率的误差称为频差,单位为ppm(partpermillion,百万分之几),如标称频率10MHz的晶振频差为10Hz时,即为1ppm。晶振可以分为有源晶振和无源晶振两种,在一般民用的电气设备中,通常使用无源晶振。除了晶振之外,还有一类陶瓷振荡器也是常见的产生振荡频率的器件,其性价比较高、容易起振,但其频率稳定性远低于晶振。4.2微控制器的控制接口微处理器内部的功能模块

频率为11.059200MHz、11.0592MHz、32.768KHz和156.26MHz4.2微控制器的控制接口

微处理器内部的功能模块

下图是STM32的HSE(High-SpeedExternal)时钟的外部晶振电路,除了晶振之外,还连接了两个负载电容CL1和CL2。晶振负载电容值是指在电路中跨接晶体两端的总的外界有效电容,与晶振构成振荡电路,晶振的电路频率主要是由晶振自身决定,而负载电容只能对频率起到微调作用,但负载电容值越小,振荡电路的振幅就越高。

通常,在MHz晶振电路中常用的负载电容在6pF~30pF之间,KHz晶振电路中常用的负载电容在6pF左右,或者不使用负载电容。更详细的关于负载电容的选择可以参考技术文档《AN2867OscillatordesignguideforSTM8AF/AL/SandSTM32microcontrollers》4.2微控制器的控制接口

微处理器内部的功能模块

STM32F103的部分时钟系统结构4.2微控制器的控制接口

微处理器内部的功能模块

时钟系统在STM32F1xx中隶属于RCC(ResetandClockControl)功能,可以看出共有4个可以选择的时钟源:(1)HSE:High-SpeedExternal,高速外部时钟源,用于连接外部晶振或直接输入对应频率的信号,在STM32的常见电路中通常连接8MHz的晶振。HSE经过1分频和PLL9倍频后最高可达72MHz,可以被选择作为系统时钟SYSCLK供给后续的各个功能模块使用,也可以经过分频后分别作为USBOTG时钟或RTC时钟。(2)HSI:High-SpeedInternal,高速内部时钟源,由内部的RC振荡器产生的一个8MHz的频率,可以直接被选择作为系统时钟SYSCLK供给后续的各个功能模块使用。(3)LSE:Low-SpeedExternal,低速外部时钟源,一般连接外部32.768KHz的时钟晶振,用于为STM32内部的RTC提供时钟。(4)LSI:Low-SpeedInternal,低速内部时钟源,由内部的RC振荡器产生的一个40KHz的频率,用于为STM32内部的RTC提供时钟或者看门狗系统时钟。4.2微控制器的控制接口

微处理器内部的功能模块

STM32F1xx共有RCC_CR、RCC_CFGR和RCC_CIR等10个32位寄存器可以设置或获取与时钟系统相关的功能和状态,具体寄存器功能可以参考上述技术文档。为了简化用户直接操作这些寄存器的难度,STM32的FWLIB(FirmwareLibrary)中提供了大量可以直接设置相关功能的库函数,如函数:voidRCC_HSEConfig(uint8_tRCC_HSE);

该函数用于设置高速外部时钟源,即HSE的相关功能,其输入参数可以为枚举类型的RCC_HSE_OFF、RCC_HSE_ON或RCC_HSE_Bypass,分表表示关闭HSE外部晶振、打开HSE外部晶振、使用外部时钟源。再如函数:ErrorStatusRCC_WaitForHSEStartUp(void);4.2微控制器的控制接口

微处理器内部的功能模块

再如函数:ErrorStatusRCC_WaitForHSEStartUp(void);

该函数用于等待并检测高速外部时钟源HSE的状态,通常用于RCC_HSEConfig函数后执行,函数执行完后可以返回两种枚举类型的运行结果,表示HSE设置成功的SUCCESS和设置失败的ERROR。

更多函数和功能可以查阅FWLib中stm32f4xx_rcc.h和stm32f4xx_rcc.c文件中的函数和说明4.2微控制器的控制接口

微处理器内部的功能模块

一个基本的时钟系统初始化函数示例如下: voidSystemClock_Config(void){ RCC_DeInit(); //清除RCC配置 RCC_HSEConfig(RCC_HSE_ON); //打开外部时钟 if(RCC_WaitForHSEStartUp()==SUCCESS){ //等待HSE启动成功 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //1分频9倍频72Mhz RCC_PLLCmd(ENABLE); //使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET); //等待PLL时钟就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //SYSCLK选择PLL作为时钟源 while(RCC_GetSYSCLKSource()!=0x08); //判断时钟源是否为PLL时钟源 RCC_HCLKConfig(RCC_SYSCLK_Div1); //PLL不分频给SYSCLK }}4.2微控制器的控制接口

微处理器内部的功能模块RCC决定了GPIO、定时器等各个功能模块的时钟开关,关闭模块的时钟就关闭了该模块,可以降低功耗。

上电后默认各功能模块的时钟都是关闭的,所以在使用前应根据模块所在的时钟线(AHB1/AHB2/AHB3/APB1/APB2),调用RCC_AHB1PeriphClockCmd等函数打开模块时钟,如打开GPIOF时钟:RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);4.2微控制器的控制接口

微处理器内部的功能模块

(2)复位电路:复位电路和时钟电路同属于STM32的RCC功能,STM32有三种复位:系统复位、电源复位和BKP备份区域复位。

系统复位:系统复位会将除了RCC_CSR寄存器中的各ResetFlag和BKP备份区域寄存器之外的所有寄存器恢复至默认状态,可以触发系统复位的事件包括:由NRST引脚上低电平引起的外部复位、由窗口看门狗溢出引起的WWDG复位、由独立看门狗溢出引起的IWDG复位、由软件引起的SW复位和由低电压管理引起的复位;4.2微控制器的控制接口

微处理器内部的功能模块

(2)复位电路:复位电路和时钟电路同属于STM32的RCC功能,STM32有三种复位:系统复位、电源复位和BKP备份区域复位。

电源复位:电源复位会将BKP备份区域寄存器之外的所有寄存器恢复至默认状态,可以触发电源复位的事件包括:上电复位POR和掉电复位PDR、退出Standby模式;

BKP备份区(BackupDomain)域复位:该复位仅影响BKP备份区域寄存器,有两种事件会触发该复位:在RCC_BDCR寄存器中对BDRST置位产生的软件复位、由VDD和VBAT同时由掉电状态转变为任意一个上电状态。4.2微控制器的控制接口

微处理器内部的功能模块

(3)通用输入输出端口GPIO:稳定的供电、可用的时钟源和正常的复位是微处理器正常工作的必要条件,而微处理器所要实现的检测与控制功能则主要通过其内部的各个功能模块来实现,包括GPIO、定时器、UART和I2C等。

GPIO是应用最多、最广泛的功能模块,通过GPIO可以直接检测外部电平状态或者向外输出高低电平,也可以通过多个GPIO的组合实现基于时序的外部通信功能,这也是在缺乏内部功能模块时连接外部设备的方法。4.2微控制器的控制接口

微处理器内部的功能模块

STM32内部基本GPIO结构图4.2微控制器的控制接口

微处理器内部的功能模块

与其他微处理器类似,STM32也对GPIO进行了编组,每16个GPIO编为一组,标记做Px0-Px15(x=A...G),如PA0、PB9、PC15……等,每组端口有2个32位配置寄存器GPIOx_CRL和GPIOx_CRH、2个32位数据寄存器GPIOx_IDR和GPIOx_ODR、1个32位复位置位寄存器GPIOx_BSRR、1个16位复位寄存器GPIOx_BRR和1个32位锁定寄存器GPIOx_LCKR。

以GPIOA_CRH寄存器为例,该寄存器用于配置PA8-PA15的输入输出模式和功能4.2微控制器的控制接口

微处理器内部的功能模块CNF15[1:0]和MODE15[1:0]用于控制PA15的输入输出模式等配置,MODE15[1:0]的可选设置如下:00:输入模式(上电复位后默认模式);01:输出模式,最大速度10MHz;10:输出模式,最大速度2MHz;11:输出模式,最大速度50MHz。4.2微控制器的控制接口

微处理器内部的功能模块

与RCC的配置类似,FWLIB也中提供了大量可以直接设置GPIO库函数,包括初始化、设置和读取等,STM32对于GPIO等复杂功能模块的初始化方式通常采用结构体的方式,即将对应的设置写入结构体中,再将结构体传作为参数入函数以实现对模块的配置,GPIO的初始化结构体定义如下: typedefstruct{ uint32_tGPIO_Pin; //GPIO端口 GPIOMode_TypeDefGPIO_Mode; //模式 GPIOSpeed_TypeDefGPIO_Speed; //速度 GPIOOType_TypeDefGPIO_OType; //输出模式 GPIOPuPd_TypeDefGPIO_PuPd; //上拉下拉 }GPIO_InitTypeDef;4.2微控制器的控制接口

微处理器内部的功能模块

例如需要设置PF9和PF10为推挽输出、最大速度2MHz、无上拉下拉时的部分设置如下: GPIO_InitTypeDefGPIO_InitStructure; //初始化结构体 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE); //打开GPIOF的RCC GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10; //Pin9和Pin10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //输出 GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //推挽 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; //速度2MHz GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; //无上下拉 GPIO_Init(GPIOF,&GPIO_InitStructure); //初始化PF9/PF10端口 GPIO_SetBits(GPIOF,GPIO_Pin_9|GPIO_Pin_10); //设置端口电平4.2微控制器的控制接口

微处理器内部的功能模块

在使用GPIO时,应注意以下几点:(1)在使用对应GPIO功能模块前必须打开其时钟;(2)设置端口为GPIO输出后,必须立刻设置端口的输出电平,以避免外部电路出现问题;(3)根据需求设置合理的GPIO输出速度,GPIO速度越快、噪声越大、功耗也越高;(4)合理规划GPIO外围电路电流需求,单个GPIO的最大输出电流不超过8mA,最大输入电流不超过20mA,整个芯片GPIO输出电流之和不超过150mA,输入电流之和也不超过150mA。

(4)GPIO的内存地址直接访问:除了使用FWLib提供的函数库之外,部分情况下也可以使用直接访问寄存器的方式来直接控制GPIO输出或者读取GPIO的输入,例如通过GPIOA_ODR寄存器直接控制PA5的输出状态的方法,实际内容略去。4.2微控制器的控制接口

微处理器内部的功能模块

(5)TIM的定时功能性能参数高级定时器通用定时器基本定时器长度与模式16位,自动重载、增、减、增减计数模式16位,自动重载、增计数模式预分频模式16位,在线调节独立通道输入捕获、输出比较、PWM输出、单脉冲模式无死区时间可编程设定无中断/DMAUpdate(计数器上溢/下溢、计数器初始化)、触发(计数器开始、停止、初始化、外部触发)、输入捕获、输出捕获、Break输入Update(计数器上溢/下溢、计数器初始化)、触发(计数器开始、停止、初始化、外部触发)、输入捕获、输出捕获、计数器上溢编码器输入增量(正交)编码器、霍尔传感器无4.2微控制器的控制接口

微处理器内部的功能模块定时器的本质是通过对特定频率的信号进行计数来实现特定时间的计量,STM32F103的TIM3的频率来源于RCC中APB1输出的时钟,经过一个自动选择的2倍频器处理后作为TIM3CLK(TIM3的时钟信号,最高为72MHz),经过TIM3内部TriggerController后,作为TIM3的CK_PSC信号进入预分频器PSC,分频后的CK_CNT信号进入计数器CNT,在计数器计数到达预设值的之后的下一个CK_CNT信号的上升沿产生特定的事件或中断,以标识到达计时时间。

TIM3的计数模式包括增计数、减计数、增减计数三种模式:增计数从0开始计数,到Autoreloadresigter中的值(TIM3_ARR寄存器),然后再重新从0开始增加计数并产生上溢事件;减计数则从Autoreloadresigter中的值(TIM3_ARR寄存器)开始计数,减少至0后重新从Autoreloadresigter中的值开始计数并产生下溢事件。4.2微控制器的控制接口4.2微控制器的控制接口4.2微控制器的控制接口

微处理器内部的功能模块

增减计数模式又称为中央对齐模式,该模式下计数器值从0开始增加,到达Autoreloadresigter中的值(TIM3_ARR寄存器)时,产生上溢事件并从该值(TIM3_ARR寄存器)开始进行减计数至0时,产生下溢事件,并重新进行增计数。增减计数下每周期计数数目2*TIM3_ARR+1。4.2微控制器的控制接口

微处理器内部的功能模块

定时周期短是MCS-51单片机最常见的问题,在使用12MHz的晶振时,其16位定时器最长定时周期仅有65.535ms,如果程序要求的定时时间较长,则需要单片机频繁进入中断服务程序,严重影响程序的执行效率。

STM32F103微处理器内的定时器长度也仅为16位,提供给定时器的TIMxCLK高达36MHz,若不进行预处理则定时器最长定时周期将更短,为此,STM32定时器内增加了预分频器PSC,可以对输入的信号进行预分频生成CK_CNT进入计数器进行定时。TIMx_PSC寄存器的长度为16位,因此可以实现最长约119秒的定时周期。特别注意两点:(1)PSC的分频比可设置为1-65536,但写入TIMx_PSC寄存器时受长度限制应写入0-65535,即将设计的分频值-1后写入TIMx_PSC寄存器;(2)TIMx_PSC寄存器也支持在定时器工作过程中的实时修改(onthefly),但只能在下一个Updateevent(UEV),即计数器overflow或者underflow后,才能使用新的TIMx_PSC寄存器的值。4.2微控制器的控制接口

微处理器内部的功能模块

通过STM32F103实现周期为1秒的定时,则可以通过如下部分代码实现TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3时钟 TIM_TimeBaseInitStructure.TIM_Prescaler=36000-1; //分频,72M/36000=20K TIM_TimeBaseInitStructure.TIM_Period=20000-1; //自动重装载20K TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); //初始化TIM3 TIM_Cmd(TIM3,ENABLE); //使能定时器34.2微控制器的控制接口

微处理器内部的功能模块

在没有中断知识的情况下,判断定时器是否到达定时时间可以通过判断定时器相关的标志位来的方法实现,例如在主循环查询UIF标志位状态: while(1){ if(TIM_GetFlagStatus(TIM3,TIM_FLAG_Update)==SET){ //DOSOMETHINGHERE TIM_ClearFlag(TIM3,TIM_FLAG_Update); } }

但查询的方式会大量占用主循环时间4.2微控制器的控制接口

微处理器内部的功能模块(6)TIM的PWM输出:PWM(脉冲宽度调制,PulseWidthModulation)是利用微处理器的数字输出对外部模拟电路进行控制的有效技术,广泛应用在测量、通信、功率控制与变换等很多领域,在机器人上可以使用PWM实现LED灯光亮度控制、舵机角度控制和电机转速控制等功能。

微处理器内的PWM的产生通常是通过定时器来实现的:

通过TIMx_ARR寄存器设定PWM的周期

通过TIMx_CCRx控制对应CCRx通道的占空比

以TIMx的通道1为例,其涉及的寄存器包括TIMx_CCMR1的OC1M[2:0]位、计数器值TIMx_CNT、TIMx_CCR1、TIMx_CCER的CC1P位和CC1E位。4.2微控制器的控制接口微处理器内部的功能模块

边缘对齐的PWM工作状态(PWM模式1)增计数模式下设定PWM为模式1、TIMx_ARR=8时,TIMx_CCRx在多种情况下的OCxREF输出情况4.2微控制器的控制接口使用TIM3通道2产生PWM信号,并通过PB5输出示例代码部分如下

GPIO_InitTypeDef

GPIO_InitStrue; //定义结构体TIM_OCInitTypeDef TIM_OCInitTypeDef

TIM_OCInitStrue; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能TIM3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOB时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能AFIO时钟 GPIO_InitStrue.GPIO_Pin=GPIO_Pin_5; //PB2Remap GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP; //AFIO推挽输出 GPIO_InitStrue.GPIO_Speed=GPIO_Speed_50MHz; //设置输出速度 GPIO_Init(GPIOB,&GPIO_InitStrue); //初始化PB5 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); //启用REMAP

TIM_TimeBaseInitStrue.TIM_Prescaler=8-1; //8分频,72M/8=9MHz TIM_TimeBaseInitStrue.TIM_Period=900-1; //自动重装载值,900,10KHz TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; //增计数 TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); //初始化TIM3 TIM_OCInitStrue.TIM_OCMode=TIM_OCMode_PWM2; //PWM模式2 TIM_OCInitStrue.TIM_OCPolarity=TIM_OCPolarity_High; //设置极性 TIM_OCInitStrue.TIM_OutputState=TIM_OutputState_Enable; //输出使能 TIM_OC2Init(TIM3,&TIM_OCInitStrue); //初始化TIM3通道2 TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //使能预装载寄存器 TIM_Cmd(TIM3,ENABLE); //使能TIM3 TIM_SetCompare2(TIM3,450); //PWM占空比504.2微控制器的控制接口

微处理器内部的功能模块

(7)UART串行通信口:UART串行通信口是微处理器与外界进行数据通信最基本的、最常用的接口,通过UART微处理器可以与其他微处理器或者外设实现全双工通信。STM32内部将采用串行方式通信的多种端口,如UART、LIN(LocalInterconnectionNetwork),SmartcardProtocol和IrDA(infrareddataassociation)等,并将其设计为一个USART内部功能模块。UART在ROV系统中可用于各类低速通信,如BlueROV2中树莓派和Pixhawk之间、GPS/声呐定位系统与ROV之间、水下声学通信等,都通过UART或RS232/RS485进行。

全双工UART接口除了需要共地外,还需要连接RX和TX两根通信线:RX用于接收对端传入的串行输入,TX用于向对端传输串行数据,UART与其他串行通信本质是一样的,即将需要发送的数据按位进行传输,但由于UART是异步通信,通信方在传输时缺乏必要的同步机制,所以UART通信方之间必须要使用相同的通信速率,即相同的波特率(Baudrate),目前常用的波特率包括1200bps、2400bps、4800bps、9600bps、19200bps、38400bps、57600bps和115200bps等。4.2微控制器的控制接口

微处理器内部的功能模块

UART通信方式示意图4.2微控制器的控制接口

微处理器内部的功能模块

波特率的生成需要微处理器内部时钟支持,早期的MCS-51单片机为了还能够生成9600bps的标准波特率,需要使用频率较为特殊的11.0592MHz晶振,可以满足单片机对串口通信的要求。

但STM32微处理器建议使用更加易于计算时钟、定时器时间的系统时钟频率,如8MHz、72MHz和168MHz等,但却很难精准的使用UART,为此,需要在生成波特率时使用分数波特率生成法(Fractionalbaudrategeneration),并在其设置指南中列出了常见的波特率的误差。4.2微控制器的控制接口

微处理器内部的功能模块

STM32的常用波特率误差计算(具体计算方法略)

波特率KbpsFPCLK=36MHzFPCLK=72MHz实际波特率寄存器值误差实际波特率寄存器值误差2.42.400937.50%2.40018750%9.69.600234.3750%9.600468.750%19.219.200117.18750%19.200234.3750%57.657.60039.06250%57.60078.1250%115.2115.38419.50.15%115.20039

温馨提示

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

评论

0/150

提交评论