英利工控主板的多通道数据采集方案

网友投稿 219 2022-11-15

英利工控主板的多通道数据采集方案

硬件部分 该方案的主要硬件构成如下:

此时可以采用英利工控主板的GPIO模拟出SPI接口(以EM9160为例): #define SPI_CS GPIO15 #define SPI_CLK GPIO14 #define SPI_DOUT GPIO13 #define SPI_DINGPIO12 #define SPI_EOC GPIO10

该应用底板和英利工控主板配套,已经可以满足一般的数采应用需求。如果客户需要更多的数据输入,可以参考该应用底板的方式进一步扩展;如果客户需要更多的其他功能,可以参考英利的开发评估底板和功能扩展模块进行设计。

软件部分 TLC2543是4线制SPI接口,因此它的读写操作是同时进行的,即所谓全双工串行数据传输。在构造函数时,需要仔细研究AD芯片数据手册上提供的SPI接口时序关系,如下图所示:

软件开发过程中需注意以下几点: 1、在SPI_CS片选有效后,TLC2543将把上次AD转换的数据,按MSB在先的顺序,呈现在SPI_DI信号线上,并在SPI_CK的 下降沿更新数据 2、SPI_CK的上升沿将把对AD芯片的操作指令锁存到AD芯片,输出的数据也是按MSB在先的顺序 3、输入AD的操作指令只有8个bit,而从AD读出的转换数据有12个bit,在读入低4bit时,输入指令用“0”填充 4、芯片数据手册中串行输入输出数据与我们的定义SPI_DO和SPI_DI是正好相反的 5、读出的数据须经过格式转换,才能转为通常所见的电压值

据上所述,可以构建相应的操作函数如下:

该应用方案程序的核心部分是数据处理函数int ReadAD( int ChNum ),该函数将模拟量读出并转换为浮点数格式,其相关处理代码如下:

int ReadAD( int ChNum ) { unsigned int i1 = 0; int i2, i3; unsigned int dwPinState; unsigned int CtrlBit; // 将控制字转换为标准的12位 CtrlBit = (unsigned int)ChNum << 4; SPI_OutClear( fd, SPI_CS ); // 等待转换完成 for( i2=0; i2<100; i2++ ) { SPI_PinState( fd, &dwPinState ); if( dwPinState & SPI_EOC ); break; } // 转换失败处理 if( i2 >= 100 ) { SPI_OutSet( fd, SPI_CS ); return -14; } // 第一次读出的是无效数据,读出并且扔掉 for( i2=0; i2<12; i2++ ) { i1 = i1 << 1; SPI_PinState( fd, &dwPinState ); if( dwPinState & SPI_DIN ) i1 = i1 | 0x01; if( CtrlBit & 0x800 ) SPI_OutSet( fd, SPI_DOUT ); else SPI_OutClear( fd, SPI_DOUT ); SPI_OutSet( fd, SPI_CLK ); SPI_OutClear( fd, SPI_CLK ); CtrlBit = CtrlBit << 1; } // 正式读取数据,读十次,交由后面的GetDeltaV( )函数取平均值并转换为电压 for( i3=0; i3<10; i3++ ) { i1 = 0; CtrlBit = (unsigned int)ChNum << 4; for( i2=0; i2<100; i2++ ) { SPI_PinState( fd, &dwPinState ); if( dwPinState & SPI_EOC ); break; } if( i2 >= 100 ) { SPI_OutSet( fd, SPI_CS ); return -12; } for( i2=0; i2<12; i2++ ) { i1 = i1 << 1; SPI_PinState( fd, &dwPinState ); if( dwPinState & SPI_DIN ) i1 = i1 | 0x01; if( CtrlBit & 0x800 ) SPI_OutSet( fd, SPI_DOUT ); else SPI_OutClear( fd, SPI_DOUT ); SPI_OutSet( fd, SPI_CLK ); SPI_OutClear( fd, SPI_CLK ); CtrlBit = CtrlBit << 1; } ADData[i3] = i1; } SPI_OutSet( fd, SPI_CS ); GetDeltaV( ); return 1; }

该方案的主流程如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Vue实现导出功能(无后端配合)
下一篇:大数据Hadoop之——Kafka 图形化工具 EFAK(EFAK环境部署)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~