ADM2587E在RS485和RS422接口的应用(ADM2587E电路原理图和程序开发)

       最近做一个项目使用到ADM2587E,为了解决公司历史遗留的问题(ADM2587E芯片发烫,容易烧毁,485设备只能手拉手连接三四个,就通信不正常现象),认真阅读了Datasheet和官网LayOut的一些设计文档,在此做个总结。

        ADM2587E是ADI公司推出的集成了iCoupler数字隔离的隔离型RS485/422收发器,输入/输出引脚具备±15kV静电放电(ESD)保护功能,适用于高速通信的多点传输线。ADM2582E/ADM2587E还内置了隔离的DC-DC电源,摒弃了外部DC-DC隔离模块的需求。
        主要特色:
    (1)隔离式RS485、RS422收发器,可设置半双工、全双工两种模式。
    (2)内部封装了 isoPower隔离型DC-DC转换器,无需外部连接DC-DC电源芯片。
    (3)DC5V或3.3V电源供电(使用3.3V功耗更小)。
    (4)通信速率500kb/s,支持波特率115200。
    (5)强大的保护功能,比如热关断保护、高共模瞬变抗扰度:>25 kV/μs等。

下载芯片的Datasheet ADM2587E | 隔离式 RS-485 接口 | 亚德诺(ADI)半导体

【注意:这个芯片一定要看Datasheet,一定要看Datasheet,一定要看Datasheet,重要事情说三遍,一切导致芯片发烫,通信不正常,串联设备数量不够,都是芯片使用错误导致!!!】

由Datasheet可知芯片引脚图如下:

 其引脚定义为:

 翻译:

Pin No.MnemonicDescription
1GND1地,逻辑侧地
2VCC逻辑侧电源。建议在引脚2和引脚1之间安装一个0.1µF和一个0.01 µF的分流电容
3GND1地,逻辑侧地
4RXD接收器输出数据。(注意:此引脚和主芯片的RX引脚连接)
5\RE接收器使能输入。低电平时,输入有效
6DE发送器使能输入。高电平时,输出有效
7TXD驱动器输入数据(注意:此引脚和主芯片的TX引脚连接)
8VCC逻辑侧电源。建议在引脚 8 和引脚 9 之间放置一个 0.1 µF 和一个 10 µF 的分流电容
9GND1地,逻辑侧地
10GND1地,逻辑侧地
11、14GND2

隔离式DC-DC转换器的GND,建议通过一个磁珠将引脚 11 和引脚 14 连接到 PCB 地线上

12VISOOUTVISOOUT,隔离电源输出。必须外部连接到 VISOIN。建议在引脚 12 和引脚 11 之间放置一个 10 µF 的储备电容和一个 0.1 µF 的分流电容
13Y驱动器的非反相输出
15Z驱动器的反相输出
16GND2地线,总线侧。不要将此引脚连直接接到引脚 14 和引脚 11
17B接收器的反相输入
18A接收器的非反相输入
19VISOIN隔离电源输入。必须外部连接到 VISOOUT。建议在引脚 19 和引脚 20 之间放置一个 0.1 µF 和一个 0.01 µF 的分流电容。通过磁珠将此引脚连接到 VISOOUT
20GND2地线,总线侧

其典型电路(半双工RS485)如图所示:

         图中,左侧为公共GND,右侧为信号GND。磁珠L1和L2型号为BLM15HD182SN1D
0402封装,阻抗1.8kΩ@100MHz。TVS型号为P6KE6.8A。

        原理图主要是要注意如下:

       (1)引脚4和引脚7和主芯片连接不能接错,不能看到引脚4名称为RXD,就和主控芯片的TXD连接,引脚7同理。

        (2)引脚12必须和引脚19连接,这个是芯片内部DC-DC,提供3.3V电压。有的工程师,参考网上电路,将引脚12和19连接后,又外接了5V或者3.3V外部电源,由于外部电源不够稳定,极易造成芯片发烫,甚至烧毁。

        (3)瞬态电压抑制管我是建议接上的,特别在室外长距离传输,不接容易损坏芯片。

        (4)L1、L2磁珠,可以选择性连接,试验了,问题不大,但是应该会使通信干扰增加。

        (5)GND2和GND1共地,问题不大,但是会失去隔离芯片最大的隔离特性。

        (6)输出A、B两根线也行,不引入信号地,通信没问题。

        (7)RS485跨接的120Ω,如果多设备连接,手拉手接在设备的末端即可。

        由datasheet可知,需要注意的是:

   

        为了抑制噪声,需要低感抗、高频率的电容;而为了抑制纹波并保持稳压,需要较大容值的电容。电源侧的电容连接在引脚 1(GND1)与引脚 2(VCC),以及引脚 8(VCC)与引脚 9(GND1)。 VISOIN 和 VISOOUT 电容器分别连接在引脚 11(GND2)与引脚 12(VISOOUT),以及引脚 19(VISOIN)与引脚 20(GND2)。

        为了实现噪声抑制和纹波减小,并联的电容容值较小的电容应该靠近芯片。电容值推荐为:       

       (1)引脚 11 和引脚 12 处的 VISOOUT 分别为 0.1 µF 和 10 µF

       (2)引脚 8 和引脚 9 处的 VCC 分别为 0.1 µF 和 0.01 µF。

       (3)引脚 19 和引脚 20 处的 VISOIN,引脚 1 和引脚 2 处的 VCC,电容值分别为 0.01 µF 和 0.1 µF。

       (4) 拼接电容尽可能靠近GND1(引脚9和引脚10)以及GND2(引脚11)。
       (5) 为了降低PCB走线的电感效应,最好避免使用很窄和很长的走线。
       (6)为使拼接电容有效,必须将电容直接连到引脚11,即GND2(器件引脚和铁氧体磁珠之间)

       (7)引脚11和引脚14上的GND2连接先通过PCB走线连在一起,然后连接到铁氧体磁珠。为了降低辐射,必须确保这两个GND2引脚先通过铁氧体磁珠连接,再连接到PCB GND2和GND2(引脚16和引脚20)。

       (8)Layout时,电容器引线总长度与输入电源引脚之间的距离不应超过 10 mm。

