$5 模拟量输入输出通道-1.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
属性:只读 说明: AD11 ~ AD0 12位 注意: 先读高字节,再读低字节
Base+4 D7 D6 D5 D4 D3 D2 D1 D0
低字节 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0
Base+5 D7 D6 D5 D4 D3 D2 D1 D0 高字节 0 0 0 DRDY AD11 AD10 AD9 AD8
AD通道程序 设置基地址
#define BASS_ADDRESS 0x220
int Channel=10;
定义通道
main()
{
unsigned short int DRDY; int hbyte,lbyte;
选择通道(多路选择控制 )
float temp;
char c;
增益控制 (1)
outportb(BASS_ADDRESS+10,Channel);
CN2模拟量输入与输出
PCL-812PG采集卡的模拟量输入/出通道
十六路A/D通道均可将模拟电压信号转换成12位数字信号。 被转换电压的范围有六种,可以在程序中设定(须配合板 卡上的跳线开关),本训练项目已采用±10V。
12位2进制数
0 – 4095(212-1)
二路模拟信号输出通道可输出电压范围是0~+5V或0~ +10V。 本训练项目采用0~+10V 。
解决: 多路转换控制寄存器 地址:base+10 属性:只写 说明:CL3~CL0 A/D转换通道号
例: outportb(base+10,10) 选用几号通道?
Base+10 DD77 DD66 D5 D4 D3 D2 D1 D0
xx xx x x C1L3 C0L2 CL11 C0L0
模拟量输入的实现--可编程放大器
outportb(BASS_ADDRESS+9,0);
outportb(BASS_ADDRESS+11,1);
while(1)
{ DRDY=1;
模式控制:仅允许软件触发+查询方 式传输(默认)
outportb(BASS_ADDRESS+12,1);
AD软件触发
AD通道程序(续)
判断有无键按下
while((DRDY!=0)&&(!kbhit()))
问题2: 各路模拟的信号幅值范围不同
解决: 增益控制寄存器
地址:base+9 属性:只写
说明:Gain= 2R2R1R0
例: R2R1R0=000 Gain=1,
最大输入电压有跳线选择,默认 10V
模拟输入范围= Umax
10~ 0.3125V
Gain
outportb(base+9,0) 电压范围?
模拟量输出通道的一般组成
Q
接口
D/A
通路1
接口
ቤተ መጻሕፍቲ ባይዱ
D/A
通路1
CPU
接口
D/A
通路n
模拟量输出通道-- D/A输出寄存器
D/A 1
Base+4 低字节
Base+5 高字节
D7 D6 D5 D4 D3 D2 D1 D0 DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0
D7 D6 D5 D4 D3 D2 D1 D0 X X X X DA11 DA10 DA9 DA8
工业系统
模拟量传感器
信号调理
模拟量传感器 信号调理
模拟量传感器 信号调理
多 路 可编程 开 放大器 关
M U X
PCL-812PG
采样/保 持器
S/H
A/D 转换器
接口 电路
控制电路
控制线
数据总线
模拟量输入的实现--多路控制
问题1:同时会有多路模拟信号输入,每一路信号选用 一个AD通道,采集卡有16路AD通道,哪一路工作?
S2
S1
S0
内部触发
0
0
0 禁止触发A/D
0
0
1 仅允许软件触发+查询方式传输(默认)
0
1
0 仅允许板卡自带定时器触发+DMA传输
Bas1e+11 1D7 D06 允D许5 卡自D带4定时D器3触发+D查2询方D式1或中D断0传输
x x x x x S2 S1 S0
模拟量输入的实现--A/D触发
问题3:模拟电压输入后,如何使A/D开始?
模拟量输入输出通道
训练目的
1.了解计算机如何采集工业系统中的 模拟信号。
2.了解计算机如何输出模拟信号。
模拟量输出/输入系统的一般组成
Outportb(基地址+偏移地址,Intvar)
采集卡
Intvar=Inportb (基地址+偏移地址) 端子板
信号调理电路
驱动电路
工业系统
模拟量输入通道的一般组成
printf("\nValue=%f",temp);
计算AD采样值
printf("\nPress N to next and Press other key to quit!!");
c=bioskey(0);
if(c=='n'||c=='N') continue;
else
break;
}
}
作业
1复习本次课程内容,思考模拟量输入输出程 序与开关量输入输出程序的区别与联系 2阅读附录1-3,进一步熟悉相关寄存器的功能 3注释DA通道程序 4编写选练3的相关程序,注意程序书写规范
CN1模拟量单端输入
A/D 10 A/D 11 A/D 12 A/D 13 A/D 14 A/D 15 D/A 1 D/A 2 V.REF1 V.REF2
1 2 A.GND 3 4 A.GND 5 6 A.GND 7 8 A.GND 9 10 A.GND 11 12 A.GND 13 14 A.GND 15 16 A.GND 17 18 A.GND 19 20 A.GND
DA 通道程序
设置基地址
lbyte=out&0xff; outportb(BASE_ADDRESS+4+2*(Channel-1),lbyte); outportb(BASE_ADDRESS+5+2*(Channel-1),hbyte); 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 通道程序
设置基地址
#define BASE_ADDRESS 0x220 int Channel=1; main() {
float Outputdata; int lbyte,hbyte; int out=0; char c; while(1) {
clrscr(); printf("\nPlease input Amplitude (0~10V):"); scanf("%f",&Outputdata); out=Outputdata*4095.0/10.0; hbyte=(out>>8)&0x0f;
训练内容 P109
2.模拟量输入通道A/D (1)运行演示程序 该程序可将以下三种信号经由10号A/D通道采入计算机,在显示器上显 示: ·0~+10V的直流电压 ·正弦波信号 频率不能太大 ·方波信号 这相当于一个数字示波器。演示中可以用信号发生器作为信号源,也 可以将演示程序D/A部分所产生的信号作为信号源。可以示波器同时 测量被转换的信号。 (2)单步运行范例程序 在Turbo C环境下,单步运行程序AD_ONE.C(源程序见附录6),该程 序将一个直流电压信号采入计算机,以数字形式显示,这相当于一个 数字电压表。程序运行中,利用“watch”区域观察有关变量的值,确 认程序中的关键语句及其作用,作记录。注意对采集卡端口的寻址。
等待AD 转换完成
{
DRDY=inportb(BASS_ADDRESS+5)&0x10; 获取AD高字节 }
hbyte=inportb(BASS_ADDRESS+5)&0x000f; 获取AD低字节
lbyte=inportb(BASS_ADDRESS+4)&0x00ff;
temp=((hbyte<<8)+lbyte-2047)*20.0/4095.0;
接采集卡CN2
训练接线图
接信号发生器或 直流稳压电源
接示 波器
在关机状态下接线! 输入A/D通道的电 压严禁超出±10V!
在关机状态下接线! 输出D/A通道严禁短 路
训练内容 P108
1.模拟量输出通道D/A
(1)运行演示程序 该程序有以下功能: ·将一个由键盘输入的0~+10之间的十进制数字值转换成0~+10V 的模拟直流电压; ·产生一个方波信号,周期1ms~5ms可调,幅值0~10V可调; ·产生一个正弦波信号,周期和幅值可调; 这三种信号均可经由1(2)号D/A通道输出。这样,工控机和采集卡 共同构成了一个信号发生器。演示中可以用示波器观察上述波形。 (!!!注意示波器的探头的正确使用,不能相碰;否则设备损害, 照价赔偿) (2)单步运行范例程序 在Turbo C环境下,单步运行程序DA_ONE.C(源程序见附录6), 该程序将一个直流电压信号输出,电压值由键盘键入。程序运行中, 利用“watch”区域观察有关变量的值,确认并记录程序中的关键语 句及其作用。注意对采集卡各端口的寻址和数据格式。
D/A输出时,先写低字节, 暂存在寄存器里面,当高 字节写完后,进行D/A转

作业
1把AD程序(附录6.1)改写为子程序: int AD (int channel) /*0-15*/
{ …… }
2把DA程序(附录6.2)改写为子程序: DA(int channel, int data) /*1-2;0-10V */
D/A 2
Base+6 低字节
Base+7 高字节
D7 D6 D5 D4 D3 D2 D1 D0 DA7 DA6 DA5 DA4 DA3 DA2 DA1 DA0
D7 D6 D5 D4 D3 D2 D1 D0 X X X X DA11 DA10 DA9 DA8
先输出低字节,后输出高字节
PCL-812PG采集卡的模拟量输入/出通道
{ …… }
3复习本次课程内容,思考模拟量输入输出程 序与开关量输入输出程序的区别与联系
CN1连接0号~9号A/D通道,CN2连接A/D10~A/D15A/D 通道。此外,CN2还用其13、14号引线担负1号D/A通道, 15、16号引线担负2号D/A通道。
A/D 0 1 2 A.GND A/D 1 3 4 A.GND A/D 2 5 6 A.GND A/D 3 7 8 A.GND A/D 4 9 10 A.GND A/D 5 11 12 A.GND A/D 6 13 14 A.GND A/D 7 15 16 A.GND A/D 8 17 18 A.GND A/D 9 19 20 A.GND
Base+9 D7 D6 D5 D4 D3 D2 D1 D0
x x x x x R2 R1 R0
模拟量输入的实现--A/D触发
问题3:模拟电压输入后,如何使A/D开始? 解决:触触123)))软板外发发1地说 例)件 上 部: 方模址明 :触 定 脉给 式式::发 时 冲一 :控bSo器触控制a3us触发~制t寄ep发+So信存r01t号器b1(,b选a使s择eA属+/D1性1开,1:始) 只选写用何方式?
解决: 2)A/D转换软件触发 地址:base+12 属性:只写 说明: 例: outportb(base+12,1) 转换开始
模拟量输入的实现—数据传输方式
问题4:如何知道A/D转换已经完成? 解决: A/D数据寄存器(高字节)
数据地传DR址输D方:Y=式b1:a:sAe/+D转5换没有完成 1)查询属方性式:=传只0:输读A/DD转R换D完Y 成 23))D中M断说当被A传读设明传输置A:输/D为D低1R字D节YA直寄/D接存完A存器/成D储(转后器ba换发存s中e完取+断4成)时请标,求志位
例: DRDY=inportbb(base+5)&0x10 判断DRDY是否为0?
Base+5 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0 DRDY AD11 AD10 AD9 AD8
模拟量输入的实现—数据读取
问题5:如何读取A/D转换完成后的数据? 解决: A/D数据寄存器
地址:base+4(低字节) AD7 ~ AD0 base+5(高字节)AD11 ~ AD8
相关文档
最新文档