只会纯硬件,让我有点慌

纯硬件产品在市面上现在很少了,大多都带有单片机,比如智能路灯,智能门禁,智能家居等等。为了提高竞争力,单片机相关知识的学习必不可少。

给大家推荐一本龙顺宇老师的新书《深入浅出STC8增强型51单片机进阶攻略》

268b234ad335aa1f1e3f2ce2da2437d1.jpeg文末留言点赞前七名,免费赠送。(截止时间7月30日晚上8:00)

时钟电路在单片机小系统中很常见,今天我们就探讨下单片机外部石英晶体振荡器电路的构成、特点和器件参数,本文内容选自龙顺宇老师的新书《深入浅出STC8增强型51单片机进阶攻略》。

我记得小学的时候最喜欢做眼保健操,跟着旋律“1234,2234”,这旋律控制着我的每一个动作,踩着节拍完成了整个过程。细细想来,单片机的工作也是一样,在一定的“节拍”下锁存和处理数据,产生不同的状态和时序,完成不同的功能。如果没有这个节拍,单片机就无法执行程序和体现功能,这里的“节拍”就是时钟信号,好比是单片机系统中的“心脏”。

在早期的51单片机产品中,时钟信号一般是由外部振荡电路产生,所以很多经典的单片机原理类书籍也将时钟电路当作最小系统的必要组成之一,随着单片机技术的不断发展,为了进一步降低产品的EMI电磁干扰(Electro Magnetic Interference),很多单片机在晶圆设计时内置了时钟源,片内RC时钟源的频率还支持多种选择,这样一来开发人员就可以省去外部时钟电路,单片机的时钟输入/输出的引脚也可以节省出来当普通I/O引脚使用。

但是话又说回来,片上时钟源和外部时钟源还是有区别的,一般来说片上时钟源的启动速度快,功耗适中,但是容易受到温度的影响产生频率偏差,若频率偏差严重就会影响程序运行(特别是通信类程序)。还有就是片上时钟的一致性难以保证,根据批次不一样或者制造上的差异性会导致芯片时钟频率不尽相同,但是对于要求不高的场合,使用内部时钟源倒也无妨。外部时钟源的启动需要一个稳定的时间,功耗也相对大一些,但是产生的时钟精度较高,不管是用无源石英晶体还是有源晶振,其信号的稳定度都较好,在持续性的通信应用上还是推荐外部时钟源作为单片机工作时钟。

有的朋友可能会有疑惑,为什么小宇老师刚刚说到“无源石英晶体”而不是“无源晶振”呢?我们平时将无源石英晶体说成“晶振”其实并不准确,无源晶体其实就是在石英晶片上电镀引出了电极,一般是两个脚,不用区分正反,在晶体结构外面装上了金属外壳,然后再在外壳上激光打字。无源晶体要想起振,一般还需要辅助外围电路才行。真正意义上的“晶振”是在晶体的基础之上额外添加了振荡、放大和整形电路后所形成的单元,常见的是4个脚,需要为其供电,然后从一个脚输出稳定可靠的时钟信号,这种就是我们说的有源晶振。

说了这么多,我们也不知道用于产生时钟信号的“心脏”长什么样子,接下来我们回到《电子工艺》课程,看看如图1所示的几个常用于产生时钟信号的器件实物。

c6189df5f043142e315dab1c7b77afcd.png

图1 常见时钟产生类元器件实物图

先来认识第一行的器件,从左至右首先是直插式圆柱状无源晶体,常见大小有2*6mm和3*8mm,常用于体积受限的场合,如U盘;接着是直插式HC-49S无源晶体,这种晶体外形最为常见;然后是直插式HC-49U无源晶体;最后是贴片式HC-49S无源晶体。第二行从左至右首先是贴片式晶振,单从样式上看是无法区分有源和无源的,用户需查阅产品手册后加以区分,这种贴片式晶振常见2脚和4脚的,常用的器件体积有3225、3215、5032等;接着是MC-306封装的晶振,常用的还有长条形的MC-146;然后是温补晶振TCXO,其体积稍大,内部设计有温度补偿电路和微调窗口,因其温度特性好、频率偏差小,价格也稍微贵一些,类似的还有恒温晶振OCXO,价格就比TCXO还要贵一些;最后是SiTime公司推出的可编程晶振,该器件有别于传统器件,用户可以通过编程修改振荡频率,支持1MHz到725MHz范围内的频率调整,在一些特殊的应用场合会非常适用。

