AD与DA转换与数字PID调节器算法的研究实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东南大学自动化学院
实验报告
课程名称:计算机控制技术
第 1 次实验
实验名称: A/D与D/A转换 & 数字PID调节器算法的研究
院(系):自动化学院专业:自动化
姓名:学号:
实验室: 416 实验组别:
同组人员:实验时间: 2014年 3月 20日评定成绩:审阅教师:
第一部分实验一A/D与D/A转换
一、实验目的
1、通过编程熟悉VC++的Win32 Console Application的编程环境;
2、通过编程熟悉PCI-1711数据采集卡的数据输入输出;
3、了解采集卡AD转换芯片的转换性能;
4、通过实验了解字节数与二进制数的转换。
二、实验设备
1.THBDC-1型控制理论·计算机控制技术实验平台
2.PCI-1711数据采集卡一块
3.PC机1台(安装软件“VC++”及“THJK_Server”)
三、实验原理
1.数据采集卡
PCI-1711是输入功能强大的低成本多功能PCI总线卡。
特点:16路单端模拟量输入
12位A/D转换器,采样速率可达100KHz
每个输入通道的增益可编程
自动通道/增益扫描
卡上1K采样FIFO缓冲器
2路12位模拟量输出(仅PCI-1711)
16路数字量输入及16路数字量输出
可编程触发器/定时器
图1-1 PCI-1711卡管脚图
2. AD/DA转换原理
该卡在进行A/D转换实验时,输入电压与二进制的对应关系为:-10~10V对应为0~4095(A/D转换精度为12位)。
D/A通道输出围为0~10V。
四、实验步骤
1、仔细阅读“PCI-1711数据采集卡驱动函数说明.doc”文档。
2、将实验台上的“阶跃信号发生器”的输出端通过导线与PCI-1711数据采集接口的AD1通道输入端相连,同时将PCI-1711数据采集接口的AD1通道通过导线与实验平台上的交直流数字电压表(选取直流档)的输入端相连;
3、打开ADDA实验VC++程序文件夹,打开.dsw工程文件,添加缺少的main函数(主程序),编程实现以下功能:
在运行程序后的DOS界面上应显示AD第一通道输入值,同时并显示出转换后对应的以十进制存放的二进制码,并将其转换为二进制码;
在程序中使用输出函数通过DA1通道输出一个0~10V的电压(PCI-1711卡无法输出负电压),然后使用THBDC-1型实验平台上的直流数字电压表进行测量,并确认输出值是否正确。
五、实验记录
1.系统main函数如下:
void main() //主程序
{
init_1711();
for(;;)
{
ADinput(0); //读取AD1通道的电压值
printf("AD1通道输入值:%.3f\n",fVoltage);
ADbinaryIn(0); //读取AD1通道的二进制电压值
printf("AD1通道的二进制值为(以十进制数存放):%d\n",bin);
//-10V~10V对应为(0~4095) //AD数据转换为二进制
char *temp = new char[NUM+1];
Convert(bin,temp,NUM); //十进制数转换为二进制数的转换函数
printf("AD1通道数据转换为二进制为:%s\n",temp);
delete temp;
DAoutput(0,3.2); //从DA1通道输出3.2V的电压值
printf("DA1通道输出值:%.3f\n",ptAOVoltageOut.OutputValue);
DABinaryout(1,4095);
printf("DA1通道输出值:%d\n",ptAOBinaryOut.BinData);
printf(" \n");
Sleep(1000);
}
expexit();
}
2.程序的主要函数:
void Convert(USHORT data,char* temp,long Dim); //十进制数转换为二进制数
void ErrorHandler( DWORD dwErrCde ); //通过错误代码来获取相应的错误信息函数void ErrorStop( long*, DWORD ); //出错处理函数
bool init_1711(); //初始化设备
void expexit(); //关闭设备
float ADinput(unsigned char chan); //模拟量输入函数
bool DAoutput(unsigned char chan,float DAdata); //模拟量输出函数USHORT ADbinaryIn(unsigned char chan); //模拟量输入函数(二进制形式)
3.由于是验证性实验,以下为我们记录的两组数据:
①A/D转换
通过改变滑动变阻器的阻值,改变AD1输入端输入电压的大小,用电压表测出实际输入的电压值,并记录通过A/D转换计算机采集的十进制与二进制值,程序运行结果见下表中,
程序将外界输入电压通过A/D转换得到与原输入值大致相等的电压,输入电压与二进制的对应关系为:-10~10V对应为0~4095,采用“除二取余”法计算相应的二进制码,验证发现结果是比较准确的,误差较小。
②D/A转换
在程序中多次改变输出电压的大小(通过改变主程序中DAoutput(0,x)中的函数),利用电压表测量实际DA1输出的电压值,运行程序后,得到的具体的D/A转换的对应关系如
由表中数据可以看出,DA1通道的输出电压值与程序中设定的值十分接近(相等),在误差允许的围认为输出值正确。