智能平衡移动机器人(MATLABSimulink版·微课视频版)课件 6.6-6.10 S-Function-ADC电压采集_第1页
智能平衡移动机器人(MATLABSimulink版·微课视频版)课件 6.6-6.10 S-Function-ADC电压采集_第2页
智能平衡移动机器人(MATLABSimulink版·微课视频版)课件 6.6-6.10 S-Function-ADC电压采集_第3页
智能平衡移动机器人(MATLABSimulink版·微课视频版)课件 6.6-6.10 S-Function-ADC电压采集_第4页
智能平衡移动机器人(MATLABSimulink版·微课视频版)课件 6.6-6.10 S-Function-ADC电压采集_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

合肥工业大学智能平衡移动机器人第6章

智能平衡移动机器人进阶应用目录6.6S-Function6.6.1使用手写S-函数合并定制代码6.6.2使用S-FunctionBuilder块合并定制代码6.6.3使用代码继承工具合并定制代码6.7OLED12864显示6.8MPU6050数据读取6.9ADC电压采集6.10本章小结我们可以使用S-Function扩展Simulink®对仿真和代码生成的支持。例如,可以使用它们:表示自定义算法将现有外部代码集成到Simulink和代码生成器中表示与硬件对接的设备驱动程序为嵌入式系统生成高度优化的代码在Simulink仿真过程中验证为子系统生成的代码通过S-Function的应用程序编程接口,可以非常灵活地在Simulink环境中实现通用算法。以下情形适合用S-Function来实现仿真和代码生成:“我不关心效率,我只想让我的算法能够自动在Simulink和代码生成器产品中工作。”“我想在Simulink和代码生成器产品中实现一种高度优化的算法,它看起来就像是一个内置模块,并且能生成高效的代码。”“我有很多人工代码需要集成。我希望高效地从Simulink和代码生成器产品中调用我的函数。”6.6S-Function

下面以Mathworks官方的一个实例来简单介绍Simulink中生成S-Function的三种常用手段。使用S-FunctionBuilder块。使用此方法,可以将S-函数的特征输入到块对话框中.这种方法不需要任何有关编写S-函数的知识。但是,对S-Function结构的基本理解可以使S-FunctionBuilder对话框更易于使用。使用代码继承工具(LegacyCodeTool)。使用此命令行方法,在MATLAB工作区中的数据结构中定义S-函数的特征。这种方法所需的S-函数知识最少。手写wrapperS-function。使用这种方法,您可以手动编写一个新的C、S-函数和相关的TLC文件.这种方法需要对CS-函数的结构有更多的了解。第一步:首先确保wrapsfcn.c、doubleIt.c和doubleIt.h在该路径下,再打开sfcndemo_choosing_sfun.mdl。第二步:编译wrapsfcn.cS-function,请运行以下mex命令。当前文件夹下生成一个mex64文件。mexwrapsfcn.cdoubleIt.c6.6.1

使用手写S-函数合并定制代码在S-FunctionBuilder对话框中进行如下操作1.在S-functionname输入:S-Function的名称builder_wrapsfcn,S-functionParameters面板列出了S-FunctionBuilder所包含的参数。2.在数据属性(DataProperties)页面:指定输入(input)和输出(output)端口的名称分别为in1和out1。3.库文件(Libraries)页面:Library/Object/Sourcefiles模板输入:doubleIt.cIncludes模板输入:#include<math.h>#include<doubleIt.h>4.输出(Outputs)页面输入:*out1=doubleIt(*in1);5.编译信息(BuildInfo)页面选择GeneratewrapperTLC

option。6.6.2

使用S-FunctionBuilder块合并定制代码当你完成以上操作后,点击“Build”,S-FunctionBuilder会生成三个文件。FileNameDescriptionbuilder_wrapsfcn.cThemainS-function.builder_wrapsfcn_wrapper.cAwrapperfilecontainingseparatefunctionsforthecodeenteredintheOutputs,ContinuousDerivatives,andDiscreteUpdatespanesoftheS-FunctionBuilder.builder_wrapsfcn.tlcTheS-function'sTLCfile.确保doubleIt.c和doubleIt.h文件位于您的工作文件夹中,然后在MATLAB命令提示符下键入lct_wrapsfcn运行脚本,或者双击打开lct_wrapsfcn.m然后在编辑器工具栏下方点击运行(run)。脚本通过以下命令创建和编译S函数legacy_wrapsfcn.c,并创建TLC文件Legal_Wrapsfcn.tlc。%CreatetheLegacyCodeTooldatastructuredef=legacy_code('initialize');%Populatethedatastruturedef.SourceFiles={'doubleIt.c'};def.HeaderFiles={'doubleIt.h'};def.SFunctionName='legacy_wrapsfcn';def.OutputFcnSpec='doubley1=doubleIt(doubleu1)';def.SampleTime=[-1,0];%GeneratetheS-functionlegacy_code('sfcn_cmex_generate',def);%CompiletheMEX-filelegacy_code('compile',def);%GenerateaTLC-filelegacy_code('sfcn_tlc_generate',def);关于命令的解释请参阅:/help/simulink/slref/legacy_code.html?searchHighlight=Integrate%20C%20Functions%20Using%20Legacy%20Code%20Tool&s_tid=doc_srchtitle关于命令的使用请参阅:/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool.html6.6.3

使用代码继承工具合并定制代码

