基于Stateflow和单片机水位控制.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Stateflow和单片机水位控制

基于Stateflow和单片机水位控制   摘 要 Stateflow作为MATLAB软件中用于动态逻辑系统建模的工具,可以将复杂的逻辑问题简单化,已经得到了广泛应用。本文以单片机的水位控制为例,首先用Stateflow建立起控制模型,然后通过RTW工具箱生成可执行C代码,进行修改后并在proteus中搭建起单片机水位控制仿真模型,植入代码进行验证。   关键词 MATLAB;Stateflow;单片机   中图分类号:TP368.1 文献标识码:A 文章编号:1671-7597(2013)11-0000-00   Stateflow是有限状态机的图形工具,它可以将一个复杂的系统分为若干个状态,状态与状态之间的转移条件为状态转移事件,用户可以利用图形化来实现各个状态之间的转换,这样便构成状态转移图。   通常Stateflow是内嵌在simulink仿真模型中的,当完成并调试好控制系统后,可以通过RTW工具箱将控制模型自动生成C代码,用户只需对代码进行必要的设置和修改,就能移植至控制器中去,这样就不需要花太多时间从事代码的开发,可以让设计者腾出更多的精力进行顶层控制策略的设计。本文中选取水位控制任务为例,在simulink中用设计出Stateflow控制模型,进行分析调试后,生成的C代码在keil软件中进行修改和编译,将最终单片机可执行的HEX文件载入用proteus建立的单片机水位控制模型中,来进行分析、验证。实践证明,采用Stateflow进行系统建模,直观、逻辑关系清晰、简便,RTW生成执行代码正确,可以大大缩短系统开发周期。   1 Stateflow水位控制模型的建立   水位控制的任务要求为:水池中有2个液位传感器,下限传感器B和上限传感器C,当水位低于下限时,抽水电机运行抽水,水位上升当水位升至上限时,电机停止抽水,系统工作时,指示灯点亮,若上限传感器C触发而下限传感器B未触发,说明系统出现故障,此时电机停止,同时指示灯闪烁以进行警示。   软件平台采用的版本为Matlab2013a,首先新建一个simulink文件,然后在simulink library中的stateflow模型库中拉出一个char,建立如图1所示的水位控制模型。   图1 stateflow水位控制模型   这里分为三个状态,状态1为motor_off(抽水电机停止状态),此时led=0(指示灯灭),motor=0(抽水电机停止),状态2为motor_on(电机运行状态),此时led=1(指示灯亮),motor=1(电机运行),状态3为error(故障状态),此时motor=0(电机停止),led闪烁(由子状态来实现),led_on和led_off状态间的转移条件为delay事件(在后面生成的代码中进行添加,用定时中断来做)。状态1、状态2、状态3之间的转移条件为水位传感器B、C来决定。下限传感器B动作时sensor_B=0,上限传感器C动作时,sensor_C=0。   通过菜单栏打开model explorer,设置触发事件和I/O,led、motor为输出,数据类型选择为uint8,sensor_B,sensor_C为输入,数据类型选择为uint8。delay为转移条件用fail(下降边沿触发)。   接下来为simulink控制模型添加输入和输出,如图2所示。   图2 simulink模型   进simulink菜单model configuration parameters进行设置Solver、Hardware、Code generation。   2 C代码修改及验证   设置好后,通过simulink菜单code选项,c/c++ code/build model,生成嵌入式c代码,成功后,为了测试代码的可行性,我们在proteus平台中建立直流电机正反转控制模型,如图3所示。   其中I/O设置,传感器B、传感器C、电机控制信号、led指示灯分别接P1.0、P1.1、P1.2、P1.3口。   接下来要对自动生成的代码进行修改,在keil中创建新工程,使用AT89C51芯片,将water_level_control_ert_rtw(simulink文件命名为water_level_control)文件夹中的C文件添加进工程,对ert_main.c进行修改。添加51所需头文件,对用到的引脚进行定义,添加定时中断,在void rt_OneStep(void)函数中添加模型输入和输出,必须与硬件电路一一对应起来,去掉int_T main(int_T argc,const char *argv[])函数的中参数,去掉Unused arguments,在Initialize model中设置定时器,

文档评论(0)

erterye + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档