您好,欢迎来到维库电子市场网 登录 | 免费注册

小数分频器
阅读:5642时间:2017-10-20 09:51:22

    分频器是数字系统设计中最常见的电路之一 ,在数字系统设计中 , 经常需要对时钟进行小数倍分频 。
    分频器是一种应用十分广泛的电路 ,其功能是对较高频率的信号分频, 以得到所需要的低频信号 。实际应用中,所需要的分频系数可能为整数或小数 。整数分频的实现比较简单, 可采用计数器芯片或用可编程逻辑器件设计。
    现代电子系统设计中 ,数字电子系统所占的比例越来越大 ,现代电子系统发展的趋势是数字化和集成化 。而在数字系统中 ,时钟是各模块协同工作的根本保障 ,特别是时序数字系统 ,没有时钟根本无从工作 。在数字系统设计中 ,经常需要对基准时钟进行不同倍数的分频而得到各模块所需的时钟频率 ,分频器是数字系统设计中最常见的基本电路之一 。数字分频器一般有两类 : 一类是脉冲波形均匀分布的分频器 , 即常规分频器 ; 另一类是脉冲波形不均匀分布的分频器 。常规分频器一般只能进行整数倍分频 ,且分频倍数须为偶数 。但在某些场合 ,时钟源与所需的频率不成偶数倍数关系 ,此时就需要波形不均匀的分频器 , 这种分频器除可进行整数倍分频外 ,还能进行小数倍分频 ,从而可以得到相对连续的频率输出 ,可应用于很多数字系统中 ,如直接数字频率合成中输出波形的频率控制以及步进电机中转速的控制等。

小数分频的基本原理

    小数分频器的实现方法很多,但其基本原理一样,即在若干个分频周期中采取某种方法使某几个周期多计或少计1个数,即吞脉冲或插入脉冲的方法,从而在平均意义上获得1个小数分频比,设要进行分频比为N的小数分频,N可表示为N=K+10-nX式中,n,K,X均为正整数;n为到X的位数,即N有n位小数。
    另一方面,分频比又可以写成:N=M/P式中:M为分频器输入脉冲数;P为输出脉冲数。M=NP=(K+10-nX)P令P=10n,则有M=10nK+X以上是小数分频器的一种实现方法,即在进行10nK次分频时,设法多输入X个脉冲。

电路组成及工作原理

    整个电路由整数/半整数分频器、计数(10分频)器和译码器、D触发器、输出选择器等组成。分频器完成对输入信号的整数或半整数分频功能,计数和译码部分完成输入脉冲的计数和控制信号产生功能,触发器产生控制所需要的信号。n=5,即实现小数点后5位分频。原理图和程序的对应关系为:5个预置数(E、F、G)从左到右依次记为pdata0、pdata1、pdata2、pdata3、pdata4,输出数据选择器的选择端记为equal05,分频系数的整数部分记为datain。
    该电路是在单片机或CPLD的其它模块配合下工作的,当需要实现某个系数的分频时,单片机等控制电路向该模块设置参数,包括分频系数的整数部分、预置数、hight05、和equal05。当分频系数N=0.5时,equal05=1,整数分频系数为N。当分频系数N≠0.5时,如果小数部分小于0.5,如分频系数为N=0.23456,则控制方法为equal05=0、high05=0、datain=N、pdata0、pdata1、pdata2、pdata3、pdata4分别为2、3、4、5、6;小数部分大于0.5时,则用1减去小数部分后的差值作为预置数,如分频系数为N=0.76567,则控制方法为equal05=0、high05=1、datain=N、pdata0、pdata1、pdata2、pdata3、pdata4分别为2、3、4、3、3,即pdata0、pdata1、pdata2、pdata3、pdata4=1-0.76567=0.23433。
    计数器(10分频)和译码器就是确定输入多少个脉冲,在整数/半整数分频器的输出中增加或去除半个脉冲。该电路小数的位数可以根据需要任意设置,主要取决于CPLD的硬件资源情况。

