首页 上一页 1 2 下一页 尾页

现场总线专题贴二(续):CAN总线应用实例 点击:3072 | 回复:24



板砖拍你脸

    
  • 精华:1帖
  • 求助:3帖
  • 帖子:18帖 | 290回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2012年9月26日
发表于:2012-10-13 22:39:19
楼主

实例1

总线的楼宇温度检测系统

前言

基于单片机实现传统温度检测技术的特点,提出了基于CAN总线的楼宇温度检测系统方案。该系统方案的硬件平台主要包括温度检测模块和主控平台,并详细介绍了其硬件实现、软件设计思想及流程。实验表明:该系统可实现对楼宇温度的实时检测,并由数码管显示检测结果,对异常情况进行处理,从而实现对楼宇房间温度的有效检测。

在传统的检测技术中,温度检测基本采用单片机系统为主,且大多数都针对工业需要,日常生活中的应用并不多;而通信多基于落后的485总线,不能进行远距离的实时数据传输,更不能与因特网相连,可靠性也不高。因此,本文提出一种基于CAN总线的温度测控技术,该技术适合远距离控制与传输,具有非常高的可靠性。

控制器局域网(Controller Area NetworkCAN)是国际上应用最广泛的现场总线之一。CAN总线最早出现在20世纪80年代末的汽车工业中,由德国BOSCH公司最先提出,其主要特性为低成本,且总线利用率高。CAN采用串行通信方式工作,所提供的最高数据传输速率为1Mbit/s,最大通信距离为10kmCAN还具有可靠的错误处理和检错机制,极强的错误检测能力,发送信息遭到破坏后可自动重发;可在高噪声的干扰环境中只用,能够检测出产生的任何错误,当数据的传输距离达到10km时,CAN仍能提供5kbit/s的数据传输速率。

正是基于CAN总线的上述优点,目前CAN总线在众多领域被广泛应用,其应用范围不再局限于原先的汽车行业,而向过程工业、机械工业、纺织工业、数控机床、医疗器械及传感器等领域发展,CAN总线已经形成国际标准,并已被公认为是几种最有前途的现场总线之一。

考虑到CAN总线的高可靠性和远距离传输优点,结合目前温度检测技术的技术瓶颈,即距离短和实时性差的特点,本系统CAN总线应用于传统的温度检测中,也是一种新的尝试。

1 基于CAN总线楼宇温度检测系统的实现

本设计的总体方案如图1所示,有主控平台、报警系统、键盘控制、数码管显示、温度检测模块即电源接口电路等部分组成。主控平台的主要功能是连接和控制各个接口,并根据操作命令完成相应数据的处理、传输。本方案系统结构如2所示。

 

 

 

 




板砖拍你脸

  • 精华:1帖
  • 求助:3帖
  • 帖子:18帖 | 290回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2012年9月26日
发表于:2012-10-14 00:07:19
21楼

【7】发送缓冲区:如3.10所示。

 

3.10  验收屏蔽寄存器

CAN地址

名称

7

6

5

4

3

2

1

0

描述符

10

标识符字节1

ID.10

ID.9

ID.8

ID.7

ID.6

ID.5

ID.4

ID.3

11

标识符字节2

ID.2

ID.1

ID.0

RTR

DLC.3

DLC.2

DLC.1

DLC.0

数据

12

TX数据1

发送数据字节1

13

TX数据2

发送数据字节2

14

TX数据3

发送数据字节3

15

TX数据4

发送数据字节4

16

TX数据5

发送数据字节5

17

TX数据6

发送数据字节6

18

TX数据7

发送数据字节7

19

TX数据8

发送数据字节8

标识符(ID):11位,就像报文的名字,值越低,优先级越高。

远程发送请求(RTR):当RTR=1,总线以远程帧发送数据。如果RTR没有被置位,数据将以数据长度码规定的长度来传送数据帧。

数据长度码(DLC):数据字节数=8×DLC.3+4×DLC.2+2×DLC.1+DLC.0

报文数据区的字节数根据数据长度码编制。在远程帧传送中,因为RTR被置位,数据长度码是不被考虑的。这就迫使发送/接收数据字节数为0。然而,数据长度码必须正确设置,以避免两个CAN控制器用同样的识别机制启动远程帧传送而发生总线错误。数据字节数是0-8

数据区:传送的数据字节数由数据长度码决定。发送的第一位是地址12单元的数据字节1的最高位。

BasicCAN PeliCAN公用寄存器

【1】总线时序寄存器0(BTR0)3.11所示。

3.11  总线时序寄存器0

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

