0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机工控应用

汽车电子技术 来源:工控码农 作者:工控码农 2023-02-07 09:34 次阅读

先看一个没有做任务调度的XY轴复位的程序A:

//XY轴复位
unsigned int XYReset(unsigned char reset)
{
  static unsigned char operation = STEP1;
  static unsigned int baseTime;


  if(reset == TRUE)  
  {
    operation = STEP1;
   }

  switch(operation){
    case STEP1:
        sm_run(SM101,3200);  //步进电机SM101运动3200步
        operation = STEP2;
      break;
    case STEP2:
    if(sm_state[SM101]==SM_STOP)
    {  //3200步运动完成
        baseTime = systemTime;  //开始延时
        operation = STEP3;
      }
      break;
    case STEP3:
     if(Timer(baseTime,500)==TRUE)
     { //延时500ms完成
        sm_run(SM102,3200);  //步进电机SM102运动3200步
        operation = STEP4;
      }
      break;
    case STEP4:
      if(IsSensorOn(X101))
      {
        sm_stop(SM102);
        return TRUE;
      }
      else if(sm_state[SM102] == SM_STOP)
      {
        return -2;  //动作报错
      }
      break;
    default:break;
  }  
  return 0; //动作正在运行
}

下面增加任务调度的XY轴复位的程序B:

//XY轴复位
void XYReset()
{
  switch(GetStep())
  {
    case STEP1:
    sm_run(SM101,3200);
    wait_sm_stop(SM101,STEP2);//任务切换,让出当前的运行权限,直到SM101电机停止后切换回来
    break;
    case STEP2:
    wait_time(500,STEP3);//任务切换 500ms后切换回来
    break;
    STEP3:
    find_sensor(SM102,3200,X101,STEP4,STEP_ERROR);//任务切换,传感器感应 电机停止后回来
    break;
    STEP4:
    set_ation_ok();  //正确结束当前的动作任务,退出就绪队列
    break;
    STEP_ERROR:
    set_error("SM102电机丢步");//错误结束当前动作任务,退出就绪队列
    break;
  }
}

程序A和程序B的共同点:

  1. 都有耗时操作:电机运动,等待传感器状态变化,延时等。
  2. 使用switch case做状态转换
  3. 都是非阻塞,没有死等卡在当前的函数,系统其它函数也可以运行.

程序A程序B的不同点:

  1. 程序A的局部变量多,程序B要简短,代码行数只有程序A的56%
  2. 程序B的电机状态 传感器状态 时间状态都是系统管理查询的,极大的提高了代码的复用,因为一个项目一般都有几十个动作动作函数.
  3. 程序B没有if else都是函数调用,逻辑清晰,更接近自然表达.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50652

    浏览量

    751789
  • 单片机
    +关注

    关注

    6032

    文章

    44513

    浏览量

    632745
  • 电机
    +关注

    关注

    142

    文章

    8928

    浏览量

    145061
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68326
收藏 人收藏

    评论

    相关推荐

    专注单片机工控编程开发#步控电子#步骤编程#单片机 #单片机开发

    单片机
    东莞市步控电子科技有限公司
    发布于 :2022年08月03日 22:55:10

    单片机工控

    ,指示灯,计数器,拨码开关)如果用PLC成本太高,即使时最入门的也不是太合算,而且还需要自备24V开关电源,对配线也是个难题,就有这个一个想法,可对单片机了解甚少,还望对如上所列给予指点1.能否实现2.开发这个通用的班子费用和周期3.有意向合作开发的mail至:leon51717@163.com
    发表于 03-18 14:31

    超齐全单片机工具集

    超齐全单片机工具集单片机工
    发表于 11-03 16:49 155次下载

    超级单片机工具软件

    电子发烧友网站提供《超级单片机工具软件.exe》资料免费下载
    发表于 07-13 17:49 26次下载

    8051单片机工作原理介绍

    8051单片机工作原理 8051单片机工作原理
    发表于 10-28 11:19 43次下载

    单片机初学者迈向单片机工程师

    单片机初学者迈向单片机工程师从单片机初学者迈向单片机工程师
    发表于 01-15 16:33 45次下载

    单片机工具大全

    收藏的单片机工具,分享出来
    发表于 02-15 23:04 19次下载

    单片机工控常用IC—sn74lvc07a资料下载.pdf

    单片机工控常用IC
    发表于 05-25 15:46 6次下载

    实用单片机工具应用程序合集免费下载

    本文档的主要内容详细介绍的是超级单片机工具软件应用程序合集免费下载包括了:51波特率计算应用程序,超级单片机工具软件,单片机小精灵。
    发表于 04-28 16:24 33次下载
    实用<b class='flag-5'>单片机工</b>具应用程序合集免费下载

    MSP430单片机工程配置driverlib库

    MSP430单片机工程配置driverlib库
    发表于 11-19 16:36 22次下载
    MSP430<b class='flag-5'>单片机工</b>程配置driverlib库

    单片机工控实现任务执行管理

    前面写了switch case做任务调度的应用,这边写一下如何实现.像一般的RTOS一样都有一个任务控制块(TCB)列表来管理所有的任务,所以这里也需要一个结构体来管理动作任务,这里叫做ACB吧.
    的头像 发表于 02-07 09:37 827次阅读

    单片机工控事件

    单片机工控通常有延时,电机状态,传感器状态等通用耗时操作,业务程序查询这些状态,就会产生大量的冗余代码,不简洁.使用事件则是把这些通用操作丢给系统去处理,系统操作完成后,则运行业务程序的下一个Step.
    的头像 发表于 02-07 09:40 861次阅读

    单片机工控的电机减速算法是什么?

    单片机给步进驱动一个脉冲,电机转动一个步距角,单片机给脉冲越快,步进电机单位时间内,转动的角度也就越大.即脉冲频率正比于电机转速.
    的头像 发表于 02-07 09:43 1547次阅读
    <b class='flag-5'>单片机工控</b>的电机减速算法是什么?

    单片机工控的工程分离是什么?

    单片机电路板一般专有的,如汽车的车灯控制电路板和EPS控制的电路板是完全不同的。专有的电路板,软件就比较难通用,软件编程比较强调的是单片机系统。
    的头像 发表于 02-07 09:47 894次阅读
    <b class='flag-5'>单片机工控</b>的工程分离是什么?

    51单片机工程模板创建方法

    本教程将向大家介绍如何使用KEIL C51 软件以及如何创建51 单片机工程。通过本教程的学习,让大家创建属于自己的51 单片机工程模板,为后面学习51 单片机编程做好铺垫。
    发表于 07-15 15:27 4754次阅读
    51<b class='flag-5'>单片机工</b>程模板创建方法