《嵌入式D-A接口实验(共11页).doc》由会员分享,可在线阅读,更多相关《嵌入式D-A接口实验(共11页).doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上2.5 D/A 接口实验一、实验目的 学习 D/A 转换原理 掌握 MAX504 D/A 转换芯片的使用方法 掌握不带有 D/A 的 CPU 扩展 D/A 功能的主要方法 了解 D/A 驱动程序加入内核的方法二、实验内容学习 D/A 接口原理,了解实现 D/A 系统对于系统的软件和硬件要求。阅读 MAX504芯片文档,掌握其使用方法。三、预备知识 有 C 语言基础 掌握在 Linux 下常用编辑器的使用 掌握 Makefile 的编写和使用 掌握 Linux 下的程序编译与交叉编译过程四、实验设备及工具硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台
2、、PC 机 Pentium 500 以上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0MINICOMARM-LINUX 开发环境专心-专注-专业五、实验原理1、D/A 转换器D/A 转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等 进行分类。大多数 D/A 转换器由电阻阵列和 n 个电流开关(或电压开关)构成。按数字输入 值切换开关,产生比例于输入的电流(或电压)。 电压输出型(如 TLC5620)电压输出型 D/A 转换器虽有直接从电阻阵列输出电压的,但一般采用内置输出放大器以低 阻抗输出。直接输出电压的器件仅用于高阻抗负载,由于
3、无输出放大器部分的延迟,故常 作为高速 D/A 转换器使用。 电流输出型(如 THS5661A)电流输出型 D/A 转换器很少直接利用电流输出,大多外接电流电压转换电路得到电压输 出,后者有两种方法:一是只在输出引脚上接负载电阻而进行电流电压转换,二是外接 运算放大器。用负载电阻进行电流电压转换的方法,虽可在电流输出引脚上出现电压, 但必须在规定的输出电压范围内使用,而且由于输出阻抗高,所以一般外接运算放大器使 用。此外,大部分 CMOS DA 转换器当输出电压不为零时不能正确动作,所以必须外接运算 放大器。当外接运算放大器进行电流电压转换时,则电路构成基本上与内置放大器的电压 输出型相同,这
4、时由于在 D/A 转换器的电流建立时间上加入了运算放入器的延迟,使响应 变慢。此外,这种电路中运算放大器因输出引脚的内部电容而容易起振,有时必须作相位 补偿。 乘算型(如 AD7533)D/A 转换器中有使用恒定基准电压的,也有在基准电压输入上加交流信号的,后者由于能 得到数字输入和基准电压输入相乘的结果而输出,因而称为乘算型 D/A 转换器。乘算型 D/A 转换器一般不仅可以进行乘法运算,而且可以作为使输入信号数字化地衰减的衰减器及对 输入信号进行调制的调制器使用。 一位 D/A 转换器一位 D/A 转换器与前述转换方式全然不同,它将数字值转换为脉冲宽度调制或频率调制的 输出,然后用数字滤波
5、器作平均化而得到一般的电压输出(又称位流方式),用于音频等场 合。2、D/A 转换器的主要技术指标 分辩率(Resolution) 指最小模拟输出量(对应数字量仅最低位为“1”)与最大量(对应数字量所有有效位为“1”) 之比。 建立时间(Setting Time)是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转换时间。D/A 中常用建 立时间来描述其速度,而不是 A/D 中常用的转换速率。一般地,电流输出 D/A 建立时间较 短,电压输出 D/A 则较长。 其他指标还有线性度(Linearity),转换精度,温度系数/漂移。3、MAX50410 位 D/A 转换器的特点由单个 5V
6、电源供电 电压输出缓冲内部 2.048V 参考电压 1INL=2 LSB(MAX) 电压不随温度变化 可变的输出范围:0VVDD,VSSVDD 上电复位 串行输出其各个管脚的功能如表 2.5.1 所示:表 2.5.1 管脚定义管脚名称功能1BIPOFFBipolar offset/gain resistor2DINSerial data input3CLRClear. Asynchronously sets DAC register to all 0s.4SCLKSerial clock input5CSChip select, active low6DOUTSerial data outpu
7、t for daisy-chaining7DGNDDigital ground8AGNDAnalog ground9REFINReference input10REFOUTReference output, 2.048V. Connect to VDD if not used.11VSSNegative power supply12VOUTDAC output13VDDPositive power supply14RFBFeedback resistor4、MAX504 在开发板上的连接MAX504 在开发板中的连接如图 2.5.1 所示:图 2.5.1 Max504 的连接上图中,RFB 连
8、接 VOUT、BIPOFF 连接 AGND,使得输出电压范围为 02VREFIN,即 04.069V。 时钟和输入、输出信号分别与同步串口的时钟、发送和接收端相连。可以通过 WriteSDIO(data)函数(Uhal.h)向 MAX504 发送数据。发送数据时要注意,MAX504 可接受12 位的数据,但低两位不起作用。WriteSDIO(data)函数一次只能发送 8 位的数据,所以 发送数据时应先将数据左移两位,然后先发送高八位,再发送低八位数据。CLR 和 CS 分别 由 MAX504_CLEAR()和 MAX504_ENABLE()、MAX504_DISABLE()函数(Max504
9、.c)控制。六、程序分析程序流程图如图 2.5.2:具体程序代码 da_main.c 如下:图 2.5.2 实验程序流程图/*by zou jian guo*2004.9.27 14:30*the driver is s3c2410_da_max504.c in drivers/char*/#include #include #include #include #define DA0_IOCTRL_WRITE0x10#define DA1_IOCTRL_WRITE0x11#define DA_IOCTRL_CLR0x12#define Max504_FULL4.096f static int
10、da_fd = -1;char *DA_DEV=/dev/exio/0raw;void Delay(int t)int i;for(;t0;t-)for(i=0;i400;i+);/*/int main(int argc, char *argv)float v;unsigned int value;/char *da_dev;/unsigned int da_num=0;if(argc 3)printf(n);printf(Error parametern); printf(Input as:n); printf(./ad_main da_id numn);printf(da_id: sele
11、ct between 0 and 1n); printf(num: range 0.0 4.096n); printf(n);return 1;sscanf(argv2, %f,&v);if(vMax504_FULL)printf(DA out must between: 0 to %fn, Max504_FULL);return 1;value=(unsigned int)(v*1024.0f)/Max504_FULL);if(da_fd=open(DA_DEV, O_WRONLY)0) printf(Error opening /dev/exio/0raw devicen); return
12、 1;if(strcmp(argv1,0) = 0)ioctl(da_fd, DA_IOCTRL_CLR, 0);/clear da. ioctl(da_fd, DA0_IOCTRL_WRITE, &value);else if (strcmp(argv1,1) = 0)ioctl(da_fd, DA_IOCTRL_CLR, 1);/clear da. ioctl(da_fd, DA1_IOCTRL_WRITE, &value);#if 0ioctl(da_fd, DA_IOCTRL_CLR, 0);/clear da. for(;)#endifioctl(da_fd, DA0_IOCTRL_
13、WRITE, &value); Delay(500);close(da_fd);printf(Current Voltage is %f vn, v);return 0;七、实验步骤1、阅读理解源码进入/arm2410cl/exp/basic/05_da 目录,使用 vi 编辑器或其他编辑器阅读理解源代码2、编译应用程序运行 make 产生 da 可执行文件 da_main /# cd /arm2410cl/exp/basic/05_da/rootzxt 05_da# makearmv4l-unknown-linux-gcc-c -o da_main.o da_main.c armv4l-un
14、known-linux-gcc da_main.o -o da_mainrootzxt 05_da# lsda_main da_main.c da_main.o doc drivers Makefile s3c44b0-spi.h3、下载调试切换到 minicom 终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录,然后进入/host/exp/05_da/drivers 目录,用 insmod s3c2410-exio.o 命令插入 D/A 驱动,并用 lsmod命令查看是否已经插入。/mnt/yaffscd /host/exp/basic/05_da/ /
15、host/exp/basic/05_dacd drivers/host/exp/basic/05_da/driversinsmod s3c2410-exio.o Using s3c2410-exio.o /host/exp/basic/05_da/driverslsmodModuleSize Used byNot taintedS3c2410-exio23840 (unused)i2c-tops2141040 (unused)注意:卸载模块可以使用 rmmod 命令,以本实验为例,卸载方法如下:/host/exp/basic/05_darmmod s3c2410-exio进入/host/exp
16、/basic/05_da 目录,运行./da_main,观察运行结果的正确性。在输 入 ./da_main 后会出现下面的提示信息。/host/exp/basic/05_da./da_mainError parameterInput as:./ad_main da_id numda_id: select between 0 and 1 num: range 0.0 4.096这是由于我们没有指定参数造成的,它的格式为 ./da_mainda 的 id 号数字,同时还需要在 0.04.096V 之间来选择一个输出电压。下面的例子是用了开发板上的 DA 并且 输出 1V 的电压,我们可以使用万用表对其进行测量。/host/exp/basic/05_da./da_main 1Current Voltage is 1. v八、思考题1D/A 转换器的分类。2D/A 转换器的主要技术指标。3MAX504 的特点及使用方法。