首页 / 编码器、编码方法及芯片

编码器、编码方法及芯片实质审查 发明

技术领域

[0001] 本发明涉及增量式编码器技术领域,尤其涉及一种编码器、编码方法及芯片。

相关背景技术

[0002] 增量式编码器是一种将旋转的位移量转换周期性的电信号,再将该周期性的电信号转换为数字脉冲输出的一种传感器,用脉冲的个数表示位移的大小,其输出结果是一组与角位移相对应的脉冲信号。它能够提供精确的位移测量、速度监测以及角度控制等信息,对于提高生产效率和质量具有重要的作用。
[0003] 由于其耐用、抗冲击、抗震动、不易受干扰、精度高、使用简单等优点,应用领域广泛,如电机等位置控制领域,常见的增量式编码输出A/B两相正交信号,以及Z相的零点信号。位置控制领域还有对高速计数器的编码需求。但相关技术中,对于增量式编码器的实现往往是依赖于软件工具和算法,上述方式需要一定的硬件设计和编程能力,使用门槛较高。

具体实施方式

[0039] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0040] 为解决上述问题,本发明实施例提出了一种编码器、编码方法及芯片。下面通过具体的实施例对本发明所提供的方案进行详细的描述。
[0041] 请参阅图1所示,图1为本发明实施例提供的编码器的一个结构示意图,如图1所示,该编码器包括线数调制模块110、目标位置更新模块120、方向决定模块130、自有位置更新模块140和编码器输出控制模块150,其中:线数调制模块110,用于获取输入位置,将输入位置与预设线数调制倍数相乘,得到增量调制位置;目标位置更新模块120,用于维持当前目标位置不变,或将当前目标位置更新为增量调制位置;方向决定模块130,用于根据当前目标位置的当前目标步数与自有位置的自有步数确定步数差距,基于步数差距和预设差值换向值确定位置调整方向;自有位置更新模块140,用于根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置;编码器输出控制模块150,用于根据输出参考数据确定输出信号,输出参考数据包括更新后位置的第一位、更新后位置的第零位以及以下至少之一:更新后位置的全部位数和计数输出参数,计数输出参数包括上一周期的B相输出值和位置调整方向。
[0042] 请参见图2,图2为本发明实施例提供的A相、B相和Z相的信号的一个示意图,如图2所示,A信号或B信号周期的1/4脉宽定义为一步,A信号或B信号的一个周期定义为一线步。本实施例中,线数是指在一个Z相周期中,编码器中正交的A或B信号的周期的个数。图2中的A相、B相和Z相的信号仅为一种示例,本领域技术人员可以根据需要进行A相、B相和Z相的信号的设定。
[0043] 在一实施例中,线数调制模块包括乘法器,通过将输入位置与预设线数调制倍数输入乘法器,得到增量调制位置,其中,输入位置包括m位的初始目标位置数据target_in[m‑1:0]和k位输入位置最大线数line_in_max[k‑1:0],预设线数调制倍数包括n位的线数调制倍数line[n‑1:0],增量调制位置包括k+n+2位的线数调制过的目标位置数据target_out[k+n+1:0]。
[0044] 例如,输入位置定义为位宽位m位的二进制数值,它的域值为0~2m‑1,它代表的位置意义是对应一整线(一整线包含4整步)中的步数,如果把输入位置理解为角度的话,那输4
入位置满量程对应一圈360°,每90°对应一步,例如:m=4,target_in[3:0]=3,3/2 *360°=48°,0~90°的位置对应的步数是第1步。
[0045] 假设输入的位置的满量程是1线(4步),线数调整是把1线调整为line[n‑1:0]线。以下部门实施例提供的公式均是按输入位置满量程为1线作为示例来构造的,本领域技术人员也可以根据该原理调整输入位置满量程,进而对公式进行调整。输入位置位数m需要大于等于2,若小于2,比如位宽为1时,输入位置只有两个状态,输入位置无法区分1线4步。
[0046] 为避免由于输入位置满量程对应1线(4步)的局限性,增加一个输入位置的满量程对应的线数,定义为line_in_max(k位输入位置最大线数),此参数为输入配置参数。
[0047] 例如,线数调制模块用来实现原始位置中线数的重新调制(倍乘)以支持输出更高分辨率的位置信息。线数调制模块可以采用一个无符号的m*n*k的乘法器实现,以输入位置为m位的初始目标位置数据,线数调制倍数为n倍为例,三个输入乘数分别为:
[0048] (1)m位的初始目标位置数据target_in[m‑1:0];
[0049] (2)n位的线数调制倍数line[n‑1:0];
[0050] (3)k位输入位置最大线数line_in_max[k‑1:0],当输入的位置的满量程是1线(4步),也可以忽略该输入。
[0051] 该线数调制模块的输出为k+n+2位的线数调制过的增量调制位置数据target_out[k+n+1:0]。
[0052] 该线数调制模块的一种示例性的计算公式如公式(1)和公式(2)所示:
[0053] multiply[k+n+m‑1:0]=target_in[m‑1:0]×line[n‑1:0]×
[0054] line_in_max[k‑1:0]     公式(1),
[0055] target_out[k+n+1:0]=multiply[k+n+m‑1:m‑2]        公式(2),[0056] 其中,target_in[m‑1:0]为输入位置,line[n‑1:0]为线数调制倍数,line_in_max[k‑1:0]为k位输入位置最大线数,multiply[k+n+m‑1:0]为三输入乘法器的输出数据,target_out[k+n+1:0]为增量调制位置。公式(2)中multiply[k+n+m‑1:m‑2]的意思为,取multiply从k+n+m‑1位到m‑2位(共k+n+2位)赋值给target_out,即multiply的第k+n+m‑1位赋值给target_out的第k+n+1位,multiply的第k+n+m‑2为赋值给target_out的第k+n位,依次类推…multiply的第m‑2位赋值给target_out的第0位。输出target_out[k+n+1:0]的数值,反映了增量调制位置对应的步数,n为线数调制倍数值的二进制位宽,line[n‑1:0]与line_in_max[k‑1:0]可以由本领域技术人员根据需要进行配置。
[0057] 需要说明的是,比如本发明实例化n为16时,那么就是代表此时的编码器最大支持16
线数调制倍数是2 ‑1,即65535倍。在此实例化的结构中,可以支持线数调制倍数范围为1~
65535,也就是线数调制模块中的三输入乘法器的乘数位宽越大支持的输出的范围越大,当然乘法器的硬件电路开销也越大。m、k也同理,不做赘述。
[0058] 在一实施例中,方向决定模块包括步数差距确定模块和位置调整方向确定模块,其中:步数差距确定模块用于若当前目标步数大于或等于自有步数,将当前目标步数与自有步数之间的差值确定为步数差距,以及若当前目标步数小于自有步数,将预设最大步数与当前目标步数之和作为临时步数,将临时步数与自有步数之间的差值确定为步数差距,预设最大步数基于预设线数调制倍数line[n‑1:0]和输入位置最大线数line_in_max[k‑1:0]的乘积确定;位置调整方向确定模块用于若当前目标步数大于自有步数,且步数差距小于或等于预设差值换向值,或者当前目标步数小于自有步数,且步数差距大于预设差值换向值,将位置调整方向确定为正转;位置调整方向确定模块还用于若当前目标步数等于自有步数,将位置调整方向确定为不变;位置调整方向确定模块还用于若满足预设反转条件,将位置调整方向确定为反转,预设反转条件包括以下任意之一,当前目标步数大于自有步数,且步数差距大于预设差值换向值;当前目标步数小于自有步数,且步数差距小于或等于预设差值换向值;位置调整方向不是正转且不是不变。
[0059] 在本实施例中,方向决定模块还包括预设差值换向值确定模块,预设差值换向值确定模块用于根据预设线数调整倍数line[n‑1:0]和输入位置最大线数line_in_max[k‑1:0]的乘积(预设最大步数)和预设差值换相比例确定,预设差值换相比例大于零且预设差值换相比例小于1。
[0060] 该方向决定模块用来判定位置方向,也即该方向决定模块用于判定当前目标位置的当前目标步数和自有位置的自有步数的关系,以产生最新的位置调整方向给自有位置更新模块。位置调整方向可以包括三种,(1)正转;(2)反转;(3)不变,也即停止。
[0061] 一种示例的步数差距的确定方式如下:
[0062]
[0063] 其中,delta[k+n+1:0]为步数差距,target[k+n+1:0]为当前目标位置的当前目标步数,owned[k+n+1:0]为自有位置的自有步数,n为线数调制倍数值的二进制位宽,line[n‑1:0]是线数转换模块配置的线数,line_in_max[k‑1:0]为k位输入位置最大线数,也即上述的线数调制倍数的线数,line[n‑1:0]与line_in_max[k‑1:0]可以由本领域技术人员根据需要进行配置。
[0064] 如上述公式(3)所示,在当前目标步数大于或等于自有步数时,直接以当前目标步数大于自有步数之间的差值作为步数差距,否则,当前目标步数小于自有步数时,基于预设线数调整倍数line[n‑1:0]和输入位置最大线数line_in_max[k‑1:0]的乘积确定预设最大步数(line[n‑1:0]*4*line_in_max[k‑1:0])也即预设线数调制倍数的位宽,然后基于预设最大步数与当前目标步数之和,再减去自有步数所得到的值确定为步数差距。
[0065] 一种示例的预设差值换向值的确定方式如下:
[0066] change_point=line[n‑1:0]*1ine_in_max[K‑1:0]*4*k_ratio   公式(4),[0067] 其中,change_point为预设差值换向值,k_ratio为预设差值换相比例,其中,1>k_ratio>0,预设差值换向值为整数。预设差值换相比例可以由本领域技术人员根据需要预先配置。
[0068] 在一实施例中,判断位置调整方向是否为正转的确定方式如下:
[0069]
[0070] 其中,posedge_round为正转指示信号,
[0071] F为delta[k+n+1:0]≤change_point并且target[k+1+1:0]>owned[k+n+1:0];
[0072] 或delta[k+n+1:0]>change_point并且target[k+1+1:0]<owned[k+n+1:0],其中,delta[k+n+1:0]为步数差距,change_point为预设差值换向值,target[k+1+1:0]为当前目标位置的当前目标步数,owned[k+n+1:0]为自有位置的自有步数,若当前目标步数大于自有步数,且满足步数差距小于或等于预设差值换向值;或者当前目标步数小于自有步数,且步数差距大于预设差值换向值,则posedge_round为1,否则,posedge_round为0,当posedge_round为1时指示正转。
[0073] 在一实施例中,判断位置调整方向是否为反转的确定方式如下:
[0074] negedge_round=(target[k+n+1:0]!=owned[k+n+1:0])&&(!posedge_round)[0075] 公式(6),
[0076] 其中,target[k+n+1:0]为当前目标位置的当前目标步数,owned[k+n+1:0]为自有位置的自有步数,posedge_round为正转指示信号,negedge_round为反转指示信号,它为1时指示反转。若位置调整方向判断不是正转,且当前目标步数不等于自有步数,则negedge_round为1,否则若位置调整方向判断不是正转,且当前目标步数等于自有步数,negedge_round为0。换句话说,存在以下预设反转条件中任意之一时,则反转,预设反转条件为:当前目标步数大于自有步数,且步数差距大于预设差值换向值;当前目标步数小于自有步数,且步数差距小于或等于预设差值换向值;位置调整方向不是正转且不是不变。
[0077] 在一实施例中,判断位置调整方向是否为不变的确定方式如下:
[0078] stop_round=(target[k+n+1:0]==owned[k+n+1:0])       公式(7),[0079] 其中,stop_round为停止指示信号,也即不变,target[k+n+1:0]为当前目标位置的当前目标步数,owned[k+n+1:0]为自有位置的自有步数,它为1时指示自有位置追平当前目标位置。也即通过判断当前目标步数是否等于自有步数,若当前目标步数等于自有步数,则stop_round为1,否则stop_round为0。
[0080] 在一实施例中,编码器输出控制模块包括ABZ型输出信号模块、高速计数单脉冲型信号输出模块和高速计数双脉冲型输出信号模块中至少之一,其中,
[0081] ABZ型输出信号模块用于对更新后位置的第一位取反,得到A相输出结果,以及用于对更新后位置的第一位和更新后位置的第零位进行异或运算,得到B相输出结果,ABZ型输出信号模块还用于当自有步数大于或等于预设Z相起始步数,且自有步数小于或等于预设Z相终止步数,控制Z相输出结果为高电平,以及用于当自有步数小于预设Z相起始步数,或者自有步数大于预设Z相终止步数,控制Z相输出结果为低电平;
[0082] 高速计数单脉冲型信号输出模块用于若位置调整方向为正转,根据更新后位置的第一位确定A相输出结果,若位置调整方向为反转或不变,对更新后位置的第一位和更新后位置的第零位进行异或运算,得到A相输出结果,高速计数单脉冲型信号输出模块还用于若位置调整方向为正转时,B相输出只在自有位置第一位和自有位置第零位等于预设的正向切换点将最新的位置调整方向更新为B相最新值,若位置调整方向为反转或不变时,B相输出只在自有位置第一位和自有位置第零位等于预设的反向切换点将最新的位置调整方向更新为B相最新值。
[0083] 高速计数双脉冲型输出信号模块用于若位置调整方向为正转,根据更新后位置的第一位确定A相输出结果,若位置调整方向为反转或不变,A相输出低电平,高速计数双脉冲型输出信号模块还用于若位置调整方向为正转B相输出低电平,若位置调整方向为反转或不变,对更新后位置的第一位和更新后位置的第零位进行异或运算,得到B相输出结果。
[0084] 本实施例中,编码器输出控制模块包括ABZ型输出信号模块、高速计数单脉冲型信号输出模块和高速计数双脉冲型输出信号模块中至少两个时,可以通过本领域技术人员的配置,使得其中至少一个模块处于工作状态。
[0085] 当ABZ型输出信号模块被配置为有效时,也即编码器被配置为具有ABZ型输出时,即AB正交输出,A领先B一步时为正转(如图2所示),B领先A一步时为反转,Z相为零相脉冲。
[0086] 一种示例的A相的输出确定方式如下:
[0087] A=!owned[1]                        公式(8),
[0088] 其中,A为A相输出结果,!代表取反,owned[1]代表当前自有位置的第1位,owned[k+n+1:0]位宽为k+n+2,最低位即第0位,最高位即第k+n+1位。若owned[1]为1,则A=0,若owned[1]为0,则A=1,当A=0时输出低电平,A=1时输出高电平。
[0089] 一种示例的B相的输出确定方式如下:
[0090] B=owned[0]⊕owned[1]                   公式(9),
[0091] 其中,B为B相输出结果,⊕代表异或运算,即B相输出为owned[0]异或owned[1],owned[1]代表当前自有位置的第1位,owned[0]代表当前自有位置的第0位。当owned[0]与owned[1]相同时,B=0,当owned[0]与owned[1]不同时,B=1,当B=0时输出低电平,B=1时输出高电平。
[0092] 一种示例的Z相的输出确定方式如下:
[0093] Z=(z_start[k+n+1:0]<=owned[k+n+1:0])&&(z_end[k+n+1:0]>=owned[k+n+1:0]) 公式(10),
[0094] 其中,Z为Z相输出结果,z_start[k+n+1:0]和z_end[k+n+1:0]均来自预先配置的参数。z_start[k+n+1:0]为预设Z相起始步数,z_end[k+n+1:0]为预设Z相终止步数,owned[k+n+1:0]为自有位置的自有步数,即当自有位置owned[k+n+1:0]大于或等于z_start[k+n+1:0]并且,owned[k+n+1:0]小于或等于z_end[k+n+1:0]时,Z=1,输出高电平。其他情况输出低电平,也即当自有步数小于预设Z相起始步数,或者自有步数大于预设Z相终止步数,Z=0,控制Z相输出结果为低电平。
[0095] 高速计数单脉冲型信号输出模块被配置为有效时,也即当输出为高速计数单脉冲型时,请参见图3,图3为本发明实施例提供的输出为高速计数单脉冲型信号的一个示意图,A相输出计数脉冲,B相输出计数方向,图3中1、2、3、2、1、0的序列为高速脉冲的一种示例计数值。
[0096] 一种示例的A相的输出确定方式如下:
[0097] A=posedge_round?owned[1]:owned[1]⊕owned[0]    公式(11),
[0098] 其中,A为A相输出结果,posedge_round为正转指示信号,owned[1]代表当前自有位置的第1位,owned[0]代表当前自有位置的第0位。⊕代表异或运算,也即,当正转指示信号为1,位置调整方向为正转,则采用owned[1]作为A的值,否则,当位置调整方向不为正转,A相输出为owned[0]异或owned[1],当owned[0]与owned[1]相同时,A=0,当owned[0]与owned[1]不同时,A=1,当A=0时输出低电平,A=1时输出高电平。
[0099] B相为高速脉冲的计数方向,B相为1时对应正向递增计数,为0时对应反向递减数,B相换向(从正向切换到反向或从反向切换到正向)的相位由可配置的参数决定,一种示例的B相的输出确定方式如下:
[0100] round_change_point=B(n‑1)?owned[1:0]==posedge_point∶
[0101] owned[1:0]==negedge_point公式(12),
[0102] B(n)=round_change_point&posedge_round    公式(13),
[0103] 其中,round_change_point是B换相点控制信号,posedge_point和negedge_point分别是预先配置的正向换相点和反向换相点参数,B(n)代表当前B相输出值,B(n‑1)代表上一周期的B相输出值。posedge_round为正转指示信号。owned[1:0]为自有位置的第一位和第零位组成的二进制数值。
[0104] 也即,位置调整方向为正转时,B相输出只在自有位置第一位和自有位置第零位等于预设的正向切换点将最新的位置调整方向更新为B相最新值,若位置调整方向为反转或不变时,B相输出只在自有位置第一位和自有位置第零位等于预设的反向切换点将最新的位置调整方向更新为B相最新值。
[0105] 高速计数双脉冲型输出信号模块被配置为有效时,将当输出为高速计数双脉冲型时,如图4所示,图4为本发明实施例提供的输出为高速计数双脉冲型信号的一个示意图,请参阅图4,A相输出正向计数脉冲,B相输出反向计数脉冲,示图中1、2、3、2、1、0的序列为高速脉冲的一种示例的计数值。
[0106] 一种示例的A相的输出确定方式如下:
[0107] A=posedge_round?owned[1]∶0             公式(14),
[0108] 其中,A为A相输出结果,posedge_round为正转指示信号,owned[1]代表当前自有位置的第1位,也即,当位置调整方向为正转时,posedge_round=1时,A取owned[1]的值,否则,当位置调整方向不为正转时,A=0,输出低电平。
[0109] 一种示例的B相的输出确定方式如下:
[0110] B=posedge_round?0:(owned[1]⊕owned[0])       公式(15),
[0111] 其中,B为B相输出结果,posedge_round为正转指示信号,owned[1]代表当前自有位置的第1位,owned[0]代表当前自有位置的第0位,⊕代表异或运算,也即,当位置调整方向为正转时,posedge_round=1时,B=0,输出低电平,当位置调整方向为反转或不变时,若第1位与第0位相同,B=0,输出低电平,若第1位与第0位不同,B=1,输出高电平。
[0112] 在一实施例中,该编码器还包括最小周期计数器,最小周期计数器包括第一计数器和状态控制器,第一计数器装载有装载值,状态控制器用于在当前目标位置与自有位置不同的情况下,触发装载值按照每一周期变更预设装载数值,直至变更后的装载值等于预设装载阈值,生成状态指示有效信号,以触发目标位置更新模块将增量调制位置确定为当前目标位置。
[0113] 在本实施例中,最小周期计数器还用于在变更后的装载值大于或小于预设装载阈值的情况下,触发目标位置更新模块维持当前目标位置不变。
[0114] 在一实施例中,最小周期计数器还用于在变更后的装载值等于预设装载阈值时,触发自有位置更新模块根据位置调整方向对自有位置进行更新,得到更新后位置。
[0115] 在本实施例中,在最小周期计数器中变更后的装载值等于预设装载阈值的情况下,自有位置更新模块可以包括正向更新模块、反向更新模块和保持模块,其中:正向更新模块用于在变更后的装载值等于预设装载阈值时,若位置调整方向为正转,且自有位置的自有步数小于当前自有位置的结束步位置,将自有位置调整为自有位置的数值减1;正向更新模块还用于在变更后的装载值等于预设装载阈值时,若位置调整方向为正转,且自有位置的自有步数等于当前自有位置的结束步位置,将自有位置调整为当前自有位置的初始步位置;反向更新模块用于在变更后的装载值等于预设装载阈值时,若位置调整方向为反转,且自有位置的自有步数大于当前自有位置的初始步位置,将自有位置调整为自有位置的数值加1;反向更新模块还用于在变更后的装载值等于预设装载阈值时,若位置调整方向为反转,且自有位置的自有步数等于当前自有位置的初始步位置,将自有位置调整为当前自有位置的结束步位置;保持模块用于在变更后的装载值等于预设装载阈值时,若位置调整方向为不变,控制自有位置保持不变。
[0116] 在一实施例中,最小周期计数器触发装载值按照每一周期变更预设装载数值,包括:最小周期计数器触发装载值按照每一周期减少预设装载数值,此时预设装载阈值小于装载值;或,最小周期计数器触发装载值按照每一周期增加预设装载数值,此时预设装载阈值大于装载值。换句话说,最小周期计数器的计数方向可以是增加,也可以是减少,具体可以由本领域技术人员根据需要选择。
[0117] 在一实施例中,装载值的确定方式包括:获取工作时钟周期和编码器的输出信号对应的最高分辨率的脉冲周期间隔;根据工作时钟周期和脉冲周期间隔确定装载值。
[0118] 在一实施例中,状态控制器还用于在变更后的装载值等于预设装载阈值的下一周期,将装载值装载到第一计数器,以使状态控制器重复执行在当前目标位置与自有位置不同的情况下,触发装载值按照每一周期变更预设装载数值,直至变更后的装载值等于预设装载阈值,生成状态指示有效信号,以触发目标位置更新模块将增量调制位置确定为当前目标位置的步骤。
[0119] 例如,最小周期计数器包括一个w位的第一计数器和一个状态控制器,其中,状态控制器负责第一计数器的目标数值(装载值)的装载和运行,并产生状态指示信号给目标位置更新模块和自有位置更新模块。其控制方法为,在预配置阶段,根据编码器输出信号对应的最高分辨率的脉冲周期间隔p,以及本设计电路的工作时钟周期q,则根据公式16可求出第一计数器目标数值的装载值r,
[0120] r=p/q                          公式(16)
[0121] 其中,r为装载值,p为脉冲周期间隔,q为工作时钟周期。
[0122] 以第一计数器为递减的逻辑、预设装载阈值为零为例,一种示例性的状态控制器的状态控制步骤如下:(1)初始时,第一计数器将r装载到第一计数器;(2)当方向决定模块判断当前自有位置和当前目标位置不一致时,则最小周期计数器从装载值r开始,保持每个周期进行减一计数,此阶段产生running状态指示信号送至目标位置更新单元;(3)当第一计数器数值减到为0时,产生line_update指示信号送给目标位置更新单元和自有位置更新单元。(4)在第一计数器数值减到0的这个周期时,状态控制器会在下个周期将r装载到第一计数器,然后重复步骤2)、3)、4)。
[0123] 可以理解,目标位置更新单元只在line_update有效时才能去检查是否有新的目标位置更新,否则,即使线数调制模块在更新增量位置,目标位置更新单元也保持不变。也就是说计数器开始计数之后,一定是计到阈值才会停,计数不会打断,目标位置更新单元也不会更新。
[0124] 若编码器输出控制模块包括高速计数单脉冲型信号输出模块,此时,关于B相的确定方式如下:B相为高速脉冲的计数方向,B相为1时对应正向递增计数,为0时对应反向递减计数,B相换向(从正向切换到反向或从反向切换到正向)的相位由可配置的参数决定,一种示例的B相的输出确定方式如下:
[0125] round_change_point=B(n‑1)?owned[1:0]==posedge_point∶
[0126] owned[1:0]==negedge_point   公式(12),
[0127] B(n)=(line_update&round_c ange_point)?posedge_round∶B(n‑1) 公式(17),[0128] 其中,round_change_point是B换相点控制信号,posedge_point和negedge_point分别是预先配置的正向换相点和反向换相点参数,B(n)代表当前B相输出值,B(n‑1)代表上一工作时钟周期的B相输出值。posedge_round为正转指示信号,line_update为状态指示有效信号。owned[1:0]为自有位置的第一位和第零位组成的二进制数值。
[0129] 当B(n‑1)为1,也就是上一工作时钟周期的B相值为1时,若owned[1:0]等于正向换向点参数,则B相的换向点控制信号round_change_point=1,若owned[1:0]不等于正向换向点参数,则B相的换向点控制信号round_change_point=0;当B(n‑1)为0,也就是上一工作时钟周期的B相值为0时,若owned[1:0]等于反向换向点参数,则B相的换向点控制信号round_change_point=1,若owned[1:0]不等于反向换向点参数,则B相的换向点控制信号round_change_point=0;
[0130] 当B相的换向点控制信号round_change_point为1并且line_update信号为1时,则当前工作时钟周期的B相输出值等于posedge_round的值,否则B相输出值保持不变。
[0131] 在一实施例中,编码器还包括同步位置管理模块,同步位置管理模块包括立即更新模块和延迟更新模块中至少之一,其中:立即更新模块用于在立即更新模块处于有效状态时,接收到更新指令后,生成同步有效信号,以触发自有位置更新模块将自有位置更新为当前目标位置;延迟更新模块用于在延迟更新模块处于有效状态时,接收到更新指令后,若线数调制模块得到新的增量调制位置,且目标位置更新模块将新的增量调制位置确定为新的当前目标位置的情况下,生成同步有效信号,以触发自有位置更新模块将自有位置更新为新的当前目标位置;若同步位置管理模块包括立即更新模块和延迟更新模块,同一时刻,立即更新模块处于有效状态或延迟更新模块处于有效状态。
[0132] 在本实施例中,同步位置管理模块还包括使能控制模块,使能控制模块用于接收状态指令,以配置立即更新模块处于有效状态或延迟更新模块处于有效状态。
[0133] 例如,可以将同步位置管理模块配置为两种工作模式;
[0134] 1)立即生效模式:当使能同步位置(通过系统总线配置)后,即刻发出sync_update有效信号给自有位置更新单元;自有位置会立刻把当前的目标位置同步为最新的位置。该立即生效模式可以通过上述的立即更新模块执行,在该模式下,只要切换到该模式,也即视为接收到更新指令,就需要将自有位置更新为当前目标位置,不论之前是否更新过。该方式的更新速度较快,响应迅速,但由于外界借入力度较强,容易带来其他的系统风险。
[0135] 2)延迟模式:当使能同步位置(通过系统总线配置)后,不会马上发出sync_update有效信号,需要等到下一次目标位置更新单元更新目标位置之后,才会发出sync_updata有效信号,也就是延迟模式下,自有位置会同步下一笔目标位置为最新的自有位置。该延迟模式可以通过上述的延迟更新模块执行,不直接将自有位置更新为当前目标位置,而是目标位置更新模块得到了新的当前目标位置之后,才触发将新的当前目标位置作为自有位置,以实现自有位置的更新。可见,延迟模式的优势在于:更适用于启动前进行初始位置的预配置。立即模式更适用于故障时刻的紧急停止的响应。
[0136] 同步位置管理模块处于何种模式可以基于不同的标志位、不同的指令等方式实现,在此不做限定。但需要说明的是,两种模式不共存,也即要么是立即生效模式,要么是延迟模式。
[0137] 在一实施例中,该编码器还包括看门狗监控模块,看门狗监控模块用于获取方向决定模块确定的位置调整方向,若位置调整方向为不变,监测位置调整方向为不变的连续有效时长,当连续有效时长大于预设时长阈值,生成看门狗监控有效信号并发送至自有位置更新模块,该看门狗监控有效信号用于触发自有位置更新模块在自有位置小于自有位置的结束步位置的情况下,将自有位置调整为自有位置的数值减1;以及触发自有位置更新模块在自有位置等于当前自有位置的结束步位置的情况下,将自有位置调整为当前自有位置的初始步位置。
[0138] 在本实施例中,看门狗监控模块包括第二计数器和信号生成模块,第二计数器用于监测位置调整方向,若位置调整方向为不变,触发第二计数器归零并开始计数,直到第二计数器的计数值达到看门狗阈值,触发信号生成模块生成看门狗监控有效信号。
[0139] 例如,看门狗监控模块用来检查方向决定模块的停转信号stop_round的连续有效时间,可以通过寄存器参数选择开启或禁止此功能。在开启此功能前,需预先配置好看门狗阈值周期数(看门狗阈值),看门狗监控模块里的第二计数器会加载此阈值。当stop_round为无效状态时,此第二计数器数值归零,当stop_round有效时,第二计数器开始计数,当计满至阈值时(第二计数器的计数值达到看门狗阈值),第二计数器会归零,并发出wdog_update有效脉冲信号(看门狗监控有效信号)给自有位置更新模块。也就是说只有stop_round连续有效时间超过阈值时间,才会有wdog_update有效信号,此功能可以用来监控位置更新机制是否处于长时间的“假死状态”。
[0140] 在一实施例中,若编码器包括同步位置管理模块、最小周期计数器和看门狗监控模块中至少两个,自有位置更新模块用于若接收到同步有效信号、状态指示有效信号、看门狗监控有效信号中至少之一,按照预设优先规则将同步有效信号、状态指示有效信号、看门狗监控有效信号中的一个确定为触发信号,以触发自有位置更新模块根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置。其中,预设优先规则为同步有效信号、状态指示有效信号、看门狗监控有效信号的优先排序级规则,可以由本领域技术人员根据需要设定,该预设优先规则用于表征当自有位置更新模块同时接收到同步有效信号、状态指示有效信号、看门狗监控有效信号中至少两个时,执行优先排序级最高的信号所对应的事件,也即将优先排序级最高的信号作为触发信号。若上述三个信号一个也没有接收到,但接收到了位置调整方向和当前目标位置中至少之一,可以根据本领域技术人员的其他预设规则来确定更新后位置。当上述三个信号仅接收到了一个信号,则按照该信号所对应的规则进行执行。
[0141] 请参见图5,图5为本发明实施例提供的编码器的另一个结构示意图,如图5所示,与图1中的编码器不同的是,本实施例中的编码器可以根据本领域技术人员的需要选配最小周期计数器160,看门狗监控模块180和同步管理模块170中至少之一,编码器输出控制模块150可以实现ABZ编码控制和/或高速计数器控制,输出信号可以为A相、B相、Z相信号,或者A相和B相信号。其中:
[0142] 若编码器中配置了最小周期计数器160,则可以根据最小周期计数器160中的变更后的装载值是否等于预设装载阈值,来决定目标位置更新模块120是将当前目标位置确定为当前目标位置target[k+n+1:0],还是将增量调制位置target_out[k+n+1:0]确定为当前目标位置target[k+n+1:0]。若最小周期计数器中的第一计数器的计数值达到了预设装载阈值,此时将增量调制位置target_out[k+n+1:0]确定为当前目标位置target[k+n+1:0]。否则,保持当前目标位置作为当前目标位置。若该编码器处于初始状态下,没有当前目标位置(第一次执行流程),可以由本领域技术人员预设一个初始值作为当前目标位置。
[0143] 在线束调制模块110根据输入位置target_in[m‑1:0]和线数调制倍数line[n‑1:0]以及输入位置最大线数line_in_max[k‑1:0]产生的增量调制位置target_out[k+n+1:0]后,会送至目标位置更新模块120,此目标位置更新模块120会根据最小周期计数器160的状态line_update有效来决定是否更新将增量调制位置target_out锁存为当前目标位置target[k+n+1:0]。即当最小周期计数器160状态为line_update时,会将当前的增量调制位置target_out[k+n+1:0]锁存为最新的目标位置target[k+n+1:0](当前目标位置),若最小周期计数器状态为running时,会保持当前的目标位置不变(也即保持当前目标位置)。目标位置更新模块120的输出会送至方向决定模块130。
[0144] 若编码器中没有配置最小周期计数器160,则可以按照本领域技术人员的需要来确定当前目标位置。例如,在得到了增量调制位置后,将增量调制位置锁存为当前目标位置,或者通过计算增量调制位置与当前目标位置的差距,若差距大于一定的预设差值,则将增量调制位置锁存为当前目标位置,否则,保持当前目标位置作为当前目标位置。
[0145] 自有位置更新模块140在编码器没有配置最小周期计数器160、看门狗监控模块180和同步管理模块170时,则可以根据本领域技术人员的配置,在方向优先时,根据位置调整方向(posedge_round正转、negedge_round反转、stop_round不变)对自有位置owned[k+n+1:0]进行更新,得到更新后位置,在目标优先时,根据当前目标位置对自有位置进行更新,得到更新后位置。或者采用其他的本领域技术人员所设置的规则,来进行自有位置的更新。
[0146] 自有位置更新模块140在编码器配置了最小周期计数器160,没有配置看门狗监控模块180和同步管理模块170时,则在最小周期计数器160的变更后的装载值等于预设装载阈值时,最小周期计数器的状态指示信号line_update有效,根据位置调整方向对自有位置owned[k+n+1:0]进行更新,得到更新后位置。
[0147] 自有位置更新模块140在编码器配置了看门狗监控模块180,没有配置最小周期计数器160和同步管理模块170时,则在看门狗监控模块180获取方向决定模块130确定的位置调整方向,若位置调整方向为不变,监测位置调整方向为不变的连续有效时长,当连续有效时长大于预设时长阈值,生成看门狗监控有效信号wdog_update,触发自有位置更新模块在自有位置小于自有位置的结束步位置的情况下,将自有位置调整为自有位置的数值减1;以及触发自有位置更新模块在自有位置等于当前自有位置的结束步位置的情况下,将自有位置调整为当前自有位置的初始步位置。也即,当前自有位置不等于line[n‑1:0]*line_in_max[k‑1:0]*4‑1时,更新的自有位置为owned[k+n+1:0]+1;否则,更新的自有位置为0。
[0148] 自有位置更新模块140在编码器配置了同步管理模块170,没有配置最小周期计数器160和看门狗监控模块180时,则根据同步管理模块170的模式不同,选择是否立即进行更新,并在同步管理模块接收到更新指令后,发出同步位置控制单元输出的同步有效信号sync_update,在自有位置更新模块接收到同步信号sync_update后,将自有位置owned[k+n+1:0]更新为当前目标位置target[k+n+1:0]。
[0149] 自有位置更新模块140在编码器配置了最小周期计数器160、看门狗监控模块180和同步管理模块170中至少之二时,则可以采用本领域技术人员所设定的三个模块的优先级,按照优先级择一选择一个模块的信号所对应的规则进行目标位置的更新。若自有位置更新单元接受同步位置控制模块、方向决定模块、最小周期计数器以及看门狗监控模块的输入信号控制。当最小周期计数器的状态指示有效信号line_update(状态指示有效信号)、看门狗监控模块wdog_update有效(看门狗监控有效信号)或同步位置控制模块输出的同步信号sync_update有效(同步有效信号)时,都会触发自有位置更新。一种示例的控制步骤如下:
[0150] 1、先检查sync_update是否有效,若有效,则自有位置owned[k+n+1:0]更新为target[k+n+1:0];
[0151] 2、若条件1无效。也即sync_update无效,检查最小周期计数器的line_update信号是否有效,若有效,则自有位置更新模块根据方向决定模块输入的位置调整方向来更新自有位置owned[k+n+1:0],即:
[0152] 1)正转有效时,如当前自有位置不等于line[n‑1:0]*line_in_max[k‑1:0]*4‑1(自有位置的结束步位置,也即预设调制步数极大阈值)时,更新的自有位置为owned[k+n+1:0]+1(自有位置的数值加1);否则,更新的自有位置为0(自有位置的初始步位置)。
[0153] 2)反转有效时,如当前自有位置不等于0(自有位置的初始步位置,也即预设调制步数极小阈值)时,更新的自有位置为owned[k+n+1:0]‑1(自有位置的数值减1);否则,更新的自有位置为line[n‑1:0]*line_in_max[k‑1:0]*4‑1(自有位置的结束步位置)。
[0154] 3)停转有效时,更新的自有位置保持不变。
[0155] 3、若条件1和2都不满足时,也即sync_update无效且line_update无效,检查看门狗监控模块的wdog_update是否有效,若有效则自有位置更新机制如下:
[0156] 当前自有位置不等于line[n‑1:0]*line_in_max[k‑1:0]*4‑1时,更新的自有位置为owned[k+n+1:0]+1;否则,更新的自有位置为0。
[0157] 请继续参见图5,该编码器支持ABZ编码控制和高速计数器控制两种输出模式,具体的,可以支持ABZ型输出、高速计数单脉冲型、高速计数双脉冲型三种输出模式,本领域技术人员可以根据需要选择其中至少一种作为输出结果。
[0158] 增量式编码器广泛应用于在电机等位置控制领域,常见的增量式编码输出A/B两相正交信号,以及Z相的零点信号。位置控制领域还有对高速计数器的编码需求,上述实施例提供了一种多功能的编码器设计,可以同时满足产生A/B/Z编码和高速计数器编码输出,并且采用共享硬件单元的方式大大节省硬件资源。
[0159] 上述实施例提供的多功能的编码器实现方案,可以支持线数可配置,采用自有位置更新的方式既支持ABZ编码输出也支持高速脉冲计数编码输出。并且AB的最小周期可配置,Z相的零位点可调,并设计了看门狗的监控位置停转的机制。多种编码方式共享了自有位置更新单元,使得节省了大量的硬件资源。
[0160] 在一实施例中,还提供了一种芯片,该芯片包括上述任一项实施例中提供的编码器。
[0161] 关于芯片的具体限定可以参见上文中对于编码器的限定,在此不再赘述。
[0162] 在一实施例中,提供一种编码方法,该编码方法为上述任一实施例所提供的编码器的实现方法,请参见图6,图6为本发明实施例提供的编码方法的一个流程示意图,如图6所示,该方法包括如下步骤:
[0163] 步骤S610:获取编码器的输入位置、当前目标位置、自有位置和输入位置最大线数;
[0164] 步骤S620:将输入位置与预设线数调制倍数以及输入位置最大线数相乘,得到增量调制位置;
[0165] 步骤S630:维持当前目标位置不变,或将增量调制位置更新为当前目标位置;
[0166] 步骤S640:根据当前目标位置的当前目标步数与自有位置的自有步数确定步数差距,基于步数差距和预设差值换向值确定位置调整方向;
[0167] 步骤S650:根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置;
[0168] 步骤S660:根据输出参考数据确定输出信号。
[0169] 其中,输出参考数据包括更新后位置的第一位、更新后位置的第零位以及以下至少之一:更新后位置的全部位数和计数输出参数,计数输出参数包括上一周期的B相输出值和位置调整方向。
[0170] 如上述实施例提到的,预设线数调制倍数以及输入位置最大线数可以由本领域技术人员根据需要进行设定。
[0171] 在本实施例中,维持当前目标位置不变,或将增量调制位置更新为当前目标位置之前,该方法包括:将当前目标位置与自有位置不同的事件发生的第一个周期作为初始周期,在初始周期间隔预设周期后触发将增量调制位置更新为当前目标位置;若当前目标位置与自有位置相同,和/或当前目标位置与自有位置不同,在初始周期间隔预设周期之内维持当前目标位置不变。
[0172] 在本实施例中,根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置之前,该方法包括:若接收到同步有效信号、状态指示有效信号、看门狗监控有效信号中至少之一,按照预设优先规则将同步有效信号、状态指示有效信号、看门狗监控有效信号中的一个确定为触发信号,以触发根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置;其中,
[0173] 将同步有效信号确定为触发信号,触发根据当前目标位置对自有位置进行更新,得到更新后位置,包括以下任意之一:接收到更新指令后,生成同步有效信号,以触发将自有位置更新为当前目标位置;接收到更新指令后,若获取到新的增量调制位置,且将新的增量调制位置更新为新的当前目标位置的情况下,生成同步有效信号,以触发将自有位置更新为新的当前目标位置;
[0174] 将状态指示有效信号确定为触发信号,触发根据位置调整方向和当前目标位置对自有位置进行更新,得到更新后位置,包括:在当前目标位置与自有位置不同的情况下,触发装载值按照每一周期变更预设装载数值,直至变更后的装载值等于预设装载阈值,生成状态指示有效信号,根据位置调整方向对自有位置进行更新,得到更新后位置:
[0175] 将看门狗监控有效信号确定为触发信号,触发根据位置调整方向和当前目标位置对自有位置进行更新,得到更新后位置,包括:若位置调整方向为不变,监测位置调整方向为不变的连续有效时长,当连续有效时长大于预设时长阈值,生成看门狗监控有效信号,触发在自有位置小于自有位置的结束步位置的情况下,将自有位置调整为自有位置的数字加1;以及触发在自有位置等于当前自有位置的结束步位置的情况下,将自有位置调整为当前自有位置的初始步位置。
[0176] 可见,在部分场景下,根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置的方案中,仅需要当前目标位置就可以对自有位置进行更新,在部分场景下,需要当前目标位置和位置调整方向对自有位置进行更新,可以理解,基于场景的不同,根据位置调整方向或当前目标位置对自有位置进行更新包括根据当前目标位置对自有位置进行更新,以及根据位置调整方向和当前目标位置对自有位置进行更新两种方案。
[0177] 在本实施例中,根据输出参考数据确定输出信号包括以下至少之一:
[0178] 若输出信号包括ABZ型输出信号,对更新后位置的第一位取反,得到A相输出结果,以及用于对更新后位置的第一位和更新后位置的第零位进行异或运算,得到B相输出结果,当自有步数大于或等于预设Z相起始步数,且自有步数小于或等于预设Z相终止步数,控制Z相输出结果为高电平,以及当自有步数小于预设Z相起始步数,或者自有步数大于预设Z相终止步数,控制Z相输出结果为低电平;
[0179] 若输出信号包括高速计数单脉冲型信号,若位置调整方向为正转,根据更新后位置的第一位确定A相输出结果,若位置调整方向为反转或不变,对更新后位置的第一位和更新后位置的第零位进行异或运算,得到A相输出结果,若位置调整方向为正转时,B相输出只在自有位置第一位和自有位置第零位等于预设的正向切换点时将最新的位置调整方向更新为B相最新值,若位置调整方向为反转或不变时,B相输出只在自有位置第一位和自有位置第零位等于预设的反向切换点时将最新的位置调整方向更新为B相最新值;
[0180] 若输出信号包括高速计数双脉冲型输出信号,若位置调整方向为正转,根据更新后位置的第一位确定A相输出结果,若位置调整方向为反转或不变,A相输出低电平,若位置调整方向为正转,B相输出低电平,若位置调整方向为反转或不变,对更新后位置的第一位和更新后位置的第零位进行异或运算,得到B相输出结果。
[0181] 关于编码方法的具体限定可以参见上文中对于编码器的限定,在此不再赘述。在本实施例中,该编码器实质上是设置了多个模块用以执行上述任一实施例中的编码方法,具体功能和技术效果参照上述实施例即可,此处不再赘述。
[0182] 在一个实施例中,提供了一种电子设备,该电子设备可以是服务端,其内部结构图可以如图7所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性和/或易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的客户端通过网络连接通信。该计算机程序被处理器执行时以实现一种编码方法服务端侧的功能或步骤。
[0183] 在一个实施例中,提供了一种电子设备,该电子设备可以是客户端,其内部结构图可以如图8所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部服务器通过网络连接通信。该计算机程序被处理器执行时以实现一种编码方法客户端侧的功能或步骤。
[0184] 在一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
[0185] 获取编码器的输入位置、当前目标位置和自有位置;
[0186] 将输入位置与预设线数调制倍数以及输入位置最大线数相乘,得到增量调制位置;
[0187] 维持当前目标位置不变,或将增量调制位置更新为当前目标位置;
[0188] 根据当前目标位置的当前目标步数与自有位置的自有步数确定步数差距,基于步数差距和预设差值换向值确定位置调整方向;
[0189] 根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置;
[0190] 根据输出参考数据确定输出信号,输出参考数据包括更新后位置的第一位、更新后位置的第零位以及以下至少之一:更新后位置的全部位数和计数输出参数,计数输出参数包括上一周期的B相输出值和位置调整方向。
[0191] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
[0192] 获取编码器的输入位置、当前目标位置和自有位置;
[0193] 将输入位置与预设线数调制倍数以及输入位置最大线数相乘,得到增量调制位置;
[0194] 维持当前目标位置不变,或将增量调制位置更新为当前目标位置;
[0195] 根据当前目标位置的当前目标步数与自有位置的自有步数确定步数差距,基于步数差距和预设差值换向值确定位置调整方向;
[0196] 根据位置调整方向或当前目标位置对自有位置进行更新,得到更新后位置;
[0197] 根据输出参考数据确定输出信号,输出参考数据包括更新后位置的第一位、更新后位置的第零位以及以下至少之一:更新后位置的全部位数和计数输出参数,计数输出参数包括上一周期的B相输出值和位置调整方向。
[0198] 需要说明的是,上述关于计算机可读存储介质或电子设备所能实现的功能或步骤,可对应参阅前述方法实施例中,服务端侧以及客户端侧的相关描述,为避免重复,这里不再一一描述。
[0199] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其他介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM),以及存储器总线动态RAM(RDRAM)等。
[0200] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置、系统、控制器的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0201] 以上提供的实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

当前第1页 第1页 第2页 第3页
相关技术
编码方法相关技术
编码器编码相关技术
苏阳平发明人的其他相关专利技术