历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | PIC软件串行异步通信三倍速采样法设计

2020-02-19 来源:eefocus

简介: 在利用单片机开发各种嵌入式应用系统时,异步串行通信是常用的一种通信模式,有的应用中还要求实现多路异步串行通信。人们平时所应用的各种厂商的单片机,绝大部分片上只提供一个UART(通用异步收发器)硬件模块,利用它可以方便地实现一路串行通讯。


在利用单片机开发各种嵌入式应用系统时,异步串行通信是常用的一种通信模式,有的应用中还要求实现多路异步串行通信。人们平时所应用的各种厂商的单片机,绝大部分片上只提供一个UART(通用异步收发器)硬件模块,利用它可以方便地实现一路串行通讯。PIC系列单片机也不例外,在其丰富的一系列产品中,除高端系列(PIC 17/18)一些型号片上带有2路UART硬件模块外,其他大部分型号片上只有1路UART,一些低端廉价的PIC单片机甚至还不带硬件UART。为了提高系统的性价比,要求设计者用软件实现1路或多路异步串行通信。很多人对用软件实现的UART在可靠性和效率方面持怀疑态度,其实关键问题是采用何种方式来实现可靠的UART功能。


1 串行异步通信的基本协议

1.1 起止式协议的原理

起止式异步协议是串行异步通信的基本协议,特点是逐个字符传输,并且传送单个字符总是以起始位开始,停止位结束,字符之间没有固定的时间间隔要求,它的数据格式是靠起始位和停止位来实现字符界定的,故称为起止式协议。


起止式协议的格式定义为:对于一个完整的字符信息,必须包括起始位、若干数据位、奇偶校验位和停止位;必须定义每位信息的时间宽度—— 每秒发送的信息位个数,即为波特率。单片机系统中常用的波特率为300 bit/s~19200 bit/s。当波特率为1200 bit/s时,每个信息位的时间宽度为1/1200≈833(us);无数据通信时,数据线空闲状态应该是高电平,起始位为低电平,数据位低位先发且后跟奇偶校验位(若有),停止位为高电平,如图1所示。

图1 起止式串行异步通信的格式


1.2 起止式协议的优劣

起止式协议是按字符传输的,每传输一个字符,就用起始位来通知收方,以此来重新核对收发双方同步。若接收设备和发送设备两者的时钟频率略有偏差,这也不会因偏差的累积而导致错位,加之字符之间的空闲位也为这种偏差提供一种缓冲,所以该异步串行通信的可靠性高。但由于要在每个字符中加上起始位和停止位这样一些附加位,使得传输效率变低,只有约80%。因此,该通信协议一般用在数据速率较慢的场合(小于19.2 kbit/s)。在高速传送时,一般要采用同步协议。


按图1最基本的异步串行通信时序,软件实现UART在不同架构的单片机上有多种方法。其中数据接收是关键,因异步通信没有可参照的时钟信号,发送方随时都可能发送数据,任何时刻串行数据到来时,系统都应该及时准确地接收。比较而言,本机发送串行数据相对容易,只要对发送出去的电平做持续时间的定时即可。按不同的接收技巧并针对PIC单片机的特点,下面介绍一种常用且十分可靠的方法——三倍速采样法。


2 三倍速采样法

2.1 三倍速采样法的实现

三倍速采样法就是以3倍于波特率的频率对接收引脚Rx进行采样,保证检测到起始位,又可以调整采样的时间间隔;将有效数据位的采样点控制在码元的中间1/3处,最大限度地减少误码,提高接收的准确性。将图1的起始位和部分数据位放大,如图2所示,把每个信息位分成三等份,每等份的时间宽度设为t ,以便于分析。

图2 三倍速采样法格式


以三倍频对信息位进行采样时,每个信息位都可能被采样到3次。当处于空闲状态并检测起始位时,最早检测到起始位低电平的时刻必将落在S0阴影区,虽然每次具体的采样点会在此S0阴影区随机变化。检测到起始位低电平后,间隔4ts时间,正好是第1位数据位的中间1/3处(图2中Ds阴影区)。此后的数据位、校验位和停止位的采样间隔都是3ts ,所有采样点均落在码元的中问1/3处,采样数据最可靠。