SJW.1

SJW.0

BRP.5

BRP.4

BRP.3

BRP.2

BRP.1

BRP.0

波特率预置器位域

  位域BRP使得CAN系统的时钟的周期时tSCL是可编程的:

同步跳转宽度位域

  为了补偿在不同总线控制器的时钟振荡器之间的相位漂移,任何总线控制器必须在当前传送的任一相关信号边沿重新同步。同步跳转宽度 定义了一个位周期可以被一次重新同步缩短或延长的时钟周期的最大数目。

板砖拍你脸

  • 精华:1帖
  • 求助:3帖
  • 帖子:18帖 | 290回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2012年9月26日
发表于:2012-10-14 00:07:49
22楼

【2】总线时序寄存器1(BTR1)3.1213所示。

总线时序寄存器1定义了一个位周期的长度、采样点的位置和在每个采样点的采样数目。在复位模式中,这个寄存器可以被读/写访问。在PeliCAN模式的操作模式中,该寄存器是只读的,在BasicCAN模式的操作模式中总是“FFH

3.12  总线时序寄存器1

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

SAM

TSEG2.2

TSEG2.1

TSEG2.0

TSEG1.3

TSEG1.2

TSEG1.1

TSEG1.0

采样位(SAM

 

3.13  采样位

功能

SAM

1

3次:总线采样3次,建议在低/中速总线上使用,这对过滤总线上的毛刺是有效的

0

单次:总线采样1次,建议使用在高速总线上

时间段1和时间段2位域

【3】输出控制寄存器(OCR:如3.14-16所示。

允许软件控制建立不同输出驱动的配置。在复位模式中,这个寄存器可以被读/写访问。在PeliCAN模式的操作模式中,该寄存器是只读的,在BasicCAN模式的操作模式中总是“FFH”。

3.14  输出控制寄存器

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

OCTP1

OCTN1

OCPOL1

OCTP0

OCTN0

OCPOL0

OCMODE1

OCMODE0

SJA1000在睡眠模式中,TX0TX1根据输出控制寄存器的内容输出隐性的电平。在复位

状态(复位请求=1)或外部复位引脚/RST被拉低时,TX0TX1悬空。

3.15  输出控制寄存器

OCMODE1

OCMODE0

说明

0

0

双相输出模式:与正常输出模式相反

0

1

测试输出模式:在下一次系统时钟的上升沿RX上的电平反映到TXX上,系统时钟(fosc/2)与输出控制寄存器中的编程定义的极性相对应。

1

0

正常输出模式:通过TX0TX1送出,取决于OCTPXOCTNXOCPOLX编程

1

1

时钟输出模式:TX0同正常输出模式,TX1由发送时钟TXCLK取代

3.16  输出引脚配置

驱动

TXD

OCTPX

OCTNX

OCPOLX

TPX

TNX

TXX

悬空

×

0

0

×

悬空

上拉

0

0

1

0

1

0

1

0

悬空

0

0

1

1

悬空

1

0

1

1

下拉

0

1

0

0

悬空

1

1

0

0

0

1

0

1

1

1

0

1

悬空

下拉推挽

0

1

1

0

1

1

1

0

0

1

1

1

1

1

1

1

 

板砖拍你脸

  • 精华:1帖
  • 求助:3帖
  • 帖子:18帖 | 290回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2012年9月26日
发表于:2012-10-14 00:08:55
23楼

【4】时钟分频寄存器:如3.17-18所示。

3.17  时钟分频寄存器

BIT7

BIT6

BIT5

BIT4

BIT3

BIT2

BIT1

BIT0

CAN模式

CBP

RXINTEN

0保留

CLOCK OFF

CD.2

CD.1

CD.0

=0,工作BasicCAN

=1, 工作PeliCAN

=1,只有RX0起作用,RX1应接到确定电平。例如Vss

允许TX1输出用来做专用接收中断输出

 

时钟关闭位1有效

 

 

 

 

   3.18   CLKOUT频率选择

CD.2

CD.1

CD.0

时钟频率

0

0

0

fosc/2

0

0

1

fosc/4

0

1

0

fosc/6

0

1

1

fosc/8

1

0

0

fosc/10

1

0

1

fosc/12

1

1

0

fosc/14

1

1

1

fosc

板砖拍你脸

  • 精华:1帖
  • 求助:3帖
  • 帖子:18帖 | 290回
  • 年度积分:0
  • 历史总积分:554
  • 注册:2012年9月26日
发表于:2012-10-14 00:09:10
24楼

3BASICCAN程序设计:CAN应用节点的程序主要包括初始化、发送、接收子程序。

CAN初始化子程序

NODE  EQU 30H;节点号缓冲区

NBTR0  EQU 31H;总线定时寄存器0缓冲区

NBTR1  EQU 32H;总线定时寄存器1缓冲区

TXBF  EQU 40HRAM内发送缓冲区

RXBF  EQU 50H RAM内接收缓冲区

CR    EQU 0BF00H;控制寄存器

CMR  EQU 0BF01H;命令寄存器

SR    EQU 0BF02H;状态寄存器

IR    EQU 0BF03H;中断寄存器

ACR  EQU 0BF04H;接收码寄存器

AMR  EQU 0BF05H;接收码屏蔽寄存器

BTR0  EQU 0BF06H;总线定时寄存器0

BTR1  EQU 0BF07H;总线定时寄存器1

OCR  EQU 0BF08H;输出控制寄存器

CDR  EQU 0BF1FH;时钟分频寄存器

RXB  EQU 0BF14H;接收缓冲器

TXB  EQU 0BF0AH;发送缓冲器

入口:节点号在NODE,波特率在NBTR0NBTR1

出口:无

CANINI:MOV DPTR,#CR;写控制寄存器

MOV A,#01H;置复位请求为高

MOVX @DPTR,A

CANI1:MOVX A,@DPTR;判断复位请求有效

JNB ACC.0,CANI1

MOV DPTR,#ACR;写验收码寄存器

MOV A,NODE;设置节点号

MOVX @DPTR,A

MOV DPTR,#AMR;写接收码屏蔽寄存器

MOV A,#00H

MOVX @DPTR,A

MOV DPTR,#BTR0;写总线定时寄存器0

MOV A,NBTR0;设置波特率

MOVX @DPTR,A

MOV DPTR,#BTR1;写总线定时寄存器1

MOV A,NBTR1

MOVX @DPTR,A

MOV DPTR,#OCR;写输出控制寄存器

MOV A,#0FAH

MOVX @DPTR,A

MOV DPTR,#CDR;写时钟分频寄存器

MOV A,#00H;将CAN工作模式设为BASICCAN模式时钟2分频

MOVX @DPTR,A

MOV DPTR,#CR;写控制寄存器

MOV A,#0EH;开放中断源

MOVX @DPTR,A

RET

CAN接收子程序:入口:无出口:接收的描述符、数据长度及数据放在RXBF开始的缓冲区中。

RXSB:MOV DPTR,#SR;读状态寄存器判接收缓冲区满

MOVX A,@DPTR

JNB ACC.0,RXSB

RXSB1:MOV DPTR,#RXB:将接收的数据放在cpuRAM

MOV R0,#RXBF

MOVX A,@DPTR

MOV @R0,A

INC R0

INC DPTR

MOVX A,@DPTR

MOV @R0,A

MOV B,A

RXSB2:INC DPTR

INC R0

MOVX A,@DPTR

MOV @R0,A

DJNZ B,RXSB2

MOV DPTR,#CMR;接收完毕释放接收缓冲区

MOV A,#04H

MOVX @DPTR,A

MOV DPTR,#SR;读此状态寄存器

MOVX A,@DPTR

JB ACC.1,DATAOVER;判断数据溢出

JB ACC.7,BUSWRONG;判断总线状态

JB ACC.6,CNTWRONG;判断错误计数器状态

SJMP RECEEND

DATAOVER:做相应的数据溢出错误处理

          SJMP RECEEND

BUSWRONG: 做总线错误处理

          SJMP RECEEND

CNTWRONG:做计数错误处理

RECEENDRET

CAN发送子程序:

入口:将要发送的描述符放在TXBF, 将要发送的数据长度放在TXBF+1, 将要发送的数据放在TXBF+2开始的单元。

出口:无

TXSB:MOV DPTR,#SR;读状态寄存器

MOVX A,@DPTR;判发送缓冲区状态

JNB ACC.2,TXSB

MOV R1,#TXBF

MOV DPTR,#TXB

TX1:MOV A,@R1;向发送缓冲区10填入标识符

MOVX @DPTR,A

INC R1

INC DPTR

MOV A,@R1;向发送缓冲区11填入标识符

MOVX @DPTR, A

MOV B,A

TX2:INC DPTR

INC R1

MOV A, @R1;向发送缓冲区12-19送数据

MOVX @DPTR ,A

DJNZ B,TX2

MOV DPTR,#CMR;置CMR.01请求发送

MOV A,#01H

MOVX @DPTR,A

RET

 


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页