说到这儿,我就忍不住要问:石英晶体内部长什么样子呢?要解决这个问题很简单,我们干脆动手拆解一个直插式HC-49U无源晶体吧!朋友们是不是感觉有点“残忍”啊?那我们就选一个实验室里放了N多年且引脚发生严重氧化的晶体来做实验,拆解的过程如图2所示,首先打开晶体的金属外壳后发现了内部有一层网状隔片,目的是为了让晶体与外部金属壳绝缘和防震,拆除这层隔片后就看到核心石英晶体和电极了,用手轻轻一掰,“咔”的一声就碎了,真是“嘎嘣脆,鸡肉味儿”。通过这个破坏性实验我们学到了什么呢?那就是晶体元器件在保存和使用时要避免磕碰,以免损坏内部石英晶体,焊接的时候也不要持续高温,以免晶体引脚升温太快引起内部电极与石英晶体片之间的碎裂,所以说石英晶体这种器件是外表看着“皮实”,但“内心”脆弱的器件。

764edddcc5bc74f46cf1defcabbd45b3.png

图2 HC-49U无源晶体拆解过程

拆解完了晶体,心里就非常痛快了,接下来我们再看看振荡电路的相关知识。单一的石英晶体无法产生稳定的振荡信号,必须辅助相关电路,常见的晶体振荡电路可以用皮尔斯振荡电路、考毕兹振荡电路和克拉普振荡电路。而用在单片机的电路几乎都是皮尔斯振荡器(Pierce Oscillator)结构。哦!这个人我知道,就是那个打NBA的保罗·皮尔斯对吧?错!这里的“皮尔斯”是乔治·皮尔斯。他发明了一种电子振荡电路,特别适用于配合石英晶体振荡以产生振荡信号。皮尔斯振荡器衍生自考毕兹振荡器,其电路构成十分简单,我们自己也可以动手搭建,其电路原理如图3(a)所示,用示波器测量“OUT”电气网络的输出波形如图3(b)所示。

fb40276c4c714779774ad8c82d38787f.png

图3 皮尔斯振荡器电路原理及输出波形图

分析该电路,电路采用单极性5V供电,U1所选型号为CD4069,该芯片是一款CMOS电平输入/输出的高速反相器(内含6个反相器单元),反相器在电路中等效于一个较大增益的放大器单元,在整个电路中只用了CD4069中的2个反相器单元,也就是1A、1Y、2A、和2Y这4个功能引脚,其它的功能引脚都做了接地处理。

Y1就是无源的石英晶体,这里选择的是标称振荡频率为16MHz的HC-49S晶体。R1是反馈电阻,通常取值都在兆欧级别,有了这个电阻就可以使反相器在晶振振荡初始时处于线性工作区,可以帮助晶体起振。R2可以调整驱动电位,以防止晶振被过分驱动而加速老化和造成晶体损坏。这两个电阻的取值非常关键,一旦取值不当就会产生高次谐波(一般是3次谐波,即Y1为xMHz时输出信号为3xMHz),建议朋友们在搭建电路时合理考虑。

C1、C2为负载电容,它们可以帮助起振,一般选用20至30pF且频率特性较好的电容(如瓷片电容、独石电容或CBB电容),其取值大小对振荡频率有微调作用(所以晶体的实际起振频率一般都不是绝对准确的标称频率),负载电容的取值受两个方面影响,一是晶体器件实际的电容参数,二是受PCB布线、焊盘和板层厚度等参数间接引入的寄生电容或杂散电容影响。所以朋友们在进行实际电容选取时不一定要与晶体器件数据手册中的负载电容参数完全等值,可以按照实际参数去做调整(顺便一说,有的单片机芯片时钟引脚单元内部甚至自带了不同档位的负载电容,比如TI公司生产的MSP430x2xxx系列单片机,该系列产品内部就支持1pF、6pF、10pF和12.5pF的四档负载电容可选,这种单片机时钟引脚上只接个晶体就行,无需外围辅助电路也能正常工作)。

经过电路搭建,CD4069芯片的第4脚输出的“OUT”就是时钟信号,原则上一个石英晶体振荡出的波形可以同时供给很多芯片使用,不一定是一个单片机就需要一个晶振,当然了,也要考虑输出信号的负载驱动能力,还得考虑PCB上时钟走线带来的干扰。

