基于FPGA的串口通讯设计与实现

2023-11-01

基于FPGA的串口通讯设计与实现

[日期:2012-03-26] 来源: 作者: [字体: ]

  随着多微机系统的应用和微机网络的发展,通信功能越来起重要。串行通信是在一根传输线上一位一位传送信息,这根线既作数据线又作联络线。串行通信作为一种主要的通信方式所用的传输线少,并且可以借助现存的电话网进行信息传送,因此特别适合于远距离传送。串行传输中通信双方都接通信协议进行,所谓通信协议是指通信双方的一种约定,包括对数据格式、同步方式、传送速度、传送步骤、纠错方式以及控制字符定义等问题作出统一规定,通信双方必须共同遵守。

-

  FPGA(现场可编程门阵列)在数字电路的设计中已经被广泛使用,这种设计方式将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中,大大减少电路板的尺寸,增强系统的可靠性和设计的灵活性。

  本文以“高速磁悬浮列车间隙传感器数据采集处理系统”为例,设计一个串口数据采集处理程序,并通过硬件电路详细介绍应用基于FPGA实现串口数据采集与处理的串行通讯。

  系统硬件设计

异步串行通信的硬件接口电路原理图如此下图所示,由RS-485数据发送模块、FPGA串口模块、MAX3223和DB9四部分组成,各部分功能如下:

异步串行通信的硬件接口电路原理图

  通常情况下,发送驱动器A、B之间的正电平是+2~+6V的一个逻辑“1”状态,负电平是-2~-6V的另一个逻辑“0”状态,还有一个信号地C,RS-485中“ENABLE使能”端用于控制发送驱动器与传输线的切断与连接,当“ENABLE使能”端起作用时,发送驱动器处于“第三态”的高阻状态,有别于逻辑“1”和“0”。

  RS-485数据发送模块选用3.3VSP3485,将前续电路的数据发送到FPGA作为电路输入信号,SP3485的内部结构示意图如下图所示。

SP3485的内部结构示意图

  RS485数据信号采用差分传输方式,也称作平衡传输,使用一对双绞线,将其中一线定义为A,另一线定义为B,如下图所示。

4

  接收器作与发送端相对的规定,收、发端通过平衡双绞线将AA与BB对应相连,当接收端;AB之间电平大于+200mV时输出正逻辑电平)小于-200mV时输出负逻辑电平,接收器接收平衡线上的电平范围通常在200mV至6V之间,参见下图。

4

  RS485的7、8聊与前端信号相连,用于接收输入数据,数据格式为:一桢数据25位,报头16个高电平位、1个低电平位,8位有效的数据位。700kbps的速率传输)使能端2、4脚与FPGA的I/0口相连,由FPGA提供逻辑控制信号,1、4脚也与FPGA相连,由FPGA对输入数据进行处理。

  设计核心的FPGA串口模块选用Xilinx公司的Spar-tanll系列xc2s5O,将RS-485发送过来的数据进行处理,提取8位有效数据,并按异步串口通讯的格式要求输出到MAX3223的12脚。为使FPGA正确地对输入数据进行采样,提高分辨率能力和抗干扰能力,采样时钟须选取用比700k波特率更高的时钟,理论上是波特率时钟的2倍。本文选用4倍的波特率时钟,利用经4倍倍频与波特率的接收时钟对串行数据流进行检测和定位采样,接收器在一个位周期内采样4次,如果没有这种倍频关系,定位采样频率和传送波特率相同,则在一个:立周期中,只采样一次,分辨率差。比如,为了检测起始位下降沿的出现,在起始位的前夕采样一次,下次采样受到起始位结束前夕才进行)假若在这个周期期间,因某种原因恰好使接收时钟往后偏移了一点点,错过了起始位造成整个后面各位检测和识别的错误。

  FPGA设计共分三个模块:

  1.时钟分频模块)用来产生所需要的数据采集时钟和数据传输时钟,40M系统主频)2.8M数据采集时钟,11.2K发送时钟。

  2.提取数据模块,RS485发送的25位数搪,8位为有效数据,为发送该8位有效数据,首先通过连续检测到16个高电平和一个低电平来判断8位有效数据的传输,然后按照串行数据传输的格式(一位起始位,八位数据位,一位停止位)无校验位)存储于输出缓冲寄存器中。

  3.串行数据输出模块)11,2k波特率相对比较简单,在移位输出脉冲的作用下将输出缓冲寄存器中的数据移位输出。

  由于RS-232c用正负电压表示逻辑状态,与TTL以高低电平表示逻辑状态的规定不同,为能够同计算机接口或终端的TTL器件连接)本文选用MAXIM公司的MAX3223在RS-232c与TTL电路之间进行电平和逻辑关系的转换。MAX3223为满足RS-232c的标准而设计的,具有功耗低、波特率商、价格低等优点,MAX3223的12脚输入数据,经过电平转换后由8脚输出,经过DB9的TxD端输出到PC机,接收并做后续处理。

  系统软件设计

  FPGA模块作为设计主体,使用Verilog硬件描述语言进行编写,共两个子模块,分别实现提取八位数据和串行数据发送的功能。其Verilog源代码在此省略。

  FPGA模块接收从RS-485发送的串行数据,25位为一个字符,数据以700kbps速率传输,用4倍于波的速率进行采样)大大降低系统的噪声,通过连续检测到16个高电平和一个低电平判断输入的8位有效数据,按照串行数据传输格式加上起始位和停止位后存储于输出缓冲寄存器中,最后以波特率为ll200bps串行输出。

  经ModelsimSE仿真,输入数据为11000000,左边为数据的高位)输出为00000011,右边为数提的低位)下图显示输入波形图,