PIC单片机采用此法实现软件UART时,硬件上只需要任意定义两个I/O引脚,分别初始化成输入(串行数据接收)和输出(串行数据发送)即可。软件上只要实现定时采样,定时时间间隔在中档以上有中断机制的单片机上可以用不同的定时器(TMR0、TMR1、TMR2等),通过定时中断实现;在低档无中断的PIC单片机上可以控制每次主循环所耗的时间来实现。对于1200 bit/s波特率,码元宽度为833us,采样时间间隔即为278us。整个串行接收或发送是一个过程控制问题,用状态机方式实现最为高效简易。图3给出了串行接收的参考状态机转移过程。

图3 状态机转移流程


接收端空闲状态为高电平,当收到低电平确认为起始位后,间隔4ts采样第1个数据位,然后每间隔3ts采样其它数据位,最后接收高电平确认停止位,数据接收完后回到空闲状态。如果起始位或停止位确认不对,程序均转入帧错误执行,回到空闲状态重新接收。


2.2 三倍速采样法实际应用

文中对中档单片机PIC12F675进行了软件异步串行通信设计,在程序设计中,关键部分是TMR0的中断服务。当通信波特率为1200 bit/S时,TMR0采用278us左右中断一次,TMR0的中断响应就为软件UART接收和发送通信过程的实现。通过MPLAB高效的代码编译后,约有150条单字指令代码,整个中断服务平均用约35个指令周期,实现一路软件UART在4 MHz工作频率下占用MCU约12%的运行带宽,通信过程比较可靠。理论上,只要保证MCU留有足够的运行带宽给其他任务,在此中断服务程序内把接收和发送的代码再复制1份或多份(数据结构独立),即可实现多路软件UART。当然,如果每路的波特率不同,采样频率必须是最高波特率的3倍,不同波特率的采样点间隔要独立调整。


该方法还在实际产品设计中都得到了很好的验证 最典型的是红外线自动抄表系统。该系统采用38 kHz红外调制,波特率为1200 bit/s的半双工串行异步通信。用软件实现此UART,并利用PIC单片机CCP模块的PWM输出38 kHz载波,在单片机外只须一个一体化红外接收头和一个红外发射二极管,即可完成所有设计要求,最大程度地减化了硬件设计,降低了成本,提高了系统的可靠性和性价比。


3 结束语

综上所述,三倍速采样法最大的好处是软硬件配置灵活、经济可靠,接收发送的引脚可以任意定义,采样定时可以用不同的定时器实现,利用同一个定时采样可以方便地实现多路软件UART,无需复杂的外围电路,即可实现可靠的串行异步通信。但也有些不足,不管有无数据通信,始终占用MCU运行带宽,串行通信的波特率不能太高,4 MHz频率工作的PIC单片机一般只能实现2400 bit/s的全双工通信。为此,可以通过提高MCU的振荡频率来实现高波特率通信,比如PIC单片机工作在20 MHz时,就可实现9600 bit/s;而且其通信可靠性可通过在采样时刻多次采样、多种校验等方法得到进一步提高。

推荐阅读

史海拾趣

Alliance Fiber Optics Products Inc公司的发展小趣事

随着产品质量的不断提升和市场需求的扩大,AFOP开始积极拓展国内外市场。公司通过与各大电信运营商、设备制造商等建立合作关系,将产品应用于长途通信、大都会网络以及最后一里接入等领域。同时,AFOP还积极参与国际光纤通信展览会等活动,加强与国际同行的交流与合作,提升了公司在国际市场的知名度。

Hamlin ( Littelfuse )公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,AFOP始终保持着创新的精神和敏锐的市场洞察力。公司不断投入研发力量,探索新的技术方向和产品应用。同时,AFOP还注重人才培养和团队建设,吸引了一批高素质的研发人员和管理人才,为公司的未来发展奠定了坚实的基础。

这五个故事展示了AFOP从创立到发展壮大的历程,体现了公司在技术创新、市场拓展和资源整合等方面的努力和成就。随着电子行业的不断发展和技术的不断进步,相信AFOP在未来会继续保持领先地位,为光网通信领域的发展做出更大的贡献。

Auctor Corp公司的发展小趣事

随着电子行业的快速发展,Auctor Corp公司意识到只有不断创新才能在竞争中脱颖而出。因此,公司加大了对研发的投入,不断引进先进技术和人才。经过数年的努力,公司成功开发出一系列具有行业领先水平的新产品,不仅性能卓越,而且具有极高的性价比。这些新产品的推出,使得Auctor Corp在市场上获得了广泛的认可。

