掌桥专利:专业的专利平台
掌桥专利
首页

单片机内部时钟校准方法

文献发布时间:2023-06-19 19:28:50


单片机内部时钟校准方法

技术领域

本发明涉及单片机技术领域,特别涉及一种单片机内部时钟校准方法。

背景技术

单片机是电子产品不可缺少的电子元器件。时钟是单片能正常运行的必须条件之一。单片机具有外部时钟和内部时钟,内部时钟具有价格低、可靠性高、抵抗外部干扰能力强的优点。但是单片机内部时钟精度不高,且温度漂移大。

随生产工艺的影响,单片机内部时钟个体差异和批次差异都很大,很难保证内部时钟一致性。目前市面上单片机内部时钟精度误差一般从±2%到±10%不等。部分单片机在常温内部时钟误差可以做到±2%或以下,但是在+85度或者-40度,内部时钟误差在±5%或以上。时钟误差大可能导致通讯失败、定时超前或滞后、产品功能失效等后果。如果使用外部时钟,时钟精度有所提高,但是精度高、温度漂移小的晶振,价格贵,而且还具有某些难以克服的限制:例如在设计PCB板的时候,要求外部时钟电路做隔离处理、以及靠近单片机时钟脚。

发明内容

本发明的目的在于提供一种单片机内部时钟校准方法,以解决现有的单片机内部时钟精度不高的问题。

为解决上述技术问题,本发明提供一种单片机内部时钟校准方法,包括:

利用电气设备中的交流电过零点检测电路,向单片机提供交流电过零点信号;

利用单片机16位定时器及IO翻转捕获模式对交流电过零点信号进行捕获;

以交流电过零点信号为基准,来计算单片机内部时钟误差;以及

根据内部时钟误差,调整内部时钟频率。

可选的,在所述的单片机内部时钟校准方法中,所述电气设备包括家电产品、灯光控制设备和电动工具;

家电产品、灯光控制,电动工具用单片机控制功率器件,实现功率控制,调光,电机速度控制,需要用到交流电过零点检测电路,在这些产品中已经有交流电过零点检测电路,利用已有的过零点检测电路来校准单片机内部时钟;如果没有交流电过零点检测电路,需要在产品中增加此电路;

利用电气设备中的交流电过零点检测电路,向单片机提供交流电过零点信号;

交流电过零点检测电路集成在单片机上,单片机利用交流电过零点检测电路控制电气设备的功率器件实现原有功能,原有功能包括进行功率控制、调光和电机速度控制;

利用电气设备中实现原有功能的交流电过零点检测电路,向单片机提供交流电过零点信号;

交流过零点检测电路在交流电到达0V的时候输出一个高脉冲,使得50Hz交流电产生100Hz的脉冲波信号。

可选的,在所述的单片机内部时钟校准方法中,

使得16位定时器工作在内部计时模式及外部输入捕获模式;

设置定时器计数时钟与系统时钟的频率相同以减小误差;

外部输入捕获模式设置为外部上升沿捕获或外部下降沿捕获;

一个脉冲波周期时间内,定时器的实际计数值为:连续两次捕获值之差与定时器在两次捕获之间的溢出次数来计算;

定时器的标准计数值为:0误差的定时器计数时钟频率除以100;

在相同时间内,根据实际计数值和标准计数值,计算出实际计数时钟的误差,利用实际计数时钟的误差调整单片机内部时钟。

可选的,在所述的单片机内部时钟校准方法中,

对于允许修改内部时钟TRIM寄存器值的单片机,当计算的内部时钟误差大于目标范围时,通过修改TRIM寄存器值以调整内部时钟频率,直到内部时钟频率在目标误差范围内;

对于不允许修改内部时钟TRIM寄存器值的单片机,根据误差偏差值对定时器周期值、以及异步串口的波特率分DIV值进行误差补偿。

可选的,在所述的单片机内部时钟校准方法中,

利用交流电频率作为参考,连续校准单片机内部时钟;

用交流电过零点产生的脉冲波为计数周期,在计数周期内,比较实际计数值与标准计数值,如果实际计数值大于标准计数值,则内部时钟频率过快,将内部系统时钟频率调慢,反之调快内部时钟频率。

可选的,在所述的单片机内部时钟校准方法中,交流电过零点检测电路包括:

第一二极管D1和第二二极管D2通过整流桥连接变压器次级A点和B点;经过第一二极管D1和第二二极管D2全波整流,形成脉动直流波形,经电阻分压,电容滤波除去高频成分,获取检测点波形,三极管Q1的基极连接检测点,发射级接地,集电极作为输出端通过采样电阻连接电源;

