0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于PIC16F874控制芯片实现嵌入式CAN智能节点的设计

电子设计 来源:电子设计应用 作者:袁浩,薛惠敏,曹 2020-03-03 08:02 次阅读

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所示,主要包括以下四个模块:

基于PIC16F874控制芯片实现嵌入式CAN智能节点的设计

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智能节点分配了发送、接收标识码的初始值。当网络中智能节点数目较多时,这种方法可以方便程序的编写。

读取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和CCPR1L寄存器,即实现了PC端对嵌入式CAN智能节点PWM 波输出的脉冲宽度的控制。

发送数据

程序为每个需要传送到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端发送的数据。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6030

    文章

    44482

    浏览量

    631714
  • 嵌入式
    +关注

    关注

    5056

    文章

    18954

    浏览量

    301649
  • CAN
    CAN
    +关注

    关注

    57

    文章

    2690

    浏览量

    463076
收藏 人收藏

    评论

    相关推荐

    基于CDMA和CAN总线的车辆远程故障诊断系统

    本文利用PIC16F874设计了基于CAN总线的一种车辆远程故障诊断系统。该系统设计新颖,具备很好的应用前景,有关提供车辆信息技术服务(tsp)的网站也在筹建中。
    发表于 02-20 10:56 3161次阅读
    基于CDMA和<b class='flag-5'>CAN</b>总线的车辆远程故障诊断系统

    PIC16F873/PIC16F874/PIC16F876/PIC16F877 中文资料 谁有啊。

    PIC16F873/PIC16F874/PIC16F876/PIC16F877 中文资料谁有啊,共享一看看。。[此贴子已经被作者于2008-7-15 13:24:21编辑过]
    发表于 06-05 09:32

    pic16f874中文资料

    pic16f874中文资料
    发表于 07-15 13:26 15次下载
    <b class='flag-5'>pic16f874</b>中文资料

    PIC16F系列单片机中文资料

    PIC16F874的所有指令字长为14位。所以程序存储器的各存储单元是14位宽。一个存储单元存放一条指令。16F84的程序存贮器有1024(28)个存储单元(存储容量为1k)。这些程序存储器都是由FPERO
    发表于 01-17 23:41 40次下载

    基于CAN总线的分布式控制网络智能节点的设计

    现场总线是目前自动化技术发展的一个热点。本文介绍基于CAN 总线的分布式控制网络系统的设计方法,给出了Intel 80C196KC+SJA1000 和PIC16F877+MCP2510两种典型的
    发表于 06-12 15:51 21次下载

    基于VB6的PC机与多台单片机通信在锂电池检测化成设备中的应

    用基于VB6的PC机通过RS485总线与多达16PIC16F873单片机进行通信,每台PIC16F873通过I2C总线又分别挂接8台PIC16F874,其中每台
    发表于 07-31 08:19 46次下载

    基于CAN总线的嵌入式监控系统中智能节点研究

    本文介绍了基于CAN 总线的嵌入式控制系统底层网络中的现场智能节点的设计,研究了其网络体系结构及功能,并对
    发表于 08-07 08:52 22次下载

    PIC16F874在喷织机控制系统中的应用

    PIC16F874在喷织机控制系统中的应用 正在运行的纺织机因故障、交班等其他原因需要停机后,再开机时就会出现纬线之间不均匀现象,不
    发表于 06-16 14:38 768次阅读
    <b class='flag-5'>PIC16F874</b>在喷织机<b class='flag-5'>控制</b>系统中的应用

    PIC16F87X datasheet

    There are four devices (PIC16F873, PIC16F874,PIC16F876 and PIC16F877) covered by this data s
    发表于 12-29 16:38 72次下载
    <b class='flag-5'>PIC16F</b>87X datasheet

    PIC嵌入式系统开发_部分1

    设计的讲解主要以Microchip公司的3款PIC控制器(16F84A、16F873A和18F242)为基础,并辅以大量的设计实例。
    发表于 04-26 11:42 1次下载

    PIC嵌入式系统开发_部分2

    设计的讲解主要以Microchip公司的3款PIC控制器(16F84A、16F873A和18F242)为基础,并辅以大量的设计实例。
    发表于 04-26 11:42 1次下载

    PIC16F874单片机为控制器的纺织机控制系统设计

    纺织机在正常运行时,调整离合器在单片机PIC16F874控制下,处于可靠分离状态,当因故停机后需再次开机时,按下调整按钮,系统发出调整信号使调整离合器控制电路工作,调整离合器处于啮合状态,此时
    发表于 07-30 07:40 1667次阅读
    以<b class='flag-5'>PIC16F874</b>单片机为<b class='flag-5'>控制</b>器的纺织机<b class='flag-5'>控制</b>系统设计

    PIC单片机对步进电机的控制设计

    pIC16f874步进电机程序 listp=16f874 include ;--==*[CONSTANTS]*==-- #defineCOMMAND_2’B
    发表于 12-05 15:34 2131次阅读

    PIC16F874单片机为中心处理器的直流电机调速设计

    本调速系统采用PIC16F874单片机作为中心处理器,充分利用了PIC16F874单片机捕捉、比较、模/数转换模块的特点作为触发电路,其优点是:结构简单,能与主电路同步,能平稳移相且有足够的移相范围
    发表于 03-07 13:21 1593次阅读
    <b class='flag-5'>PIC16F874</b>单片机为中心处理器的直流电机调速设计

    解析非接触RFID的读写器系统设计

    实现一种便携射频识别读写系统。在对RFID系统的组成和原理进行分析的基础上,提出基于PIC16F874控制器和RI—R6C一
    的头像 发表于 06-12 14:50 3022次阅读
    解析非接触<b class='flag-5'>式</b>RFID的读写器系统设计