目录
一,引言
二,机器人的“大脑”
三,时基单元介绍
1,定时器框图
2,时基单元
(1)预分频器
(2)CNT计数器
(3)自动重装载寄存器
四,结尾
一,引言
技术的迅猛发展,赋予了越来越多科技产品“智能化”的标签。如智能洗碗机,智能冰箱,智能电饭煲……这些“机器人”(我们姑且这样称呼它们)都有一个共同的功能——计时。你是否有过好奇——它们是如何精确而稳定地计量时间的呢?让我们一探究竟。
二,机器人的“大脑”
机器人计时是在它们的“大脑”中进行的。这个“大脑”,学名叫“单片机(Single-Chip Microcomputer)”,又称“微控制器(Microcontroller Unit,MCU)”。
想象一下,把一台电脑中的主板、CPU、内存、硬盘等各种部件全部浓缩在一枚指甲盖大小的芯片上——这就是单片机。由于普通机器人对于信息的处理并不像电脑那样,承载着巨量的数学计算,而是进行环境信号的采集与对应指令的输出,单片机也就不需要过大的容量与体积。
而本系列的主要内容,就是介绍单片机中最强大、最复杂的外设——定时器。
本文讲解定时器的时基单元,也就是“机器人的计时原理”。听起来似乎有些专业?不妨继续往下看,接下来的内容,我会尽我所能,让你对时基单元有一个基本的认识。
三,时基单元介绍
1,定时器框图
如图1,是通用定时器的整体框图:
图1 定时器框图
整体可分为四个模块:时钟模块,时基单元,输入捕获与输出比较。本文在介绍时基单元的基础上,会同时介绍一点时钟方面的知识。
2,时基单元
我们将时基单元单独拆出,如图2:
图2 时基单元
时钟脉冲(CK_PSC,72MHz)被预分频器接收,经过预分频器分频后,脉冲转变成CK_CNT(CK_CNT和CK_PSC的区别是频率不同,若预分频器设置为2分频,CK_CNT就是36MHz)进入CNT计数器中,时基单元开始计数——其中,计数方式有三种:向上计数、向下计数与中央对其计数,这里只介绍向上计数,顾名思义,就是从0开始,按照1、2、3的方式向数值较大的方向计数——在计数的同时,计数器中的值会与自动重装载寄存器(由我们设置)中的值相比较,若达到了我们期望比较的结果(如计数器的值大于我们设定的值),就会输出相应的指令。文字有点长,结合图2阅读也许会不那么抽象。
以上,就是时基单元基本的情况。接下来,我们分别讨论时基单元中三个模块的原理。
(1)预分频器
我们结合预分频器时序图来剖析原理:
图3 预分频器时序图
可以看到,在图2中,预分频器由“PSC预分频器”与一块阴影组成,其中,“PSC预分频器”名字叫“预分频控制寄存器”,而“阴影”叫预分频缓冲器,也叫影子寄存器,这里我简称其为“缓冲器”。我们修改数值,是在预分频控制寄存器中,修改之后,预分频控制寄存器将设置的值放入缓冲器,由缓冲器控制预分频计数器的数值变化(如图3),也就是说,真正控制预分频器工作的,是缓冲器。但为什么会这样设计呢?在自动重装寄存器中,我会阐述答案。
上文中,我们理出了预分频器本身的基本运作方式,读者可以在纸上画一下流程图熟悉一下大体框架。
我们提到了“预分频计数器”,这就是预分频器的重点——预分频器本质也是个计数器,通过图3,我们来梳理它的原理。预分频缓冲器中的设定值,就是预分频计数器计数的最大值,这一点可以对比图3中 上下两幅图的最后一排 预分频计数器前后计数的变化理解。当预分频计数器计数值为0时,CK_INT输出一个高电平,同时,计数器向上计数一次,CK_INT的意思见图2。当计数器到达自动重装载寄存器的值时,就会从0重新计数(向上计数模式)。在每次计数到达设置值时,产生一个更新事件,更新事件就是图2中那个像闪电一样的箭头,上面写着U。而UI是产生定时中断的意思,这两个东西知道就行。
可能会有些难以理解,但是照着图像一句话一句话地理解,能够梳理出思路。
(2)CNT计数器
CNT计数器时序图如图4:
图4 计数器时序图
其中,CK_INT和图3中的CK_PSC是一样的。到这里,也许我们会产生疑惑:时钟这么重要,它到底是个什么东西?结合图3和图4,可以看到,我们所设置的信号中,上升沿和时钟都是同时性的,也就是说,时钟就像是一块石头,我们通过去掉与保留石头的各个部分,把石头雕刻成我们想要的部分——时钟也是一样。
(3)自动重装载寄存器
自动重装载寄存器时序图如图5:
图5 自动重装载寄存器
自动重装载寄存器,是计数器的“顶点”,计数器到达了我们在自动重装载的值,就会“溢出”,如图5中,比如,我们让计数器达到4的时候进行“溢出”,也就是输出一个高电平,表示计了5次数字(从0开始计数),溢出之后,计数器就又会从0开始进行计数——是不是很像“画正字”呢?
图5是分为上下两个图的,两个图的区别在于,上面的图没有使用缓冲器(框图中的“影子”),下面使用了缓冲器。可以看见,在没有使用缓冲器时,我们原先设置计数终点是FF,在计数到32时,将FF改成了36,计数器寄存器计数到36时,就重新从0开始计数了;而使用了缓冲器,当我们改变计数终点时,计数器会计数到F5后,才会从0开始重新计数,直到计数到我们新设置的36后,再从0开始重新计数。
有些绕,但是慢下来,对着图画一下思维导图,就能理解这段文字。
四,结尾
也许我们会疑惑:一开始不是讲计时吗,怎么讲到计数上了?
是否有注意,在文中,我们提及了“时钟”的概念,定时器的标准时钟时72赫兹,我们给它一个倒数——便成了周期(单位:秒),一个高电平就对应着1/72秒?
所以,以上便是机器人计时的方法。感谢你看到这里,让我们为自己的耐心与求知欲干杯!
欢迎交流