当检测点电压大于阈值电压,三极管Q1导通,三极管的集电极被拉低,检测点电压小于阈值电压时,三极管Q1截止,三极管的集电极通过采样电阻拉高,使得三极管反复导通截止,输出端形成100Hz的脉冲波形。

可选的,在所述的单片机内部时钟校准方法中,定时器被配置为外部上升沿捕获,定时器周期值设置为0xFFFF;

定时器计数时钟设置为与系统时钟频率相同;

使能定制器溢出中断和捕获中断;

在溢出中断中对溢出次数进行计数;

捕获中断中保存捕获计数值和溢出次数,并对溢出次数变量清零。

可选的,在所述的单片机内部时钟校准方法中,计算标准计数值、实际计数值和实际计数值滤波;

标准计数值为:CNTstd=Tclk/100;

实际计数值为:CNTn=65536*CYCLE+(CNTcap2–CNTcap1);

对实际计数值取16次平均滤波处理得到平均计数值:

CNTaver=(CNTn-15+CNTn-14+……+CNTn-1+CNTn+8)/16;

计算计数误差率为:RATEerr=(CNTaver-CNTstd)/CNTstd;

其中Tclk为定时器计数时钟频率;CNTstd为标准计数值;CNTn为实际计数值;CNTaver为平均计数值;RATEerr为计数误差率;CYCLE为两次捕获之间定时器溢出次数;CNTcap1和CNTcap2为两次捕获定时器计数值,均为16位无符号整形数。

可选的,在所述的单片机内部时钟校准方法中,

计算误差上限值:CNTuperr=CNTref*(1+RCHerr);

计算误差下限值:CNTdnerr=CNTref*(1-RCHerr);

计算误差最大值:CNTmax=CNTref*(1+ERRexp);

计算误差最小值:CNTmin=CNTref*(1-ERRexp);

其中ERRexp为期望校准后达到的误差值;

RCHerr为单片机内部时钟全温度范围最大误差值,从单片机数据手册电气特性获取;

根据误差上限值、误差下限值、误差最大值和误差最小值,判断平均计数值位于的阈值区域,根据其所在的阈值区域判断得到以下结果:

测试错误,此次测试数据无用;

内部时钟在要求的范围内,不需要校准;

内部时钟比标准时钟快,通过调整内部时钟TRIM寄存器值,使内部时钟变慢;

内部时钟比标准时钟慢,通过调整内部时钟TRIM寄存器值,使内部时钟变快;或

将应用程序中用到的定时器周期值改为原来值的(1+RATEerr)倍,异步通讯的波特率寄存器DIV值改为原来值的(1+RATEerr)倍。

本发明还提供一种单片机,存储或运行程序以实施如上任一项所述的单片机内部时钟校准方法。

本发明的发明人通过研究发现:

根据我国电路工业部1996年发布实施的《供电营业规则》第五十三条在电力系统正常情况下供电频率允许的误差为:电网装机容量在300万千瓦及以上的误差为±0.2Hz(误差为±0.4%);电网装机容量在300万千瓦以下的误差为±0.5Hz(误差为±1.0%);供电系统非正常状态下,供电频率允许误差不应该超过±1.0Hz(误差为±2.0%)。因此,根据《供电营业规则》提供的频率误差,可以使用交流电频率作为基准来校准单片机内部时钟。根据电网情况将单片机内部时钟误差校准到±0.4%或±1.0%。时钟误差小于±1.0%,可以满足大部分产品需求。

另外,家电产品、灯光控制,电动工具等产品,使用单片机控制功率器件,实现功率控制,调光,电机速度控制,需要用到交流电过零点检测电路,在这些产品中已经有交流电过零点检测电路,可以利用已有的过零点检测电路实现单片机内部时钟的校准。

基于以上洞察,本发明提供了一种单片机内部时钟校准方法,采用交流电频率连续校准单片机内部时钟的方式,对单片机内部时钟进行校准,解决了单片机内部时钟误差大、温度漂移的问题,不需要使用外部时钟就可以满足产品需求。

进一步的,为了满足时钟高精度要求,又不增加产品成本,本发明采用电气设备已有的交流电过零点检测电路实现连续校准单片机的内部时钟,可以解决单片机内部时钟精度和温度漂移问题。

附图说明

图1是本发明一实施例单片机内部时钟校准方法的交流电过零点检测电路示意图;