学完皮尔斯振荡器的简单电路后,有的朋友又会产生更大的疑惑,大家会想STC单片机的时钟电路根本不用CD4069啊?哪儿来的什么R1和R2啊?我一般都是接个晶体和两个负载电容就行了啊?确实如此,一般来说XTAL1和XTAL2是STC系列单片机的振荡信号接入引脚(也可以仅由XTAL2单端接入时钟信号)。其模型仍然是皮尔斯振荡器,只不过将振荡所需的反相器和相关电阻内置到了单片机内部罢了,其电路结构如图4所示。 

3b586ccc3516d78b98d85356fe0db5f4.png

图4 单片机时钟单元内/外结构

皮尔斯振荡器因结构简单,非常适用于各种数字IC的设计制造。很多IC在设计的时候就内建了高速反相器与电阻,只要在外部加上石英晶体与负载电容就可以工作。由于石英晶体频率稳定,故而电路成本较低,因此广泛用于各种消费电子产品之中。

电路讲完了我们就来看看“时钟信号”到底有什么作用?之前我们说了单片机是工作在一定“节拍”下的,最快最直接的“节拍”就是由外部晶体振荡电路或者内部RC振荡器提供的时钟源频率,这个时钟我们称之为“振荡周期”,在此基础之上还有状态周期、机器周期(CPU周期)和指令周期,所以“振荡周期”越小,则完成一条指令所需的时间就越短,简单来说就是给的“节拍”越快,单片机工作的处理速度就越高。但是时钟频率也要有个“度”,受限于单片机内部电路的电气指标和门电路的动态特性,单片机时钟频率一般都有个范围,例如STC8H系列单片机可以支持4MHz至45MHz工作频率。

必须说明的是晶体的标称频率不能随意选择,有些应用中对振荡频率是有要求的。举个例子吧!有个朋友做51单片机串口通信程序的时候用的是外部石英晶体振荡电路,石英晶体选择的是12MHz,波特率是9600bps,上电后单片机可以正常工作,串口助手也能连续收到单片机的字符数据,但是奇怪的是接收数据开始的时候是正常的,慢慢的就开始乱码,到后面居然不能正常接收了,他赶紧问小宇老师,这是为啥呢?我让他微调了程序并把晶振换成11.0592MHz后通信正常了!咦~这是为啥?按理说12MHz晶体产生的振荡周期是1us,而11.0592MHz晶体产生的振荡周期是1.085us,这两个周期相差根本就不大,并不会过多影响单片机的执行速度,他们的主要差异是用在串口通信时,12MHz作为数值带入波特率计算后得到的偏差较大,在持续性通信过程中容易造成时钟的“累积误差”,每次都“慢半拍”持续下去的话就不止“半拍”了。

所以在特殊的应用中产生了看似奇怪的石英晶体标称频率,相似的还有用在DTMF(双音多频)编/解码上的3.579545MHz,又有用在RTC(实时时钟)上的32.768kHz,还有用在HF频段RFID(射频识别)上的13.56MHz等等,这些频率值看似“怪异”实则有特殊的适用。所以啊,选择合适的晶体或者晶振非常重要,选型的时候一定要考虑好封装尺寸、负载电容、标称频率、温度范围、频率偏移、频率老化时长等参数。

特别推荐:

ce5aa0f0147427b5703c09b92303d1d8.png

书名:《深入浅出STC8增强型51单片机进阶攻略》

作者:龙顺宇

定价:178.00元

内 容 简 介

本书以宏晶科技公司STC8系列增强型51单片机作为讲述核心,深入浅出地介绍该系列单片机片内资源及应用,其内容可在STC8A、STC8F、STC8C、STC8G及STC8H等系列单片机中应用。

本书以各种巧例解释相关原理,以资源组成构造学习脉络,选取主流开发工具构建开发环境,利用实战项目深化寄存器理解,注重“学”与“用”的结合,帮助读者朋友们快乐入门、进阶,筑牢基础,将相关理论知识应用到实际产品研发之中。

本书根据STC8系列单片机的资源脉络及初学者的学习需求,按照梯度设定22章,从内容组成上分为“无痛入门基础篇”和“片内资源进阶篇”。

无痛入门基础篇从第1章到第8章,主要讲解单片机的发展、学习方法、STC8系列单片机家族成员、软/硬件开发环境搭建及调试、I/O资源使用和配置、LED器件控制、A51和C51语言开发差异及特点、常见字符/点阵型液晶模块的驱动、独立按键/矩阵键盘交互编程的相关知识和应用。

