VxWorks下AD/DA驱动系统设计及测试
3 应用及测试
为了验证上面所设计的驱动系统的有效性,文章对其进行了详细的实验验证。针对本系统而言,D/A能将电机转速控制数字量转换为相应的模拟电压量输出至电机,并且在控制电机运转的同时,还能利用A/D将压电陀螺敏感到的电机转速所输出的模拟电压量转换为数字量后并采集,以此证明驱动系统设计是成功的。下面详细给出实际工程中用于测试驱动程序设计成功的应用程序。
3.1 应用程序设计
首先调用adcDrv()和adcDevCreat()初始化驱动并创建AD/DA设备;并通过fd=open('/adc',O_RDWR,0)操作打开设备。这样,系统为AD/DA卡分配了一个文件描述符fd,通过读写该描述符操作即可完成相应AD/DA变换。
随后发起两个任务[7][8]:写任务和读任务,分别完成上述D/A与A/D的功能。两个任务的核心代码如下:
int Dac()
{…
pBuf[0]=xxx;
pBuf[1]=xxx;
t1=write(fd,&pBuf[0],2);
…
}
int Adc()
{…
ioctl(fd,CH00,0);
t2=read(fd,&pBuf[0],2);
LSB=pBuf[0];
MSB=pBuf[1];
…
}
3.2 测试结果
在WinShell下通过调用iosDevShow()函数可以看到,名为/adc的AD/DA卡设备已经被VxWorks操作系统正确识别,如图3所示。
测试分为两个步骤来验证A/D及D/A驱动的正确性:
步骤1:数字量→模拟量→电机转速(D/A)
步骤2:电机转速→模拟量→数字量(A/D)
步骤1控制电机加减速过程当中,给定的控制电机运转的数字量如图4中data1所示(其中:data1是通过16进制数转换为10进制数实现的)。每隔0.5s对系统进行一次D/A转换,得到电机实际转速rate如图5所示。
对比data1和rate,两条曲线规律一致,说明D/A驱动功能正常。
随后将图5中的电机转速作为输入量,输入到步骤2中进行实验,以相同时间间隔对系统进行A/D采样,转换后的数字量如图4中data2所示,对比data2和rate,两条曲线规律一致,说明A/D驱动功能正常。
data1与data2两条曲线基本重合,二者之间的误差曲线error(data1-data2)如图6。
由图6可得:误差最大值为3.2LSB,最小为2.1LSB。由此可见,AD/DA功能实现的同时精度完全符合要求(4LSB≥error≥2LSB)。实验结果表明:驱动系统设计成功有效。
本文介绍了VxWorks下AD/DA驱动的开发过程,给出了驱动中的核心代码。同时在对驱动程序进行测试的过程中说明了部分应用程序的设计。测试结果表明,所开发的驱动系统满足实际需要(12位AD/DA转换分辨率),可在实际工程中应用。限于篇幅本文未能给出全部代码,但文中驱动程序的设计是完全依照VxWorks的标准I/O机制实现的,具有普遍的指导意义,可为VxWorks下其他字符型设备驱动开发提供参考。
- 嵌入式实时操作系统ECOS在S3C2510上的移植实现(04-21)
- 嵌入式实时操作系统Nucleus PLUS在S3C2410A上移植的实现(06-09)
- 嵌入式系统便携式数据采集装置设计(06-19)
- 基于ARM7支持触摸屏和实时操作系统的开发与应用(03-06)
- Coldfire内核的MCU通用工业控制平台(08-09)
- 基于ARM的人体生理参数监护系统的设计(11-28)