基于CH365的PCI总线运动控制卡的设计

  • 格式:pdf
  • 大小:282.96 KB
  • 文档页数:4

基于CH365的PCI 总线运动控制卡的设计李飞,黄子牛(石家庄机械化步兵学院河北石家庄050083)摘要:为实现基于PCI 总线的运动控制,设计了一款以国产芯片CH365为核心的运动控制卡,给出设计原理图,开发基于DOS 的开源驱动函数库和基于Windows 的驱动程序及动态链接库,并对运动控制卡驱动程序的编写做了详细的介绍,对中断服务程序的工作流程也做了完整的说明,通过这些函数库及驱动程序,可方便地对伺服电机进行步进式及脉冲式控制,实现各种方向连续的曲线加工和速度控制。

经测试,设计的运动控制卡在实时性、可靠性、插补速度和加工精度方面都有较大的优势,具有较好的应用前景。

关键词:CH365;PCI 总线;运动控制卡;驱动程序中图分类号:TK46+4文献标识码:A文章编号:1674-6236(2012)24-0102-04Design of motion control card for PCI bus based on CH365LI Fei ,HUANG Zi -niu(Shijiazhuang Mechanical Infantry Academy ,Shijiazhuang 050083,China )Abstract:In order to realize motion control based on PCI bus ,A motion control card cored on CH365is designed ,the author gives the schematic diagram ,develops open source drive function library based on DOS ,driver software based on windows and dynamic link library ,at the same time ,this paper does a detailed introduction in programming driver software for the motion control card and does a complete description for work flow of Interrupt service routine.We can easily control the servo motor working on step mode or pulse mode by using this function library and driver software ,and realize all kinds of continuous direction curve processing and speed controlling.After inspection ,this motion control card has obvious advantage in real time ,reliability ,interpolation rate and process accuracy so it has good prospect.Key words:CH365;PCI Bus ;motion control card ;drive收稿日期:2012-08-29稿件编号:201208167基金项目:国家自然科学基金(50375078)作者简介:李飞(1974—),男,山西永济人,硕士,讲师。

研究方向:机电设计。

运动控制卡与PC 机的接口主要有ISA 总线和PCI 总线两种方式,由于ISA 总线已基本被PC 机所淘汰,而PCI 总线则以其速度快、性能优等特点成为主流接口规范[1],因此目前运动控制卡多基于PCI 总线设计。

实现PCI 接口的方法主要有两种:一是使用复杂可编程逻辑器件或现场可编程门阵列(如CPLD 或FPGA ),二是使用专用电路(如PCI9052或CH365),采用第一种方法尽管灵活性高且性能好,但成本较高;而第二种方法采用专用电路,虽然灵活性差,但性能尚可,成本较低,并且开发周期较短,能够满足科研开发的一般场合,因此本设计选用第二种方案。

1运动控制卡的工作原理1.1组成框图PCI 接口芯片选用南京沁恒公司推出的CH365,该器件完全符合PCI 接口规范[2]。

图1为设计的运动控制卡的功能框图,定时中断设为4ms ,依据PCI 总线上送来的数据,在每个中断周期内由定时计数器输出一定数量的方波信号,控制伺服电机单轴或四轴的摆动频率,实现对内燃机的拖动;同时,该卡还对光电编码器的反馈脉冲进行计数,以实现对伺服电机的闭环控制。

伺服电机光电编码器反馈信号经过高速光耦隔离后输入GAL 进行四倍频处理,以提高反馈信号分辨率。

图2为部分原理图,定时计数器U1、U2负责对输入轴反馈脉冲计数,以判断电机实际运行位置,U3、U4则对工作频率进行分频,在每一中断周期输出程序中设定频率的方波,从而控制电机的摆动频率,定时中断信号由U4的定时器2产电子设计工程Electronic Design Engineering第20卷Vol.20第24期No.242012年12月Dec.2012图1运动控制卡框图Fig.1Block diagram of motion control card生,中断信号与PCI总线的IRQ7相连,每一中断周期为4ms。

为提高信号抗干扰能力,定时计数器输出脉冲应经过差分处理,以“脉冲/方向”形式向伺服电机发出指令,设计中采用DS26C31对输出信号进行差分发送;光电编码器的反馈信号体现伺服电机的实际摆动频率,对此信号除需差分处理外,还应进行整形、滤波等处理,以提高定时计数器对输入信号的计数精度[3-4],设计中采用DS26C32对输入信号进行差分接收。

