1、plc模拟量输进模块扩展
这里以一路12位模拟量输进为例,模拟信号以0~5v标准电压的形式送进信号输进端,应用12位a/d转换芯片max187实现模数转换。max187是12位串行a/d,具有较高的转换速度,采样频率是75khz,适用于较高精度的过程控制。考虑到实际产业现场中的高频干扰,在采样信号送max187之前还使用了低通滤波器滤波,如图1所示。
图1 低通滤波、放大器及a/d转换
max187具有内部参考电压,既4#管脚(ref)为 4.096v,因此,a/d转换的全量程为4.096v。而输进信号是0~5v,因此,要加一级运放把0~5v转换成0~4.096v后送进max187。at89c52的p1.3和max187的片选端(cs)相连、at89c52的p1.4和max187的串行时钟信号端(sclk)相连、at89c52的p1.5和max187的串行数据输出端(dout)相连。模拟量采样的值存进单片机的内存中,再由单片机的串行口传送给plc。a/d转换的c51程序如下:
#include
#include
sbit ic4_s = p1^4; /* ad输进端口设置*/
sbit ic4_d = p1^5;
sbit ic4_c = p1^3;
void input(void )
{ unsigned char idata i;
unsigned int idata result=0x0000;
ic4_c = 0; /* cs端为低电平*/
for(i=0;i<12;i++)
{ result = result << 1;
ic4_s = 0; /*时钟端产生时钟脉冲*/
ic4_s = 1;
if( ic4_d ) result++; /*从串行数据输出端读进a/d转换数据*/
}
ic4_c = 1; /* cs端为高电平*/
pdat[1] = result;
}
max187的工作时序图见图2。
图2 max187的工作时序图
2、plc模拟量输出模块扩展
这里以一路12位模拟量输出为例,设计中将采用12位d/a转换芯片max531来实现数摸转换。我们在max531的输出端接运算放大器,将模拟输出调节至0~5v,输出部分的硬件电路如图3所示。这里,max531是12位串行d/a,具有较高的转换速度, max531具有内部参考电压,既10#管脚(refout)为2.048v,因此, d/a转换的全量程为2.048v。而输出信号一般要求是标准的0~5v,因此,要加一级运放把max531输出的0~2.048v信号转换成 0~5v信号。at89c52的p1.0和max531的串行时钟信号端(sclk)相连、at89c52的p1.1和max531的串行数据输进端(din)相连、at89c52的p1.2和max531的片选端(cs)相连。plc把要输出的模拟量通过串行口传送给单片机,存进的内存中,再由单片机完成d/a转换进行输出。a/d转换的c51程序如下:
图3 d/a转换及放大器原理图
#include
#include
sbit ic2_s = p1^0; /*da输出端口设置*/
sbit ic2_d = p1^1;
sbit ic2_c = p1^2;
void output(unsigned int dat)
{ unsigned char idata i = 12;
ic2_c = 0; /* cs端为低电平*/
while( i-- )
{ ic2_s = 0; /*时钟端产生时钟脉冲*/
if ( dat &0x0800 ) ic2_d =1; /*从串行数据输进端读进da转换数据*/
else ic2_d =0;
ic2_s = 1;
dat = dat << 1;
}
ic2_c=1; /* cs端为高电平*/
}
max531的工作时序图见图4。
图4 max531的工作时序图