1、引言
在传统的工业控制中,现场的传感器与控制器之间总是以 4~20mA 的直流电流或 1-5V 的直流电压来传递信息的。随着工业控制技术的不断发展,工业控制系统正向着数字化、智能化、网络化和开放化的方向发展。因此,模拟传输渐渐被数字传输所取代。而现场总线(FieldBus)则可以很好地适应工业控制技术发展的趋势,是对成熟控制系统结构的根本变革。LonWorks 总线是美国 Echelon 公司于 1991 年提出的一种现场总线,它采用面向对象的设计方法,通过网络变量把网络通信设计简化为参数设置。LonWorks 技术的核心是神经元(Neuron)芯片,这个神经元片中有三个 8 位的 CPU,它们不仅可以用作 LonWorks 总线的通信处理器,而且还可以用作采集和控制的通用处理器。本文介绍具有串行口的 A/D 芯片 TLC0832 与作为通用处理器的神经元芯片的两种接口实现方法。
2、 Neuron 芯片和 TLC0832 的基本特性
2.1 Neuron 芯片的基本特性
LonWorks 网络是由节点构成的,每个节点包括一片 Neuron 芯片、传感和控制设备、收发器和电源。其中,Neuron 芯片是节点的核心,它具有 3 个 CPU:CPU-1 是介质访问处理器,CPU-2 是网络处理器,CPU-3 是应用处理器。Neuron 芯片家族中的最初成员是 Neuron 3120xx 和 Neuron 3150 芯片。3120xx 芯片中包括 EEPROM、RAM、ROM 存储器,而 3150 芯无内部 ROM,但拥有访问外部存储器的接口,其寻址空间可达 64kB,可用于开发更为复杂的应用系统。
2.2 TLC0832 的基本特性
TLC0832 是八位逐次逼近模数转换器,它有两个可选择的输入通道。TLC0832 的特点如下:
*8 位分辨率;
*可和微处理器接口或独立使用;
*可满量程工作或使用 5V 基准电源;
*具有单通道或多路器选择的双通道,并可选择单端或差分输入;
*采用单 5V 供电,输入范围为 0~5V;
*输入和输出与 TTL 和 CMOS 兼容;
TLC0832 处于工作状态时,置 CS 端方可启动转换,并使所有的逻辑电路使能。CS 在整个转换过程中必须置为低电平,接着从处理器接受一个时钟。当一个时钟的时间间隔被自动插入后,可以使多种转换器选定的通道稳定。而当 DO 脱离高阻状态时,可提供一个时钟的时间间隔的前导低电平,以使多路器稳定。SAR 比较器用于对电阻梯形网络输出的逐次信号和输入模拟信号进行比较,比较器输出则用于表示刘大于还是小于电阻梯形网络的输出。在转换过程中,转换的数据同时从 DO 端输出,并以最高位(MSB)开头。在经过 8 个时钟后,转换完成,CS 变高,内部所有寄存器清零,此时,输出电路变为高阻状态。如果希望开始另一个转换,CS 必须有一个从高到低的跳变,且后面应紧跟着输入地址数据。TLC0832 的输入配置可在多路器寻址时序中进行,多路器地址通过 DI 端移入寄存器。用多路器地址选择模拟输入通道的方法如表 1 所列,其工作时序图如图 1 所示。
3、 Neuron 和 TLC083 的两种接口方法
3.1 基于 Neuron 芯片 Neurowire I/O 模式方案
如上所述,Neuron 芯片 TMPN3150 的 11 个 I/O 脚有多种 I/O 模式,这里用的是 Neurowire 模式。这种方式把 TMPN3150 的 I/O 脚定义为 Neurowire I/O 对象,即同步全双工串行通信模式,它每次最多可传送 255 比特的数据流。Neurowire I/O 对象可配置为主控方式和被控方式。当为主控方式时,IO8 为移位时钟信号输出端,IO9 为串行数据输出端,IO10 为串行数据输入端,IO0~IO7 可任选一个作为片选信号线。若 Neuron 芯片的输入时钟为 10MHz 时,则 IO8 的输出时钟频率可选为 1、10 或 20kb/s;当为被控方式时,IO8 为移位时钟信号输入端,IO0~IO7 可任选一个作为时间溢出信号引脚。
a. 方法 1 的硬件实现
基于 Neuron 芯片的 Neurowire I/O 模式的硬件电路如图 2 所示。图中,IO0 输出片选信号。图 1 中的输入只画了一路 CH0,另一路 CH1 与 CH0 相同。当输入为电压信号时,J 断开;输入为电流信号时,J 连通。
b. 方法 1 的软件实现
神经元芯片的编程是采用 Neuron C 语言来完成的。Neuron C 是专门为 Neuron 芯片设计的编程语言,它有着丰富的函数库,可直接完成许多复杂的任务。
基于 Neuron 芯片的 Neurowire I/O 模式的 A/D 接口程序如下:
//////// IO ObjecTIon ////////
// 定义为 Neurowire 主模式,A/D 芯片的主选信号由 IO0 输出初始化为 1
IO-8 neurowire master select (IO-0) ioA2D;;
IO-0 output bit ioA2Dselect =1;
IO-1 input bit start_adc;
# pragma ignore_notused ioA2Dselect
//////// funcTIon declare////////
unsigned long adc(unsigned long analog_addr);
////////funcTIon definiTIon////////
//A/D 转子函数
unsigned long adc(unsigned long analog-addr)
// 形参 analog_addr 传递要选择的通道,选择 CH0 时,analog_addr=0x06,选择 CH1 时,analog_addr=0x07
{
unsigned long adc_info;
unsigned long digital_out;
adc_info = (analog_addr 《《 13);
io_in(ioA2D,&adc_info,16); // 选择通道,同时接收转换的结果
digital_out=adc_info & 0x0ff0;
digital_out=digital_out 》》4;
return digital_out;
}
由于 eurowire I/O 对象是双向的,即输入、输出同时进行。因此,调用 io_in(ioA2D,&adc_info,16)时启动了 16 位的双向数据传输,该命令可将 adc_info 中的数以比特流的形式从 IO-9 输送到 TLC0832,同可时通过 IO10 从 TLC0832 的 DO 脚读入 16 位数并放入 adc_info。由 TLC0832 的工作时序图(图 1)可以看出,接收到的 16 位数中的第 5 位到第 12 位就是转换结果,所以做了后面的处理。
3.2 基于 Neuron 芯片的比特 I/O 模式方案
TMPN3150 和 TLC0832 的第二种接口实现方法是把 TMPN3150 的 I/O 脚定义为比特 I/O 对象,它可用以监控与 Neuron 芯片相连的 I/O 设备中某个引脚上的逻辑状态,其中“0”为低电平,“1”为高电平。
a. 方法 2 的硬件实现
方法 2 的硬件电路如图 3 所示。图中,输入通道只画了一路 CH0,另一路 CH1 与 CH0 相同。当输入为 1-5V 的电压信号时,J 断开;当输入与 4-20mA 的电流信号时,J 连通。
b. 方法 2 的软件实现
Neuron C 语言是从 ANSI C 中派生出来的,相对于 ANSI C 而言,它进一步扩展了用以支持由 Neuron 芯片中的固件提供的各种运行特性。
方法 2 的 A/D 接口程序如下:
////////IO ObjecTIon////////
// 将 IO 脚定义为比特 IO 对象,
IO-2 input bit io-do;
IO-0 output bit cs;
IO-3 output bit di;
IO-1 output bit clk;
////////function declare////////
int adc(int adc-addr);
///////function definition//////
//A/D 转换子函数
int adc(int adc_addr)
// 形参 analog_addr 传递要选择的通道,选择 CH0 时,adc_addr=0x60;选择 CH1 时,adc_addr=0x70//
{
int adc_inbit,digital_out=0;
io_out(cs,0);
io_out(di,0);
for(i=0;i《3;i++)// 选择通道
{
io_out(clk,0);
adc_addr=adc_addr《《1;
if(adc_inf0 &0x80)==0x80
io_out(di,1);
else
io_out(di,0);
io_out(clk,1);
}
io_out(clk,0); // 一个时钟的间隔
io_out(clk,1); // 以使多路器稳定
for(i=0;i《8;i++) // 接收转换结果
{
io_out(clk,0);
if(io_in(io_do)= =1)
{
adc_inbit=1;
adc_inbit=adc_inbit《《(7-i);
digital_out=digital_out+adc_inbit;
}
io_out(clk,1);
}
io_out(cs,1)
return digital_out;
}
4、结束语
Neuron 芯片不同于普通的微处理器,本文介绍的神经元芯片与 A/D 芯片 TLC0832 的两种接口实现方法各有利弊,具体表现如下:
(1)方法 1 是 Neuron 芯片所特有的,而方法 2 较通用,它不仅适用于 Neuron 芯片,而且适用于各种有 I/O 脚的微处理芯片;
(2)方法 1 的硬件要求比较严格,可选的 I/O 脚只有一个,即片选信号输出脚,而方法 2 脚把几个与 TLC0832 相连的 I/O 脚视为普通的 I/O 脚,随便哪个 I/O 脚都可与 TLC0832 相连(如果 Neuron 芯片的 IO8、IO9 或 IO10 已用,那只能选方法 2 了);
(3)方法 1 编程较短,但不但于调试,而方法 2 则编程较长,但较为直观,而且便于调试;
(4)方法 1 的 CLK 占空比和时钟速率较为稳定,而方法 2 的 CLK 占空比与指令执行时间有关。对于常用单片机的人来说,方法 2 较易上手,则方法 1 则更专业;方法 2 的硬件接法更灵活,但编程较长……总之,使用这两种方法应根据实际情况灵活地作出选择
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)