图2是本发明一实施例交流电过零点检测电路的三极管集电极波形示意图;

图3是本发明一实施例的交流电过零点检测电路产生的脉冲波触发定时器捕获图;

图4是本发明一实施例单片机内部时钟校准方法的阈值区域示意图。

具体实施方式

下面结合具体实施方式参考附图进一步阐述本发明。

应当指出,各附图中的各组件可能为了图解说明而被夸大地示出,而不一定是比例正确的。在各附图中,给相同或功能相同的组件配备了相同的附图标记。

在本发明中,除非特别指出,“布置在…上”、“布置在…上方”以及“布置在…之上”并未排除二者之间存在中间物的情况。此外,“布置在…上或上方”仅仅表示两个部件之间的相对位置关系,而在一定情况下、如在颠倒产品方向后,也可以转换为“布置在…下或下方”,反之亦然。

在本发明中,各实施例仅仅旨在说明本发明的方案,而不应被理解为限制性的。

在本发明中,除非特别指出,量词“一个”、“一”并未排除多个元素的场景。

在此还应当指出,在本发明的实施例中,为清楚、简单起见,可能示出了仅仅一部分部件或组件,但是本领域的普通技术人员能够理解,在本发明的教导下,可根据具体场景需要添加所需的部件或组件。另外,除非另行说明,本发明的不同实施例中的特征可以相互组合。例如,可以用第二实施例中的某特征替换第一实施例中相对应或功能相同或相似的特征,所得到的实施例同样落入本申请的公开范围或记载范围。

在此还应当指出,在本发明的范围内,“相同”、“相等”、“等于”等措辞并不意味着二者数值绝对相等,而是允许一定的合理误差,也就是说,所述措辞也涵盖了“基本上相同”、“基本上相等”、“基本上等于”。以此类推,在本发明中,表方向的术语“垂直于”、“平行于”等等同样涵盖了“基本上垂直于”、“基本上平行于”的含义。

另外,本发明的各方法的步骤的编号并未限定所述方法步骤的执行顺序。除非特别指出,各方法步骤可以以不同顺序执行。

以下结合附图和具体实施例对本发明提出的单片机内部时钟校准方法作进一步详细说明。根据下面说明,本发明的优点和特征将更清楚。需说明的是,附图均采用非常简化的形式且均使用非精准的比例,仅用以方便、明晰地辅助说明本发明实施例的目的。

本发明的目的在于提供一种单片机内部时钟校准方法,以解决现有的单片机内部时钟精度不高的问题。

为实现上述目的,本发明提供了一种单片机内部时钟校准方法,包括:利用电气设备中的交流电过零点检测电路,向单片机提供交流电过零点信号;利用单片机16位定时器及IO翻转捕获模式对交流电过零点信号进行捕获;以交流电过零点信号为基准,单片机计算内部时钟误差;以及根据内部时钟误差,调整内部时钟。

本发明的目的是用交流电频率作为参考,连续校准单片机内部时钟,实现低成本方案解决单片机内部时钟误差大,温度漂移问题。所述单片机内部时钟校准方法包括:交流电过零点检点测电路,单片机16位定时器及IO翻转捕获功能,单片机内部时钟误差的计算,内部时钟调整。

家电产品、灯光控制,电动工具等产品,用单片机控制功率器件,实现功率控制,调光,电机速度控制,需要用到交流电过零点检测电路,在这些产品中已经有交流电过零点检测电路,可以利用已有的过零点检测电路来校准单片机内部时钟。如果没有交流电过零点检测电路,需要在产品中增加此电路。过零点检测电路在交流电到达0V的时候输出一个高脉冲,50Hz交流电产生100Hz的脉冲波信号。

16位定时器工作在内部计时模式,外部输入捕获功能。为了减小误差,设置定时器计数时钟与系统时钟相同频率。定时器捕获功能设置为外部上升沿捕获或者外部下降沿捕获。

在一个脉冲波周期时间内,定时器的实际计数值为前一次捕获到第二次捕获之间的计数值总和,可以通过两次捕获和定时器溢出次数计算;定时器标准计数值为0误差的定时器计数时钟频率/100。在相同时间内,使用实际计数值和标准计数值,计算出实际计数时钟的误差,利用该误差调整单片机内部时钟。

对于允许修改内部时钟TRIM寄存器单片机,当检查内部时钟误差大于目标范围时,通过修改TRIM寄存器值调整内部时钟频率,直到内部时钟频率在目标误差范围内;不允许修改内部时钟TRIM值的单片机,根据误差偏差值对定时器周期值,异步串口的波特率分DIV值进行误差补偿。