5

下图显示输出波形图,由于传输速率相差很大,无法在同一仿真图像里显示。

5

-

试试再找找您想看的资料
资料搜索:
标题 内容 作者  
变频器 传感器 减肥 相机 液晶显示器 数码相机 三无 投影机 笔记本电脑 开关电源 处理器 技巧 USB 成功 创业 热水器 不能开机 人生 黑屏 显示调节仪 变压器 微波炉 苹果 播放器 电路设计 GPS 无伴音 养生 交换机 继电器 无图像 数码摄像机 说明 无光栅 555 Linux 滤波器 Windows 自动关机 遥控器 女人 充电器 示波器 不同 逆变器 创新 指示灯不亮 互感器 男人 天线 存储器 嵌入式系统 手表 仪器 维修流程 硬盘 面试 报警器 服务器 CDMA iPhone 康佳 松下 CCD RFID 路由器 诺基亚 集成电路 电阻 三极管 万用表 键盘 电流互感器 LED 机器人 长虹 营养 mp3 太阳能 电动机 振荡器 电热水器 稳压电源 糖尿病 待机 人才 计数器 LED驱动 数据采集系统
 

推荐文章 收藏 推荐 打印 | 整理: 云飞舞 | 阅读: 788
本文评论    查看全部评论 (0)
表情: 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
热门评论

-

