基于PIC单片机的嵌入式CAN智能节点及其与PC的通信

发布者:EuphoricMelody最新更新时间:2011-05-18 关键字:PIC单片机  CAN智能节点  PC  通信 手机看文章 扫描二维码
随时随地手机看文章

    引言

   CAN总线是一种串行数据通信协议,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对数据的成帧处理。CAN协议的一个最大特点是废除了传统的站地址编码,而代之以对通信数据块编码,采用这种方法可使网络内节点个数在理论上不受限制,还可使不同的节点同时收到相同的数据。

   本文介绍了嵌入式CAN智能节点,并且应用PC和嵌入式CAN智能节点组成了CAN通信系统,完成了电压。电流。温度等信号的实时采集。可靠传输和实时显示,实现了PC端对嵌入式CAN智能节点PWM波输出的脉冲宽度的控制。

   基于PIC单片机的嵌入式CAN智能节点的设计

   嵌入式CAN智能节点以PIC16F874单片机作为嵌入式微控制器,以MCP2510作为CAN控制器,以PCA82C250作为CAN收发器,具有现场/远程控制功能。根据用户的需求,嵌入式CAN智能节点通过连接相应的传感器可以完成多种信号的实时采集。可靠传输和实时显示,PWM波输出可以用于控制相应的负载。嵌入式CAN智能节点通过外接电路可以实现电路保护。现场组态。自动调节。故障诊断报警。状态检测等功能,完成对电机。阀门。泵等电器的驱动和智能控制。

   硬件设计

   Microchip公司的单片机PIC16F874采用RISC指令系统,哈佛总线结构,低功耗,高速度。内部集成了ADC.串行外围接口(SPI)和Flash程序存储器等,具有PWM输出。LCD驱动等功能。PIC16F874通过SPI接口可以实现与CAN控制器MCP2510的无缝连接。PIC16F874的I/O资源丰富,共有A.B.C.D.E五个I/O口,每个I/O口除了基本用途外还有一些特殊功能。

   基于PIC16F874的嵌入式CAN智能节点的硬件原理图如图1所示,主要包括以下四个模块:

   CAN通信模块

   嵌入式CAN智能节点的CAN通信模块由CAN控制器MCP2510和CAN收发器PCA82C250组成。MCP2510可以完成CAN总线的物理层和数据链路层的所有功能,支持高速SPI接口(最高数据传输速率可以达到5Mb/s),支持CAN2.0A/CAN2.0B协议。CAN收发器PCA82C250是CAN控制器与物理总线之间的接口,对物理总线提供差动发送能力,对CAN控制器提供差动接收能力,同时它可以增大通信距离,提高嵌入式CAN智能节点的抗干扰能力。

   PIC16F874通过SPI与CAN控制器MCP2510连接,其串行数据输入(SDI)脚与MCP2510的SO脚相连,其串行数据输出(SDO)脚与MCP2510的SI脚相连,其串行时钟(SCK)脚与MCP2510的SCK脚相连。MCP2510的复位信号。片选信号由单片机A口的RA5.RA2提供,MCP2510的中断信号。接收缓冲区满中断信号输出到单片机B口的RB0.RB5。

   通过设置PIC16F874的SPI接口状态寄存器和控制寄存器使SPI接口工作于主动方式。

   PIC16F874与MCP2510进行通信时的时序是非常重要的。发送数据时,先发送写指令,再发送寄存器地址,最后发送数据。当MCP2510接收到由总线传来的数据时会产生中断,单片机响应中断,读取数据时先发送读指令,再发送寄存器地址,数据会自动写入单片机SPI接口的缓冲器中。

   显示模块

   嵌入式CAN智能节点采用OCMJ4Χ8显示模块,该显示模块可以显示汉字。ASCII码等,其所有的设置初始化工作都可以在上电时自动完成。

   OCMJ4Χ8显示模块的数据线DB0~DB7与单片机的D口相连,请求(REQ)脚。应答(BUSY)脚分别与单片机B口的RB4.E口的RE2相连。显示模块的RT1.RT2引脚外接可调电阻用于调节LCD的亮度。

   显示模块接口协议为请求/应答(REQ/BUSY)握手方式。BUSY为高电平表示显示模块忙;当BUSY为低电平时表示显示模块空闲,等待接收命令。单片机先向显示模块发送命令或数据,然后发送请求信号,请求显示模块进行处理,显示模块置BUSY为高电平,对命令或数据进行处理,处理结束后置BUSY为低电平。

   模拟量获取模块

   PIC16F874单片机A口的RA0.RA1.RA3用于模拟量输入。嵌入式CAN智能节点的模拟量获取模块的主要功能是将需要采集的电流信号通过电流互感器转换为电压信号,将需要采集的温度信号通过温度传感器AD590转换为电压信号。

   开关量输入/输出模块

   嵌入式CAN智能节点通过I/O扩展提供了4路开关量输入和7路开关量输出。开关量输入用于电路的保护。故障报警。状态检测等,只要被控制对象拥有相应的检测元件,接入相应的接口即可。开关量输出用于驱动继电器,可以根据负载的大小确定是否需要连接接触器控制电机。阀门。泵等电器执行元件。根据用户的需求,此部分电路可以做相应的变化。

   软件设计

   嵌入式CAN智能节点的软件采用汇编语言编写,主要完成对PIC16F874(I/O口。定时器等).SPI接口(串行口状态寄存器SSPSTAT.串行口控制寄存器SSPCON等).显示模块。I/O扩展芯片8255和CAN控制器MCP2510(位定时配置寄存器。CAN信息接收过滤和屏蔽控制寄存器。接收发送缓冲区控制寄存器等)的初始化,设定发送。接收标识码(ID),读取A/D转换的数值,设置嵌入式CAN智能节点PWM波输出的脉冲宽度,处理。显示并发送采集的数据,接收。处理并显示由总线传来的数据等工作。

   初始化系统

   程序需要对PIC16F874单片机。显示模块。I/O扩展芯片8255和CAN控制器MCP2510进行初始化。其中对MCP2510初始化是非常重要的,主要包括设置数据传输的波特率,将标识码和屏蔽字写入CAN信息接收过滤和屏蔽控制寄存器。对PIC16F874进行初始化时,要特别注意定时器TMR2。   

   设定发送。接收标识码

   PIC16F874单片机C口的RC0.RC1.RC6.RC7引脚连接了一个拨码开关。程序通过读取这四个引脚的状态为每个嵌入式CAN智能节点分配了发送。接收标识码的初始值。当网络中智能节点数目较多时,这种方法可以方便程序的编写。[page]

   读取A/D转换的数值

   PIC16F874的A口和E口可以作为模拟量输入口,共有8个输入通道。A/D转换的结果存储于单片机的ADRES寄存器。程序首先设置单片机的A/D控制寄存器ADCON1的bit3~bit0,选择每个通道的输入/输出类型并设置参考电压为5V,然后设置单片机的A/D控制寄存器ADCON0的bit5~bit3选择通道,设置bit0打开ADC,设置bit2启动ADC,最后从单片机的A/D转换结果寄存器ADRES中读取A/D转换的数值。

   设置PWM波输出的脉冲宽度

   PIC16F874的CCP1引脚用于PWM波输出。程序首先设置单片机的CCP1模块控制寄存器CCP1CON的bit3~bit0,定义工作方式为PWM,然后用从PC端接收到的用于设置嵌入式CAN智能节点PWM波输出的脉冲宽度的数据设置单片机的CCP1控制寄存器CCP1CON的bit5~bit4。  

   发送数据

   程序为每个需要传送到PC端的信号(电压。电流。温度。嵌入式CAN智能节点PWM波输出的脉冲宽度)都分配了一个标识码。发送数据时,首先向MCP2510发送写指令,再将标识码。帧格式和数据长度的定义。需要发送的数据依次写入MCP2510相应的寄存器中。

   接收数据

   程序读取CAN控制器MCP2510的中断标志寄存器的值,判断接收缓冲区中是否有数据,当接收缓冲区中有数据时向MCP2510发送读指令,依次将标识码。帧格式和数据长度。接收到的数据从MCP2510相应的寄存器中读出。

   处理和显示数据

   A/D转换的数值经过程序处理后得到信号的真实值并送显示模块进行显示,主要包括数值和汉字。英文字符的显示。同时完成了嵌入式CAN智能节点PWM波输出的脉冲宽度和从PC端接收到的数据的显示。

   PC端功能的实现

   硬件部分

   PC端采用了研华公司的PCL-841双端口CAN接口卡,该卡具有两个CAN通信口,最高数据传输速率可以达到1Mbps。该卡采用内存映射机制,即将CAN接口卡上的内存映射至主存中,用户可以根据需要自己设定映射内存的基地址。

   软件部分

   PC端的软件采用C语言编写,主要完成CAN信息的实时读龋处理和显示,向嵌入式CAN智能节点发送数据和设置嵌入式CAN智能节点PWM波输出的脉冲宽度等工作。

   设计。调试中应当注意的一些问题

   硬件方面

   嵌入式CAN智能节点

   设计中应当注意处理好复位和时钟信号,包括不同器件之间复位的先后时序。在进行温度信号的采集时,要特别注意温度传感器AD590的调零。AD590是一个恒流源,它的特性是绝对温度每变化1℃电流增/减1mA,绝对温度0℃时为0mA。为抵消AD590在0℃时的电压,需要加入一个负电源使其在0℃时输出为0V,再选择合适的电阻把电流转变为电压,就可以把温度信号的采集变为0~5V电压信号的采集。

   调试过程中应首先检查各芯片的工作电压是否正常,晶振是否起振,复位信号是否正确。要经常察看各芯片的发热状况,出现温度过高时应立即断电检查。必要时可使用示波器观测信号波形进行分析。

   PC端

   由于PCL-841双端口CAN接口卡占用PC的串口资源,因此在BIOS设置中应将串口设置为Disable,还应该特别注意CAN接口卡占用的内存资源是否被其它硬件占用,如果已经被占用,则应修改CAN接口卡内存映射的首地址,同时更改CAN接口卡上的跳线,否则CAN接口卡无法正常工作。

   软件方面

   嵌入式CAN智能节点

   在编写嵌入式CAN智能节点的程序时,需要特别注意的是CAN控制器MCP2510的初始化,务必使一个系统中的所有智能节点的数据传输波特率相同,否则嵌入式CAN智能节点将无法和PC端进行通信。应当注意必须正确地将标识码和屏蔽字写入MCP2510的CAN信息接收过滤和屏蔽控制寄存器,否则嵌入式CAN智能节点将无法正确的发送和接收CAN信息。

    调试过程中应注意通过查看各个寄存器的值来判断程序执行的程度。

    PC端

    在编写PC端的程序时,需要将PCL-841双端口CAN接口卡驱动程序库CAN841S.LIB嵌入到自己的工程中,驱动程序库中封装了直接操控CAN接口卡的函数。对CAN接口卡进行操控时必须按照规定流程进行,否则CAN接口卡无法正常工作或者无法正确的发送和接收CAN信息。

    调试过程中应采取下断点和单步执行相结合的调试方法,注意根据函数的返值来分析出现问题的原因。

    结语

    本课题初步完成了基于CAN总线的数据采集和智能控制系统的设计,经过反复实验,系统采集数据准确。传输可靠,通过了有关部门的专业测试。同时设计的嵌入式CAN智能节点可以迅速。准确地接收到PC端发送的数据。

