具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例通过获取工频过零点计算振荡误差,并根据该振荡误差对波特率进行补偿,实现自动校准。
图1示出本发明第一实施例提供的波特率校准方法的实现流程,为了便于说明,仅示出了与本发明相关的部分。
作为本发明一实施例,该波特率校准方法包括下述步骤:
在步骤S101中,获取工频中的多个过零点,并记录捕获时间和过零计数值;
在步骤S102中,根据过零计数值计算参考周期,并根据参考周期和捕获时间计算振荡误差;
在步骤S103中,根据振荡误差对波特率进行补偿,以校准波特率。
在本发明实施例中,通过获取工频过零点计算振荡误差,并根据该振荡误差对波特率定时器进行补偿,实现自动校准,有效降低成本,提高校准精度。
图2示出了本发明第二实施例提供的波特率校准方法的实现流程,详述如下:
在步骤S201中,启动过零点捕获;
初始化后,判断是否进入预设的校准波特率的固定周期Cycle(该周期包括采样阶段和计算、补偿阶段),若否,则返回重新判断,直到进入该校准波特率的周期Cycle,捕获控制器启动过零点捕获中断,将波特率校准状态标记为已进入过零点采样状态。
在步骤S202中,捕获工频中的过零点,并相应记录捕获时间;
在本发明实施例中,当进入到过零点采样状态后,开始进行过零点捕获,当捕获到每一个过零点时,相应记录对应的捕获时间点(即捕获时间)。
作为本发明一实施例,以采用内置主频为8M微控制单元(MCU,MicroControl Unit)为例,将该MCU中的捕获定时器输入时钟设置为8M的256分频,即预设时间间隔为
波特率定时器的输入时钟为8M不分频,要产生2400bps(波特每秒)的波特率,则标准波特率定时器值G为
捕获模块捕获到过零点后,若为首次捕获,将捕获定时器的值记录为TICKSTART1,当第n+1次(n>0)捕获,将捕获定时器的值记录为TICKSTART(n+1),同时记录为TICKENDn。
在步骤S203中,对捕获的过零点进行计数,记录过零计数值;
在本发明实施例中,在开始进行过零点捕获后,每捕获到一个过零点时,对应进行计数,记录对应过零计数值。
在步骤S204中,判断过零计数值是否大于预设采样计数值;
若否,则返回执行步骤S202;
若是,则执行步骤S205,关闭过零点捕获;
在本发明实施例中,在连续捕获多个过零点,将过零计数值与预设的捕获过零点的次数CNT进行比较,根据过零计数值判断是否结束过零点捕获,若过零计数值小于或等于预设的捕获过零点次数,则继续捕获过零点,直到过零计数值累加至大于预设的捕获过零点次数,则捕获控制器关闭捕获中断,将波特率校准状态修改为完成过零点采样状态,停止过零点捕获,进入计算、补偿阶段。
在步骤S206中,根据过零计数值计算参考周期,并根据参考周期和捕获时间计算振荡误差;
在步骤S207中,根据振荡误差对波特率进行补偿,以校准波特率。
图3示出了本发明第三实施例提供的波特率校准方法的实现流程,详述如下:
在步骤S301中,获取工频中的多个过零点,并记录捕获时间和过零计数值;
在步骤S302中,计算每两相邻过零点的捕获时间的差值;
在本发明实施例中,通过相邻过零点的捕获时刻(捕获时间),计算相邻过零点之间的时间差。
通过节拍定时器捕获过零点时间,将节拍定时器的最大值设置为TICKMAX,比较两相邻过零点的捕获时间,若开始时刻捕获定时器的值TICKSTARTn小于结束时刻的值TICKENDn,则意味着节拍定时器还未翻过最大值,通过公式Tn=(TICKENDn-TICKSTARTn)×Ttick计算捕获时间的差值Tn,其中Ttick为预设时间间隔。
若开始时刻捕获定时器的值TICKSTART1已经大于结束时刻的值TICKEND1,则意味着节拍定时器已翻过最大值,通过公式Tn=(TICKMAX-TICKSTARTn+TICKENDn)×Ttick计算捕获时间的差值Tn,其中Ttick为预设时间间隔。
在步骤S303中,根据过零计数值计算参考周期;
在本发明实施例中,当获取两个以上的过零点时,相邻过零点的捕获时间的差值为多数,此时,根据多个捕获时间的差值分别计算采样周期,并根据过零计数值对采样周期取平均值,并根据过零计数直计算参考周期,T=(T1+T2+...+TCNT)/CNT。
在步骤S304中,根据捕获时间的差值和参考周期计算振荡误差。
根据误差计算公式Err=(T-10ms)/10ms=(T-10000us)/10000us计算误差Err,例如T=10080us,则波特率的误差为Err=(10080-10000)/10000=0.008。
在步骤S305中,根据振荡误差对波特率进行补偿,以校准波特率。
在本发明实施例中,利用得到的振荡误差对波特率定时器进行补偿,判断振荡误差Err的正负,当振荡误差为正值,意味MCU的震荡频率慢了,则减小波特率定时器的波特率,以校准波特率,补偿后波特率定时器数值为N=(1-Err)×标准波特率定时器值;
当振荡误差为负值,意味MCU的震荡频率快了,则增加波特率定时器的波特率,以校准波特率,补偿后波特率定时器数值为N=(1+Err)×标准波特率定时器值。
例如要校准2400bps的波特率,则校准后的波特率定时器值N=(1-Err)×G=(1-0.008)×3333=3306,其中,G为标准波特率定时器值,依据补偿后的定时值初始化波特率定时器,并修改波特率校准状态机状态标记为:补偿已完成等待下一个周期补偿。
在补偿结束后,初始化波特率定时器,该校准波特率的周期Cycle结束,并返回执行步骤S301,重新进行下一周期的采样、计算、补偿,实现持续校准波特率。
在本发明实施例中,通过获取工频过零点计算振荡误差,并根据该振荡误差对波特率定时器进行补偿,实现了全温度范围内稳定地自动校准,提高校准精度,并有效降低成本,提高了经济效益。
图4示出了本发明实施例提供的波特率校准装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分。
作为本发明一实施例,该波特率校准装置可用于任何系列的波特率发生器中,该装置包括:
零点获取单元41,用于获取工频中的多个过零点,并记录捕获时间及过零计数值;
计算单元42,用于根据过零计数值计算参考周期,并根据参考周期和捕获时间计算振荡误差;
误差补偿单元43,用于根据振荡误差对波特率进行补偿,以校准波特率。
作为本发明一实施例,零点获取单元41包括:
捕获控制器,用于启动或关断过零点捕获。
捕获模块,用于捕获工频中的过零点;
捕获定时器,用于记录过零点的捕获时间;
计数器,用于对捕获的过零点进行计数,记录过零计数值;
比较器,用于判断过零计数值是否大于预设采样计数值,若否,则由捕获模块捕获工频中的过零点,若是,则由捕获控制器关闭过零点捕获。
作为本发明一实施例,计算单元42包括:
差值计算模块,用于计算每两相邻过零点的捕获时间的差值;
周期计算模块,用于根据过零计数值计算参考周期;
误差计算模块,用于根据捕获时间的差值和参考周期计算振荡误差。
作为本发明一实施例,误差补偿单元43包括:
判断模块,用于判断振荡误差的正负;
补偿模块,用于当判断模块判断振荡误差为正值时减小波特率定时器的波特率,当振荡误差为负值时增加波特率定时器的波特率,以校准波特率。
在本发明实施例中,通过获取工频过零点计算振荡误差,并根据该振荡误差对波特率定时器进行补偿,实现了全温度范围内稳定地自动校准,提高校准精度,并有效降低成本,提高了经济效益。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。