RS485收发器在FPGA中的应用及注意事项

RS485收发器在FPGA中的应用及注意事项

1 前言

明确设计思路,精准定位问题,对于我们后期理解迭代工程有很大的帮助。

这就是我们常说的40%设计,20%编写和剩下的40%时间进行调试优化。

今天为大家带来的是如何解决RS485收发器使能转变引起的毛刺。

2 问题

Q1:什么时候需要用到RS485收发器?

Q2:为何RS485收发器使能转变会引起毛刺?

Q3:如何处理毛刺规避FPGA时序判断?

3 RS485收发器

3.1 硬件基础

3.1.1 标准收发器

RS485收发器是一类集成电路芯片,它的核心作用是在微控制器(如FPGA、MCU)的逻辑电平(如TTL电平,通常是0V/3.3V或0V/5V)与RS485差分信号之间进行双向转换。大多数RS485收发器还具备使能控制引脚(DE或RE),允许主控芯片灵活地切换其工作模式——发送或接收,从而支持半双工通信架构。

在实际应用中,微控制器输出的信号属于低电压、低电流的逻辑电平,适合短距离、高精度的内部电路通信,但无法直接用于长距离传输,容易受到电磁干扰、线路衰减等因素影响,导致信号失真甚至通信失败。

在这里插入图片描述

【差分传输】:RS485标准通过两根信号线(通常标记为A和B,或+和-)之间的电压差来表示数据,具有很强的抑制能力,能够在嘈杂的工业现场稳定工作

【阻抗匹配】:为了保证通信稳定性,通常在总线两端配置120欧姆的终端电阻,以匹配电缆特性阻抗,减少信号反射带来的干扰

【SP3485】:支持485和422,差分电压范围覆盖-7V~12V

3.1.2 自动方向控制收发器

当RS485收发器没有专用的DE(驱动器使能)或RE(接收器使能)控制引脚时,实现半双工通信的核心思路是:采用具备自动方向控制功能的收发器芯片。

这类芯片内部集成了智能逻辑,可以自动管理数据流的方向,如下图右侧:

在这里插入图片描述
特性标准收发器(带DE/RE引脚)自动方向控制收发器(无DE/RE引脚)
控制方式软件手动控制:需要MCU的GPIO引脚和精确的时序代码硬件自动控制:通过检测TXD信号的电平变化自动完成
硬件复杂度较高(需要连接控制线)较低(只需要连接TXD/RXD和电源)
软件复杂度较高(需编程方向切换代码)较低(如同操作普通UART)
可靠性依赖软件时序的正确性由硬件保证,时序更精确可靠
适用场景几乎所有RS485应用,给予开发者完全的控制权引脚资源紧张,追求开发简便性和可靠性的应用

3.2 软件协议

FPGA基于RS485收发器可以实现两大类协议:标准的、广泛应用的通用协议如UART、BissC、EnDat等以及自定义的、为特定应用优化的专用协议。

【BissC、EnDat】:需要两路RS485收发器,一路差分时钟,一路差分数据

4 异常现象

这里以EnDat协议时序进行说明,状态跳转如下:

  1. FPGA进入SEND_ORD状态,主机发送指令
  2. 指令发送后,FPGA进入WAIT状态,等待从机返回高电平起始位
  3. 检测到高电平返回,FPGA进入START_BIT状态
> wavedrom图片

通过时序图和说明可以发现,在等待起始位的WAIT状态中,RXD出现了脉冲周期不符的高电平,而FPGA把这个毛刺当成起始位处理导致状态跳转异常。

5 问题分析

5.1 原因定位

经过复现发现,所使用的RS485收发器在改变EN使能方向时,对应的RXD/TXD会出现高电平毛刺,从而导致FPGA误判。

5.2 解决方案

5.2.1 硬件处理

  • 原理:利用电阻(R)和电容(C)的充放电特性,电容两端的电压不能突变,需要一定的充电时间。一个快速的毛刺脉冲给电容充电时,由于能量小、持续时间短,在电容上的电压还没来得及建立时就消失了,因此输出端看不到明显的电压变化,从而被过滤掉。
  • 优缺点
    • 优点:简单、成本极低、非常有效。
    • 缺点:会延迟信号的正常跳变,RC时间常数(t = R * C)越大,过滤毛刺能力越强,但信号延迟也越严重。因此RC值根据信号频率和毛刺宽度权衡

5.2.2 软件处理

通过观察可以确定,从改变EN使能方向到出现毛刺的时间是固定的,因此可以增加状态延时,以此过滤掉高电平毛刺。

> wavedrom图片

【DELAY】:该状态周期根据毛刺到来时间调整

6 参考

Read more

Python + AI:打造你的智能害虫识别助手

Python + AI:打造你的智能害虫识别助手