关键字:PIC单片机  CAN智能节点  PC  通信 引用地址:基于PIC单片机的嵌入式CAN智能节点及其与PC的通信

上一篇:PIC16C72A单片机在汽车智能仪表中的应用
下一篇:dsPIC3F3013的CAN息线数据采集系统

推荐阅读最新更新时间:2024-03-16 12:35

关于MSP430单片机串口通信丢失数据
研究摸索了接近一个星期,把所遇到的问题写出来以供参考。 最开始看一个官方的串口收发数据的示例,然后自己操作后收发数据老是会丢失一个数据,然后看User’s Guide,取消了函数收发的方法直接用寄存器操作,问题解决。 接下来写一个组帧协议,收发完全正常。但是看上去非常的杂乱就想美化一下,就开始写函数,进行函数调用。好了,这下问题又来了,数据又会丢失。 接近一个星期的思前想后,发现不是自己写的代码有问题,是官方示例的波特率配置问题。大家都知道波特率表示每秒钟传送的码元符号的个数,是衡量数据传输速率的指标,它用单位时间内载波调制状态改变的次数来表示。晶振为1MHz波特率为15200,我自己改成了9600,问题解决。如何配置
[单片机]
如何通过PIC单片机设计一款多媒体终端遥控器?
1 设计理念和原理 1.1 设计理念 随着数字家庭等领域技术的迅速发展,在多媒体终端上的增值业务将越来越多,浏览网页、搜索、短信等都需要遥控器进行输入。但作为连接用户和终端之间的重要外设,遥控器的设计理念还停留在模拟电视时代,体验感较差。目前用户输入的解决方式是呼出终端的内置输入法,这样就带来了两个问题:一,不同厂家的终端都需要内置自己的中英文输入法,占用资源,而且必须搭配自己的遥控器使用,通用性不高;二,用户在输人时必须一边看遥控器输入一边看屏幕确认输入,如果文字较多会造成频频抬头和低头的麻烦,难以忍受。基于以上缺点,本文提出将输入法内置于遥控器的理念,在遥控器上输入文字后再统一将文字编码用红外线发给终端,终端接收后将编码译成文
[单片机]
如何通过<font color='red'>PIC单片机</font>设计一款多媒体终端遥控器?
第18章 RS485通信和Modbus协议
在工业控制、电力通讯、智能仪表等领域,通常情况下是采用串口通信的方式进行数据交换。最初采用的方式是RS232接口,由于工业现场比较复杂,各种电气设备会在环境中产生比较多的电磁干扰,会导致信号传输错误。除此之外,RS232接口只能实现点对点通信,不具备联网功能,最大传输距离也只能达到几十米,不能满足远距离通信要求。而RS485则解决了这些问题,数据信号采用差分传输方式,可以有效的解决共模干扰问题,最大距离可以到1200米,并且允许多个收发设备接到同一条总线上。随着工业应用通信越来越多,1979年施耐德电气制定了一个用于工业现场的总线协议Modbus协议,现在工业中使用RS485通信场合很多都采用Modbus协议,本节课我们要讲解一下
[单片机]
第18章 RS485<font color='red'>通信</font>和Modbus协议
三星推出全球首款用于 PC 的 LPCAMM 内存:可拆卸、体积大降 60%
9 月 26 日消息,三星电子宣布已开发出其首款 7.5Gbps(IT之家注:0.9375GB/s)低功耗压缩附加内存模组(LPCAMM)形态规格,有望改变个人计算机和笔记本电脑的 DRAM(动态随机存取存储器) 市场,甚至改变数据中心的 DRAM 市场。 三星新闻稿称,截至目前,个人计算机和笔记本电脑都在使用传统的 LPDDR DRAM 或基于 DDR 的 So-DIMM(小型双重内嵌式内存模组)。然而受结构限制,LPDDR 需要被直接安装在设备的主板上,导致其在维修或升级换代期间难以更换。相比之下,虽然 So-DIMM 可以更方便地被安装或拆卸,但在性能、功耗和其他物理特性方面还存在诸多限制。 随着行业对更高效、更小巧设备
[家用电子]
PIC16系列单片机与PC机串行通信的软硬件实现
摘 要介绍一种运用PIC16F84单片机实现与PC机串行通信的方法,并给出其硬件接口电路及通信源程序。 1 前言 美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机。其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。它还具有片内上电复位、延时电路、看门狗电路等。另外,PIC16系列单片机功耗极低,因而是一种非常适合在各种便携式设备中使用的高性价比的单片机,并已经得到了越来越广泛的应用。 但是在许多需
[单片机]
PIC16系列单片机与<font color='red'>PC</font>机串行<font color='red'>通信</font>的软硬件实现
手机芯片 产值直逼PC
    研调机构IC Insights调查,2013年手机芯片产值可望达707亿美元,将首度超越标准型个人电脑(PC)芯片的651亿元,估2015年将超越整体PC芯片。 根据IC Insights最新报告,预估2011至2016年桌上型电脑出货量年复合成长率将仅约0.1%;笔电出货量年复合成长率约7.4%;平板电脑出货量年复合成长率达33.9%。 若以平板电脑加变形笔电来看,IC Insights预期,2011至2016年相关产品出货量年复合成长率可达130.5%。并预估2016年包含平板电脑等整体PC出货量可望自2011年4.18亿台,增加至7.49亿台,年复合成长率约12.4%。 另外再受机芯片市场部分,IC Insights估
