




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电子与信息工程学院项 目 设 计 报 告项目名称双轮自平衡小车设计 专 业电子信息科学与技术 目录一 自平衡小车的总体方案设计31、自平衡小车的设计方案32、自平衡小车的总体框图3二 系统的具体设计与实现41、单片机控制模块42、陀螺仪加速度计模块43、光码盘测速模块64、稳压模块75、电机驱动模块86、lcd1602显示模块11三 软件系统设计161、设计思想16(1)pid技术16(2)应用现状16(3)pid调节规律17(4)极点配置18(5)极点配置条件18(6)极点配置控制器212、程序流程图223、程序代码23摘 要随着科技进步,生活水平的提高,人们追求智能与舒适的愿望也日益强烈。从而催生了许多智能化的产品。如智能电视、智能小车等。如何实现小车的小车的自动快捷驾驶,也成为人们心中的向往与疑问,基于这种趋势与需求,着眼于实际情况。本文介绍了基于stc90c51单片机的自平衡小车系统的设计。系统基于陀螺仪等传感器,利用pid平衡算法,对小车的速度倾斜角度平衡状态来进行检测,并通过单片机来控制电机来实现双轮小车自如平衡地运动。从而实现小车智能自主控制的目的。关键词: stc90c51 自平衡 pid算法一 自平衡小车的总体方案设计1、自平衡小车的设计方案该自平衡小车,采用stc90c51单片机和各种传感器的组合,构成了自平衡小车系统。其系统主要由以下几个部分组成:单片机控制系统、陀螺仪加速度检测模块、光码盘测速模块、稳压模块、电机驱动模块、lcd1602显示模块组成。本设计的自平衡小车工作原理:给小车通电,平衡放在地上,当小车开始倾斜时,陀螺仪及时地采集的小车倾斜角度数据传给单片机,而加速度计将车子倾斜的瞬时加速度采集后也传给单片机,同时,光码测速仪也将车子的实时速度采集后传给单片机。单片机系统收集到以上三组数据,对数据进行量化处理后,在pid平衡算法的控制下,控制电机及时地做出前进或后退或加速或减速的反应,使车子在一个小角度范围内做平衡地来回摆动,以保持车子的不倒。2、自平衡小车的总体框图自平衡小车主要由以下模块组成:单片机控制系统、陀螺仪加速度检测模块、光码盘测速模块、稳压模块、电机驱动模块、lcd1602显示模块,以下是自平衡小车系统方框图。单片机控制模块陀螺仪加速度模块电机驱动模块光码盘测速模块lcd1602显示模块稳压模块(电源) 自平衡小车系统框图二 系统的具体设计与实现1、单片机控制模块单片机最小系统原理图如下: 单片机最小系统单片机最小系统由复位电路以及晶振电路组成,它是保证单片机能正常工作的最基本条件,在此不作过多介绍。2、陀螺仪加速度计模块本设计中所采用的陀螺仪加速度设模块为mpu6050,之所以选择这个模块,是因为其有以下优点:()集角度测量与加速度测量于一体(2)其那同时测量三轴上的角度与加速度测量(3)其输出为数字信号,便于处理于存储与传输(4)测量范围大,反应快。以下是mpu6050相关资料mpu-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。mpu-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个i2c端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(dmp: digital motion processor)硬件加速引擎,由主要i2c端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术invensense的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的api。mpu-6000的角速度全格感测范围为250、500、1000与2000/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为2g、4g8g与16g。产品传输可透过最高至400khz的i2c或最高达20mhz的spi。mpu-6000可在不同电压下工作,vdd供电电压介为2.5v5%、3.0v5%或3.3v5%,逻辑接口vvdio供电为1.8v 5%。mpu-6000的包装尺寸4x4x0.9mm(qfn),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有1%变动的振荡器。 引脚图 实物图3、光码盘测速模块此模块有以下优点:(1) 测速精度高,反应快,因为其一圈有高达60个栅格(2)能测正反转此模块详细资料如下:对管厂家:美国惠普hp原装供电电压:5v接线方式:红5v黑gnd输出信号:5vp-p两相信号输出(见下图)。两根信号线,一根黄色的一根蓝色的(由于生产批次不同,有时候信号线可能为绿色,不影响使用),黄色和蓝色分别是2个ttl电平(可以直接接单片机)信号(注:测正反转就是靠这两个电平区分是正转还是反转)(设ab为信号线)a先有脉冲,证明是正转b先有脉冲,证明是反转重要说明:长时间挡住或者不挡均没有输出,作为相位检测,只有在对射的上升沿和下降沿才会有波形输出,所以转动码盘或者用不透明物体来回切换状态的时候才会有方波输出,高速状态下,类似正弦波或者锯齿波,详见下面视频演示。万用表测试一直表现为0.1v左右,是无效的!测试请用示波器或者单片机的采集口。 测速原理示意图 测速原理演示图4、稳压模块之所以要设计稳压模块,是因为平衡小车不同模块所需电压值不同,比如电机的工作电压在9v,而单片机控制系统、lcd1602显示模块及测速模块工作电压在5v;但同时陀螺仪加速度模块工作电压却在3.3v,因此有必要设计一稳压模块,能够同时稳定地提供这三组电压值。稳压模块的原理图如下: 稳压模块原理图其中用到两个稳压芯片lm7805及lm1117,lm7805能够将7v到12v之间的输入电压转化为5v的输出输出电压,同时lm117以lm7805v的输出电压为输入电压,将其转化为3.3v输出以供陀螺仪加速度模块使用。图中,led为测试电路是否正常,正常时灯亮;反之,灯灭。d1为普通二极管,在lm7805的输入与输出之间起滤波作用。图中电容也均为滤波作用。使用时,两稳压芯片均要用散热片,否则会导致温度过高而烧坏。相应的pcb布线图如下: 稳压模块pcb图5、电机驱动模块由于电机工作电压与单片机的不同,且单片机本身带负载能力不强,电机工作需要较大电流等因素,无法用单片机直接驱动电机运转,因此需要电机驱动模块来驱动电机。在此设计中所选用的电机驱动为l298n模块。它具有以下优点:(1)负载能力强(2)能实现高电压强电流的输出(3)控制简单方便具体资料如下:l298n是st公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46v;输出电流大,瞬间峰值电流可达3a,持续工作电流为2a;额定功率25w。内含两个h桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用l298n芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。简要说明:一、 尺寸:80mmx45mm二、 主要芯片:l298n、光电耦合器三、 工作电压:控制信号直流5v;电机电压直流3v46v(建议使用36伏以下)四、 最大工作电流:2.5a五、 额定功率:25w特点:1、具有信号指示。 2、转速可调 3、抗干扰能力强 4、具有过电压和过电流保护 5、可单独控制两台直流电机 6、可单独控制一台步进电机 7、pwm脉宽平滑调速 8、可实现正反转 9、采用光电隔离使用直流/步进两用驱动器可以驱动两台直流电机。分别为m1和m2。引脚a,b可用于输入pwm脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5v,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端in1接高电平输入端in2接低电平,电机m1正转。(如果信号端in1接低电平, in2接高电平,电机m1反转。)控制另一台电机是同样的方式,输入信号端in3接高电平,输入端in4接低电平,电机m2正转。(反之则反转),pwm信号端a控制m1调速,pwm信号端b控制m2调速。可参考下图表:电机旋转方式控制端in1控制端in2控制端in3控制端in4输入pwm信号改变脉宽可调速调速端a调速端bm1正转高低/高/反转低高/高/停止低低/高/m2正转/高低/高反转/低高/高停止低低/高其实物图如下: l298n电机驱动模块实物图6、lcd1602显示模块此模块主要用来显示自平衡小车的各种参数,如倾斜角、瞬时速度、瞬时加速度等。同时也可以观察可调参数,这些参数可以用按键输入,通过lcd1602显示出来,方便自平衡小车参数的观察与更改,达到高效调速的目的。其实物图如下: lcd1602实物图其与单片机系统组成的原理图如下: 单片机控制系统及1602显示模块相应的pcb布线图如下:其详细资料如下:1602lcd 分为带背光和不带背光两种,基控制器大部分为 hd44780,带背光的比不带背光的厚,是否带背光在应用中并无差别1602lcd 主要技术参数: 显示容量:162 个字符 芯片工作电压:4.55.5v 工作电流:2.0ma(5.0v) 模块最佳工作电压:5.0v 字符尺寸:2.954.35(wh)mm 引脚功能说明 1602lcd 采用标准的 14脚(无背光)或 16脚(带背光)接口,各引脚接口说明如表 10-13所示: 编号 符号 引脚说明 编号 符号 引脚说明 1 vss 电源地 9 d2 数据 2 vdd 电源正极 10 d3 数据 3 vl 液晶显示偏压 11 d4 数据 4 rs 数据/命令选择 12 d5 数据 5 r/w 读/写选择 13 d6 数据 6 e 使能信号 14 d7 数据 7 d0 数据 15 bla 背光源正极 8 d1 数据 16 blk 背光源负极 表 10-13:引脚接口说明表 第 1 脚:vss 为地电源。 第 2 脚:vdd接 5v正电源。 第 3 脚:vl为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10k 的电位器调整对比度。 第 4 脚:rs 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:r/w 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 rs和 r/w共同为低电平时可以写入指令或者显示地址,当 rs 为低电平 r/w 为高电平时可以读忙信号,当 rs 为高电平 r/w为低电平时可以写入数据。 第 6 脚:e端为使能端,当 e 端由高电平跳变成低电平时,液晶模块执行命令。 第 714脚:d0d7为 8 位双向数据线。 第 15脚:背光源正极。 第 16脚:背光源负极。lcd寄存器的选择er/wrs功能说明100写入命令寄存器101写入数据寄存器110读取忙碌标志及ram地址111读取ram数据0x不动作lcd指令表指令功能控制线数据线rsr/wd7d6d5d4d3d2d1d0清除屏幕0000000001清除屏幕,并把光标移至左上角光标回到原点000000001x光标移至左上角,显示内容不变设定进入模式00000001i/dsi/d=1:地址递增,i/d=0:地址递减 s=1:开启显示屏,s=0:关闭显示屏显示器开关0000001dcbd=1:开启显示幕 c=1:开启光标 b=1:光标所在位置的字符闪烁移位方式000001s/cr/lxxs/c=0、r/l=0:光标左移;s/c=0、r/l=1:光标右移 s/c=1、r/l=0:字符和光标左移;s/c=1、r/l=1:字符和光标右移功能设定00001dlnfxxdl=1:数据长度为8位,dl=0:数据长度为4位 n=1:双列字,n=0:单列字;f=1:5x10字形,f=0:5x7字形cg ram地址设定0001cg ram地址将所要操作的cg ram地址放入地址计数器dd ram地址设定001dd ram地址将所要操作的dd ram地址放入地址计数器忙碌标志位bf01bf地址计数器内容读取地址计数器,并查询lcm是否忙碌,bf表示lcm忙碌写入数据10写入数据将数据写入cg ram或dd ram读取数据11读取数据读取cg ram或dd ram的数据图 10-57 1602lcd 内部显示地址例如第二行第一个字符的地址是 40h,那么是否直接写入 40h 就可以将光标定位在第二行,第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 d7恒定为高电平 1 所以实际写入的数据应该是 01000000b(40h)+10000000b(80h)=11000000b(c0h)。 在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。 1602 液晶模块内部的字符发生存储器(cgrom)已经存储了 160 个不同的点阵字符图形,如图 10-58 所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是 01000001b (41h),显示时模块把地址 41h中的点阵字符图形显示出来,我们就能看到字母“a”实物图如下:三 软件系统设计1、设计思想其主要是通过pid技术对小车的状态进行实时地跟踪及调整。现对pid算法作些介绍。(1)pid技术控制技术是运动控制的核心,各种先进控制技术的研究不断推动着运动控制的发展,比如自适应控制技术和以神经网络和模糊控制为代表的智能控制技术,但在实际生产实践中应用最普遍的还是各种以pid为代表的基本控制技术按照偏差的比例、积分和微分进行控制的调节器,简称为pd调节器,是连续系统中技术成熟且应用广泛的一种调节器。本节将对系统用到的pid控制技术做相应的介绍和研究,传感器将车体的角度和运动速度等信息传递给系统控制器,控制器经分析处理运用pid控制技术,将目标命令传递给电机驱动器来完成系统的闭环控制(2)应用现状在电机伺服系统的控制中,经典的pid控制具有其结构简单、鲁棒性强以及现场对pro的广泛使用积累了丰富的经验等优点,在无刷直流电动机的控制方面一直占有很重要的地位。pid的引入保证了其系统响应的快速性,稳定了闭环控制器,补偿了由逆变器引起的控制误差2526。pid控制器就是将偏差的比例(proportional)、积分(integral)和微分(differential)通过线性组合构成控制量,用这一控制量对被控对象进行控制。 pid算法是目前工业过程控制中应用最广泛的控制算法。pid算法应用如此广泛,是因为它具有如下优点:(1)算法较为简单,易于实现;(2)基于线性控制理论,具备许多成熟的稳定性分析方法,有较高的可靠性;(3)可以在很宽的操作条件内保持较好的鲁棒性,对于控制对象模型参数小范变化不敏感;(4)不要求了解控制对象的精确数学模型。利用许多成熟的参数整定方法,可以根据控制对象的实际响应曲线来计算pid控制器的参数;(5)允许工程技术人员以一种简单直接的方式来调节控制系统,以达到希望得到的控制性能,如上升时间、最大超调量和稳态误差等。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用pid控制技术最为方便。即当我们不完全了解一个系统和被控对象,或不能通过有效的测量手段来获得系统参数时,最适合用pid控制技术。(3)pid调节规律pid控制分为两大类,一个是模拟pid控制,一个是数字pm控制。在模拟控制系统中,pid是最常用的控制方法。图4.7所示为模拟pid控制系统原理框图。比例系数kp积分系数ki微分系数kd被控对象r(t)c(t) + _ + + u(t) y(t) + 图4.7模拟pid控制系统原理框图计算机控制系统中,使用的是数字pid控制器。将连续的模拟量进行离散化处理,则可得(4-20)在数字pid控制中,采样周期相对于系统的时间常数来说一般是很短。因此其参数可按模拟pid控制器中的方法来选择。由于要保持动态的平衡,则小车的倾角在一定的范围内要求可控。故本文选择系统的小车的倾角作为输出量,利用pid技术对其进行分析。由上述理论分析可以看出:其比例、积分、微分三者是彼此影响;同时要使其系统保持稳定,pid三参数必须满足上述关系;为了让系统能够实现其动态的平衡,需要通过反复试凑的方法来解决,而且整定的参数多导致反复试凑的次数极大的增加,控制器的参数较难选取27。加之系统经过线性化处理,即使所选参数满足上述的关系式,仍需要根据系统的实际模型进行调整,这大大增加了调试的难度。鉴于此我们考虑采用其极点配置的方法来考察分析其系统的稳定性。() 极点配置所谓极点配置就是指利用状态反馈或输出反馈使闭环系统的极点位于所希望的极点位置。由于系统的性能和它的极点位置密切相关,因此极点配置问题在系统中是很重要的。控制系统的各种特性及其各种品质指标很大程度上由闭环系统的零点和极点位置决定。零点和极点在复数平面中的分布状况决定了相应表达式中该函数前的系数大小。一组零点和极点的分布就对应了一个系统的响应。极点配置的问题,就是通过选择反馈增益矩阵,将闭环系统的极点恰好配置在根平面上期望的位置,以获得所希望的动态性能。极点配置决定了控制系统的动态性能和稳定性28。对于系统的极点配置,需要解决两个问题:一是建立极点可配置的条件;二是确定其反馈增益矩阵。() 极点配置条件状态能控性、状态能观性及其稳定性都是控制系统的重要属性。要设计相应稳定的系统,必须先考察其能控性和能观性。状态能控性问题只考察系统在u(t)作用下状态的转移情况,与输出量y(t)无关。对于线性连续定常系统,如果存在一个分段连续的输入u(t),能在有限时间区间t0,tf内,使系统由某一初始状态x(t0)转移到指定的任一终端状态x(tf),则该状态就是能控的。若系统的所有状态都是能控的,则称此系统是状态完全能控。本文小车参数参考lego公司提供的主要机器人组建参数如下表:小车的车轮质量(mw)0.03kg小车的车轮半径(r)0.04m车轮的转动惯量(iw)车身的质量(mp)0.6kg车轮中心到机器人的质心的距离(l)0.072m车身转动惯量(ip)电机惯量(jm)电机的电阻(rm)6.69反电动势常量(ke)0.468v sec/rad电机转矩常量(km)0.317 nm/a该系统的能控性矩阵可表示为: (4-21)利用文献27中对系统能控性的判定定理,即线性非时变系统为完全能控系统的充分必要条件是能控判别矩阵满秩。即若rank(tc)=4,则系统能控。利用matlab仿真工具,调用其中函数为tc=ctrb(a,b)。其代码及结果如下所示。 a=0 1 0 0: 0 -56.5 16 0: 0 0 0 1: 0 -525 239.5 0 b=0: 483.2: 0: 44.9 ic=ctrb(a,b)% 求系统的能控判别矩阵ic = 1.0e+008 *0 0.0000 -0.0003 0.01540.0000 -0.0003 0.0154 -0.91250 0.0000 -0.0025 0.14340.0000 0.0025 0.1434 -8.7094 rank(tc)% 求矩阵的值,若此数值是4,则该系统完全可控ans = 4由上可以看出,其rank(tc)=4,这说明两轮自平衡小车系统是完全能控的,只有在此基础才可以设计控制器,实现平衡控制。状态能观性问题是指对于任意给定的输入u(t)在有限观测时间tft0,使得根据t0,tf期间的输出y(t)能唯一的确定系统在初始时刻的状态x(t0),则该状态x(t0)是能观测的。若系统的每一个状态都是能观的,则称此系统是状态完全能观。该系统状态可观性矩阵为:(4-22)线性非时变系统为完全能观系统的充分必要条件是能观判别矩阵满秩。即若rank(to)=4,则系统能观。同样利用matlab仿真工具,调用其中函数为to=obsv(a,c);其代码及结果如下所示。 a=0 1 0 0 : 0 -56.5 16 0: 0 0 0 1:0 -525 239.5 0: c=1 0 0 0 : 0 0 1 0: to =obsv (a,c)% 求系统能观判别矩阵to = 1.0e+004 *0.0001 0 0 0 0 0 0.0001 0 0 0.0001 0 0 0 0 0 0.0001 0 -0.0056 0.0016 0 0 -0.0525 0.0239 0 0 0.3192 -0.0904 0.0016 0 2.9663 -0.8400 0.0239 rank (to)% 求矩阵的值,若数值为4,则该系统完全可观ans = 4从上中可得出:其rank(to)=4,则该系统能观。在控制系统中,反馈控制信息是由系统的输出或者状态变量组合而成的。但是并非所有系统的状态变量在物理上都能测得,于是能否通过对输出的测量获得全部的状态变量的信息,便是系统的能观测问题。此时系统能观,可以设计控制器对那些不能测量的量进行观测,观测系统变动对它们的影响。由上述分析可得该系统能控且能观,满足极点配置的条件,因此可以利用状态反馈或输出反馈来配置该系统的闭环极点。() 极点配置控制器极点配置的问题,就是通过选择反馈增益矩阵,将闭环系统的极点恰好配置在根平面上期望的位置,以获得所希望的动态性能。极点配置决定了控制系统的动态性能和系统的稳定性。本文通过状态反馈来实现极点配置。系统采用状态反馈对系统(abc)任意配置极点的充要条件是系统能控。而第4.5.1节已经证明该系统满足其条件,因此可以利用状态反馈法来任意配置系统的极点。对于系统(组4-2)引入状态反馈,假定考虑进入受控系统的信号为u=v-kx且d=0的情况,其中v为系统的外部参考输入信号,则可将系统的闭环状态方程写成(组4-3)。由于稳定是控制系统能够运行的前提,因此选择调节时间和超调量作为考察系统动态性能的指标。为了让系统满足如下的性能要求:超调量:调节时间:取=0.6、 ,由 可得该闭环系统的期望主导极点为:s1,2=-34i,同时要求另外的两个极点在主导极点左边且远离主导极点,一般取其距离主导极点的4到5倍左右,本设计选取-15和-20。这样高阶系统可近似为二阶系统来处理。所谓极点配置问题是指通过寻找适当的状态反馈增益矩阵k,使得闭环系统极点(即矩阵abk的特征值)位于预先给定位置的状态反馈控制器设计问题。其加入状态反馈后的系统结构图如图4.8所示。b(41)c(24)a(44)k(14)图4.8加入状态反馈后的系统结构图由线性时不变系统的稳定性分析可知,当v=0时,闭环系统方程 的稳定性由其变化系统矩阵(a-bk)的特征值决定,即其矩阵(a-bk)的所有特征值都具有负实部。而由经典控制理论知道,矩阵(a-bk)的特征值也将影响诸如衰减速度、振荡、超调等过渡过程特性。因此需要找到一个合适的矩阵k,使得矩阵(a-bk)的特征值位于复平面预先给定的特定位置,同时具有所期望的动态响应特性。、程序流程图3、程序代码#include #include /keil library #include /keil library#include typedef unsigned char uchar;typedef unsigned short ushort;typedef unsigned int uint;/*/ 定义51单片机端口/*#define dataport p2/lcd1602数据端口sbit p30=p30;sbit p31=p31;sbit p32=p32;sbit p33=p33;sbit p34=p34;sbit p35=p35;sbit key0=p10;sbit key1=p11;sbit key2=p12;sbit key3=p13;sbit p14=p14;sbit p15=p15;sbit p16=p16;sbit p17=p17;sbit p00=p00;sbit p01=p01;sbit p02=p02;sbit p03=p03;sbit p04=p04;sbit p05=p05;sbit p06=p06;sbit p07=p07;sbit scl=p36;/iic时钟引脚定义sbit sda=p37;/iic数据引脚定义sbit lcm_rs=p05;/lcd1602命令端口sbit lcm_rw=p06;/lcd1602命令端口sbit lcm_en=p07;/lcd1602命令端口 /*/ 定义mpu6050内部地址/*#definesmplrt_div0x19/陀螺仪采样率,典型值:0x07(125hz)#defineconfig0x1a/低通滤波频率,典型值:0x06(5hz)#definegyro_config0x1b/陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#defineaccel_config0x1c/加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2g,5hz)#defineaccel_xout_h0x3b#defineaccel_xout_l0x3c/#defineaccel_yout_h0x3d/#defineaccel_yout_l0x3e/#defineaccel_zout_h0x3f/#defineaccel_zout_l0x40#definetemp_out_h0x41#definetemp_out_l0x42#definegyro_xout_h0x43#definegyro_xout_l0x44/#definegyro_yout_h0x45/#definegyro_yout_l0x46/#definegyro_zout_h0x47/#definegyro_zout_l0x48#definepwr_mgmt_10x6b/电源管理,典型值:0x00(正常启用)#definewho_am_i0x75/iic地址寄存器(默认数值0x68,只读)#defineslaveaddress0xd0/iic写入时的地址字节数据,+1为读取/*/定义类型及变量/*uchar dis4;/显示数字(-511至512)的字符数组intdis_data;/变量/inttemperature,temp_h,temp_l;/温度及高低位数据/*/函数声明/*void delay(unsigned int k);/延时/lcd相关函数void initlcd();/初始化lcd1602void lcd_printf(uchar *s,int temp_data);void writedatalcm(uchar dataw);/lcd数据void writecommandlcm(uchar cmd,uchar attribc);/lcd指令void displayonechar(uchar x,uchar y,uchar ddata);/显示一个字符void displaylistchar(uchar x,uchar y,uchar *ddata,l);/显示字符串/mpu6050操作函数void initmpu6050();/初始化mpu6050void delay5us();void i2c_start();void i2c_stop();void i2c_sendack(bit ack);bit i2c_recvack();void i2c_sendbyte(uchar dat);uchar i2c_recvbyte();void i2c_readpage();void i2c_writepage();void display_accel_x();void display_accel_y();void display_accel_z();uchar single_readi2c(uchar reg_address);/读取i2c数据void single_writei2c(uchar reg_address,uchar reg_data);/向i2c写入数据/*/整数转字符串/*void lcd_printf(uchar *s,int temp_data)if(temp_data0)temp_data=-temp_data;*s=-;else *s= ;*+s =temp_data/100+0x30;temp_data=temp_data%100; /取余运算*+s =temp_data/10+0x30;temp_data=temp_data%10; /取余运算*+s =temp_data+0x30; /*/延时/*void delay(unsigned int k)unsigned int i,j;for(i=0;ik;i+)for(j=0;j3;j+);/*/lcd1602初始化/*void initlcd()writecommandlcm(0x38,1);writecommandlcm(0x08,1);writecommandlcm(0x01,1);writecommandlcm(0x06,1);writecommandlcm(0x0c,1);displayonechar(0,0,a);displayonechar(0,1,g);/*/lcd1602写允许/*void waitforenable(void)dataport=0xff;lcm_rs=0;lcm_rw=1;_nop_();lcm_en=1;_nop_();_nop_();while(dataport&0x01);lcm_en=0;/*/lcd1602写入命令/*void writecommandlcm(uchar cmd,uchar attribc)cmd = (cmd&0x01)7)|(cmd&0x02)5)|(cmd&0x04)3)|(cmd&0x08)1)|(cmd&0x20)3)|(cmd&0x40)5)|(cmd&0x80)7);if(attribc)waitforenable();lcm_rs=0;lcm_rw=0;_nop_();dataport=cmd;_nop_();lcm_en=1;_nop_();_nop_();lcm_en=0;/*/lcd1602写入数据/*void writedatalcm(uchar dataw) dataw = (dataw&0x01)7)|(dataw&0x02)5)|(dataw&0x04)3)|(dataw&0x08)1)|(dataw&0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 从古典“经济人”到“直面现象的经济学”
- 柴油供应居间代理服务合同范本第一期
- 护理阐释技巧
- 离婚财产分割及子女教育基金协议书
- 车辆报废回收贷款合同范本
- 餐饮店加盟店财务管理与审计合同范本
- 国际劳务输出安全保障责任书
- 武术课件图片素材
- 智能物流料砖渣采购与仓储配送服务合同
- 农贸菜场摊位租赁与转让一体化合同
- 2025年运动心理学与运动生理学考试的考核试题及答案
- 新疆吐鲁番市高昌区第二中学2024-2025学年高二数学第二学期期末考试模拟试题含解析
- 2025四川中江振鑫产业集团招聘14人笔试参考题库附带答案详解
- 森林管护工技师考试试题及答案
- 乐曲演奏电路设计-正文
- 中医糖尿病试题及答案
- 焊接结构考试试题及答案
- 医院行政考试试题及答案
- 2025届湖北武汉市华中师大一附中高考英语押题试卷含答案
- 《电子商务物流管理》课件-第8章 农村电子商务与物流管理
- 防范学生自残协议书
评论
0/150
提交评论