【《基于单片机的平衡车系统硬件和软件设计案例》7300字】_第1页
【《基于单片机的平衡车系统硬件和软件设计案例》7300字】_第2页
【《基于单片机的平衡车系统硬件和软件设计案例》7300字】_第3页
【《基于单片机的平衡车系统硬件和软件设计案例》7300字】_第4页
【《基于单片机的平衡车系统硬件和软件设计案例》7300字】_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

基于单片机的平衡车系统硬件和软件设计案例1系统硬件电路设计根据对系统的方案设计及各个模块的选型结果,系统的硬件部分主要包括:单片机最小系统电路、电源电路、姿态传感器模块、电机驱动模块、超声波避障模块、显示模块等。1.1单片机最小系统单片机最小系统主要由电源电路、复位电路、时钟电路以及扩展部分等部分组成。STM32具有三种复位方式:电源复位、系统复位、看门狗复位。当电源复位时,NRST引脚被拉低,产生外部复位脉冲使系统复位。其中的电容C52的目的是按键消抖,防止在按键刚刚接触或松开时的电平抖动引发误动作,按键闭合或松开的接触过程大约有10ms的抖动,这对于主控芯片I/O控制来说已经是很长的时间,足以执行多次复位动作。由于电容电压不会突变,所以采用电容滤波,防止抖动复位误动作[14][15]。图1.1复位电路去耦电容主要用来滤除杂波,保持引脚电压的稳定。图1.2去耦电容根据芯片数据手册,晶振振荡频率4-16M可选。晶体振荡器是由石英制成的,晶体振荡器之所以能作为振荡器使用,是由于在晶片的两极施加电场时晶体发生机械变形的压电效应。当在晶体晶片上施加交流电压时,晶体引起机械振动,机械变形振动产生交变电场,这种交变电场的电压很微弱,但振动频率很稳定。当外加交流电压的频率与晶片的固有频率相同时,机械振动幅度突然增大的现象称为“压电谐振”。晶振为主控芯片提供系统时钟,所有外设运行,CPU在这个时钟上运行。这类似于整个系统的“心跳”。晶振可分为无源振荡器和有源振荡器,基本都是穿通振荡器,但在微控制器的情况下,微控制器集成了一个带有电阻和电源的反相放大器,外接晶振和电容就足够了,称为无源晶体振荡器。有源晶振是整体穿通振荡器,直接加电工作,价格比无源晶振贵[16]。图1.3振荡电路最小系统原理图如图所示。图1.4最小系统1.2电源电路对于全电子化设计,主要问题是提供贯穿整个系统的电源模块,电源模块的稳定性和可靠性是系统顺利运行的前提和基础。平衡小车动力源为2S大电流航模锂电池,每节电池额定电压1.7v(充满电压2.1v),两节电池串联得到的7.4v(充满电压8.2v)。但是,电路中常用的电压为5v和1.3v,系统的部分芯片需要5V供电,部分芯片需要1.3V供电。所以,我们并不能直接把电池电压供给电路模块,而是需要对7.4v进一步降压稳压,分别降压至5v和1.3v,以供整个电路系统使用。稳压芯片选用LM2940-5.0、LM1117-1.3两款低压差线性稳压芯片(LDO),两者的最大输出电流分别为1000mA、800mA,不俗的输出电流能够满足小车的正常工作,并且还能给后续的扩展预留了电流余量。另外,LM2940-5.0、LM1117-1.3两款LDO芯片工作效率高、输出电压纹波比DC/DC芯片要小得多,适合单片机供电。整个系统需要3种电源:7.2V电源,为驱动电机供电。5V电源,为单片机及相关外设供电。1.3V电源,为陀螺仪及加速度计供电。5V电源由LM2940提供,LM2940是一款具有低输出纹波的线性低压差3端稳压器。LM117用作1.3V电源。为了给传感器MPU-6050提供稳定干净的电源,XC6206特意只给MPU-6050供电。稳压模块如图1.5所示。图1.5稳压模块1.3六轴传感器电路陀螺仪、加速度计都是惯性测量元件的一种。而MPU-6050传感器的内部同时集成了陀螺仪和加速度传感器两种惯性测量元件[18]。MPU-6050是InvenSense推出的全球首款集成6轴运动处理模块,相比多组件解决方案,MPU-6050消除和安装陀螺仪和加速器组合时的错位问题,有效减少空间。MPU-6050集成了3轴陀螺仪和3轴加速度计,包括可用于连接外部磁传感器的IIC从接口,并使用嵌入式数字运动处理器硬件加速引擎。9轴融合计算的完整数据最终从IIC主界面输出到应用程序。DMP可以使用InvenSense提供的运动处理数据库轻松实现姿势计算,降低操作系统的运动处理操作难度并减少开发挑战。图1.6MPU-6050的内部框图其中SCL和SDA接MCU的I2C主接口,MCU通过这个IIC接口控制MPU-6050,另外还有一个IIC从接口:AUX_CL和AUX_DA,这个接口连接外部从设备可以使用用于可组成9轴传感器的磁传感器等设备。VLOGIC是IO口上的电压,这个引脚可以降低到1.8v。您通常可以直接连接到VDD。AD0是从IIC接口(连接到MCU)的地址控制引脚,它控制IIC地址的最低有效位。MPU6050的IIC地址接GND:0X68,接VDD时为0X69MPU-6050模块中AD0默认接GND,所以此时的IIC地址为MPU-6050为0X68(不包括最低有效位)。图1.7显示了MPU6050的传感器原理图。图1.7MPU6050电路图1.5电机驱动电路根据系统设计需求,由于小车需要两组电机,因此也需要两路H桥驱动电路。而我们使用的TTM1直流减速电机扭矩和速度都适中,堵转电流最大不超过3A。于是,我们选用电机驱动芯片TB6612FNG组成了电机驱动电路,一块TB6612FNG驱动芯片内置了两组H桥电路。TB6612FNG最大输出电流可达1.2A,因此不必担心因堵转或调试不当引起的烧电机或烧驱动。脉宽调制方式产生改变占空比的PWM信号,通过快速切换驱动器的输出状态来实现对电机的速度控制。PWM占空比的大小决定了平均输出电压,它决定了电机的速度。表1.1显示了TB6612FNG的逻辑真值表。如果设备正在工作,则STBY引脚设置为高电平。IN1和IN2不变。可以通过调整PWM引脚的输入信号来控制电机的单向速度。PWM引脚设置为高电平,IN1和IN2输入被调整。该信号可用于控制电机的双向速度。表中通道A和B的控制逻辑相同。电机驱动模块电路图如图1.8所示。表1.1TB6612FNG逻辑真值表输入输出IN1IN2PWMSTBY0102模式状态HHH/LHLL制动LHHHLH反转LHLHLL制动HLHHHL正转HLLHLL制动LLHHOFF停止H/LH/LH/LLOFF待机图1.8TB6612FNG模块电路图1.6TTM1直流减速电机直流电动机的基本构造包括电枢、场磁铁、集电环、电刷。电枢是软铁芯,可以绕多个线圈缠绕并绕轴旋转,而场磁体是产生磁场的强大的永磁体或电磁体。集电环是具有两个半圆形线圈的集电环,大约连接到线圈的两端,可用于在线圈旋转时直流电。流过线圈的电流方向每转半圈就会改变一次。电刷通常由碳制成,集电环在固定位置接触电刷以连接电源。1.6.1直流电机原理如图1.9所示是一个简单的直流电机。当线圈通电时,转子周围会产生磁场,转子的左侧与左侧的磁铁分离并被吸引到右侧,从而引起旋转。转子由于惯性而不断旋转,当转子移动到水平位置时,电流转换器反转线圈的电流方向,同时反转线圈产生的磁场,所以这个过程可重复。图1.9直流电机工作原理减速机又称齿轮箱,常用于低速、大扭矩的传动装置,将高速旋转(每分钟几千转)的原动机的动力通过齿轮传递到输出减速机输入轴采用齿数较少的大齿轮,以达到减速的目的。传动比是大齿轮和小齿轮的齿数之比。减速机是一种比较精密的机械,它匹配执行器之间的速度并传递扭矩,用于减速和增加扭矩的目的。减速机的种类很多,按转动和结构特点分,减速机的种类有齿轮减速机、蜗轮蜗杆减速机、蜗轮减速机和齿轮蜗轮蜗杆减速机、行星齿轮减速机、摆线减速机、谐波齿轮减速机等等。齿轮减速器体积小,传递扭矩大,但有一定的回程间隙。如图1.10所示。图1.10齿轮减速器蜗杆减速机具有反向自锁功能,可以提高减速比,但如图1.11所示,一般尺寸较大,传动效率低,精度差。图1.11蜗杆减速器行星减速机的主要特点是结构紧凑、回程间隙小、精度高、寿命长、额定输出扭矩大,如图1.12所示,但价格昂贵。图1.12行星减速器本次设计选用的TTM1直流减速电机是搭配齿轮减速器的电机,如图1.13所示。图1.13TTM1直流减速电机1.6.2编码器介绍编码器是一种旋转传感器,可将角位移或角速度转换为一系列电子数字脉冲。可以通过编码器测量较低的位移或速度信息。编码器类型根据输出数据的类型分为增量式编码器和绝对式编码器。根据编码器的检测原理,可分为光学式、磁式、电感式和电容式。常见的有光电编码器(光学)和霍尔编码器(磁性)。光电编码器的采集精度远高于霍尔编码器,但价格较贵[18]。编码器行数是转一圈后A(B)输出的脉冲数,下图中的AB是输出脉冲信号线,一圈后脉冲数相同,但是相位差为90°。线数越高,编码器所能反映的位置精度越高。相位差是90°。通过判断哪个信号在前,哪个信号在后,就可以知道电机是在向前旋转还是向后旋。脉冲信号线如图1.14所示。图1.14脉冲信号线本设计使用的电机为TTM1直流减速电机,它的尾部加装了霍尔编码器,直接输出AB相脉冲,电机接口如图1.15所示。图1.15电机接口1.7超声波避障模块HC-SR04超声波遥测模块可提供约2-400cm的非接触式距离检测功能,遥测精度可达3mm。该模块包括超声波发射器、接收器和控制电路,就像智能汽车和转向,或者在某些项目中经常使用。智能小车遥测可以提前检测到障碍物,使智能小车及时转弯避开障碍物。实物图如图1.16所示,电路图如图1.17所示。HC-SR04是单片机应用中常用的超声波测距模块。超声波发射器向一定方向发射超声波,并在传输过程中开始计时。超声波在空气中传播并在途中遇到障碍物时立即返回。超声波接收器接收到反射波后立即停止计时。声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离s,即:s=340m/s∗t/2。这就是时间差测距法。HC-SR04超声波测距模块测量距离:2cm~450cm。图1.16HC-SR04超声波测距模块图1.17超声波测距模块电路图1.8OLED显示OLED,即有机发光二极管(OrganicLight-EmittingDiode),又称为有机电激光显示(OrganicElectroluminesenceDisplay,OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。OLED显示技术具有自发光特性。它使用非常薄的有机材料涂层和玻璃基板。当电流通过时,这些有机材料会发光,OLED显示屏视角宽,可以省电。OLED显示内容如下:行数显示参数表示内容1Mode:Complementary互补滤波模式2Distance超声波检测到前方障碍的距离3EncoLeft左电机速度4EncoRight右电机速度5Angle车体倾斜角度6Battery电池电压表1.2OLED显示内容由由于所需显示内容不多,我们使用0.96寸OLED,由SSD1306OLED驱动芯片进行驱动点亮,使用SPI接口进行通信。图1.SEQ图\*ARABIC11OLED显示模块电路图图1.SEQ图\*ARABIC12OLED实物图1.9小结综上设计,系统必须用到的IO包括:(1)I2C数字接口,读取MPU-6050数据;(2)PWM接口,控制左右两个电极双方向运行。由于采用单极性PWM驱动,需要四路PWM接口控制电机转向;(3)电机PWM驱动接口:控制电机转速;(4)串口下载UART接口2路,用于程序下载和调试接口;(5)Timer正交解码接口:读取编码器的脉冲数据:用于编码器测速;(6)蓝牙通讯UART接口除了以上确定使用的引脚,其它没有占用的引脚全部预留出来,并且在底板上用两排排针引出,用于连接其他模块。综上所述,平衡小车由STM32F103C8T6主芯片,由TB6612FNG电机驱动芯片驱动的TTM1直流减速电机,MPU-6050姿态传感器,以及HC-SR04超声波测距和0.96寸OLED等外设构成。2系统软件设计2.1软件功能与框架本文的前几章介绍了两轮自平衡小车的硬件电路设计,平衡原理,控制策略,姿态检测系统。本章将介绍两轮自平衡小车的软件设计,软件设计是两轮自平衡小车设计中的关键。软件的主要功能包括有:(1)各传感器信号的采集、处理;(2)电机PWM输出;(3)车模运行控制:直立控制、速度控制、方向控制;(4)车模运行流程控制:程序初始化、车模启动与结束、车模状态监控;(5)车模信息显示与参数设定:状态显示、上位机监控、参数设定等。上述功能可以分成两大类:第一类包括1-3功能,它们属于需要精确时间周期执行,因此可以在一个周期定时中断里完成。第二类包括4-5功能。它的执行不需要精确的时间周期。可以放在程序的主程序中完成。这两类任务之间可以通过全局变量实现相互的通讯[19][20]。根据系统要求,需要完成的总体软件设计包括:单片机初始化,姿态信息采集,卡尔曼滤波,速度检测,直流电机PID控制算法等。主程序框架如图2.1所示。图2.1主程序框架图程序上电并执行后,单片机被初始化。初始化工作包括两部分,第一部分是初始化应用于单片机的模块。第二部分是应用程序初始化,即对小车模型控制程序中使用的变量的值进行初始化。初始化完成后,首先进入车身竖立检测程序。该程序通过读取加速度计的值来判断机体是否处于可控角度范围的状态。一旦在可控范围内,车身直立控制、速度控制和蓝牙遥控被启动。程序不断地将监控数据送入主循环,并通过串口发送给上位机进行监控。同时检查车模是否掉落。跌倒判断可以通过汽车模型的倾斜角度是否超过一定范围来确定。车体脱落后,停止车体的操作,包括车体直立控制、速度控制和转向控制,然后继续进行车体直立判断过程。垂直车身控制、速度控制和蓝牙遥控都是在中断程序中完成的。全局标志变量用于确定是否执行这些闭环检查。主程序如下:intmain(void){ BspInit(); //初始化BSP PIDInit(); //初始化PID CarUpstandInit(); //初始化系统参数 SysTick_Init(); //初始化定时器 while(1) { SecTask(); //秒级任务 if(SoftTimer[1]==0) {//每隔20ms执行一次 SoftTimer[1]=20; ResponseIMU(); //上报姿态数据 DebugService(); //上位机 Parse(Uart3Buffer);//APP } if(SoftTimer[2]==0) { SoftTimer[2]=20; ShowHomePage();//oled主页刷新 Read_Distane();//触发一次超声波测距,并读取上次测量结果 if(g_CarRunningMode==ULTRA_FOLLOW_MODE){ if(IsUltraOK()) UltraControl(0); //超声波跟随模式 } elseif(g_CarRunningMode==ULTRA_AVOID_MODE){ if(IsUltraOK()) UltraControl(1); //超声波避障模式 } } } }2.2初始化程序上电并执行后,单片机被初始化。初始化工作包括两部分,第一部分是初始化应用于单片机的模块。第二部分是应用程序初始化,即对小车模型控制程序中使用的变量的值进行初始化。其中单片机的初始化,包括GPIO初始化、PWM初始化、定时器初始化、串口初始化等。图2.2上电初始化初始化代码主要是硬件底层驱动和系统参数的初始化。下面我们来讲解一下功能函数的具体作用。BspInit主要是硬件底层驱动的初始化,包括STM32外设的初始化、外围模块比如MPU-6050的初始化。/*bsp初始化*/voidBspInit(void){ SWDConfig(); ADCInit(); //ADC初始化USART1Init(); //串口1初始化-底板预留下载及调试用 USART3Init(0); //串口3初始化-用于蓝牙TIM1_Cap_Init(); //TIM1初始化-用于超声波跟随功能 TIM3_PWM_Init(); //PWM初始化 TIM2_Encoder_Init(); //TIM2正交解码初始化-用于测速 TIM4_Encoder_Init(); //TIM4正交解码初始化-用于测速 i2cInit(); //I2C初始化 InfraredIOInit(); //红外IO口初始化 OLED_Init(); //OLED初始化 delay_ms(20); MPU6050_Init(); //MPU6050初始化 LEDInit(); //指示灯初始化 UltraSelfCheck(); // 超声模块开机自检 delay_ms(500); //延时0.5s,等待蓝牙模块启动 Uart3SendStr("AT+BAUD8\r\n");//配置蓝牙串口波特率为115200 delay_ms(20); Uart3SendStr("AT+RESET\r\n");//蓝牙复位 USART3Init(1); //更改UART3波特率为115200 delay_ms(20);//延时 SetBlueToothName(); //配置蓝牙模块名称}2.3中断服务函数控制程序中最关键的部分,就是200Hz(5ms)中断服务函数。车模的直立控制、速度控制以及方向控制都是在中断服务函数中完成。通过全局标志变量确定是否进行这些闭环控制。因为大部分定时器都另有他用,于是使用STM32的滴答定时器,产生1毫秒定时中断。中断服务程序的任务被均匀分配在0~4的中断片段中,所有中断片段全部执行一遍需要5ms。因此每个中断片段中的任务执行的频率为200Hz,即5ms。将任务分配到不同的中断片段中,一方面防止这些任务累积执行时间超过1ms,扰乱1ms中断的时序,同时也考虑到这些任务之间的时间先后顺序。当然,也可以将所有的中断任务都合并在一起,使用一个5ms的定时中断来完成。这些任务包括:(1)电机测速脉冲计数器读取与清除。累积电机转动角度。累积电机速度,为后面速度控制提供平均数。(2)读取传感器的加速度数据、陀螺仪数据。(3)直立控制过程,包括姿态角度计算、直立控制计算。(4)速度控制过程,在这个1ms时间片段中,又进行0~5计数。在其中第0片段中,进行速度PID调节。因此,速度调节的周期为5×5=25毫秒,也就是每秒钟调节40次。(5)方向控制过程,根据APP或上位机控制指令,计算偏差数值,然后计算电机差速控制输出。(6)电机使能与失能控制,包括提起识别(悬空检测)、着陆检测、跌倒检测等。(7)电机输出,融合直立控制、速度控制、方向控制叠加值,最终赋予电机输出。以上每个中断任务都占用不同的时间,设定一个1ms定时中断,让这些任务分配在各自的1ms内执行,划分了0~4共5个1ms时间片段,全部任务执行一遍需要5ms。在程序调试时,需要保证它们都不会超过1ms。每个任务具体执行时间可以通过示波器测量单片机IO引脚电平翻转得到,设定执行某任务前单片机的指定IO引脚为低电平,执行完任务后,引脚电平翻转为高电平。图2.3中断流程图执行完初始化,代码会由于滴答定时器SysTick进入中断而转跳到SysTick定时中断服务函数中执行。中断服务函数:voidSysTick_Handler(void){ SoftTimerCountDown(); //软定时器 g_u8MainEventCount++; g_u8SpeedControlPeriod++; SpeedControlOutput(); //速度环控制输出函数,每1ms执行一次 if(g_u8MainEventCount>=5) { g_u8MainEventCount=0; GetMotorPulse(); //捕获电机脉冲(速度)函数,每5ms执行一次 } elseif(g_u8MainEventCount==1) { MPU6050_Pose(); //读取MPU6050数据函数,每5ms执行一次 AngleCalculate(); //角度环计算函数,每5ms执行一次 } elseif(g_u8MainEventCount==2) { AngleControl(); //角度环控制函数,每5ms执行一次 } elseif(g_u8MainEventCount==3) { g_u8SpeedControlCount++; if(g_u8SpeedControlCount>=5)//25ms { SpeedControl();//车模速度控制函数,每25ms调用一次 g_u8SpeedControlCount=0; g_u8SpeedControlPeriod=0; } } elseif(g_u8MainEventCount==4) { MotorManage(); //电机使能/失能控制函数,每5ms执行一次 MotorOutput(); //电机输出函数,每5ms执行一次 }}代码中SoftTimerCountDown是软定时器在SysTick中断中得到精确的递减。g_u8MainEventCount是主事件计数变量。需要在中断中运行的代码,在1ms内运行不完,所以需要主事件计数变量将代码合理分段,放到5个1ms内运行。g_u8SpeedControlPeriod是速度环的控制周期计数变量。在5ms内执行GetMotorPulse、MPU6050_Pose、AngleCalculate、AngleControl、MotorManage、MotorOutput,而速度环是25ms运行一次。在中断退出之后,程序继续回到主程序往下执行,完成蓝牙通信和监控调试等工作。自平衡两轮车使用200Hz的刷新率来感知和调整自身状况。对于数字系统,刷新率越高,控制越精确。但是主程序的刷新率也要结合MCU的计算速度(程序执行效率)合理制定,否则会导致姿态检测混乱等问题。2.4主要控制函数(1)输入信号采集函数输入信号采集函数读取MPU-6050的三轴加速度传感器数据,和倾倒轴对应的陀螺仪数据(此处为陀螺仪Y轴)。voidSampleInputVoltage(void){/*此处不作任何滤波处理*/g_fGyro_y=DataSynthesis(GYRO_YOUT_H);//陀螺仪Y轴g_fAccel_x=DataSynthesis(ACCEL_XOUT_H);//加速度X轴g_fAccel_y=DataSynthesis(ACCEL_YOUT_H);//加速度Y轴g_fAccel_z=DataSynthesis(ACCEL_ZOUT_H);//加速度Z轴}(2)捕获电机脉冲函数捕获电机脉冲函数首先读出T3T4寄存器数据,得到速度原始值,然后通过判断前一次PWM输出值来判断电机的正反转状态,接着对80毫秒内的脉冲进行累加。voidGetMotorPulse(void){/*读出T3T4寄存器数据,得到速度原始值*/g_iRightMotorPulse=(T4H<<8)+T4L;g_iLeftMotorPulse=(T3H<<8)+T3L;T4T3M&=0x77;T4H=T4L=0;T3H=T3L=0;T4T3M|=0xCC;/*通过前一次PWM输出判断电机正反转*/if(!MOTOR_LEFT_SPEED_POSITIVE)g_iLeftMotorPulse=-g_iLeftMotorPulse;if(!MOTOR_RIGHT_SPEED_POSITIVE)g_iRightMotorPulse=-g_iRightMotorPulse;/*捕获电机脉冲函数每8毫秒执行一次,速度环控制函数80毫秒执行一次,因此先把脉冲累积起来*/g_iLeftMotorPulseSigma+=g_iLeftMotorPulse;g_iRightMotorPulseSigma+=g_iRightMotorPulse;}(3)直立计算函数直立计算函数用读取到的加速度传感器和陀螺仪数值除于各自的灵敏度,然后通过三角函数计算车模的倾角,再经过卡尔曼滤波得到精准的实时倾角。当MPU-6050内部加速度传感器测量范围是±2g时,测量精度为16384LSB/g,陀螺仪测量范围是±2000°/s时,灵敏度为16.4gLSBs/°c。voidAngleCalculate(void){g_fAccel_x=g_fAccel_x/16384;g_fAccel_y=g_fAccel_y/16384;g_fAccel_z=g_fAccel_z/16384;g_fGyro_y=g_fGyro_y/16.4;g_fGyro_y*=-1;g_fGravityAngle=atan(g_fAccel_x/sqrt(g_fAccel_y*g_fAccel_y+g_fAccel_z*g_fAccel_z))*57.2957

温馨提示

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

评论

0/150

提交评论