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.rhkb.cn/news/87652.html

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

相关文章

加盐加密算法

MD5加密加盐加密项目密码升级 MD5加密 MD5一系列公式进行复杂数学运算&#xff1b;特点&#xff1a;&#xff08;用途校验和、计算hash值方式、加密&#xff09; 1&#xff1a;定长&#xff1b;无论原始数据多长&#xff1b;算出的结果都是4或者8字节的版本。 2&#xff1a;冲…

GPT内功心法:搜索思维到GPT思维的转换

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

由浅入深学习Tapable

文章目录 由浅入深学习TapableTapable是什么Tapable的Hook分类同步和异步的 使用Sync*同步类型钩子基本使用bailLoopWaterfall Async*异步类型钩子ParallelSeries 由浅入深学习Tapable webpack有两个非常重要的类&#xff1a;Compiler和Compilation。他们通过注入插件的方式&a…

MySQL group by后取每个分组中最新一条数据

一、需求 MySQL group by后取每个分组中最新一条数据 二、实现 1&#xff09;方案1&#xff1a;使用min()和max()方法 1、group by后取每个分组中最新一条数据 SELECT MAX(test_id) FROM test GROUP BY test_user_id; 2、group by后取每个分组中第一条插入的数据 SELECT…

【不支持发行版本 5】错误解决

说明&#xff1a;启动项目报下面的错误&#xff0c;不支持发行版本 5 解决&#xff1a;在pom文件中添加下面这两行配置&#xff0c;修改成你自己安装的jdk版本 <properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target&g…

大华智慧园区综合管理平台文件上传漏洞复现(HW0day)

0x01 产品简介 “大华智慧园区综合管理平台”是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。平台意在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 0x02 漏洞概述 大华智慧园…

基于灰狼优化(GWO)、帝国竞争算法(ICA)和粒子群优化(PSO)对梯度下降法训练的神经网络的权值进行了改进(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

解决监督学习,深度学习报错:AttributeError: ‘xxx‘ object has no attribute ‘module‘!!!!

哈喽小伙伴们大家好呀&#xff0c;很长时间没有更新啦&#xff0c;最近在研究一个问题&#xff0c;就是AttributeError: xxx object has no attribute module 今天终于是解决了&#xff0c;所以来记录分享一下&#xff1a; 我这里出现的问题是&#xff1a; 因为我的数据比较大…

深度学习之用PyTorch实现逻辑回归

0.1 学习视频源于&#xff1a;b站&#xff1a;刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容&#xff0c;若有错误欢迎指正&#xff01; 代码&#xff08;类比线性回归&#xff09;&#xff1a; # 调用库 import torch import torch.nn.functional as F#…

Amazon CloudFront 部署小指南(五)- 使用 Amazon 边缘技术优化游戏内资源更新发布...

内容简介 游戏内资源包括玩家的装备/弹药/材料等素材&#xff0c;对游戏内资源的发布和更新是游戏运营商的一个常规业务流程&#xff0c;使用频率会十分高&#xff0c;所以游戏运营商希望该流程可以做到简化和可控。针对这个需求&#xff0c;我们设计了 3 个架构&#xff0c;面…

【Django】招聘面试管理01 创建项目运行项目

文章目录 前言一、创建项目二、运行项目三、访问后台管理页面四、配置项总结 前言 跟着视频学一学&#xff0c;记录一下。 一、创建项目 照着步骤创建虚拟环境&#xff0c;安装Django等依赖包&#xff0c;创建项目&#xff1a;【Django学习】01 项目创建、结构及命令 > d…

计算机网络实验1:网络命令学习

文章目录 1. 主要教学内容2. ping命令2.1 发送ping测试报文2.2 检测TCP/IP 3. tracert命令4. ipconfig命令5. netstat命令6. arp命令7. net命令8. netsh命令 1. 主要教学内容 实验内容&#xff1a;学习ping、tracert、ipconfig等常用的网络命令。所需学时&#xff1a;1。重难点…

微服务实战项目-学成在线-项目部署

微服务实战项目-学成在线-项目部署 1 什么是DevOps 一个软件的生命周期包括&#xff1a;需求分析阶、设计、开发、测试、上线、维护、升级、废弃。 通过示例说明如下&#xff1a; 1、产品人员进行需求分析 2、设计人员进行软件架构设计和模块设计。 3、每个模块的开发人员…

Vue输入框或者选择框无效,或者有延迟

问题剖析 使用Vue这种成熟好用的框架&#xff0c;一般出现奇奇怪怪的问题都是因为操作不当导致的&#xff0c;例如没有合理调用组件、组件位置不正确、没有合理定义组件或者变量、样式使用不当等等... 解决方案 如果你也出现了输入框输入东西&#xff0c;但是没有效果…

c语言每日一练(5)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

零代码编程:用ChatGPT对Excel文件批量重命名

文件夹下面有几百个Excel文件&#xff0c;希望去掉开头的“【企查查】专利-”&#xff0c;去掉结尾的电话&#xff0c;然后在后面统一加上“发明专利列表”这几个字。 可以在ChatGPT中这样输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个文件标题重命名…

【CI/CD】Git Flow 分支模型

Git Flow 分支模型 1.前言 Git Flow 模型&#xff08;本文所阐述的分支模型&#xff09;构思于 2010 年&#xff0c;也就是 Git 诞生后不久&#xff0c;距今已有 10 多年。在这 10 多年中&#xff0c;Git Flow 在许多软件团队中大受欢迎。 在这 10 多年里&#xff0c;Git 本身…

窥探系列之Mybatis-plus XML分页查询

mybatisPlus分页查总数 Page类在mybatisPlus中用于分页查询&#xff0c;继承Pagination类&#xff0c;Pagination类的searchCount字段控制是否查询总记录数 顺着看哪里用到了searchCount&#xff1a; com.baomidou.mybatisplus.plugins.PaginationInterceptor 是mybatisPlus…

微服务与Nacos概述-2

微服务间消息传递 微服务是一种软件开发架构&#xff0c;它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展&#xff0c;并通过轻量级的通信机制进行交互。 应用开发 common模块中包含服务提供者和服务消费者共享的内容 provider模块是…

Android14操作系统全新功能发布,允许用户撤销全屏权限

最新发布的Android 14操作系统带来了一系列全新功能和改进&#xff0c;其中之一是新增了选项&#xff0c;让用户能够撤销应用的全屏权限。这样一来&#xff0c;用户可以阻止一些应用在全屏模式下隐藏状态栏和导航栏&#xff0c;从而更方便地查看时间、电量和其他信息。 此外&a…