普洱信息港
金融
当前位置:首页 > 金融

基于ARM和CPLD的开放式数控系统设计

发布时间:2019-05-22 05:33:00 编辑:笔名

基于ARM和CPLD的开放式数控系统设计

本系统采用基于数据采样法的粗精两级插补结构,插补周期为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)更细粒度的内存管理控制[]。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资源,因此即使插补线程优先级较高,当其被阻塞时也不会影响其他线程的正常运行。

2.3 CPLD程序

CPLD程序的逻辑如图4所示。

客厅阳台怎么装修 装修客厅阳台的主要事项
沭阳耿圩:三举措助推“三送一访”活动
浅谈塑料瓶子印刷用墨