基于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的串口通讯设计与实现 的相关文章

  • 51单片机——串口通信

    51单片机 串口通信 串口通信 串口通信的原理 串口的配置 定时器的配置 c源代码 netty源代码 结果 本篇博客的最终效果是实现51单片机用串口发送Hello World netty监听串口读到Hello World后回发给51单片机
  • C51单片机串口工作的四种方式总结

    方式0 同步移位寄存器输入输出方式 1 利用移位寄存器实现串行 并行的转换 功能 2 波特率 fosc 12 3 RXD P3 0 用于串行数据的输入和输出 TXD P3 1 充当输出的移位时钟 4 数据大小 8位 5 方式0发送 串口接口
  • 关于ESP8266自动下载和CH340的几件事

    最近在玩ESP8266 做了些东西 比如考研倒计时器 网络闹钟 网络灯 用手机控制亮度 气象站等等 ESP8266本身挺简单的 倒是这个自动下载电路 我还是第一次玩 以前玩51也用过串口下载 都是自己冷启动 玩STM32用的ST LINK
  • SPI协议代码

    软件模拟SPI程序代码 文章目录 SPI协议简介 SPI接口介绍 SPI数据传输方向 SPI传输模式 通过两个单片机模拟SPI来加深理解 硬件连接方式 SPI模式 程序思路 主机C代码 波形 从机C代码 波形 概述 通过两个MCU STM3
  • 单片机实现 printf 打印输出,和电脑端一样用

    在学C语言时 printf 很好用 到了单片机 ARM时却不能用 那因为库中的 printf 是定向打印到显示屏的 所以我们把 printf 重新定向打印到串口就可以了 串口助手中就可以显示打印的内容 这样我们在单片机 ARM中就可以 像电
  • 可靠传输的基本概念

    可靠传输的基本概念 使用差错检错技术 接受方的数据链路层就可以检测出真在传输过程中是否出现误码 这取决于数据链路层向上层提供的服务类型 不可靠传输 仅仅丢弃有误码的帧 其他的什么也不做 可靠传输 想方法实现发送端发送什么 接收端就收到什么
  • 一、利用AT指令配置esp8266——esp8266WIFI模块初探&STM32串口通信再探

    文章目录 一 esp8266初探 1 esp8266简介 2 esp8266使用方式 什么是AT指令 通过何种方式发送AT指令 二 STM32串口通信再探 1 printf 函数与串口中断函数 2 例子 小试牛刀 3 例子 再进一步 三 局
  • 魔方机器人之下位机编程-----两种串口通信方式的比较

    由于上位机软件的串口通信部分和魔方复原算法部分已经完成 接下来的一步就是如何将魔方复原的具体步骤 字符串的形式 通过串口发送给单片机MC9S12XS128单片机了 调试的过程中 采用了两种串口通信的方式 一种是查询的方式 另一种是中断的方式
  • 用虚拟串口进行串口调试

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

    目录 一 前言 二 效果图 三 源码 带注释 1 布局代码 2 Java代码 3 权限声明 四 注意 五 项目源码下载 一 前言 在学校和机电的同学组队准备做一个智能小车去参加比赛 需要我开发一个小车的控制app 所以我开始学习蓝牙串口通信
  • CSerialPort教程4.3.x (1) - CSerialPort项目简介

    CSerialPort教程4 3 x 1 CSerialPort项目简介 前言 CSerialPort项目是一个基于C C 的轻量级开源跨平台串口类库 可以轻松实现跨平台多操作系统的串口读写 同时还支持C Java Python Node
  • STM32双串口

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

    STM32 串口简介 串口作为 MCU 的重要外部接口 同时也是软件开发重要的调试手段 其重要性不言而喻 现在基本上所有的 MCU 都会带有串口 STM32 自然也不例外 STM32 的串口资源相当丰富的 功能也相当强劲 ALIENTEK
  • 奇偶校验位

    在串行通信中 奇偶校验位通常是由UART这样的接口硬件生成 校验的 在接收方 通过接口硬件中的寄存器的状态位传给 CPU 以及操作系统 错误数据的恢复通常是通过重新发送数据 这个过程通常由如操作系统输入输出程序这样的软件处理的
  • 基于STM32F103RB的模拟液位检测告警系统(已实现)

    这次先看一下老朋友STM32 有关Zigbee的内容 Z stack协议栈和基于Zigbee的环境温湿度 烟雾传感器的环境监测系统 等有时间再更 基于STM32的模拟液位检测告警系统 记得好像是某一届蓝桥杯省赛题 基于STM32告警系统介绍
  • 使用ROS通过串口获取遥控器信号(二)

    使用ROS通过串口获取遥控器信号 二 十 编写串口通信节点 sudo gedit catkin ws src uart communication src commu cpp 加入以下代码 根据实际情况修改自己的代码 注意serial的AP
  • 玩转ESP8266-01——AT指令集

    该指令集是接上一个 链接 初识AT指令 全部是根据本人在使用esp8266过程中用过的指令 可能有不全 有错误 还请理解指正 一起学习 AT指令集 一 基础指令 1 测试指令 2 复位指令 重启 二 设置指令 1 设置波特率 2 设置工作模
  • Python:简易的串口收发程序

    Python 简易的串口收发程序 更新历史 20201204 首次发布 最近需要搞一个基于Python的串口程序 要求 能够将字符串形式的十六进制数 例如 12 34 CD EF 转化成对应的二进制数据后发送给一个串口设备 能够从串口设备接
  • 数字电路的时钟(1)-- 时钟抖动和分类

    时钟抖动通常分为时间间隔误差 Time Interval Error 简称TIE 又叫相位抖动 周期抖动 Period Jitter 和相邻周期抖动 cycle to cycle jitter 三种抖动 TIE又称为phase jitter
  • QT串口助手的实现

    serial c include serial h include ui serial h serial serial QWidget parent QWidget parent ui new Ui serial ui gt setupUi

随机推荐

  • 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 来源 作者 字体 大 中 小 随着多微机系统的应用和微机网络的发展 通信功能越来起重要 串行通信是在一根传输线上一位一位传送信息 这根线既作数据线又作联络线 串行通信作为一