基于CH365的PCI总线运动控制卡的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于CH365的PCI 总线运动控制卡的设计
李飞,黄子牛
(石家庄机械化步兵学院河北石家庄050083)
摘要:为实现基于PCI 总线的运动控制,设计了一款以国产芯片CH365为核心的运动控制卡,给出设计原理图,开发基于DOS 的开源驱动函数库和基于Windows 的驱动程序及动态链接库,并对运动控制卡驱动程序的编写做了详细的介绍,对中断服务程序的工作流程也做了完整的说明,通过这些函数库及驱动程序,可方便地对伺服电机进行步进式及脉冲式控制,实现各种方向连续的曲线加工和速度控制。
经测试,设计的运动控制卡在实时性、可靠性、插补速度和加工精度方面都有较大的优势,具有较好的应用前景。
关键词:CH365;PCI 总线;运动控制卡;驱动程序中图分类号:TK46+4
文献标识码:A
文章编号:1674-6236(2012)24-0102-04
Design of motion control card for PCI bus based on CH365
LI 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 PCI
bus
李飞,等基于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指定或读取系统中保存的板卡中断号。
CH365SetIntLine内部使用int86函数,调用DOS的1AH中断,输入寄存器AH为固定值B1H,AL为0BH~0DH时分别表示按字节(BYTE),字(WORD)和双字(DWORD)写入到PCI设备配置空间。
注意此处被注释的宏mCH365_INT_LINE_AUTO,它表示程序将使用缺省的中断号。
在DOS和Windows9x环境中,也允许用户自行指定中断号,如下的代码强行指定中断号为7。
printf(“Set Interrput Line...”);
if(CH365SetIntLine(7/*mCH365_INT_LINE_AUTO*/)==FALSE)
{
mIntLine=-1;
printf(“Failed.\n”);
}
else
{
printf(“OK.\n”);
mIntLine=CH365GetIntLine();
}
printf("Interrupt Line:%X.\n",mIntLine);
3中断的控制
中断服务程序是具有特定格式的函数,为保证运动控制卡的正常工作,中断服务子程序的编写必不可少。
3.1初始化中断服务程序
查找并设定设备中断号,指定相应中断服务程序,系统在收到设备的中断信号时自动执行此函数的内容,如果不指定中断服务程序,那么中断将不会产生任何效果。
作为PCI板卡的前端设备,CH365控制中断信号的发送,在执行中断之前,应对mCh365IoCtrl发送控制字进行清零,否则可能无法开启中断。
mChipIoCtrl=inportb((USHORT)&mIoBase-> mCh365IoCtrl);
outportb((USHORT)&mIoBase->mCh365IoCtrl,mChipIoCtrl&0xfb);
3.2开启中断
在DOS下,应向计算机系统申请打开中断。
此处假设中断采用屏蔽中断(INTR)的方式。
PC机上的8088INTR中断请求线与8259A中断控制器的INT相连,而8259A有8个输入端,可连8个外设,8259A接收来自外设的中断请求信号,并把中断源的类型号送给CPU[6]。
从外设的中断请求到CPU响应中断有两个控制条件起决定作用:
第一个条件,该外设中断请求是否屏蔽,对于8259A中断屏蔽寄存器IMR(口地址为21H)的某一位,若为0,则表示允许中断;为1,该外设的中断请求被屏蔽。
第二个条件,CPU是否允许中断,即标志寄存器中IF是否等于1,若IF=0,CPU禁止中断;IF=1,允许CPU响应中断。
由此编写代码如下:
outportb(0x20,0x20);
outportb(0x21,inportb(0x21)&0x7f);//IRQ7
此外,还应当注意PCI卡是如何产生中断脉冲的,如果需要用户向指定IO地址执行输入才能够触发中断,那么还需要编写相应的板卡触发代码。
-104-
指导企业管理者如何根据工人的现状和工作站可能的瓶颈问题,合理的对工人进行培训,并有效的掌握资源的柔性度。
针对企业实际在控制人工成本的基础上,实现系统执行的最优性,达到利润最大化。
该项研究有很现实的实际意义,易于操作管理,在以后的研究中可以对工人操作效率不同等情况的矩阵度量方法。
这些研究都将为企业更好的实现生产效益最大化做出简易有效的指导。
参考文献:
[1]Alidaee B ,Kochenberger G A.A framework for machine scheduling problems with controllable processing times [J].Production Oper.Management ,1996,5(4):391-405.[2]Daniels R L ,Mazzola J B ,Shi D.Flow shop scheduling with partial resource flexibility[J].Management science ,2004,50
(5):658-669.
[3]Zavadlav E ,McClain J O ,Thomas L J.Self -buffering ,
selfbalancing ,self -flushing production lines[J].Management Science ,1996(42):1151-1164.
[4]Inmaculada Beltr án -Mart ín ,Vicente Roca -Puig ,Ana Escrig -Tena.Human resource flexibility as a mediating variable between high performance work systems and performance[J].Journal of Management ,2008,34(5):1009-1044.
[5]Ketkar S ,Sett P K.Environmental dynamism ,human resource flexibility ,and firm performance:analysis of a multi -level causal model[J].The International Journal of Human Resource Management ,2010,21(8):1173-1206.
[6]Mart ínez -S ánchez ,A.,Vela -Jim énez ,,M.J.,P érez -P érez ,
M.The dynamics of labour flexibility:relationships between employment type and innovativeness[J].Journal of Management Studies ,2011,48(4):715-736.
3.3
执行中断
运行时系统将根据中断周期自动进入中断服务程序,中断服务程序中必要的工作有:
检查中断信号是否来自此设备,因为其他的PCI 设备可能产生同样的中断信号。
mChipIoCtrl =inportb ((USHORT )&mIoBase ->
mCh365IoCtrl );
if (mChipIoCtrl &0x04)……
此次中断执行完成之后,应编写退出代码,必要的退出代码包括CH365控制位清零,以及向系统申请退出中断服务程序。
注意,如果缺少退出语句,或者中断服务程序中用户要执行的工作太多,则可能造成中断套叠以至计算机死锁。
outportb ((USHORT )&mIoBase ->mCh365IoCtrl ,mChipIoCtrl &~0x04);
if (mIntLine >=8){
outportb (0xa0,0x20);
if (inportb (0xa0)==0)outportb (0x20,0x20);}
else outportb (0x20,0x20);
之后向计算机系统发出申请,退出中断,也可以同时指定中断服务程序为NULL 。
outportb (0x21,inportb (0x21)|0x80);
4结束语
运用国产芯片CH365,设计开发了一块PCI 总线的运动
控制卡,并编写了配套的驱动程序,经实际测试,伺服电机选用日本信浓公司的交流伺服电机,型号为5CB06-1SE ,驱动器选用其配套的HO 10AB CB 600C 17F 型数字式交流伺服驱动器,可进行步进式及脉冲式伺服电机控制,并能充分发挥电机性能,方便地实现运动控制。
参考文献:
[1]阮毅,陈维钧.运动控制系统[M].北京:清华大学出版社,
2006.
[2]南京沁恒电子有限公司.PCI 总线接口芯片CH365[EB/OL].
(2005-12-21)/download/list.asp?id=10.
[3]覃琴.基于FPGA 的PCI 接口运动控制卡的研究[D].成都:
四川大学,2006.
[4]林剑豪.基于CH365型接口和MCX314As 型运动控制器的
PCI 总线运动控制卡设计[J].电子设计工程,2005(12):22-26.
LIN Jian -hao.Designing of PCI bus motion controlling card based on CH365and MCX314As [J].Electronic Design Engineering ,2005(12):22-26.
[5]游林儒,庞永鹏,谭子瑜.基于PCI 总线的四轴运动控制卡
的研制[J].微计算机信息,2007,31(21):12-14.
YOU Lin -ru ,PANG Yong -peng ,TAN Zi -yu.Research and design of 4-Aexs motion controller based on PCI bus [J].Microcomputer Information ,2007,31(21):12-14.
[6]马忠梅.单片机的C 语言应用程序设计[M].3版.北京:北京
航空航天大学出版社,2005.
(上接第101页)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
李飞,等
基于CH365的PCI 总线运动控制卡的设计
-105-。