TMPN3150与TLC0832的两种接口实现方法
摘要:根据神经元芯片TMPN3150的两种I/O模式,给出了该神经元芯片与A/D芯片TLC0832实现接口的两种不同方法,同时给出了硬件电路和软件程序,并对两种方法进行了比较。
关键词:Neuron芯片 TMPN3150 A/D芯片 TLC0832
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,可用于开发更为复杂的应用系统。
javascript:window.open(this.src);" style="cursor:pointer;"/>
Neuron芯片通过11个引脚(IO-0~IO-10)与外部硬件相连。这11个引脚可定义34种I/O对象,用户可根据实际应用需要在应用程序中定义不同的I/O对象,如直接的I/O对象、并行I/O对象、串行I/O对象和定时器/计数器输入/输出对象等。
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所示。
表1 选择模拟输入通道
通道号 | CH0 | CH1 |
输入数据流(bit) | 110 | 111 |
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的软件实现javascript:window.open(this.src);" style="cursor:pointer;"/>
神经元芯片的编程是采用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;
}javascript:window.open(this.src);" style="cursor:pointer;"/>
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的硬件接法更灵活,但编程较长……总之,使用这两种方法应根据实际情况灵活地作出选择。