1 / 48

模拟量输入输出通道

模拟量输入输出通道. (共 2 学时). 训练目的. 1 、 了解计算机如何采集工业系统中的模拟信号。 Inportb—— 读端口 ( 寄存器 ) Intvar=Inportb ( 基地址 + 偏移地址 ) 2 、了解计算机如何输出模拟信号。 Outportb—— 写端口 ( 寄存器 ) Outportb( 基地址 + 偏移地址, Intvar). 设备与器材. IPC-610 工业控制计算机一台(带 ACL-8112 PG 数据采集卡一块) PCLD-880 REV. A1 端子板一块 37 芯扁平电缆一条 直流稳压电源一台 示波器一台

doris
Download Presentation

模拟量输入输出通道

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 模拟量输入输出通道 (共2学时)

  2. 训练目的 1、 了解计算机如何采集工业系统中的模拟信号。 Inportb——读端口(寄存器) Intvar=Inportb (基地址+偏移地址) 2、了解计算机如何输出模拟信号。 Outportb——写端口(寄存器) Outportb(基地址+偏移地址,Intvar)

  3. 设备与器材 • IPC-610工业控制计算机一台(带ACL-8112 PG数据采集卡一块) • PCLD-880 REV. A1端子板一块 • 37芯扁平电缆一条 • 直流稳压电源一台 • 示波器一台 • 数字万用表一个 • 信号发生器一台

  4. 数字量 模拟量输出/输入系统的一般组成 Outportb(基地址+偏移地址,Intvar) A/D转换 D/A转换 模拟信号 Intvar=Inportb (基地址+偏移地址) 端子板 信号调理电路 驱动电路 工业系统

  5. 1)A/D不主动工作,要有 触发信号; 2)多种触发方式可以选择 3)方式要约定 4)转换是逐位进行,需要 一定时间30us 5)完成通知CPU 6)按照规定的数据传输方 式传入计算机 模拟量输入通道的一般组成 每个通道输入的模拟量的范围不同,选择不同的增益 AD0 AD1 AD15 先采样,再保持,等待处理(存放在寄存器) 公用一套电路,要进行通道选择

  6. V1 模拟传感器 信号调理 V2 模拟传感器 信号调理 可编程 放大器 Vk 模拟传感器 信号调理 Vn 模拟传感器 信号调理 A/D通道内部工作原理 工业系统 多 路 开 关 M U X Vk Vd VG Vh A/D 寄 存 器 S/H 接口 电路 … … 采样 触发 信号 gain 锁存 信号 … … 控制电路 channel = k 控制线 数据总线 选通道:channel = k 设定增益:gain 选择触发方式

  7. 模拟量输入的实现 1. 多路控制:决定哪一路信号进入通道 2. 可编程放大器:调节输入信号幅值范围 3. A/D转换:模拟量转化成计算机可处理的数字量 4. 数据传输:转化结果传送到内存

  8. 问题1: 同时会有多路模拟信号输入,每一路信号选用一个A/D通道,采集卡有16路A/D通道,哪一路工作?

  9. V1 模拟传感器 模拟传感器 模拟传感器 模拟传感器 信号调理 信号调理 信号调理 信号调理 V2 Vk Vn 多路开关MUX的工作原理 channel=k 工业系统 MUX Vk … … … …

  10. A/D通道多路开关寄存器 解决: 多路转换控制寄存器 地址:base+10 属性:只写 说明:CL3~CL0 A/D转换通道号 • 数据格式:低4位提供了A/D通道号:CL3~CL0对应0~15号通道 • 0000 ~ 1111 (AD0~AD15) • outportb(base+10,channels )

  11. 问题2: 各路模拟的信号幅值范围不同 ,怎么办?

  12. A/D增益寄存器 采集卡的最大输入电压,由跳线决定,可以是±5V或±10V 模拟信号输入的最大电压 Outportb(base+9,0)

  13. 问题3: 模拟电压输入后,如何使A/D转换开始?

  14. 触发:给一控制信号,使A/D开始 A/D转换触发 模拟电压经端子板送到采集卡输入口后,采集卡并不会主动开始工作,需要给它一个触发信号启动A/D过程。 A/D转换触发方式: • 软件触发; • 板上定时触发; • 外部脉冲触发。

  15. A/D操作模式控制寄存器 outportb(Base+11,1) • 模式控制寄存器 • 地址:base+11 • 属性:只写 • 说明:若触发方式跳线跳到内部时,内部触发可选方式:

  16. A/D软件触发寄存器 • 如果给ACL-8112PG的A/D转换产生一个触发脉冲,只要向这个软件触发寄存器写一个任意值,A/D转换器就会被触发; • 软件触发寄存器 • 地址:Base+12 • 属性:只写 outportb(BASE+12,0) 可以为任意值

  17. 问题4: 如何知道A/D转换已经完成?

  18. A/D转换逐位进行,需要一定的时段( ),因此必须使CPU知道转换已完成,并约定方式使转换结果送入内存 • A/D转换结果的传输方式有三种: 1. 查询方式传输: 查询A/D完成位DRDY,然后再从寄存器读取数据到内存变量。 2. 中断传输: A/D转换完成后发中断请求,然后由中断服务程序读取数据。 3.DMA传输: (Direct Memory Access)直接内存访问,DMA方式下由于不直接访问计算机的CPU,而直接在RAM与设备之间传输,因而大大提高了数据传输速度,适用于高速采集。

  19. A/D数据寄存器 Data ReaDY 说明:DRDY为转换完成标志位 DRDY=1:A/D转换没有完成 =0:A/D转换完成 。 当读A/D低字节寄存器(Base+4)时,变回1。 例:判断A/D是否转换完成:inportb(Base+5)&0x10 说明:AD11~AD0:A/D转换完成后的数据。 AD0是最低位(LSB),AD11是最高位(MSB)。

  20. 问题5: 如何读取A/D转换完成后的数据?

  21. 数据读取 A/D数据寄存器 地址:base+4(低字节) AD7 ~AD0 base+5(高字节)AD11 ~AD8 属性:只读 说明: AD11~AD0 12位 注意: 先读高字节,再读低字节

  22. 问题6: 如何将高字节和低字节合并为一个12位二进制数?

  23. 解决: 将高字节左移8位后,与低字节相加。 temp=Hbyte<<8 +Lbyte inputData=Inportb(Base+5)&0x0F<<8 + inportb(Base+4)

  24. 问题7: 如何将读入的12位二进制数转换为十进制电压值?

  25. ±10V 0-4095(=212-1) 12位二进制数 数字信号与模拟信号的对应:

  26. 0 – 4095(212-1) ±10V 12位2进制数 inputData=Inportb(Base+5)&0x0F<<8 + inportb(Base+4) Volt=(inputData-2047)*20.0/4095 Volt=inputData*20.0/4095-10.0

  27. +10V 0V -10V 12位A/D的量化 umax 1111 1111 1111 =4095 1111 1111 1110 =4094 0.004884V 0111 1111 1111 =2047 q=( umax-umin)/2n-1 0000 0000 0001 = 1 umin 0000 0000 0000 = 0

  28. 模拟量输入通道小结 Outportb (Base+11,控制字) Outportb (Base+12,控制字) Outportb (Base+9,增益) Outportb (Base+10,通道号) Inportb(Base+5) Inportb(Base+4)

  29. 模拟量输入过程总结 • 选择A/D通道,通过写多路转换控制寄存器(Base+10) • 确定增益,通过写增益控制寄存器(Base+9) • 选择触发方式,通过写模式控制寄存器(Base+11) • 启动软件触发,通过写寄存器(Base+12) • 判断DRDY,通过读寄存器(Base+5)&0x10,等待A/D完成 • 完成后从数据寄存器(Base+5)(Base+4)中读数据读数据,先读高字节(Base+5),再读低字节(base+4)。 • 将整数值转换成模拟电压值,用作计算机显示。

  30. A/D初始化 A/D转换 软件触发方式的A/D流程图 选择通道 base+10, channel 设置增益 base+9, gain 设置触发模式 base+11, 1 触发A/D转换 base+12, 1 N N 转换完成? DRDY=0? Y Y base+5, base+4 读取A/D寄存器数据 拼接成12位二进制码 hbyte&0x0f<<8+lbyte 译码 计算AD采样值 V_out = A/D_word*20.0/4095-10.0

  31. 模拟量输出通道(AO) • 任务:把计算机输出的数字量信号转换成模拟电压或电流信号,以便去驱动相应的执行机构,达到控制目的; • 组成:一般由接口电路、数/模转换器和电压/电流变换器组成; • 核心:数/模转换器,简称D/A或DAC (digital-to-analog converter),通常也把模拟量输出通道(AO)简称为D/A通道。

  32. 模拟量输出通道的一般组成 每一路都是独立的 Outportb (Base+4) Outportb (Base+5)

  33. D/A输出寄存器

  34. D/A输出寄存器 D/A#1 outportb(Base+4,lbyte); outportb(Base+5,hbyte); 先写低字节 后写高字节 D/A#2 outportb(Base+6,lbyte); outportb(Base+7,hbyte);

  35. D/A的实现 • 明确使用的D/A通道,第1路对应高字节(Base+5),低字节(Base+4);第2路对应高字节(Base+7),低字节(Base+6)。 • 先写低字节,后写高字节。写高字节时,和低字节的内容同时送到DA转化器。 • D/A通道输出范围为0~10V。

  36. scanf(“%f”,&Vout) 得到一个十进制数值 V_word = Vout*4095/10 把10进制数转换为12位2进制编码 V_wordbase+4(6), base+5(7) 把12位2进制编码送出 delay(30) 延迟30μs hbyte=(V_word>>8)&0x0F; lbyte= V_word&0xFF; outportb(Base+4+port*2,lbyte); outportb(Base+5+port*2,hbyte); D/A输出操作流程 注意: D/A转换需要时间(30μs),对于高速的CPU,相邻两次D/A操作之间可能需要加等待延时。

  37. ACL-8112PG采集卡在工控机中的安装 (DO) (AD/DA) • CN1:开关量输出 • CN2:开关量输入 • CN3:模拟量单端输入与输出 (DI)

  38. 采集卡和端子板对应关系 至采集卡CN3

  39. 采集卡和端子板对应关系 • AD10 :A6 • GND : • A17 ~A20 • DA1 :B2 • GND : • B7 、B9

  40. 训练内容 1.模拟量输出通道D/A (1)运行演示程序(test.exe) 产生一个方波或正弦波信号,周期1ms~5ms可调,幅值0~10V可调。用示波器观察上述波形: DA 1号通道(B2、B7) (!!!注意示波器的探头的正确使用,不能相碰;否则设备损害,照价赔偿) (2)单步运行范例程序 按F8键,单步运行DA_ONE.C程序,由键盘键入需要输出的直流电压值( 0~+10V,源程序见附录5)。利用“watch”区域观察有关变量的值,确认并记录程序中的关键语句及其作用。注意对采集卡各端口的寻址和数据格式。 (运行E:\第二层次\DA_ONE.C;用数字电压表量DA输出端的电压)

  41. 训练内容(续) 2.模拟量输入通道A/D (1)运行演示程序:(test.exe) 计算机由10号A/D通道将信号采入,在显示器上显示0~+10V直流电压、正弦波信号和方波信号(10HZ—100HZ),这时,计算机相当于一个数字示波器。演示中可以用信号发生器作为信号源,也可以将演示程序D/A部分所产生的信号作为信号源。 (2)单步运行范例程序 单步运行AD_ONE.C程序(源程序见附录5),该程序将一个直流电压信号采入计算机,以数字形式显示,程序运行中,利用“watch”区域观察有关变量的值,确认程序中的关键语句及其作用,作记录。 (运行E:\第二层次\AD_ONE.C;直流电压由直流稳压电源提供)

  42. DO AD/DA 输入 DI 输出 训练接线图 接示波器 1、输入A/D通道的电压严禁超出±10V; 2、输出D/A通道严禁短路; 3、在关机状态下接线! 4、所有接线请注意和相应的读写寄存器地址对应; 5、不能同时接CN1和CN2! 接信号发生器或直流稳压电源

  43. AD通道程序(附录5.1) #define BASS_ADDRESS 0x220 /*设置板卡基地址*/ int Channel=10; /*定义通道号变量*/ main() /*AD主函数*/ { unsigned short int DRDY; int hbyte,lbyte; float temp; char c; /*定义变量*/ outportb(BASS_ADDRESS+10,Channel); /*选择通道*/ outportb(BASS_ADDRESS+9,0); /*输入电压范围-10~+10V*/ outportb(BASS_ADDRESS+11,1); /*选择软件触发方式*/ while(1) { DRDY=1; /*转换完成标志位置于未完成*/ outportb(BASS_ADDRESS+12,1); /*AD软件触发*/

  44. AD通道程序(续) while((DRDY!=0)&&(!kbhit())) /*AD转换未完成且无键盘响应*/ { DRDY=inportb(BASS_ADDRESS+5)&0x10; } /*查询等待AD转换完成*/ hbyte=inportb(BASS_ADDRESS+5)&0x0F; /*先读高字节*/ lbyte=inportb(BASS_ADDRESS+4)&0xFF; /*再读低字节*/ temp=((hbyte<<8)+lbyte-2047)*20.0/4095.0; /*换算模拟电压值*/ printf(“\nValue=%f”,temp); /*显示输入的电压值*/ printf("\nPress N to next and Press other key to quit!!"); c=bioskey(0); if(c=='n'||c=='N') continue; else break; } }

  45. DA通道程序(附录5.2) #define BASS_ADDRESS 0x220 /*设置板卡基地址*/ int Channel=1; /*定义通道号变量*/ main() /*DA主函数*/ { float Outputdata; int lbyte,hbyte; int out=0; char c; /*定义变量*/ while(1) { clrscr(); /*清屏*/ printf("\nPlease input Amplitude (0~10V):"); scanf(“%f”,&Outputdata); /*键盘输入直流电压信号*/

  46. DA通道程序(续) out=Outputdata*4095.0/10.0; /*换算电压值对应的代码*/ hbyte=(out>>8)&0x0F; /*代码高4位放入高字节变量*/ lbyte=out&0xFF; /*代码低8位放入低字节变量*/ outportb(BASE_ADDRESS+4+2*(Channel-1),lbyte); /*先写DA低字节,通道1为Base+4,通道2为Base+6*/ outportb(BASE_ADDRESS+5+2*(Channel-1),hbyte); /*再写DA高字节,通道1为Base+5,通道2为Base+7*/ printf("\nPress N to next and Press other key to quit!!"); c=bioskey(0); if(c=='n'||c=='N') continue; else break; /*继续程序或退出*/ } outportb(BASE_ADDRESS+4+2*(Channel-1),0); outportb(BASE_ADDRESS+5+2*(Channel-1),0); } /*对应的DA通道寄存器清零*/

  47. 作业 1、改写AD和DA通道程序为子程序 • int AD (int channel) /*0-15*/ { …… } • DA(int channel, int data) /*1-2;0-10V */{…… } 2、预习:信号离散化

  48. 寄存器描述及板内地址分配表

More Related