DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 670|回复: 0
打印 上一主题 下一主题

[接口电路] 基于单片机的CAN与RS-232转换器设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:18:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
????????????????????????????? 图1 主控制模块电路原理图2.1 AT89C51与RS-232转换接口电路设计应用MAX232芯片构成RS-232的接口转换电路,实现AT89C51串口的TTL电平与RS-232电平的相互转换。其中R1out和T1in引脚接单片机的RXD引脚和TXD引脚,R1in和T1out作为RS-232接口输出连接标准DB9接口的引脚2和引脚3。DB9接口引脚5接地。为了使MAX232芯片正常工作,还需要外接4个1μF的电容用于芯片升压,以完成电平转换。2.2 SJA1000与AT89C51接口电路设计????????????????????????????????????? 图2 SJA1000与AT89C51接口电路原理图CAN控制器SJA1000芯片采用片外24MHz晶振,其CLKOUT引脚输出工作频率接入微处理器的XTAL1引脚。片选/CS端与单片机的P2.7引脚直接相连,因此SJA1000的寻址空间从地址0开始。AD0"AD7直接与AT89C51的低8位数据/地址复用口P0口相连,MODE接高电平设置为Intel模式,中断输出信号/INT与微处理器的/INT0连接,使CAN通信可以采用中断和查询两种方式。TLP113的外接390Ω电阻为限流保护电阻,为避免当驱动器失效时出现过流导致控制器损坏。SJA1000与AT89C51接口电路如图2所示。2.3 CAN总线物理层接口电路设计??PCA82C250与CAN总线的接口部分采用一定的安全和抗干扰措施。CANH和CANL与地之间并联了两个30P的小电容,可以起到滤除总线的高频干扰和一定的防电磁辐射的能力。另外在两根CAN总线接入端与地之间分别反接一个保护二极管,当CAN总线有较高的负电压时,通过二极管的短路可起到一定的过压保护作用。PCA82C250的Rs脚上接有一个斜率电阻,电阻大小可根据总线通讯速度适当调整,一般在16K~140K之间。用光电隔离芯片TLP113将CAN控制器SJA1000和收发器PCA82C250隔离,以便有效地增加通讯距离和抗干扰能力。CAN总线物理层接口电路如图3所示。3.基于单片机控制的CAN总线与RS-232转换器软件设计主程序分为初始化和循环检测两个主要部分。初始化部分完成对看门狗电路及RS-232 串口和CAN总线的初始化并开启INT0中断和串口中断。循环检测部分通过调用CAN总线接收函数(CAN_Receive())和RS-232接收函数(RS232_Receive())检测缓冲区内是否收到到数据,如果有数据接收则调用RS-232发送函数(RS232_Send())和CAN总线发送函数(CAN_Send())转发数据。数据的发送和接收都是通过中断来进行的。每次循环检测结束通过调用rst_wdog函数使看门狗复位。此外,由于CAN总线的速率与RS-232接口的速率并不相同,因此还需设置片外的存储器(RAM),用于转换双方的数据缓冲区。主程序流程图如图4所示。3.1 基于RS-232协议的数据接收与发送程序设计? 由于RS-232接口发送数据是以字节为单位,而CAN总线接收数据以多字节组成的数据帧为单位,因此为了避免指针指向的混乱,程序中统一使用相同长度的通用帧来保存数据。RS-232协议模块将通用的帧使用SLIP协议进行封装后发送,并将接收到的SLIP帧转为通用帧格式转入缓冲区。系统启动后,主程序调用RS232_Receive函数检测CAN接收缓冲区的内容,如果缓冲区内有数据,则调用RS_Read()函数读取缓冲区中的一帧数据并将其送入RS232_Receive()函数参数buf指向的缓冲区后返回。在读取CAN接收缓冲区数据后会交由RS232_Send()函数发送,并将帧数据保存至临时发送缓冲区bufRS_S。程序通过ChkEndR()函数检测数据帧是否发送完毕。???????????????????? 图4? CAN总线与RS-232转换器主程序流程图????????????? 3.2? CAN控制器SJA1000初始化程序设计CAN控制器SJA1000完成CAN总线帧的发送和接收任务。程序中,使用INITCAN()函数完成对CAN接口芯片的初始化。初始化程序设计对转换器的正常工作相当重要。它主要完成模式设置、时钟输出寄存器设置、接受码寄存器ACR设置、接收屏蔽码寄存器AMR设置、总线定时器设置和输出控制寄存器设置。3.3 基于CAN总线协议的数据接收与发送程序设计主程序启动后调用CAN_Recive()函数检查CAN接收缓冲区中是否有数据存在,如果检查到数据,则程序从缓冲区中读取一帧数据并将其送入参数buf指定的缓冲区中。主程序如果发现RS-232接收缓冲区内有数据,则读取该数据帧并将其交由CAN_Send()函数发送至CAN总线。这里CAN_Send()函数接收到的数据帧格式为通用帧格式,需要先将其中的DesDevID SouDevID Length 等信息从通用帧中提取出来,填入CAN总线格式帧的各个位置,再通过命令寄存器传递发送请求。此外,主程序通过ChkEndC()函数检测数据帧是否发送完毕。4. 结论本设计完成了CAN总线与RS-232转换器的电路与软件设计。本设计的创新点是:由于CAN总线与RS-232接口数据通信速率以及通信帧格式都不同,本设计最大优点是解决了这两点不同,从而实现了数据在CAN总线与RS-232接口之间的传输。在设计中由于使用了CAN总线进行数据传输这就使得通信方式多主性。网络上任意节点可以任意时刻主动地向网络上其他节点发送信息而不分主从。可以点对点,点对多点或全局广播方式发送和接收数据。图4? CAN总线与RS-232转换器主程序流程图
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-11 20:03 , 耗时 0.088411 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表