Python + AI:打造你的智能害虫识别助手 在农业生产中,病虫害是影响作物产量和品质的“隐形杀手”。传统的害虫识别依赖人工巡查,不仅耗时耗力,还容易因经验不足导致误判、漏判。而随着智慧农业的普及,AI技术正成为破解这一难题的关键——今天,我们就用Python从零搭建一个智能害虫识别助手,让电脑替你“火眼金睛”辨害虫,轻松搞定农作物病虫害预警! 一、为什么要做这个项目? 智慧农业的核心是“精准、高效、低成本”,而害虫识别正是其中的典型场景: * 对农户:无需专业植保知识,拍照就能识别害虫种类,快速匹配防治方案; * 对开发者:这是一个“小而美”的实战项目,覆盖AI开发全流程,从数据处理到模型部署,学完就能落地; * 技术价值:融合Python、深度学习、Web部署,是入门AI+垂直领域应用的绝佳案例。 这个项目不需要你有深厚的AI功底,只要掌握Python基础,跟着步骤走,就能做出一个能实际使用的智能识别工具。 二、项目核心技术栈 先明确我们要用到的工具,都是行业主流、

By Ne0inhk
C++中的父继子承:继承方式实现栈及同名隐藏和函数重载的本质区别, 派生类的4个默认成员函数

C++中的父继子承:继承方式实现栈及同名隐藏和函数重载的本质区别, 派生类的4个默认成员函数

🎬 胖咕噜的稞达鸭:个人主页 🔥 个人专栏: 《数据结构》《C++初阶高阶》《算法入门》 ⛺️技术的杠杆,撬动整个世界! 学习完本文,你将知道:(各位大佬预知答案几何请移步文章结尾!) 1. 当子类继承了父类,父类的私有成员在子类中是不可见的,所以父类的私有成员在子类中有没有被继承下来? 2. 子类对象一定比父类大? 3. 函数重载和函数隐藏的区别是什么?同名了有什么影响? 4. 派生类构造函数初始化列表的位置必须显式调用基类的构造函数,已完成基类部分成员的初始化? 5. 派生类构造函数先初始化子类成员,再初始化基类成员?派生类对象构造函数先调用子类构造函数,在调用基类构造函数? 接着来步入今天的正文: 面向对象三大特性:封装,继承,多态 我们之前学过了封装,类的定义是一个封装,迭代器实现也是一个封装,屏蔽了底层的实现细节。模板的使用也是一个封装。接下来讲解面向对象第二大特性:继承。 继承的定义: 假设大学学生和大学的老师,作为一个人的共性,都有姓名,住址和电话号码,但是不同的是,老师授课有职称,学生有学号,这是老师和学生不同的地方。

By Ne0inhk

Clang 17正式发布:C++26十大新特性你必须马上掌握

第一章:Clang 17正式发布:C++26新特性的整体概览 Clang 17 的正式发布标志着对 C++26 标准早期特性的全面支持迈出了关键一步。作为 LLVM 项目的重要组成部分,Clang 17 不仅提升了编译性能与诊断能力,更率先实现了多项处于提案阶段的 C++26 核心语言特性,为开发者提供了前沿的实验平台。 核心语言特性的演进 C++26 正在推进一系列旨在提升代码简洁性与安全性的变更。Clang 17 已初步支持以下关键特性: * 类模板参数推导(CTAD)在别名模板中的扩展应用 * 隐式移动的进一步放宽规则,减少不必要的拷贝操作 * 基于范围的循环支持初始化语句(类似 if 和 switch 的 init-statement) 模块化系统的增强 Clang 17 深化了对 C++20 模块的支持,并为 C+

By Ne0inhk
C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

C++ 面试题常用总结 详解(满足c++ 岗位必备,不定时更新)

📚 本文主要总结了一些常见的C++面试题,主要涉及到语法基础、STL标准库、内存相关、类相关和其他辅助技能,掌握这些内容,基本上就满足C++的岗位技能(红色标记为重点内容),欢迎大家前来学习指正,会不定期去更新面试内容。  Hi~!欢迎来到碧波空间,平时喜欢用博客记录学习的点滴,欢迎大家前来指正,欢迎欢迎~~ ✨✨ 主页:碧波 📚 📚 专栏:C++ 系列文章 目录 一、C ++ 语法基础 🔥 谈谈变量的使用和生命周期,声明和初始化 🔥 谈谈C++的命名空间的作用 🔥  include " " 和 <> 的区别 🔥 指针是什么? 🔥 什么是指针数组和数组指针 🔥 引用是什么? 🔥 指针和引用的区别 🔥 什么是函数指针和指针函数以及区别 🔥 什么是常量指针和指针常量以及区别 🔥 智能指针的本质是什么以及实现原理 🔥 weak_ptr 是否有计数方式,在那分配空间? 🔥 类型强制转换有哪几种? 🔥 函数参数传递时,

By Ne0inhk