-

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于FPGA的串口通讯设计与实现 的相关文章

  • Qt5下串口对高频率自发性数据的接收及处理方法

    在项目中需要用Qt5 9采集仪表中的数据 仪表是以200Hz的频率主动向外连续发送数据 发送频率很高 而且主动发送 不需要软件发送一次 再读取一次 而是软件直接读取 这种直接连续读取 有两个关键点 1 如何从接收buffer里面查找出所需的
  • 单片机实现 printf 打印输出,和电脑端一样用

    在学C语言时 printf 很好用 到了单片机 ARM时却不能用 那因为库中的 printf 是定向打印到显示屏的 所以我们把 printf 重新定向打印到串口就可以了 串口助手中就可以显示打印的内容 这样我们在单片机 ARM中就可以 像电
  • STM32使用USART串口调试ULN2003驱动步进电机

    传送门 STM32控制ULN2003驱动步进电机28BYJ 48最基础版 使用串口调试步进电机28BYJ 48获得需要转速 当使用STM32控制ULN2003驱动步进电机28BYJ 48时 步进电机转速变化缓慢 想要得到合适的控制速度 需要
  • IAP下载

    1 概述 前面一篇文章介绍了我们常用的ISP和ICP编程 除了这两种编程方式最为常见的还有一种叫IAP 下面聊一聊IAP的一些细节 IAP In applicating Programing 翻译过来就是在应用编程 即我们常说的在程序运行过
  • 一、利用AT指令配置esp8266——esp8266WIFI模块初探&STM32串口通信再探

    文章目录 一 esp8266初探 1 esp8266简介 2 esp8266使用方式 什么是AT指令 通过何种方式发送AT指令 二 STM32串口通信再探 1 printf 函数与串口中断函数 2 例子 小试牛刀 3 例子 再进一步 三 局
  • 组态王和plc之间如何建立通讯?

    这两者之间可以有很多种通讯方式 比如 PROFIBUS MPI 以太网 DDE OPC MODBUS 自由口等 主要还是要看你的PLC选型 以及组网方式 现在最常见 也最常用的大概要数RS485 MODBUS协议下的无线通讯方式了 我们假定
  • STM32串口溢出中断问题

    之前调试程序 遇到了串口溢出中断的问题 导致主程序被卡死 这里总结分享一下经验 希望对读者有用 对于STM32F103系列单片机 使能接收中断后 溢出中断就会自动被使能 那什么时候会发生溢出中断呢 在RXNE 1 的的条件下 也就是上次数据
  • Windows使用串口API函数串口编程

    Windows使用串口API函数串口编程 前言 1 打开串口 1 1 参数详解 1 2 代码示例 1 2 1 获取串口号 1 2 2 打开串口 同步通信 1 2 3 打开串口 异步通信 2 关闭串口 3 配置串口 3 1 配置输入输出缓冲区
  • 用虚拟串口进行串口调试

    由于现在的笔记本电脑一般不带有串口 再进行串口调试时 可以用虚拟串口代替 虚拟串口下载链接 虚拟串口 Win7 下载 串口调试助手下载链接 串口调试助手 VS2010串口程序 使用的unicode库 纯API 不利用Mscomm控件 下载链
  • STM32双串口

    STM32双串口的使用 最近老是需要stm32通过串口去跟WiFi模块 蓝牙模块 openmv进行数据交互 然后需要用到stm32的串口调试 就把这个程序整理成一个工程 方便调试 实验目的 外设模块 WiFi模块 蓝牙模块 openmv 发
  • qt5.10 串口通信 QSerialPort 的使用

    在qt5中 使用QSerialPort进行串口通信 主要用到的QSerialPort 使用步骤 步骤一 在 pro文件中进行声明 QT serialport 在 pro文件中添加这个声明 步骤二 实例化 QSrerialPort QSeri
  • 九.ARM裸机学习之串口通信详解1(串口通信接口及原理框图详解)

    一 串口通信的基本概念及原理理解 2017 11 12 22 52 1 同步通信和异步通信 异步通信 指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程 为使双方的收发协调 要求发送和接收设备的时钟尽可能一致 即发送方和接收方没有
  • Ubuntu+Python环境做上位机

    最近需要制作程控电阻箱的上位机 使得大学毕业后就不再接触硬件的我无从下手 拿到机器后不知道怎么与其进行通信 Google上的资料也很少 现将我的环境搭建过程记录下来 希望对和我一样的小白有所帮助 软件环境 Ubuntu 16 04 pyth
  • CSerialPort教程4.3.x (5) - CSerialPort在cmake中的使用

    CSerialPort教程4 3 x 5 CSerialPort在cmake中的使用 环境 系统 windows 10 64位 QT 5 12 9 5 9及以上版本支持cmake构建 MFC vs2008 前言 CSerialPort项目是
  • 串口收发最高位为0

    串口收发最高位为0 昨天在现场 读取电表度数的时候发现一个问题 读取字节最高位不管多少全部为0 搞的我相当郁闷 最后没有办法 只好人工给他置1 今天到了公司打开 linux 程序设计 翻到终端这一章 152页 赫然写着几个大字 ISTRIP
  • 串口拦截通信数据信息

    最近手头上有一个需要通信的外部设备 流量计 直接去看他的通信手册 里面没有例子 SO 刚开始看不太懂 官网上面有一个上位机软件 可以直接操作软件去设置参数 故 利用此上位机软件发送指令 然后在上位机和设备之间引出TX与RX 从而拦截二者串口
  • QT开发遇到的问题(1)——程序循环执行的问题

    我之前一直直接用C 开发工程 有需求需要跨平台开发 前期使用时候感觉还可以 转到工程应用时候 就遇到好多坑 今天就遇到个大坑 在开发时候需要不断循环一块代码来实现某种功能 QT不像C 那种 这个更加专业 下面我对这个问题进行详细说明分析 问
  • 串口通信——接收串口数据并处理(C语言)

    本文主要内容包含 1 接收串口数据程序的编程逻辑示意图 2 接收串口数据程序要用到的通用函数模块 可直接引用 无需更改 3 接收串口数据程序的示例 1 接收串口数据程序的编程逻辑示意图 2 与串口有关的函数模块及数组 可直接引用到自己的程序
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速
  • 数字电路的时钟(1)-- 时钟抖动和分类

    时钟抖动通常分为时间间隔误差 Time Interval Error 简称TIE 又叫相位抖动 周期抖动 Period Jitter 和相邻周期抖动 cycle to cycle jitter 三种抖动 TIE又称为phase jitter