片内资源进阶篇从第9章到第22章,主要讲解单片机的内部存储器资源、时钟源配置、中断源配置、基础型定时/计数器、高级型定时/计数器、UART异步通信接口、SPI同步串行外设接口、I2C串行通信、模数转换器A/D资源、电压比较器资源、片内看门狗资源、电源管理及功耗控制、ISP/IAP应用、EEPROM编程和RTX51实时操作系统的相关知识及应用。

作者介绍

龙顺宇(书童哥),硕士,高校教师,主要研究方向为嵌入式/单片机系统应用、物联网技术应用。中国电子学会电子工程师、中国工业和信息化部物联网工程师,台湾凌阳爱普物联网培训教师,电子芯客吧、电源网、电子发烧友论坛、与非网论坛、摩尔吧教育平台、原子哥教育平台、凡亿教育平台金牌讲师。《深入浅出STM8单片机入门、进阶与应用实例》书籍作者,思修电子工作室单片机理论教程及实战案例主讲人。

为了感谢大家对本公众号的支持,本次向清华大学出版社申请了7本《深入浅出STC8增强型51单片机进阶攻略》赠送给大家。赠书采用留言点赞的方式:
参与方法:关注【嵌入式Linux】公众号,文末留言点赞前七名,免费赠送!
截止时间:7月30日20:00
温馨提示:留言点赞前七名中奖者于8月1日20:00点前把收货地址留言给我或着把地址发到我的微信,否则视为放弃。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463858.shtml

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

相关文章

Expression Blend 学习视频下载

微软Expression Blend功能介绍Microsoft Expression Blend—一个全新的,全功能的职业设计工具,用于创造基于Microsoft Windows平台的丰富、复杂的应用界面。使用 Expression Blend, 可以提供更出色的应用软件并提升客户的体验和满意度。Expression Blend…

1、绪论初识机器学习

什么是机器学习? 机器学习是通过数据或者经验,优化计算机程序等性能标准,自动改进计算机的算法,以达到解决未知问题的目标 监督学习 计算机通过学习一组有标签的信息来对从未见过对数据做出有用对预测 监督学习的代表算法&#xf…

NSLog的常用格式说明小释

NSLog的格式如下所示: % 对象%d, %i整数%u 无符整形%f 浮点/双字 %.nf 带有n小数点的浮点/双字%x, %X二进制整数%o 八进制整数%zu size_t %p 指针%e 浮点/双字 (科学计算) %g 浮点/双字%s C字符串%.*s Pascal字符串%c 字符%C unichar %lld 64位长整数(long long) %llu 无符64位…

感觉自己好傻

前几天,一个微信微信朋友找我聊天。他在一家公司工作了4年多,但是这四年基本没有什么技术上的提升,做的事情也一些打杂的事情,核心技术在芯片原厂,软件SDK也是别人写好的,他能做的就是对接客户,…

一名老工程师的感言

