首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于ARM和CPLD的开放式数控系统设计
来源:本站整理  作者:佚名  2010-03-08 11:59:54




    CPLD外接40 MHz时钟,程序中使用的所有时序均由该时钟分频而得。本系统采用基于数据采样法的粗精两级插补结构,插补周期为8 ms,采样周期为4 ms。因此中断程序和精插补程序基于125 Hz时序运行;数据采样、故障监测和速度位置控制基于250 Hz时序运行。
    系统数据传递如图3所示。插补是本系统的一个重要环节,因为插补直接影响系统的实时性、运动控制和加工精度。从图3可见粗插补计算结果从应用程序传递到操作系统内核,再由内核发送到CPLD进行精插补运算。由于插补是一项硬实时任务,因此数据传递必须实时准确。ARM与CPLD之间以中断方式保证通信的实时性。而应用程序和操作系统内核通信的实时性则由操作系统的实时性保证。


2 系统中断控制
    本系统采用基于数据采样法的粗精两级插补结构,插补周期为8 ms,采用中断方式保证通信的实时性。中断信号由CPLD每隔8 ms定时产生。当接收到CPLD的中断信号时,ARM把粗插补计算结果写入CPLD的固定地址。CPLD从固定地址读取数据计算脉冲数,输出脉冲信号,完成运动控制。本系统的中断控制分成3部分:Windows CE中断服务、应用程序中断响应程序和CPLD程序。
2.1 Windows CE中断服务
    Windows CE是实时操作系统,其实时性体现在6个方面:(1)具有256个线程优先级;(2)应用程序可以控制提供给每个线程的时间片,计时器精确到1 ms;(3)优先级倒置处理机制;(4)支持嵌套中断;(5)中断延迟时间短;(6)更细粒度的内存管理控制[4-5]。Windows CE以上机制特别是中断体系保证了数控系统的实时性。
    Windows CE的中断体系包括核心态的中断例程ISR和用户态的中断线程IST两部分。ISR主要响应中断请求,识别中断源,给操作系统内核返回相应的中断标识。ISR具有最高的优先级。本系统采用ISR完成中断服务。进入ISR以后,系统中所有的同级或下级中断均被屏蔽。为了不降低系统执行多任务的性能,ISR应非常短小精干,以使其他中断也能够获得及时的服务。
    定制Windows CE中断服务程序步骤如下:
    (1)在操作系统内核中注册事件hMotor,用于操作系统和应用程序中断响应的同步。
    (2)在操作系统内核中注册插补中断标识号SYSINTR_PWM_READY。
    (3)调用函数InterruptInitialize,使中断请求和hMotor事件挂钩,当接收到中断请求时操作系统自动将事件置为有信号,退出ISR时将事件置为无信号。
    (4)编写ISR程序。ISR程序框架如下:
    if(IntPendVal==INTSRC_EINT1)//判断中断是否来自CPLD
    {
        s2410INT|=BIT_EINT1;//清除中断请求
        if(PWM_FINISH==TRUE)
            return(SYSINTR_PWM_READY);
//向内核返回中断标识号
        rADDR=*pulse_buf;//向CPLD写数据
    }
    当ARM接收到由CPLD发出的中断请求,操作系统将调用ISR,并将hMotor事件置为有信号。在ISR中将粗插补计算结果写入CPLD,并向操作系统内核返回中断标识号。退出ISR时,操作系统将hMotor事件置为无信号。整个ISR程序非常精短,保证了系统其他程序的正常运行。
2.2 应用程序中断响应程序
    应用程序无法直接获知是否有中断请求。利用hMotor事件使操作系统中断服务与应用程序中断响应程序达到同步。通过调用WaitForSingleObject函数查询该事件状态,应用程序可获知是否有中断请求并及时响应中断。中断响应程序框架结构如下:
    while(!IsEnd)//判断插补是否结束
    {
        ……//粗插补计算
        WaitForSingleObject(hMotor,INFINITE);//无限期等待
//hMotor事件状态变为有信号
          DeviceIoControl();//向操作系统传递
//粗插补计算结果,即位置增量
    }
    插补线程启动后进行插补计算,调用WaitForSingleObject函数阻塞插补线程,等待hMotor事件状态变为有信号。当操作系统接收到中断请求后调度ISR,将事件置为有信号。此时WaitForSingleObject函数被返回,插补线程阻塞状态解除。通过调用DeviceIoControl函数将插补结果传递到驱动层,再由操作系统将数据发送到CPLD。插补运算时间远小于插补周期,因此插补线程经常处于阻塞状态。WaitForSingleObject函数虽然会阻塞当前线程,但是不会占用任何CPU资源,因此即使插补线程优先级较高,当其被阻塞时也不会影响其他线程的正常运行。

上一页  [1] [2] [3] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:92,164.06000 毫秒