随机推荐

  • Parkour World 游戏内测攻略详解

    Parkour World 是一款将赛博朋克风格与跑酷元素结合的运动类PC端游戏 玩家通过在虚拟世界中进行跑酷 从而获取相应的奖励 Parkour World结合区块链技术 采用保值NFT以及独特的3token Arb Hood Yuri
  • Spring源码分析(七)Bean生命周期源码解析5:Bean的销毁

    Bean的销毁过程 应用场景 通过实现DisposableBean接口 或者使用注解 PreDestroy都行 Component public class OrderService implements DisposableBean pu
  • 游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理

    本系列文章由zhmxy555编写 转载请注明出处 http blog csdn net zhmxy555 article details 7405479 作者 毛星云 邮箱 happylifemxy qq com 欢迎邮件交流编程心得 上一
  • 领域驱动设计:DDD 关键概念

    文章目录 领域和子域 核心域 通用域和支撑域 通用语言 限界上下文 实体 值对象 聚合 聚合根 设计聚合 DDD 的知识体系提出了很多的名词 像 领域 子域 核心域 通用域 支撑域 限界上下文 聚合 聚合根 实体 值对象等等 非常多 领域和
  • 归一化笔记

    目录 为什么要归一化 归一化的方法有哪些 归一化各方法特点 归一化的意义 哪些机器学习算法需要做归一化 哪些机器学习算法不需要做归一化 为什么要归一化 因为每一列数据的量纲不同 导致数据分布区间区间存在差异 举例 人的身高可以是180cm
  • 搜狐2012年校园招聘会笔试题解析

    一 不定项选择题 1 以下程序的打印结果是 cpp view plain copy include
  • QT笔记- 使窗口不获得焦点,但响应鼠标事件

    HWND wid HWND this gt winId SetWindowLong wid GWL EXSTYLE GetWindowLong wid GWL EXSTYLE WS EX NOACTIVATE WS EX COMPOSITE
  • Polycarp and Div 3【Codeforces Round #496 (Div. 3)【D题】】【贪心】

    应该说是今天凌晨的吧 第一次打Code Forces 懵懵懂懂的 不过感觉还是良好 做了几道签到题 难题还是没有那个水准去做 Polycarp likes numbers that are divisible by 3 He has a h
  • 应用统计学与R语言实现笔记(番外篇四)——bookdown使用与OR值计算

    本期是之前做的应用统计学与R语言实现笔记的番外篇四 本期主要关注两个问题 一个是重新利用R的bookdown包创建新的电子书 另一个是计算公共卫生当中一个比较常见的指标OR值 文章目录 1 bookdown使用 2 公式更正 3 OR值计算
  • linux下网站压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力 个人感觉要比Apache自带的ab压力测试工具好 安装使用也特别方便 1 适用系统 Linux 2 编译安装 引用wget http blog s135 com soft li
  • Sentinel 入门使用

    目录 一 Sentinel简介 1 1Sentinel简介 1 2 Sentinel与Hystrix的区别 1 3 名词解释 二 sentinel控制台 2 1 下载启动控制台 2 3 客户端接入控制台 2 4 Rest整合Sentinel
  • python基本概念-关键要素

    1 要素1 数据类型 Python提供了几种内置的数据类型 现在我们只关注其中两种 Python使用int类型表示整数 正整数或负整数 使用str类型表示字符串 Unicode字符序列 如果需要将一个数据项从某种类型转换为另一种类型 可以使
  • DB2数据库连接(jdbc连接)encoding not supported

    在进行db2数据库连接过程中发现了一些问题 报如下错误 com ibm db2 jcc b DisconnectException encoding not supported 该问题的出现是IBM JDK和sun JDK之间相互不支持 解
  • 【滤波器】7. 带通滤波器

    将低通滤波器和高通滤波器串联 如下图所示 就可得到带通滤波器 设低通滤波器的截止频率为 f p 1 f p1 fp1 高通滤波器的截止频率为
  • Spark 的Shuffle过程详解

    一 Shuffle的作用是什么 Shuffle的中文解释为 洗牌操作 可以理解成将集群中所有节点上的数据进行重新整合分类的过程 其思想来源于hadoop的mapReduce Shuffle是连接map阶段和reduce阶段的桥梁 由于分布式
  • if与if else与if else if else之间的用法与区别(C++)

    1 if 满足这个条件 执行语句操作 不满足条件 不操作 结构 if 条件 语句 2 if else 满足这个条件 执行语句1操作 不满足 执行语句2操作 结构 if 条件 语句1 else 语句2 备注 通俗说就是两者取其一 注意 if
  • 简单方法恢复linux以及windows启动引导

    1 恢复linux启动引导 以ubuntu为例 很多小孩喜欢用wubi装linux 确实这种方法比较简单 比较安全 但是这种安装方法是基于windows的 也就是说 如果windows挂了 比如重装了或还原了 那么原来安装的linux也就没
  • cvFindContours函数使用

    CV IMPL intcvFindContours void img CvMemStorage storage CvSeq firstContour int cntHeaderSize int mode int method CvPoint
  • Servlet 实现重定向几种方法

    servlet重定向 在servlet JSP编程中 服务器端重定向可以通过下面两个方法来实现 1 运用javax servlet RequestDispatcher接口的forward方法 2 或者运用javax servlet http
  • 基于FPGA的串口通讯设计与实现

    繁體 基于FPGA的串口通讯设计与实现 日期 2012 03 26 来源 作者 字体 大 中 小 随着多微机系统的应用和微机网络的发展 通信功能越来起重要 串行通信是在一根传输线上一位一位传送信息 这根线既作数据线又作联络线 串行通信作为一