[手机便携]
基于PIC单片机的数据采集系统设计
基本功能 在本设计中,数据的处理可以使用PC机的MATLAB等功能强大的软件,但是这类现有的数据处理软件并不能对特有的数据采集系统的下位机采集模块进行直接控制,因此需要针对特定的数据采集系统编写对应的上位机软件,上位机软件是针对上述目的而设计与编写的,是整个采集系统的控制前端和数据存储及处理中心。控制功能主要包括控制下位机采集的开始与终止,采集的频率等,数据处理功能主要包括绘制波形图,将数据显示于列表,将数据存储于文件,其中将数据存储于文件将便于使用现有的数据处理软件对数据进行一些数值算法处理,以达到科学研究,结论验证等目的。 开发环境 C++程序设计语言可以很好地实现面向对象的编程思想,采用C++编写上位机程序,可以将每一个
[单片机]
基于<font color='red'>PIC单片机</font>的数据采集系统设计
用于PC机5V电源的微型UPS设计
  1 引言   随着电子技术的发展和社会的进步,电子设备与人们的工作、生活关系越来越密切。这些电子设备,例如PC机以及各种嵌入式系统等,对供电质量要求也越来越高。工作中突然停电或电源的不稳定将带来数据的丢失、设备的损坏、机器的误动作和整个系统的瘫痪等十分重大的危害。因此安全可靠的供电电源是我们不得不认真面对的重要问题。解决稳定电源问题的方法有滤波、线性稳压、UPS等多种,UPS是唯一可完全解决稳定电源问题的设备。   UPS(UninterruptiblePowerSupply)是一种向负载提供不间断、优质、高效和可靠的稳定电压的电源。UPS,按其输出电压的不同可以分为交流UPS和直流UPS。交流UPS的工作原理是当
[电源管理]
用于<font color='red'>PC</font>机5V电源的微型UPS设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved