近年来,随着经济社会的发展,各地水需求量逐渐增加,水资源供需的矛盾日益显著。我国水资源利用效率很低,农业灌溉水利设施建设落后,水浪费现象严重。因此,如何提高农业灌溉水资源的利用率就显得极其重要。通过测量灌溉流量的实时信息来有效地节约利用水资源,这就用到了自动控制系统。确保系统稳定性,降低系统成本的重要环节是在自控系统中使用何种通讯方式。基于现场总线的通讯与控制技术是目前工业自动控制领域中的主要技术之一,它具有信息数字化和控制分散化等技术优点,在自动控制领域中应用日益广泛。现场总线技术的国际先进水平已经达到二芯载波电缆控制10Km距离的推广阶段,但我国在大田农业灌溉控制系统应用上,基于总线方式的控制技术还显得相当薄弱[1]。因此,借鉴先进的设计思想,开发出具有自主知识产权的基于现场总线的灌溉控制系统,符合农业现代化对自动化技术的需求。
1系统组成
组成现场网络,并通过以AT89C51处理器为核心的一个数据转换系统。本系统CAN总线模块以AT89C51为微处理器,在CAN总线通信接口上,采用了飞利浦公司的SJA1000和TJA1050芯片,SJA1000是独立CAN通信控制器,TJA1050为高性能CAN总线收发器。电路主要由微控制器AT89C51、独立CAN通信控制器SJA1000、CAN总线收发器TJA1050和流量计四部分所构成。微处理器AT89C51负责SJA1000的初始化,通过控制SJA1000实现数据的接收和发送等通信任务。系统结构原理图如图1-1所示:
图1-1系统结构原理图
1灌溉系统测量及数据处理
水流量传感器主要由阀体、水流转子组件和霍尔传感器组成。它装在进水端,用于检测进水流量,当水通过水流转子组件时,磁性转子转动并且转速随着流量变化而变化,霍尔传感器输出相应脉冲信号,反馈给控制器,由控制器判断水流量的大小,进行调控。接线端口有正极、信号输出线、负极。单片机通过计算输出脉冲数,结合水流量计的参数计算流过的水流量;单片机I/O与存储器的接口连接,单片机将采集后的数据经处理后可以存放在存储器中,单片机的I/O接口与液晶以及上位机连接,经过单片机采集处理后的数据可以进行实时显示并上传至上位机保存。流量计的接线方式如图1-2所示:
图1-2水流量传感器接线端口
1.2灌溉系统通信部分的组成
CAN总线器件比较流行的有两大种:一种是有在片CAN的微控制器。另一种是独立的CAN控制器,本设计选用PHILIPS公司的SJA1000CAN控制器以及TJA1050总线收发器,其中TJA1050可以支持110个CAN节点,SJA1000持CAN2。0A/B规约。SJA1000用于汽车和一般工业环境中的控制器局域网络中,它是PHILIPS半导体PCA82C200CAN控制器(BasicCAN)的替代产品。而且,它增加了支持具有很多新特性的CAN2.0B协议的工作模式[2]。片内含信息缓冲、位流处理、位定时逻辑、接收滤波、错误管理逻辑等电路,并配置有丰富的功能寄存器。可完成数据成帧、总线填充、错误检测、总线仲裁及错误界定处理等规范。SJA1000的数据线AD0-AD7连接到单片机的P0口,/CS与P2.0连接。P2.0为低时,CPU的外部存储地址可选种SJA1000,CPU通过这些地址可以对SJA1000进行读/写操作。SJA1000的ALE,/WR,/RD引脚分别与CPU的相应引脚相连。/INT与CPU的INT0相连,CPU通过中断方式对SJA1000进行访问.试验中应该加强CAN总线节点的抗干扰的能力,这就要求SJA1000当的RX0,TX0不直接与TJA1050中的RXD,TXD相连,而要通过光藕6N137和TJA1000相接,这样总线上的各个节点之间的电气隔离就能更好的实现。不过,应该注意的是,这样光藕部分所应用的两个电源必须完全电气隔离,不然的话采用光偶就失去了意义。电源隔离可以采用带多个5V隔离输出开关电源来实现[3]。单片机与SJ1000的连接原理图如图1-3所示:
图1-3SJA1000与单片机接口设计原理图
TJA1050是控制器区域网络(CAN)协议控制器和物理总线之间的接口。TJA1050可以为CAN控制器提供差动接收性能,为总线提供差动发送性能。能够将输出信号CANH和CANL的最佳匹配,能够将电磁辐射变得更小。TJA1050的CAN总线接口部分采取了抗干扰和安全的一些措施。TJA1000的两个引脚CANL,CANH都是用一个5.1Ω的电阻与CAN总线连通,其中电阻可以起到限流保护作用,使TJA1000不被过流的损害[4]。在地与CANL,CANH之间并联了两个30PF的电容,具有防辐射和滤除总线上的高频干扰的能力。再就是在CANH,CANL与地间可以接入两个防雷击管,当地与两个各输入端之间出现瞬变干扰的时候,防雷击管的放电可以起到一定的保护作用[5]。TJA1050设计原理图如图1-4所示:
图1-4TJA1050设计原理图
2系统的软件设计
CAN总线的软件设计主要包含三部分:CAN初始化程序、报文的发送程序、报文的接收程序[6]。CAN初始化主要是设置CAN的通信参数。需要初始化的CAN控制寄存器有:模式寄存器、时分寄存器、接收代码寄存器、屏蔽寄存器、总线定时寄存器、输出控制寄存器等。值得注意的是以上寄存器只能在CAN控制器处于复位状态下才可写访问[7]。发送数据程序把数据存储区中待发送的数据取出,组成信息帧,并将主机的ID地址填入帧头,将信息帧发送到CAN控制器的发送缓冲区。在接收到主机的发送请求后,发送程序启动发送命令。信息从CAN控制器发送到总线是由CAN控制器自动完成的。信息从CAN总线到CAN控制器的接收缓冲区也是由CAN控制器自动完成的。接收程序只需从接收缓冲区读取信息,并将其存储在数据存储区。[page]
2.1CAN总线节点初始化程序
节点初始化主要指的是在系统上电以后对89C51以及CAN控制器SJA1000所进行初始化,来保证工作主频、输出特性以及波特率等。89C51的初始化能通过结合他们的监控任务来进行,主要就是完成对中断允许与屏蔽以及定时器的使用与和设置等。这里着重来说明SJA1000的初始化,SJA1000内部没有微处理器,要实现它的初始化要依靠89C51对其编程实现。在复位模式下才能进行SJA1000的初始化,因此在SJA1000初始化程序中第一要把工作方式置换为复位模式,然后设置验收滤波方式等。在CAN协议物理层当中的通信波特率的大小以及同步跳转宽度都是由定时寄存器BTR0和BTR1的程序所决定。着重强调的是:对一个系统当中的所有的节点来说,这两个寄存器的所有内容一定要一样,不然将没有办法进行通信。当初始化的设置完成以后,把复位请求位置‘0’,SJA1000就能够进入到工作状态,来完成正常的通信任务[8]。初始化程序如下:
#include<80c196kd.h>//包含的控制器寄存器定义
#include_SFR_H_
#include_FUNCS_H_
#defineBASE_CAN0xa000//定义CAN控制器基址
typedefstruct{
unsignedintid;/*报文标识符*/
unsignedcharrtr;/*远程帧位*/
unsignedchardlen;/*数据长度*/
unsignedchardata[8];/*数据*/
}MSG_STRUCT;/*将CAN协议的帧用C语言的结构表示*/
voidinit_can(){
*(unsignedchar*)(BASE_CAN+0)=0x01;
/*SJA1000进入复位状态*/
*(unsignedchar*)(BASE_CAN+4)=0x00;
/*初始化接收代码寄存器ACR*/
*(unsignedchar*)(BASE_CAN+5)=0xff;
/*初始化接收屏蔽寄存器AMR*/
*(unsignedchar*)(BASE_CAN+6)=0x00;
/*初始化总线时序寄存器BTR0*/
*(unsignedchar*)(BASE_CAN+7)=0x14;
/*初始化总线时序寄存器BTR1*/
*(unsignedchar*)(BASE_CAN+8)=0xfa;
/*初始化输出控制寄存器OCR*/
}
2.2报文发送程序
发送程序负责节点报文的发送,发送时用户只需将待发送的数据按特定格式组合成一帧报文,送入SJA1000发送缓存区中,并将SJA1000的命令寄存器发送请求标志位(TR)置位。SJA1000会自动启动发送过程。但是,在往SJA1000发送缓存区发送报文之前,必须先对发送缓冲器是否释放进行判断,只有当发送缓冲器标志(TBS)为“1”时,发送缓冲器才被释放,可将新报文写入发送缓存,否则,在发送缓冲器被锁定时,新报文是不能被写入发送缓冲器的。发送程序分数据帧和发送远程帧两种。远程帧无数据场。发送程序一般编写成子程序的形式。报文发送程序如下:
unsignedcharcan_send(MSG_STRUCTsmsg)
{unsignedcharv;
inti;
v=*(unsignedchar*)(BASE_CAN+2);
if(v&0x08)/*判断是否可以发送数据*/
{v=smsg.id>>3;/*标识符送识别码寄存器*/
*(unsignedchar*)(BASE_CAN+10)=v;
v=*(unsignedchar*)(BASE_CAN+10);
v=smsg.id&7;/*识别码0-2位、RTR、DLC*/
v<<=5;
v+=smsg.dlen;
*(unsignedchar*)(BASE_CAN+11)=v;
for(i=0;ii
{
*(unsignedchar*)(BASE_CAN+12+i)=smsg.data[i];
}
*(unsignedchar*)(BASE_CAN+1)=0x01;
return(1);
}
else
return(0);
}
2.3报文接收程序
SJA1000的报文接收是它自身独立完成的,它接收到的报文经过滤波验收以后,暂时放在接收缓冲器FIFO当中。在报文进到接收缓冲器之后,状态寄存器的RBS会被置‘1’,与此同时若中断使能寄存器的RIE被设为‘1’时,中断寄存器的RI位也会被置为‘1’,然后SJA1000向CPU提出中断请求。报文接收可以采取查询接收方式或者是中断接收方式。如果对通信的实时性的要求没有那么强那就可以采取查询接收方式[9]。报文接收程序如下:[page]
unsignedcharcan_receive()
{
MSG_STRUCTrmsg;
inti;
unsignedcharbuf1,buf2;
while((*(unsignedchar*)(BASE_CAN+2))&0x01)
/*判断是否有可接收信息*/
{
buf1=*(unsignedchar*)(BASE_CAN+20);
/*将一帧信息取出*/
buf2=*(unsignedchar*)(BASE_CAN+21);
rmsg.dlen=buf2&0x0f;/*数据长度*/
for(i=0;i
rmsg.data[i]=*(unsignedchar*)(BASE_CAN+22+i);
}
*(unsignedchar*)(BASE_CAN+1)=0x04;
/*释放接收缓冲器*/
rmsg.rtr=(buf2>>4)&0x01;/*远程帧*/
rmsg.id=buf1;/*取出报文标识符*/
rmsg.id<<=3;
rmsg.id|=(buf2>>5)&0x06;
switch(rmsg.id)/*按标识符转入不同的数据处理程序*/
case
......
break;
}
3系统应用必要性总结
中国是一个水资源严重缺乏的国家,提倡节水灌溉势在必行,实施按方收费是农田灌溉用水的必然趋势,最终实现农田灌溉用水的微机自动监测、计量、收费一体化。CAN总线是自动化控制领域的热点之一,被誉为自动化领域的局域网,现在已经广泛应用于工业控制的各个领域。在本次设计中将控制器与CAN总线进行了很好的结合,在应用中充分发CAN总线的优势,在农田灌溉监测中发挥更大的作用。
参考文献
[1]饶运涛,邹继军,郑勇芸.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2003.
[2]譬学勤.现场总线与发展趋势过程检测控制仪表及系统现状和发展研讨会文集,1996(12):252-257
[3]伍伟杰.基于CAN总线的节水灌溉自控系统设计与研究[J]节水灌溉2006(1)13-5
[4]邬宽明.CAN总线原理和应用系统设计.北京:北京航空航天大学出版社,1996
[5]史久根,张培仁,陈真勇.CAN现场总线系统设计技术.北京:国防工业出版社,2004
[6]陈杨,刘曙生,龙志强.基于CAN总线的数据通信系统研究[J].测控技术,2000,19(10):53-55
[7]史九根等.CAN现场总线设计技术[M].北京:国防工业出版社,2004.
[8]蔡华锋,廖冬初,潘健,等.C8051F040中的CAN控制器的应用[J].单片机与嵌入式系统应用,2005(1):55—58.
[9]章磊,李耀,刘光徽.基于CAN总线网络的现场监控系统[J].仪表技术与传感器,2007(12):39-41,49
上一篇:比较LonWorks与RS485总线技术之优劣
下一篇:基于CAN总线飞机燃油系统维修培训系统的设计
推荐阅读最新更新时间:2024-05-02 23:34
- 热门资源推荐
- 热门放大器推荐