Electromagnetic Industries Llp公司的发展小趣事

EMI公司深知产品质量对企业的重要性。因此,公司建立了严格的质量管理体系,从原材料采购到生产加工再到产品检验,每一个环节都严格把关。同时,公司还引进了先进的检测设备和技术手段,确保产品质量的稳定性和可靠性。这些措施的实施使得EMI公司的产品质量得到了客户的广泛认可。

DATATRONICS公司的发展小趣事

DATATRONICS高度重视人才战略的实施。公司积极引进和培养了一批高素质的技术人才和管理人才,为他们提供了良好的工作环境和发展空间。同时,DATATRONICS还建立了完善的激励机制和培训机制,鼓励员工不断创新和进取,共同推动公司的持续发展。

Britool Expert公司的发展小趣事

DATATRONICS公司自成立以来,一直致力于电子技术的研发与创新。某年,公司研发团队成功突破了一项关键技术瓶颈,开发出了一款高效能的数据处理芯片。这款芯片以其卓越的性能和稳定性,迅速获得了市场的认可。DATATRONICS借此机会,进一步扩大了产品线,提高了市场竞争力。

问答坊 | AI 解惑

求教,vxworks读pci设备,还有其它

cpu为奔腾的,跑vxworks,版本是5.5, 因为项目需要,用fpga开发了一个pci接口的16路串口 在cpu对该串口进行读写的测试过程中,数据的正确性没问题 存在的问题是读pci口的速度太慢,每读一个32位双字,需要16个pci时钟周期 写pci口很快,一般3 ...…

查看全部问答>

有人了解Honeywell的软件吗?

如题,我遇到一个传输方面的问题了,希望做过honeywell的朋友帮下忙。…

查看全部问答>

wince gui移植 文字滚动问题

在gui移植的时候,原来的芯片是支持480*272的,现移植到支持800*480的芯片上,可以移植后一切正常,就是在超过480宽的像素位置之后,所有的字体都向左滚动,并且第一个字符不会显示,直接从第二个字符开始滚动,哪位高手知道这是为什么啊??…

查看全部问答>

求救!!那位高人认识这个文件是那家公司的FS文件系统和版本号?

以前我公司的一个工程师在基于ARM9 2410上面整合的UCOS II和FS文件系统,但所有系统文件的原码都已经打包,只留了个API接口集合的头文件(如下),里面没有任何公司和版本信息,现在要基于该系统平台开发一新系统,但没有详细的平台使用信息,感觉无从下手, ...…

查看全部问答>

LED半导体照明电源及控制电

replyreload += \',\' + 692905;作为一种新的光源,近年来各大公司和研究机构对LED电源和驱动电路的研究方兴未艾。与荧光灯的电子镇流器不同,LED驱动电路的主要功能是将交流电压转换为直流电压,并同时完成与LED的电压和电流的匹配。随着硅集成电 ...…

查看全部问答>

如何选择单片机芯片

如何选择单片机芯片 当我们自己想要设计一个简单的产品时,先要设计其电路图,我想请教一下大家,我该如何选择单片机芯片,单片机有如此多的系列,每个系列中有好多的型号。我该如何选择,有什么标准没有?…

查看全部问答>

再问 LM Flash Programmer

看到版主--永远的不知   回复的一个帖子,“ 您按照TI stellarisware里的boot_seral和boot_demo1例程下载试试,下载工具用lmflash programmer,下载这两个程序前,先把flash擦干净,先通过jtag下载boot_seral,再通过lmflash programmer选择 ...…

查看全部问答>

CC2538+CC2592 Contiki源代码的修改

请问各路大神,Contiki官方源码是针对于CC2538dk平台,没有加PA。我目前使用的板子是CC2538+CC2592,请问如何修改Contiki的代码?有没有人做过这方面的工作,望指点指点…

查看全部问答>

【TI C2000的使用经验】2806X产品说明书中致命错误

玩C2000产品也有好久了。现在呢能想到一点就写一点。论坛里最佩服的大哥dontium在写程序上确实给了我不少启示,略表感谢下~。 首先发上来的是我觉得最致命的错误。 SysCtrlRegs.EPWMCFG.bit.CONFIG = 1; 该寄存器在technical reference gu ...…

查看全部问答>