2020-02-03 10:08发布
haolei432370 发表于 2012-8-27 15:34 恩恩
未命名.jpg (275.78 KB, 下载次数: 0)
下载附件
图
2012-8-28 20:46 上传
marshallemon 发表于 2012-8-27 21:47 通常这种16bit的AD的精度还远远不及4 1/2的万用表,对于多通道的AD,每切换一个通道都要进行校准一次后再 ...
最多设置5个标签!
通常这种16bit的AD的精度还远远不及4 1/2的万用表,对于多通道的AD,每切换一个通道都要进行校准一次后再读取,另外切换通道后的头几个数据需要丢弃
未命名.jpg (275.78 KB, 下载次数: 0)
下载附件
图
2012-8-28 20:46 上传
1.增益为1的时候 三个通道的测试很精确(应该能说明我切换通道没问题吧)
2.单增益为64的时候。单通道测试的时候也很精确
R3到地的电压是300mv(满足GND+300mv)
R2两端的电压差值为10mv
当不接来自信号发生器的信号时候(AIN+接R2与R1之间,AINI-接R2与R3之间)测电压也很精确
当按照上图接线的时候R3到地的300mv不稳定测试的值偏低(测试的值应该为A100(16进制),但是测试的值8932(16进制))
I/O 寄存器位复位值为0x00,(默认为输入,不用设置)
输入不同的模拟量测试的值相差不大(估计还是电路问题(三通道测试的时候接法跟上面一样),所以有以上测试)
哎~电路知识差了,等这东西做完,找时间补补
- while(1)
- {
- for(i=0;i<3;i++)
- {
-
- Init_Ad7798(i);//通道1、通道2、通道3初始化
- ReadData_7798();
- j=2*i+1;
- Serial_Receive(hData); //发送高字节数据(在ReadData_7798中读出)
- Serial_Receive(lData); //发送低字节数据(在ReadData_7798中读出)
- }
- }这是主程序
复制代码- void Init_Ad7798(unsigned char ChannelNum)
- {
- WriteByte_7798(0xff);//reset ad7798
- WriteByte_7798(0xff);
- WriteByte_7798(0xff);
- WriteByte_7798(0xff);
- WriteByte_7798(0x10);//写入通讯寄存器设置下一个操作,写信给配置寄存器
- WriteByte_7798(0x26);//增益为128
- WriteByte_7798(0x30+ChannelNum);
- //写入模式注册启动 内部零刻度校准
- WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
- WriteByte_7798(0x80);
- WriteByte_7798(0x0a);
- WaiteRDY();//等待及由RDY销去低显示最终的校准周期
- //写入模式注册启动 内部满刻度校准
- WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
- WriteByte_7798(0xa0);
- WriteByte_7798(0x0a);
- WaiteRDY();//等待及由RDY销去低显示最终的校准周期
- WriteByte_7798(0x08);//写入通讯寄存器设置下一个操作,写信给模式寄存器
- WriteByte_7798(0x00);
- WriteByte_7798(0x0a);
- }这是初始化程序(每次通道改变的时候)
复制代码分享如下
PCB+CODE
用AD7798进行三路(重量、温差、温度)小于10mv的电压进行采集,其中重量、温差两路信号是在起原始信号的基础上进行了二次放大,再用AD进行采集,这个没有问题。现在的问题出在第三路的采集,它是来源于化学反应(热电偶)过程中信号(阻抗很小),直接送到AD中进行采集,但是用万用表测量很稳定的信号接到AD上就出出现0.1mv-0.4mv的跳动,而且很有规律从0.1mv-0.4mv-0.1mv这个过程大概是一秒钟一个周期,并且它在其原始信号的基础上有了0.05mv-0.2mv的增量,增量大小规律不确定!
图和程序在分享里
单独热电偶那路信号(不管接AIN1 还是AIN2,AIN3)都不稳定 另两路信号很好
一周热门 更多>