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

news2024/11/23 5:06:22

       最近做一个项目使用到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};


/*!
================================================================================
@Brief
	USART3 config(void).                                      
@Param
	null                                   
@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);  // 发送引脚初始化 TX
	gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);  // 接收引脚初始化  RX

	usart_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);//接收空闲中断打开
}

/*!
================================================================================
@Brief
	USART3 enable(void).                                      
@Param
	null                                   
@Return	
	null	
-------------------------------------------------------------------------------
*/
void USART3_RX_Enable(void)
{
	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); // UART3 Enable:PD3 OUTPUT
	gpio_bit_reset(GPIOD, GPIO_PIN_3);		// PIN Low:Rx; High:Tx
}

/*!
================================================================================
@Brief
	USART3 enable(void).                                      
@Param
	null                                   
@Return	
	null	
-------------------------------------------------------------------------------
*/
void USART3_TX_Enable(void)
{
	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3); // UART3 Enable:PD3 OUTPUT
	gpio_bit_set(GPIOD, GPIO_PIN_3);		// PIN Low:Rx; High:Tx
}

/*!
================================================================================
@Brief
	UART3 Interrupt receive.  (PC)                                  
@Param
	null                                   
@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.coloradmin.cn/o/868883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4、基于mysql实现分布式锁

目录 4.1. 基本思路4.2. 代码实现4.3 缺陷及解决方案 4.1. 基本思路 synchronized关键字和ReetrantLock锁都是独占排他锁&#xff0c;即多个线程争抢一个资源时&#xff0c;同一时刻只有一个线程可以抢占该资源&#xff0c;其他线程只能阻塞等待&#xff0c;直到占有资源的线程…

棒球和垒球的区别·棒球联盟

棒球和垒球的区别 1. 定义和起源 棒球起源于19世纪中叶的美国&#xff0c;最初被认为是一种游戏&#xff0c;而并非体育运动。那时&#xff0c;棒球常常被孩子们用来进行休闲娱乐。在20世纪初&#xff0c;它才开始被纳入体育运动的范畴。 垒球则是棒球的近亲&#xff0c;同样…

Java | 字符串

目录 一、String类 1.1 声明字符串 1.2 创建字符串 二、连接字符串 2.1 连接多个字符串 2.2 连接其他数据类型 三、获取字符串信息 3.1 获取字符串长度 3.2 字符串查找 3.3 获取指定索引位置的字符 四、字符串操作 4.1 获取字符串 4.2 去除空格 4.3 字符串替换 …

Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 第一步首先配置Android studio的NDK开发环境&#xff0c;首先在Android studio中下载NDK…

QT-基于Buildroot构建系统镜像下实现QT开发

QT-基于Buildroot构建系统镜像下实现QT开发 BuildRootUboot的仓库地址和commit idKernel 的仓库地址和commit id BuildRoot已编译库在Windows上的Create上创建项目编译QT项目 BuildRoot 这部分按照100ask官网的教程走即可: Uboot的仓库地址和commit id https://e.coding.net/…

如何使用ChatGPT设计LOGO,只需知道品牌名字就能完成傻瓜式操作

​独特且引人注目的LOGO对于引导用户/消费者快速识别并与你建立联系至关重要。然而&#xff0c;聘请专业的设计师来创建个性化LOGO可能非常昂贵。这里可以使用使用ChatGPT。[1] 你只需要&#xff1a; 准备好公司名称&#xff1b; 能用ChatGPT&#xff0c;用来给BingChat喂log…

WebAPIs 第一天

1.声明变量const优先&#xff08;补充&#xff09; 2.WebAPI基本认知 作用和分类 DOM树和DOM对象 3.获取DOM元素 4.DOM修改元素内容 5.操作元素属性 6.定时器-间歇函数 一.声明变量const优先 ① 变量声明有var let const ② 建议const优先&#xff0c;尽量使用const…

【枚举+推式子】牛客小白月赛 63 E

登录—专业IT笔试面试备考平台_牛客网 题意&#xff1a; 思路&#xff1a; 首先是个计数问题&#xff0c;考虑组合数学 组合数学就是在考虑枚举所有包含1和n的区间 这个典中典就是枚举1和n的位置然后算贡献 双指针超时&#xff0c;考虑推式子&#xff1a; Code&#xff1a…

分类过程中的一种遮挡现象

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由6张二值化的图片组成&#xff0c;让A&#xff0c;B中各有3个点&#xff0c;且不重合&#xff0c;统计迭代次数并排序。 其中有10组数据 差值结构 迭代次数 构造平均列A 构造平均列AB…

C++笔记之函数参数列表中设置默认值

C笔记之函数参数列表中设置默认值 code review! 代码 #include <iostream>// 函数声明时设置默认值 void printInfo(std::string name "Unknown", int age 0);int main() {printInfo(); // 使用默认参数值printInfo("Alice", 25);…

Scractch3.0_Arduino_ESP32_学习随记_蓝牙鼠标(四)

蓝牙鼠标 目的器材程序联系我们 目的 通过C02实现蓝牙鼠标。 器材 硬件: 齐护机器人C02 购买地址 软件:scratch3.0 下载地址:官网下载 程序 蓝牙鼠标使用使用ESP32自带的BLE蓝牙&#xff0c;不需要再外接模块。可以实现鼠标移动&#xff0c;左右键的点击动作。 联系我们…

C++进阶 智能指针

本篇博客简介&#xff1a;介绍C中的智能指针 智能指针 为什么会存在智能指针内存泄露内存泄漏定义内存泄漏的危害如何检测内存泄漏如何避免内存泄漏 智能指针的使用及其原理RAII设计一个智能指针C官方的智能指针 定制删除器智能指针总结 为什么会存在智能指针 我们首先来看下面…

消息队列(11) - 通信协议的设计

目录 通信协议设计代码实现 通信协议设计 对于我们客户端与服务器之间的通信协议我们约定如下&#xff1a; 具体的协议设计: 之后我们传递的参数也是这些 关于 type其实是在描述当前这个请求 、 响应是在调用那个API 约定如下 对于channel ,是tcp链接中的一个逻辑上的链接,…

Python实现图片文本支持中文,自定义字体

Python实现图片文本支持中文&#xff0c;自定义字体 # 支持中文 import matplotlib #用下载好的字体文件设置字体&#xff0c;从而正确显示中文 myfont matplotlib.font_manager.FontProperties(fnamer"./simsun.ttc") # 自定义的字体文件 plt.figure(figsize (1…

udp一般不会存在错数据

UDP在传输过程中会出现丢包的情况&#xff0c;但不会导致数据错乱的情况&#xff0c;这涉及到UDP协议的特性和工作原理。 无连接性&#xff1a;UDP是一种无连接的传输协议&#xff0c;每个UDP数据包都是独立的&#xff0c;没有依赖关系。因此&#xff0c;即使发生数据包丢失&am…

Golang 局部变量、全局变量 声明

文章目录 一、局部变量二、全局变量 一、局部变量 四种声明方式 多变量声明&#xff1a; package mainimport "fmt"//局部变量声明 func main() {//方法一: 声明一个变量和数据类型&#xff0c;不初始化值&#xff1b;默认值为0&#xff1b;var lvA intfmt.Printl…

圆圈中最后剩下的数字——剑指 Offer 62

文章目录 题目描述解法一题目描述 解法一 class Solution

Spring MVC静态资源映射

Spring MVC静态资源映射 静态资源映射。使用容器的默认Servletlocationmapping&#xff1a;cache-periodorder Spring MVC需要对RESTful风格的URL提供支持&#xff0c;而真正的RESTful风格的URL不应该带有任何后缀&#xff0c;因此将Spring MVC拦截的URL改为“/”&#xff08;正…

使用蓝牙外设却不小心把台式机电脑蓝牙关了

起因 今天犯了一个贼SB的错误&#xff0c;起因是蓝牙键盘突然就不能输入了&#xff08;虽然是连接状态&#xff0c;但是按什么键都没有反应&#xff09; 原来我的解决方法就是重启一下电脑&#xff0c;但是那会电脑开了贼多的软件。我就想重启也太麻烦了&#xff0c;既然重启…

Java之继承

继承 继承为什么使用继承继承是什么继承的语法访问父类成员访问父类成员变量访问父类成员方法 super关键字子类构造方法super和this异同分别的使用方法 继承的方式final关键字 作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等…