Datasheet推荐引脚电容和磁珠连接图如下:

 Datasheet推荐引脚电容放置图和PCB布局如下:

         GD32F103ZET6的UART3和ADM2587E程序设计(半双工),引脚PC10(连接 ADM2587E的引脚7)和PC11(连接 ADM2587E的引脚4),PD3和ADM2587E的使能引脚5、6连接。

【注意:GD32F103ZET6是国产芯片,平替STM32F103ZET6,故STM32F103可以直接参考(也可以参考我之前STM32串口通信文章)】

1、初始化UART3

//!----------------------------------------------------------
//!-------------------> Local Defines <----------------------
//!----------------------------------------------------------
#define USART_DATA_LEN						64//!----------------------------------------------------------
//!--------------------> Local Variables <-------------------
//!----------------------------------------------------------
volatile uint16_t usart3_rx_cnt = 0;
uint16_t usart3_rx_buf[USART_DATA_LEN] = {0};/*!
================================================================================
@BriefUSART3 config(void).                                      
@Paramnull                                   
@Return	null	
-------------------------------------------------------------------------------
*/
void USART3_Config(void)
{rcu_periph_clock_enable(RCU_GPIOC);    // 使能GPIO时钟rcu_periph_clock_enable(RCU_UART3);   // 使能串口时钟gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);  // 发送引脚初始化 TXgpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);  // 接收引脚初始化  RXusart_deinit(UART3);    // 串口复位usart_word_length_set(UART3, USART_WL_8BIT);  // 字长usart_stop_bit_set(UART3, USART_STB_1BIT);    // 停止位usart_parity_config(UART3, USART_PM_NONE);usart_baudrate_set(UART3, 9600U);     // 波特率usart_receive_config(UART3, USART_RECEIVE_ENABLE);     // 接收使能usart_transmit_config(UART3, USART_TRANSMIT_ENABLE);   // 发送使能usart_hardware_flow_rts_config(UART3, USART_RTS_DISABLE);usart_hardware_flow_cts_config(UART3, USART_CTS_DISABLE);usart_enable(UART3);           // 串口使能nvic_irq_enable(UART3_IRQn, 0, 0);//使能UART3中断usart_interrupt_flag_clear(UART3, USART_INT_RBNE);//接收缓冲区非空中断usart_interrupt_flag_clear(UART3, USART_INT_IDLE);//接收空闲中断打开usart_interrupt_enable(UART3, USART_INT_RBNE);//接收缓冲区非空中断usart_interrupt_enable(UART3, USART_INT_IDLE);//接收空闲中断打开
}/*!
================================================================================
@BriefUSART3 enable(void).                                      
@Paramnull                                   
@Return	null	
-------------------------------------------------------------------------------
*/
void USART3_RX_Enable(void)
{gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); // UART3 Enable:PD3 OUTPUTgpio_bit_reset(GPIOD, GPIO_PIN_3);		// PIN Low:Rx; High:Tx
}/*!
================================================================================
@BriefUSART3 enable(void).                                      
@Paramnull                                   
@Return	null	
-------------------------------------------------------------------------------
*/
void USART3_TX_Enable(void)
{gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); // UART3 Enable:PD3 OUTPUTgpio_bit_set(GPIOD, GPIO_PIN_3);		// PIN Low:Rx; High:Tx
}/*!
================================================================================
@BriefUART3 Interrupt receive.  (PC)                                  
@Paramnull                                   
@Return	null	
-------------------------------------------------------------------------------
*/
void UART3_IRQHandler(void)
{if(RESET != usart_interrupt_flag_get(UART3, USART_INT_FLAG_RBNE)){			usart3_rx_buf[usart3_rx_cnt++] = usart_data_receive(UART3);    //  接收串口数据} else if(RESET != usart_interrupt_flag_get(UART3, USART_INT_FLAG_IDLE)){usart_data_receive(UART3);  //清除空闲中断标志//USART_SendData(UART3,usart3_rx_buf, usart3_rx_cnt);//控制逻辑在此添加usart3_rx_cnt = 0;memset(usart3_rx_buf, 0, sizeof(usart3_rx_buf));	}		
}

PS,全双工,简易电路如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/63865.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot04--vue前端部分+element-ui

注意点&#xff1a; 这边v-model和value的区别&#xff1a;v-model是双向绑定的&#xff0c;value是单向绑定 li的key的问题 vue的组件化开发&#xff1a; 1. NPM&#xff08;类似maven&#xff0c;是管理前段代码的工具&#xff09; 安装完之后可以在cmd里面使用以下指令 2.…

数据库中的连表更新和连表删除

1.连表更新 准备两张表,id一样,但是姓名不一样, 需求根据id让姓名保持一致 执行的sql UPDATE teacher_copy1 AS b INNER JOIN teacher c ON b.TId c.TId set b.tnamec.tname 执行结果 2.连接删除 DELETE a FROMteacher_copy1 AS aINNER JOIN teacher b ON a.TId b.TId

flutter 初识(开发体验,优缺点)

前言 最近有个跨平台桌面应用的需求&#xff0c;需要支持 windows/linux/mac 系统&#xff0c;要做个更新应用的小界面&#xff0c;主要功能就是下载更新文件并在本地进行替换&#xff0c;很简单的小功能。 花了几分钟构建没做 UI 优化的示例界面&#xff1a; 由于我们的客…

STM32F429IGT6使用CubeMX配置串口通信

1、硬件电路 2、设置RCC&#xff0c;选择高速外部时钟HSE,时钟设置为180MHz 3、配置USART1引脚 4、生成工程配置 5、部分代码 //重定向printf函数 int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch; } /* USER CODE BE…

不基于比较的排序:基数排序

本篇只是讨论桶排序的具体实现&#xff0c;想了解更多算法内容可以在我的博客里搜&#xff0c;建议大家看看这篇排序算法总结&#xff1a;排序算法总结_鱼跃鹰飞的博客-CSDN博客 桶排序的原理&#xff1a; 代码&#xff1a;sort1是一个比较二逼的实现方式浪费空间&#xff0c;s…

[git] git基础知识

git是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目 git易于学习&#xff0c;性能极快 什么是版本控制&#xff1f; 版本控制是一种记录文件内容变化&#xff0c;以便将来查阅特定版本修订情况&#xff0c;可以记录文件修改历史…

【ElasticSearch入门】

目录 1.ElasticSearch的简介 2.用数据库实现搜素的功能 3.ES的核心概念 3.1 NRT(Near Realtime)近实时 3.2 cluster集群&#xff0c;ES是一个分布式的系统 3.3 Node节点&#xff0c;就是集群中的一台服务器 3.4 index 索引&#xff08;索引库&#xff09; 3.5 type类型 3.6 doc…

通达OA SQL注入漏洞【CVE-2023-4166】

通达OA SQL注入漏洞【CVE-2023-4166】 一、产品简介二、漏洞概述三、影响范围四、复现环境POC小龙POC检测工具: 五、修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损…

我的Python教程:使用Pyecharts画柱状图

Pyecharts是一个用于生成 Echarts 图表的 Python 库。Echarts 是一个基于 JavaScript 的数据可视化库&#xff0c;提供了丰富的图表类型和交互功能。通过 Pyecharts&#xff0c;你可以使用 Python 代码生成各种类型的 Echarts 图表&#xff0c;例如折线图、柱状图、饼图、散点图…

电脑开不了机如何解锁BitLocker硬盘锁

事情从这里说起&#xff0c;不想看直接跳过 早上闲着无聊&#xff0c;闲着没事干&#xff0c;将win11的用户名称改成了含有中文字符的用户名&#xff0c;然后恐怖的事情发生了&#xff0c;蓝屏了… 然后就是蓝屏收集错误信息&#xff0c;重启&#xff0c;蓝屏收集错误信息&…

Windows下安装 Redis

目录 1.下载 1.1.Redis官网 1.2.github下载地址 2.安装步骤 2.1.解压Redis压缩包 2.2.创建临时服务 2.3.启动客户端 2.4.注册Redis服务 3.总结 4.致谢 1.下载 1.1.Redis官网 Download | Redis Redis 官方网站没有提供 Windows 版的安装包&#xff0c;但可以通过…

x11 gtk qt gnome kde 之间的区别和联系

Linux 下的图形库介绍 一、Linux 图形领域的基础设施 1.1 X Window X Window从逻辑上分为三层&#xff1a;X Server、X Client和X协议。 最底层的X Server&#xff08;X服务器&#xff09;主要处理输入/输出信息并维护相关资源&#xff0c;它接受来自键盘、鼠标的操作并将…