VHDL语言的实现

    22源程序包括顶层模块和底层模块,顶层模块主要是通过元件语句将各模块进行连接, 而各底层模块则完成相应的功能。底层模块主要有整数/半整数分频器 、计数和译码器、D 触发器等。下面仅介绍顶层模块和分频 、译码模块的源程序 ,程序中的库调用、元件声明和信号定义等由于篇幅均已删除? 。
    (1) 顶层模块
    顶层模块包括底层模块之间的连接和输出信号的选择 2 部分 ,模块连接用元件语句,输出的选择直接用进程描述 。由于某些模块的连接是类同的, 为节省篇幅而又不失其总体框架, 已将类同部分删除? 。
    ENTITY nbit pset pdivfre2 IS
    GENERIC( leng : INTEGER: =7);
    PORT( inclk ,EN ,reset : IN STD LOGIC ;
    high05 ,equal05 : IN STD LOGIC ;
    pdata0 , pdata1 , pdata2 , pdata3 , pdata4 : IN STD
    LOGIC VECTOR( 2 DOWNTO 0
    data in : IN STD LOGIC VECTOR( leng -1 DOWNTO0);
    outclk , test1 , test2 : OUT STD LOGIC—);
    END nbit pset pdivfre2 ;
    ARCHITECTURE nppdf2 OF nbit pset pdivfre2 ISBEGIN
    outclk <= outclk tmp ;
    modecontmp<= high05 XOR ( requst0 OR requst1 OR requst2 OR requst3 OR requst4);
    ff0d <= requst0 ;ff1 d <=( NOT requst0) AND requst1 ;
    ff2d <=( NOT requst0) AND ( NOT requst1) ANDrequst2 ;
    ff3d <=( NOT requst0) AND ( NOT requst1) AND( NOT requst2) AND requst3 ;
    ff4d <=( NOT requst0) AND ( NOT requst1) AND( NOT requst2) AND ( NOT requst3) AND requst4 ;
    U0 : nbit psetp divfre —整数/半整数分频PORTMAP( inclk =>inclk , EN =>EN , reset =>reset , mode con =>mode con tmp , data in =>data in ,outclk21 = >clk21 tmp , outclkn = >clkn tmp ,clkb =>clkb tmp);
    PROCESS ( equal05 , data in , pdata0 , pdata1 , pdata2 , pdata3 , pdata4)—输出信号的选择BEGINIF ( equal05 =' 0' ) THEN outclk tmp <=clkn tmp ;
    ELSIF ( equal05 = ' 1' ) THEN outclk tmp<=clk21 tmp ;
    ELSIF( data in =1 AND pdata0 =0 AND pdata1 =0 AND pdata2 =0 AND pdata3 =0 AND pdata4 =0) THENoutclk tmp <= inclk ;
    END IF ;
    END PROCESS ;
    U1 : difre dec —计数译码部分的元件连接PORTMAP( EN =>EN , reset =>reset , difre in
    =>clkb tmp , clr requst =>clr requst0 , pset data =>pdata0 , requst =>requst0 , cnt co =>cnt0 co);
    ……U5 : difre decPORTMAP( EN =>cnt3 co , reset =>reset , difrein =>clkb tmp , clr requst =>clr requst4 , pset data=>pdata4 , requst =>requst4 , cnt co =>cnt4 co);
    U6 : D ff PORT MAP( D =>ff0 d , reset =>GND ,CLK =>clkb tmp , outq =>ff0 q); —触发器部分的连接……U15 : D ff PORT MAP( D =>ff4 q , reset =>GND ,CLK =>inclk , outq =>clr requst4);
    END nppdf2? ;
    ( 2) 计数译码模块
    该模块对输入脉冲计数, 以决定何时在输出中插入或去除 1 个脉冲(吞脉冲), 所以该模块由计数( 分频)、译码和控制信号产生等 3 部分构成 ,其中译码部分的源程序用流程图表示? :
    BEGIN
    PROCESS( difre in , reset , EN)—10 分频的描述VARIABLE state : INTEGER RANGE 0 TO 1 ;
    BEGINIF reset =' 1' THEN count q <=( OTHERS =>' 0' );
    ELSIF ( difre in' EVENT AND difre in =' 1' ) THENIF EN =' 1' THENIF( count q =9) THENcount q <=”0000” ;
    cnt co <=' 1' ;
    ELSE count q <=count q +' 1' ;
    cnt co <=' 0' ;
    END IF ;
    ELSE cnt co <=' 0' ;
    count q <=count q ;
    END IF ;
    END IF ;
    END PROCESS ;
    —译码进程( 见右侧流程图)PROCESS ( dec out ,clr requst)
    —控制信号( requst) 的产生
    BEGIN
    IF( clr requst =' 1' ) THEN requst <=' 0' ;
    ELSIF( dec out' EVENT AND dec out =' 1' ) THENrequst <=' 1' ;
    END IF ;
    END PROCESS ;
    END dd? ;
    ( 3) N 位整数/半整数分频模块该模块根据单片机或 CPLD 等设置的参数不同,可以选择整数分频输出或半整数分频输出 ,取决于分频系数? 。
    BEGIN
    clk <=inclk XOR divide2 ;
    coutclk <=outclk tmp ;
    PROCESS ( clk , EN)BEGIN
    IF ( CLK' EVENT AND CLK =' 1' ) THEN
    IF ( EN =' 1' ) THEN
    IF ( cnt q =0) THEN
    FOR i IN 0 TO leng -1 LOOP
    cnt q( i)<=data in( i);
    END LOOP ;
    outclk tmp <=' 1' ;
    ELSE
    cnt q <=cnt q -1 ;
    outclk tmp <=' 0' ;
    END IF ;
    END IF ;
    END IF ;
    END PROCESS ;
    PROCESS ( outclk tmp)
    BEGIN
    IF ( outclk tmp' EVENT AND outclk tmp =' 1' ) THEN divide2 <=NOT divide2 ;
    END IF ;
    END PROCESS ;
    END nppdf ;

几种设计方法

    小数分频器的实现方法很多,但其基本原理一样:在若干个分频周期中采取某种方法使某几个周期少计一个或几个数,即吞脉冲原理,从而在整个计数周期的总体平均意义上获得一个小数分频比。以下简要说明三种比较常用的小数分频电路的原理及设计方法:
    用BCD比例乘法器4527加法级联能对基频进行10n/X倍分频,其中,n为4527的级联级数,X为对4527的置数;积分分频器是比较常见的小数分频器,其基本原理是将小数分频比转换为整数比值,再采用计数器对输入时钟进行计数,根据计数值吞掉一些脉冲,从而得到所需的频率输出;累加器分频则是一种基于相位累加器基本原理的一种分频技术,将累加器位作为分频输出,根据送入累加器中不同的累加步长改变分频倍数。
    1、采用BCD乘法器4527实现
    BCD比例乘法器4527接成加法级联方式,CLK端输入基准时钟频率fin由晶振电路提供,高位置数K1,低位置数K2,在10个CLK脉冲内4527(1)输出K1个脉冲,同时由INHOUT禁止低位4527(2)对CLK进行比例分配,K1个脉冲直通4527(2)送出。10个CLK脉冲结束时,INHOUT发出脉冲允许4527(2)的CLK进入,则可有一个脉冲插入。如此下去,在100个CLK脉冲内,会有10×K1个脉冲直通送出,以及10个INHOUT脉冲,这样输出端fout便有K2个脉冲插入,共送出(10K1+K2)个脉冲,即输出时钟频率:fout=(10K1+K2)fin/100(1)
    如同上述,n级4527级联,预置数分别为K1,K2,……,Kn后,设CLK时钟端输入的基准时钟频率为fin,则级联输出频率:fout=fin(10n-1×K1+10n-2×K2+…+10×Kn-1+Kn)/10n其中为n片4527的预置数,改变预置数即可方便地改变输出频率。
    2、积分分频器
    积分分频器的设计首先需将小数分频比转换为整数比值,再采用计数器对输入时钟进行计数,根据计数值对输入时钟及插入脉冲进行选择分配,从而得到需要的频率输出脉冲。设“1010101010”代表5kHz信号中的一段信号,在同样长的时间内设法得到另一脉冲串“1010100000”信号,若其‘0’、‘1’宽度与5kHz信号中的‘0’、‘1’宽度相同,即为输入时钟的宽度,则可得到3kHz的时钟信号。这样,多路选择器可在前三个周期选择输入时钟直接输出,而在后两个周期选择输出‘0’,就可以得到脉冲串“1010100000”,从而完成3/5倍的分频,得到3kHz的信号。
    3、累加器分频
    在DDS技术中经常采用相位累加器来进行频率控制,对于频率不变的输入基准时钟,可采用对相位累加器置不同的累加步长来得到不同的寻址速率。从中得到启示,也可采用累加器进行小数分频。累加器由加法器与并行数据寄存器组成,频率控制字经数据转换模块转换为累加器的累加步长,将并行数据寄存器的高位作为时钟输出。
    设输入时钟为频率fin,相位累加器的位数为N,则输出频率的分辨率(当送入的频率控制字K为1时的输出频率)为foutmin=fin2N(3)从式(3)可看出,在累加器位数足够高时,最小输出频率(频率分辨率)可接近零频。实际设计过程中,可根据分频倍数的要求来选择累加器的位数。
    若设频率控制字为K,则输出频率为fout=Kfin2N(4)以上三种小数分频器各有其特点,采用4527的分频电路比较复杂,适用于频率为10的幂的输入;积分分频器首先需把分频倍数转换为两整数之比值,故在使用中,对分频倍数要求比较严格,灵活性受到一定限制;累加器分频则对频率为2的幂的输入时钟分频效果比较好,而且输出时钟有一定的抖动,但还是可以应用于一些特殊场合。

应用

    小数分频器在数字系统设计中的应用非常广泛,经常是各个模块需要的频率不相同,这就需要对时钟进行分频得到各模块需要的时钟频率。但常规的整数分频器(实际就是计数器)不能满足要求,例如,若基准时钟频率为100MHz,对其进行整数分频,只能得到50MHz、25MHz等频率值,如想得到30MHz、20MHz等频率值,就需要应用小数分频器对基准时钟进行小数分频。
    在DDS波形发生器设计和步进电机驱动中,需要对输出信号频率进行控制,若采用一般计数器来进行分频,由上述分析可知,输出信号频率值的连续性就受到限制。为了使输出信号频率值能连续可控,就需进行小数分频。
    1在DDS技术中的应用
    频率控制字送入分频器,设基频频率为fin,分频倍数为W,则计数器的时钟频率为为fin/W。计数器在频率fin/W的时钟作用下计数对查找表寻址输出波形数据。若查找表存储深度为M(一个周波存储M个点),则输出波形的频率为fo=finWM(5)式中,fin为基频频率、存储深度M为一定值,这样就只需控制分频倍数K来控制合成波形的频率。
    在DDS技术中,常用的技术是采用累加器对查找表寻址。但采用这种方法时,在输出高频与低频波形时的寻址点数不同,在高频寻址点数较少,而在低频时点数较多,为保证在频率较高时输出的波形失真度小,在低频阶段,寻址的点数就比较多,需要较深的存储深度。而采用图4所示的方法,则不管在低频或高频,寻址点数一样,这样就可以采用一致的存储深度,节约存储器。特别是采用CPLD进行系统设计时,查找表也可采用CPLD来设计,易于系统集成。
    2在步进电机驱动中的应用
    步进电机是一种用电脉冲信号进行控制,将电脉冲信号转换为相应的角位移或线位移的控制电机。在步进电机的驱动中,需要对步进电机转速进行控制。基准时钟在频率控制字作用下分频得到所需频率的脉冲作为脉冲分配器的时钟,这样即可控制脉冲分配器输出驱动脉冲的速率,经功率放大后驱动步进电机。
    此外,步进电动机的起动频率(突跳频率)一般为几百Hz到三、四千Hz,而运行频率则可以达到几万Hz。以超过起动频率的频率直接起动,将出现“失步”(失去同步)现象,有时根本就转不起来。而如果先以低于起动频率的某一频率起动,再逐步提高频率,使电机逐步加速,则可以到达运行频率。而且,对于正在快速旋转的步进电动机,若需停转,立即停发脉冲,令其立即准确锁定,也是很难实现的;由于惯性,电动机往往会冲过头,也会出现失步。如果电动机的工作频率总是低于起动频率,当然不会失步,但电动机的潜力没有发挥,工作速度太低了。

维库电子通,电子知识,一查百通!

已收录词条44954