[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院 士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐 渐对该…

Python之OS模块进程管理介绍--os.fork()

转自:http://davidbj.blog.51cto.com/4159484/1240586 有两种方式来实现并发性,一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域。不过,虽然进程可在单独的内存空间中执行,…

洛谷 P1272 重建道路

题目链接 题解 树形dp \(f_{i, j}\)表示以\(i\)为根的子树切出联通块大小为\(j\)的最小答案 显然\(f[i][1]\)为与\(i\)连的边数 设\(v\)是\(u\)的儿子 那么有\(f[u][i]f[u][i-j]f[v][j]-2\)&#xff0c;因为\(u->v\)这条边算了两次 注意\(i\)要从大到小枚举Code #include<…

网盘是否能做一只安全的企业信息快递手

近期&#xff0c;某电商网站出现的用户账户被盗刷事件再次将信息安全问题推至风头浪尖之上。事实上&#xff0c;需要信息安全感的&#xff0c;不单单是个人&#xff0c;企业更甚。据悉&#xff0c;对安全规则和数据泄露的担忧成为了目前企业采纳云存储平台的重要障碍。 网盘&am…

图形处理单元(GPU)的演进

CPU 和 GPU好久没有更新了&#xff0c;最近在阅读 CUDA 相关的一些论文&#xff0c;因为都是碎片化阅读&#xff0c;容易导致读过后&#xff0c;可能过一段时间又忘记掉&#xff0c;所以决定抽时间翻译翻译阅读的论文&#xff0c;一方面增强自己记忆&#xff0c;一方面与大家共…

TCP通信过程大讨论

转载地址&#xff1a;http://www.cricode.com/3568.html 本文通过两个图来梳理TCP-IP协议相关知识。TCP通信过程包括三个步骤&#xff1a;建立TCP连接通道&#xff0c;传输数据&#xff0c;断开TCP连接通道。如图1所示&#xff0c;给出了TCP通信过程的示意图。 图1 TCP 三次握手…

Stream、FileStream、MemoryStream的区别

1.Stream&#xff1a;流&#xff0c;在msdn的定义&#xff1a;提供字节序列的一般性视图&#xff0c;Stream提供了读写流的方法是以字节的形式从流中读取内容。而我们经常会用到从字节流中读取文本或者写入文本&#xff0c;微软提供了StreamReader和StreamWriter类帮我们实现在…

Android 自定义View以及ValueAnimator学习

2019独角兽企业重金招聘Python工程师标准>>> 看了ApiDemo里面的BoucingBall&#xff0c;觉得挺好的&#xff0c;所以特地学习了一下&#xff0c;将代码注释后贴到这里&#xff0c;以便以后学习。 class BallView extends View implements ValueAnimator.AnimatorUpd…

百万记录级MySQL数据库及Discuz!论坛优化

最近&#xff0c;帮一个朋友优化一个拥有20万主题&#xff0c;100万帖子&#xff0c;3万多会员&#xff0c;平均在线人数2000人的Discuz!论坛&#xff0c;采用Linux2.6Apache2mod_php5MySQL5&#xff0c;服务器配置为双至强4G内存&#xff0c;优化前&#xff0c;系统平均负载&a…

固件工程师到底是干什么?

大家好&#xff0c;我是写代码的篮球球痴可能大家还不知道&#xff0c;我是一个写固件的工程师&#xff0c;今天和一个微信朋友聊天&#xff0c;他问我工作几年了&#xff0c;我说我工作10年了&#xff0c;而且这10年我都一直在从事嵌入式固件相关的工作。他猛的觉得很不可思议…

c++ STL 工程实践的15条建议

STL是c非常重要的一部分&#xff0c;它是很多大神的杰作&#xff0c;高效&#xff0c;稳定&#xff0c;可扩展性好&#xff0c;虽然STL确实存在难以调试&#xff0c;内存碎片的问题&#xff08;现在机器的内存越来越大&#xff0c;内存碎片的问题基本不太可能成为系统瓶颈&…

JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性

在Javascript不存在类&#xff08;Class&#xff09;的概念&#xff0c;javascript中不是基于类的&#xff0c;而是通过构造函数&#xff08;constructor&#xff09;和原型链&#xff08;prototype chains&#xff09;实现的。但是在ES6中引入了Class&#xff08;类&#xff0…

asp 下载函数

N久没搞ASP啦,今天一个网友问到这个问题.就在网上找了下. 也不知道这个有没有错误. 下载的基本思路是这个样子的. 代码如下: <%Const USE_STREAM 0 0.不用流(Adodb.Stream)下载 1.用流下载Const ALLOW_FILE_EXT "rar,zip,chm,doc,xls,swf,mp3,gif,jpg,jpeg,png,bmp&q…

如何实现按键的短按、长按检测?

在电子产品中经常用到按键&#xff0c;尤其是经常需要MCU判断短按和长按这两种动作&#xff0c;本篇我们来专门聊下这个话题。只谈理论太无聊&#xff0c;我们还是结合着实际应用来说明。之前写过一篇关于《CH573第一篇&#xff1a;实现自拍杆蓝牙遥控器1》的文章&#xff0c;例…

ECC内存简介

ECC内存&#xff0c;即应用了能够实现错误检查和纠正技术&#xff08;ECC&#xff09;的内存条。一般多应用在服务器及图形工作站上&#xff0c;这将使整个电脑系统在工作时更趋于安全稳定。ECC是“Error Checking and Correcting”的简写&#xff0c;中文名称是“错误检查和纠…

HTTP与HTTPS的安全性讨论

转载文章&#xff1a;http://blog.csdn.net/xifeijian/article/details/54667989 1、http为什么不安全&#xff1f; http协议属于明文传输协议&#xff0c;交互过程以及数据传输都没有进行加密&#xff0c;通信双方也没有进行任何认证&#xff0c;通信过程非常容易遭遇劫持、…