本发明利用交流电频率作为参考,连续校准单片机内部时钟。基本原来是用交流电过零点产生的脉冲波为计数周期,在该周期内,根据实际计数值与标准计数值做比较,如果实际计数值大于标准计数值,内部时钟频率过快,需要将内部系统时钟频率调慢,反之调快内部时钟频率。

图1是交流电过零点检测电路示意图,D1、D2电压取自变压器次级A,B两点(D1阳极和D2阳极之间的电压约14V),经过D1和D2全波整流,形成脉动直流波形,经电阻分压,电容滤波除去高频成分,形成检测点C处的波形(见图2上半部)。当检测点C处的电压大于0.7V时,三极管Q1导通,在三极管集电极D被拉低,C点电压小于0.7V时,三极管截止,三极管的集电极D通过R4拉高。这样三极管反复导通截止,在检查D点就形成100Hz的脉冲波形(图2下半部分)。

图3为交流电过零点检测电路产生的脉冲波触发定时器捕获图。定时器配置为外部上升沿捕获,定时器周期值设置为0xFFFF;定时器计数时钟Tclk设置为系统时钟相同频率。使能定制器溢出中断和捕获中断。在溢出中断中对溢出次数进行计数;捕获中断中保存捕获计数值和溢出次数,并对溢出次数变量清零。

标准计数值,实际计数值,实际计数值滤波的计算。

标准计数值:一个脉冲波周期时间,0误差的计数值,脉脉冲频率为100Hz。

CNTstd=Tclk/100。

实际计数值:一个脉冲波周期内实际计数值,使用两次捕获来获取计数开始和结束。

CNTn=65536*CYCLE+(CNTcap2–CNTcap1)。

对实际计数值取16次平均滤波处理:

CNTaver=(CNTn-15+CNTn-14+……+CNTn-1+CNTn+8)/16。

计数误差率计算:

RATEerr=(CNTaver-CNTstd)/CNTstd

CNTstd为:标准计数值:0误差Tclk在一个脉冲周期计数值。

CNTn为:实际计数值:Tclk在一个脉冲波周期计数值。

CNTaver为:平均计数值:最新16次实际计数值的平均值。

RATEerr为:误差率。

CYCLE为:两次捕获之间定时器溢出次数。

CNTcap1,CNTcap2为:两次捕获定时器计数值,16位无符号整形数。

图4为内部时钟调整图。

CNTuperr=CNTref*(1+RCHerr),为误差上限值。

CNTdnerr=CNTref*(1-RCHerr),为误差下限值。

CNTmax=CNTref*(1+ERRexp),为误差最大值。

CNTmin=CNTref*(1-ERRexp),为误差最小值。

ERRexp为期望校准后达到的误差值。

RCHerr为单片机内部时钟全温度范围最大误差值,可以从单片机数据手册电气特性获取。

如图4所示,若CNTaver在E和F区,测试错误,此次测试数据无用。

若CNTaver在A和B区,内部时钟在要求的范围内,不需要校准。

在单片机支持通过TRIM寄存器调整内部时钟频率的情况下:

若CNTaver在C区,内部时钟比标准时钟快,可以通过内部时钟TRIM寄存器调调整,使内部时钟变慢。调整幅度不能太大,太大可能影响系统时钟不稳定。

若CNTaver在D区,内部时钟比标准时钟慢,可以通过内部时钟TRIM寄存器调快内部时钟,使内部时钟变快。调整幅度不能太大,太大可能影响系统时钟不稳定。

在单片机不支持通过TRIM寄存器调整内部时钟频率的情况下:

CNTaver在C和D区,将应用程序中用到的定时器周期值改为原来值的(1+RATEerr)倍,异步通讯的波特率寄存器DIV值改为原来值的(1+RATEerr)倍。

本发明提出的一种用交流电频率连续校准单片机内部时钟的方法,具有成本低、设计简单、能解决时钟误差和温度漂移的优势,另外也减少产品使用外部时钟,降低产品成本。

综上,上述实施例对单片机内部时钟校准方法的不同构型进行了详细说明,当然,本发明包括但不局限于上述实施中所列举的构型,任何在上述实施例提供的构型基础上进行变换的内容,均属于本发明所保护的范围。本领域技术人员可以根据上述实施例的内容举一反三。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于权利要求书的保护范围。

技术分类

06120115925945