1.2性能特点图3为研制的PCI总线运动控制卡,可实现四轴及单轴控制,每轴高达4MPPS脉冲输出、1MHz编码器输入,该运动控制卡还具有以下特点:1)实现基于32位PCI总线的从设备接口。

2)可设定PCI板卡的设备标示。

3)自动分配I/O基址,支持长度达240字节的I/O端口。

4)支持本地硬件定址功能,自由选择I/O地址,在指定地址实现I/O端口。

5)转换为主动并行接口:8位数据、16位地址、I/O读写。

6)4个16位定时/计数器。

7)脉冲输出形式为上下或脉冲/方向。

8)通用的Windows98/ME/2000/XP驱动程序,通过DLL 提供应用层API。

2驱动程序的编写在使用PCI板卡之前,需要查找板卡并获取其配置信息。

计算机BIOS已经为PCI设备设定了合适的工作环境,而我们编写程序的目的是为了使用此工作环境。

PCI设备有3个空间———内存地址空间、IO地址空间和配置空间。

由于PCI支持即插即用,所以PCI设备不是占用固定的内存地址空间或I/O地址空间,而是可以由操作系统决定其映射的基址,这也就是配置空间的作用。

用于PCI板卡转换的CH365芯片同时提供了基于DOS 的开源驱动函数库(包括Ch365dos.c和Ch365dos.h)和基于Windows的驱动程序及动态链接库[5]。

在DOS系统和Windows9X系统下编写PCI板卡程序时,可以直接调用Ch365dos.c中的函数,实现对设备的驱动和控制。

2.1初始化设备调用Ch365dos.c中的CH365CheckDevice函数,检查PCI 设备是否存在,CH365CheckDevice内部使用int86函数,调用DOS的1AH中断,即PCI BIOS中断,输入寄存器AH为固定值B1H,AL为02H时表示判断指定设备是否存在。

printf(“Check PCI Device...”);mPciAddr=CH365CheckDevice();if(mPciAddr==0){printf(“Failed.\n”);return-1;图2计数与分频部分Fig.2Count and frequency divider图3PCI总线运动控制卡Fig.3Motion control card based on PCIbus李飞,等基于CH365的PCI总线运动控制卡的设计-103-《电子设计工程》2012年第24期}printf(“OK.\n”);2.2获取设备ID和厂商ID获取PCI设备标识和厂商标识,这两个十六进制数代表此板卡区别于其他类型设备的唯一标志。

CH365ReadCfgWord 内部使用int86函数,调用DOS的1AH中断,输入寄存器AH 为固定值B1H,AL为08H时表示读取PCI设备配置空间的信息。

配置空间中最重要的有:Vendor ID:厂商ID。

用来判断PCI设备是否存在。

Device ID:设备ID。

操作系统依据Vendor ID和Device ID找到对应的驱动程序。

Class Code:类代码。

共三字节,分别是类代码、子类代码、编程接口。

类代码不仅用于区分设备类型,还是编程接口的规范。

IRQ Line:IRQ编号。

支持管理24个中断源。

IRQ Pin:中断引脚。

PCI有4个中断引脚,该寄存器表明该设备连接的是哪个引脚。

以下代码用于读取PCI配置空间中的设备标识和厂商标识:mCfgID=CH365ReadCfgWord(0x00);printf(“Vender ID:%04X.\n”,mCfgID);mCfgID=CH365ReadCfgWord(0x02);printf(“Device ID:%04X.\n”,mCfgID);2.3配置IO地址查找设备IO端口地址,获取设备IO端口的基地址之后,可通过指定偏移地址的方法,向板卡相应的端口输入或读取数据。

注意此处被注释的函数CH365SetIoBaseAddr,在DOS系统下可以使用此函数自行指定一个IO基地址,但是Windows系统通常为硬件预设了IO基地址,用户强制指定的地址往往起不到效果。

CH365GetIoBaseAddr内部使用int86函数,调用了DOS 的1AH中断,输入寄存器AH为固定值B1H,AL为07H~ 09H时分别表示按字节(BYTE),字(WORD)和双字(DWORD)读取PCI设备配置空间的信息。

//CH365SetIoBaseAddr((mPCH365_IO_REG)0x200);mIoBase=CH365GetIoBaseAddr();iIoBase=(unsigned int)mIoBase;printf("IO Base Addr:%04X.\n",iIoBase);2.4设定硬件中断检查和设定硬件中断,使用函数CH365SetIntLine和CH365GetIntLine指定或读取系统中保存的板卡中断号。