ac1380 3路任意波形发生板.docx
《ac1380 3路任意波形发生板.docx》由会员分享,可在线阅读,更多相关《ac1380 3路任意波形发生板.docx(11页珍藏版)》请在冰豆网上搜索。
ac13803路任意波形发生板
AC13803路任意波形发生板
W&WLAB
©1999
AC1380简介
AC1380是一款3路12位并行波形发生板,可以产生单次或重复得任意波形,支持软件启动或外部触发启动。
性能:
●3路12位D/A转换器-DAC7545
●每路输出范围+5V--5V
●电压输出精度0.1%
●输出分辨率12位:
1LSB
●每路输出波形最长64K样点
●-5V到+5V建立时间10us
●输出波形点频最高1MHz
●单次波形和连续波形由程序控制
●板上时钟和外部时钟由程序控制
目录:
1.AC1380简介
2.AC1380拨码开关设置
3.AC1380的I/O地址及I/O功能说明
4.AC1380的编程及硬件说明
5.附录
二、AC1380拨码开关设置
S1:
I/O地址拨码开关
S1是AC1380的I/O地址选择的拨码开关,位于AC1380板的右下方。
AC1380占用4条地址线(A0-A3),I/O译码由A4-A9六位决定。
AC1380的地址空间为100H-3FFH。
S1的选择方法如下:
S1:
1
2
3
4
5
6
:
:
:
:
:
:
A4
A5
A6
A7
A8
A9
注意:
拨码器置ON为0,OFF为1。
AC1380的实际操作地址:
ADR=基地址(BASE)+偏移地址(OFFSET),BASE由S1选择,为100H-3FFH。
例:
欲选择ADR=300H,S1设置方式如下:
1
2
3
4
5
6
ON
ON
ON
ON
OFF
OFF
A4
A5
A6
A7
A8
A9
*此地址为出厂地址设置
三、AC1380的I/O地址及I/O功能说明
3-1:
AC1380的I/O地址分配
AC1380共占用4条地址线,共有个I/O地址,具体分配如下:
地址偏移
读操作(RD)
写操作(WR)
0H
写0通道数据
2H
写1通道数据
4H
写2通道数据
8H
读工作状态
启动
9H
重置
AH
写模式字
CH
读计数器0
置计数器0
DH
读计数器1
置计数器1
FH
设定计数器
详细操作说明:
0H写操作:
功能:
向AC1380写入通道0的输出数据
操作方式:
按字操作。
即一次向该口输出一个16位数据,低12位为通道0输出值,高4位为0。
具体使用见下一章编程
2H写操作:
功能:
向AC1380写入通道1的输出数据
操作方式:
按字操作。
即一次向该口输出一个16位数据,低12位为通道0输出值,高4位为0。
具体使用见下一章编程
4H写操作:
功能:
向AC1380写入通道2的输出数据
操作方式:
按字操作。
即一次向该口输出一个16位数据,低12位为通道0输出值,高4位为0。
具体使用见下一章编程
8H读操作:
功能:
状态查询,应用在单次波形发生场合
操作方式:
从该口读入一个8位数据D7-D0,D0有效
当D0=0时,单次波形输出完成
当D0=1时,板正在输出波形
9H写操作:
重置
功能:
停止输出波形,地址计数器归零
操作方式:
向该口输出任意值,一般输出0
AH写操作:
功能:
设定AC1380板的工作模式
操作方式:
向该口写入一个8位数据D7-D0(模式字)。
D0控制启动方式,D1控制输出方式,
D2-D7没有用
D0:
启动模式
当D0=0时,为软件启动
当D0=1时,为外触发启动
D1:
波形发生模式
当D1=0时,为循环输出
当D1=1时,为单次波形输出
CH写操作:
功能:
设置计数器0初始值以设定输出点频
操作方式:
分二次向该口送出二个8位数,先低8位后高8位,构成一个16位设定值
输出点频=4Mhz/计数器0设定值
DH写操作:
功能:
设置计数器1初始值以设定输出波形点数
操作方式:
分二次向该口送出二个8位数,前低后高构成一个16位设定值
输出波形点数=计数器1初始值
FH写操作:
功能:
设定计数器0和计数器1的工作模式,或对计数器0和计数器1进行锁存操作
操作方式:
分别向该口输出一个8位数,以便分别设定计数器0和计数器1的工作方式
在AC1380的使用中,计数器0和计数器1均工作在模式2,即频率发生器状态。
具体使用时,具体操作如下:
(1)向该口输出34H,设定计数器0工作模式为频率发生器,数值设定与读取为先低8位后高8位,构成一个16位数值
(2)向该口输出74H,设定计数器1工作模式为频率发生器,数值设定与读取为先低8位后高8位,构成一个16位数值
三、AC1380的编程及硬件
AC1380板是一款三路同步输出波形方式板。
硬件提供等点频、等长度、相同模式的支持。
具体操作时请按以下步骤使用:
(1)重置
(2)设定工作模式
(3)设定计数器0的工作方式和输出点频
(4)设定计数器1的工作方式和输出点数
(5)设定每点输出值
从第一点组起连续付值,每一点组包含三路数据,第0通道必须在最后付值
例如现输出点数为每通道100点。
设定方式如下。
输出个数n=0
PP:
输出第2通道第n点数值
输出第1通道第n点数值
输出第0通道第n点数值
n=n+1
判别n=?
100
否跳到PP:
是完成设定
(6)启动
编程举例:
以下程序以MSC语言做说明
AC1380板的基地址为AC1380_base
(一)重置:
outp(AC1380_base+0x9,0);
(二)设定工作模式:
启动方式Trsl=0:
软件启动,=1外触发启动
输出方式Rmode=0:
循环输出,=1单次波形
工作模式Mode=(Trsl&1)+(Rmode*2&2)
outp(AC1380_base+0xA,Mode);
(三)设定计数器0的工作方式和输出点频
//设置计数器0工作方式
outp(AC1380_base+FH,0x34);
//设置输出点频,点频为Dotf赫兹
data0=4000000/Dotf;
datal=data0&0xff;
datah=(data0-datal)/256;
outp(AC1380_base+CH,datal);
outp(AC1380_base+CH,datah);
(四)设定计数器1的工作方式和输出点数
//设置计数器1工作方式
outp(AC1380_base+FH,0x74);
//设置输出点频,点数为Length
data1=Length;
datal=data0&0xff;
datah=(data0-datal)/256;
outp(AC1380_base+DH,datal);
outp(AC1380_base+DH,datah);
(五)设定每点输出值
intdata0[Length];//通道0输出值
intdata1[Length];//通道1输出值
intdata2[Length];//通道2输出值
//输出值付值
...
//向AC1380板送输出值
for(i=0;i{
outpw(data2[i]);//如不用,可省略
outpw(data1[i]);//如不用,可省略
outpw(data0[i]);//通道0必须放在最后
}
(六)启动
outp(AC1380_base+0x8,0);
//如果软件启动,则输出开始
//如果外触发,等待触发信号
程序举例:
现需产生三路波形:
通道0为方波,通道1为正弦波,通道2为三角波
输出点频为100Khz,每个波形有1000点,软件启动,连续波形。
#include
intdata0[1000];//第0通道波形数组
intdata1[1000];//第1通道波形数组
intdata2[1000];//第2通道波形数组
intAC1380_base;//AC1380的基地址
main()
{
inti,j,k;
floataa,bb,cc;
inttemp1,temp2;
unsignedintlength;
unsignedinttimer;
inttrsl,rmode;
intgap=1000;
//设定AC1380的基地址为0x300
AC1380_base=0x300;
//给第0通道波形数组付值
for(k=0;k{
data0[k]=sin(2*3.1416926/(float)gap*(float)k)*2047.0+2048.0;
}
//给第1通道波形数组付值
for(k=0;k<(gap/2);k++)
{
data1[k]=0;
data1[k+gap/2]=0xfff;
}
//给第2通道波形数组付值
for(k=0;k<(gap/2);k++)
{
data2[k]=k/gap*4095;
data2[k+gap/2]=4095-data2[k];
}
//设定输出波形点长
length=gap;
//设定波形触发方式
//trsl=0softwaretostart;D=1trigtostart
trsl=0;
//设定波形输出模式
//rmode=0cycle;=1single
rmode=0;
//设定输出点频
//settimer
timer=40;//10us
//初始化AC1380板
ac1380_ini(timer,length,trsl,rmode);
//向AC1380板送输出波形数值
ac1380_mem(data0,data1,data2,(unsignedint)length);
//启动输出
outp(0x308,0);
}
//向AC1380板送输出波形数值子程序
ac1380_mem(int*da_data0,int*da_data1,int*da_data2,unsignedintlength)
{
unsignedinti,j,k;
//重置,数据存储器地址规零
outp(AC1380_base+9,0);
for(i=0;i<=length+1;i++)
{
outpw(AC1380_base+4,da_data2[i]);//送第2通道第i点数据
outpw(AC1380_base+2,da_data1[i]);//送第1通道第i点数据
outpw(AC1380_base,da_data0[i]);//送第0通道第i点数据
}
}
//AC1380初始化子程序
ac1380_ini(unsignedinttimer,unsignedintlength,inttrsl,intrmode)
{
intdatal,datah,i;
intmode;
//重置
outp(AC1380_base+9,0);
//设定计数器0工作模式
outp(AC1380_base+0xf,0x34);
//初始化计数器0
datah=timer>>8;
datal=timer&0xff;
outp(AC1380_base+0xc,datal);
outp(AC1380_base+0xc,datah);
//设定输出波形点长
//设定计数器1工作模式
outp(AC1380_base+0xf,0x74);
//设定计数器1初始化值
datah=length>>8;
datal=length&0xff;
outp(AC1380_base+0xd,datal);
outp(AC1380_base+0xd,datah);
//设定AC1380板工作模式
mode=trsl+rmode*2;
mode=mode&0x03;
outp(AC1380_base+0xa,mode);
//重置
outp(AC1380_base+9,0);
}
五、附录
AC1380板接口定义:
AC1380板接口为DB25芯D型接口,插座上标记有插座引脚的号码。
141516171819202122232425
12345678910111213
1脚:
第0通道输出
2脚:
第1通道输出
3脚:
第2通道输出
14、15、16脚:
模拟输出地线
12脚:
外触发输入
13脚:
外触发输入地