OLED(有机发光二极管)作为一种新型的显示技术,其自身可以发光,亮度、对比度高,功耗低,在当下备受追捧。在正常的显示调整参数过程中,这种屏幕被越来越多地使用。我们使用的一般是分辨率为128x64,尺寸为0.96寸的屏幕。由于其较小的尺寸和比较高的分辨率,让它有着很好的显示效果和便携性。目前我们经常使用的OLED屏幕一般有两种接口,IIC或者SPI,两者使用的通信协议稍有不同,这里OLED屏幕硬件上采用SPI协议的接口,软件上采用的模拟SPI协议。6.7

OLED数据显示实验名称用途DSP28069引脚GND电源地GNDVCC电源正(3.3~5.5V)3.3VSCL在SPI和IIC通信中为时钟管脚GPIO51SDA在SPI和IIC通信中为数据管脚GPIO53RES用来复位(低电平复位)GPIO54DC数据和命令控制管脚GPIO55CS片选管脚GPIO11模块接口定义与连接图第一行显示:AnHuiHopemotion;第二行显示:BalanceCar;第三行显示:56.62;第四行显示:120实验目标实验操作新建模型,完成系统时钟、步长为0.005s等相关参数的配置。从外设驱动工具箱选择初始化函数模块Initial_OLED完成IO的初始化,然后在在主函数的While循环中完成液晶的显示,最后通过两个LED的亮灭验证程序是否正常在运行。点开字符显示模块可以发现参数窗口X、Y,X表示第一个字符所在的行,Y表示第一个字符所在的列,通过设定X、Y即可设置字符所在的位置注意输入会将字符转化成ASCII,要用到abs('*'),*表示你输入的字符,例如在Constant模块中输入[abs('H'),0],输入字符串,例如[abs('H'),abs('M'),0],注意最后一个字符输入为0,否则会出现乱码,Constant最好为unit8型。注模块介绍整体框架

左边的display_string_8x16模块将X、Y的参数都设为1,(X表示行1、3、5、7,Y表示列1-120);右边的display_string_8x16模块将X、Y的参数分别设为3、24;OLED_show_float模块将X、Y的参数分别设为5、24,Len(数据长度)为4,Dot(小数点位数)为2,这里为了验证能否输出为56.62;OLED_show_numbe模块将X、Y的参数分别设为7、24,Len(数据长度)为3。

在完成上述配置,并完成模型的搭建后,将液晶显示模块插在主控板上,然后将模型编译烧写到主控板,观察OLED是否能够正常显示想要的数据。模型烧写到DSP中,OLED显示的结果如下图所示:实验效果

为了完成小车的直立控制需要测量小车的倾角和角速度。而InvenSense公司推出的MPU6050就集成了三轴加速度计,可以通过IIC接口同时输出三个方向上的加速度信号。MPU6050里面集成了三轴陀螺仪,可以同时输出三个方向的陀螺仪信号。MPU6050内部也置入了一个温度传感器。MPU6050是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(DigitalMotionProcessor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。MPU6050基本介绍

6.8

MPU6050数据读取实验MPU6050模块的接口定义与连接图引脚名称说明DSP28069VCC3.3-5V(内部有稳压芯片)5VGND地线GNDSCLMPU6050作为从机的IIC时钟线SCLASDAMPU6050作为从机的IIC数据线SDAAXCLMPU6050作为主机的IIC时钟线

XDAMPU6050作为主机的IIC数据线

ADO地址管脚,该管脚决定了IIC地址的最低位GNDINT中断关键模块通过调用ReadData()函数并给出相应的参数,便可以得到MPU6050的原始数据。该模块是集成了经过卡尔曼滤波后得到的车身角度、陀螺仪x轴角速度、陀螺仪Z轴角速度完成I2C通信协议的初始化完成MPU6050传感器陀螺仪的量程±2000°/S、加速度计量程±4g等配置为了完成平衡移动机器人的直立控制需要测量平衡移动机器人的倾角和角速度。实验目标实验操作完成系统时钟等相关配置。首先完成初始化函数的搭建,然后将MPU6050的数据读取出来以及将角度值提取到存储模块中,通过LED1灯的亮灭来验证模式有没有烧写到主控板中,然后将读取的角度值通过OLED模块实现数据显示。注意:因为角度值有正有负,所以加了一个正负条件判断,特别要注意数据类型要一致通过以上步骤完成整个模型搭建。将模型烧写到主控板,将液晶显示模块插在主控板上,将车子分别平衡放置、往前倾、往后倾,查看OLED显示的数据。关键模块实验效果将模型烧写到主控板,将液晶显示模块插在主控板上,将车子分别平衡放置、往前倾、往后倾,查看OLED显示的数据。本实验使用电阻分压的方式对电池电压进行测量,根据我们的经验,一般航模电池的电量是和电压相关的,比如满电的时候是12.6V,过放(电压低于9.6V)必然导致电池永久过放,所以我们有必要通过监控电池电压的变化,近似表示电池的电量,在电池电量比较低的情况下,提醒我们充电。电压检测模块的原理图如下图所示。简单分析可知,电池电压经过电阻分压,衰竭为原来的1/11之后,送单片机ADC检测,以12位ADC的DSP28069举例,temp为ADC采集的变量,那么很容易计算得到电池的电量:Volt=temp*3.3*11/4096(单位:V)。基本原理介绍6.9

ADC采集电池电压实验完成使能ADC的时钟;设置SOC1采样通道ADCINA0;设置SOC1采样窗大小等操作。AdcRegs.ADCSOCFRC1.bit.SOC1=1;//SOC1开始转换temp=AdcResult.ADCRE

温馨提示

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

最新文档

评论

0/150

提交评论