如何用分频计数器的分频比将脉冲周期1改为0.5S

整数奇偶分频(占空比50%)
整数奇偶分频(占空比50%)
一、名词解释
&&&&1.分频:是指将一单一频率信号的频率降低为原来的1/N,就叫N分频。实现分频的电路或装置称为”分频器“。关于分频还有另外一种解释:对信号中不同频率成分的各种信号分开,分成几个频率段。本次介绍的分频是指前一种。
&&&&2.占空比:如下图1所示,在一串理想的脉冲周期序列中(如方波),正脉冲的持续时间与脉冲总周期的比值。
图1.占空比示意图
二、设计方案
&&&&总的来说就是用计数器实现信号的分频。
1.偶数分频(2N)
&&&&a.一个模为2N的计数器,其计数范围为0~2N-1;
&&&&b.一个信号发生模块,当检测到计数器的值小于N时,输出信号为高电平,其余情况信号输出为低电平;
&&&&如此便可以实现2N分频。
&&&&注:在偶数分频中,还有一种比较特殊的分频——2^N分频,实现这个分频效果只需要一个相应的N位的计数器,将其最高位作为输出即可。
2.计数分频(2N+1)
&&&&a.两个模为2N+1的计数器,其计数范围为0~2N,一个为时钟上升沿触发,另一个为时钟下降沿触发;
&&&&b.两个信号发生模块,这两个模块对应相应的计数器模块,由于信号发生模块控制信号输出的方式都是相同的,所以这里只介绍一个,另一个与其相同。当信号发生模块测到计数器的值小于N时,信号输出为高电平,其余输出都是低电平;
&&&&由于有两个模相同的计数器,其区别只是在于触发方式不同,所以两个计数器输出的信号相位相差0.5个周期,且占空比都为N/(2N+1),将这两个信号相或,即可得到占空比为50%的2N+1分频信号。
三、设计代码
1.偶数分频
wire rst_n,
wire clk_fp_even,
wire clk_fp_2_even,
wire clk_fp_4_even,
wire clk_fp_8_even
[2:0] counter_fp_2_ // 2's power counter
module 1: 2's power fp
@ (posedge clk) begin
if(!rst_n)
counter_fp_2_power
counter_fp_2_power
&= counter_fp_2_power + 1'b1;
2's power fp out
clk_fp_2_even = counter_fp_2_power[0];
clk_fp_4_even = counter_fp_2_power[1];
clk_fp_8_even = counter_fp_2_power[2];
///////////////////////////////////////////////////////////////////////////////
FP_EVEN_NUM = 3'b110; // 6 fp
[2:0] // fp counter
clk_fp_even_q;
module 1: fp counter
@ (posedge clk) begin
if(!rst_n)
if(cnt & FP_EVEN_NUM - 1'b1)
&= cnt + 1'b1;
module 2: fp
@ (posedge clk) begin
if(!rst_n)
clk_fp_even_q
if(cnt & (FP_EVEN_NUM && 1)) // FP_EVEN_NUM / 2 - 1, but '-'
is higher priority
clk_fp_even_q
if(cnt == (FP_EVEN_NUM - 1))
clk_fp_even_q
clk_fp_even = clk_fp_even_q;
2.偶数分频testbench
"fp_even.v"
clk, rst_n;
clk_fp_2_even, clk_fp_4_even, clk_fp_8_
fp_even fp_unit
.clk(clk),
.rst_n(rst_n),
.clk_fp_even(clk_fp_even),
.clk_fp_2_even(clk_fp_2_even),
.clk_fp_4_even(clk_fp_4_even),
.clk_fp_8_even(clk_fp_8_even)
#2 clk = ~
$dumpfile("fp_even_tb.vcd");
3.奇数分频
wire rst_n,
wire clk_fp_odd
FP_ODD_NUM = 2'b11; // 3 fp
[1:0] cnt_p, cnt_n; // fp counter(posedge & negedge)
clk_fp_odd_p_q, clk_fp_odd_n_q;
module 1: fp posedge counter
@ (posedge clk) begin
if(!rst_n)
if(cnt_p == FP_ODD_NUM - 1)
&= cnt_p + 1'b1;
module 2: odd fp posedge sign
@ (posedge clk) begin
if(!rst_n)
clk_fp_odd_p_q
if(cnt_p & (FP_ODD_NUM - 1) && 1)
clk_fp_odd_p_q
clk_fp_odd_p_q
module 3: fp negedge counter
@ (negedge clk) begin
if(!rst_n)
if(cnt_n == FP_ODD_NUM - 1)
&= cnt_n + 1'b1;
module 4: odd fp negedge sign
@ (negedge clk) begin
if(!rst_n)
clk_fp_odd_n_q
if(cnt_n & (FP_ODD_NUM - 1) && 1)
clk_fp_odd_n_q
clk_fp_odd_n_q
clk_fp_odd = clk_fp_odd_p_q | clk_fp_odd_n_q;
4.计数分频testbench
"fp_odd.v"
clk, rst_n;
fp_odd_unit
.clk(clk),
.rst_n(rst_n),
.clk_fp_odd(clk_fp_odd)
#2 clk = ~
$dumpfile("fp_odd_tb.vcd");
四、测试波形及解释
&&&&注:verilog使用iverilog进行,波形图查看使用gtkwave。
图2.偶数分频测试波形
图3.奇数分频测试波形
&&&&从测试波形可以看到,两个Verilog
HDL描述电路分别实现了时钟的偶数分频和奇数分频,并且占空比都为50%。
五、Quartus
II 13.0下的RTL视图
1.偶数分频的RTL视图
图4.偶数分频的RTL视图
2.奇数分频的RTL视图
图5.奇数分频的RTL视图
&&&&本次设计虽然简单,但是还是废了一些事情,都是一些细节,例如减号运算的优先级高于移位运算;vcd文件的输出不是用iverilog编译后就可以产生,而是要运行一下编译生成的默认a.out文件才可以生成vcd文件,从而用于gtkwave仿真。
&&&&本次设计的不足之处在于只实现了整数分频,而未实现小数分频,虽然这个用的不多。设计之中只是使用了计数器的思路,其实还有其他的实现方法,以后再写吧。
&&&&以前一直用ISE,现在一用Quartus
II,感觉真的不错,就拿RTL图来说,ISE中看不懂,Quautus
II就能看清楚了。不过这个开源的iverilog+gtkwave也是不错的,在Linux下5分钟下载好就能使用了,非常方便,当然我也只是用到了其一部分功能,还需继续努力。
关注微信公众号微机原理复习-8254
8254计数初值计算公式:N = f(clk) / & f(out)
8254工作方式
方式0--计数结束输出正跃变信号
(1).计数过程中OUT为低,计数值减为9时,OUT变为高
(2).改变初值,则在写入新的计数初值后,计数器将以新的值为计数初值
(3).GATE = 1,允许计数;GATE = 0,暂停计数
方式1--单脉冲发生器
(1).GATE上升沿启动,计数期间OUT维持低电平,所以负脉冲宽度 = 计数初值XCLK脉冲周期
(2).改变初值只有当GATE再次出现0-&1跃变后,计数器才能按新初值减1计数
计数过程中GATE有正脉冲,计数初值重新装载,计数重新开始
方式2--分频器(OUT端对GATE端信号N分频;具备初值自动重装)
(1).只在GATE为高时,计数器计数计数值为1时,OUT输出宽度为CLK周期的低电平信号之后初值重装,计数重新开始
(2).计数过程中GATE变低,则计数暂停,GATE的上升沿会导致计数器重新开始
(3).GATE为高电平时,写入新的计数初值,不会影响正在进行的计数,只有计数器见减到1后初值才能重装
方式3--方波发生器(具备初值自动重装)
每来一个CLK脉冲,计数值减2
(1).初值为偶数:当计数值为0时,OUT端反转,输出为1:1方波,正负脉冲宽度为N/2个CLK周期
(2).初值为奇数:实际装入初值为写入初值减一。输出正脉冲期间,当计数值减到-2时,OUT端变低,初值重装;输出负脉冲期间,当计数器减到0时,OUT端变高,初值重装
方式4--软件触发的单脉冲发生器
(1).只有当计数值减到0时,OUT才为低,负脉冲宽度为CLK周期
(2).GATE = 1,允许计数;GATE = 0,停止计数
(3).在计数过程中,如果改变计数值,则按新的计数值重新开始计数
方式5--硬件触发的单脉冲发生器
(1). 与方式1相似,区别在于:方式5输出的负脉中宽度为一个 CLK周期,而方式1的负脉冲宽度为N 倍的CLK周期
8254控制字
方式控制字
&D7D6:计数器选择:D7D6 = 00,选择0号计数器;
& & & D7D6 =
01,选择1号计数器;
& &&D7D6 =
10,选择2号计数器;
&11,读出控制字的标志。
&D5D4:读/写方式选择:D5D4 = 00,锁存计数器当前值;D5D4 =
01,写入时,只写低8位计数初值,高8位置0,读出时,只读低8位的当前计数值;D5D4 = 10,与
& & & 前相反;D5D4 =
11,先读/写低8位计数值,后读/写高8位。
&D3D2D1:000--计数器工作在方式0
&001--计数器工作在方式1
&X10--计数器工作在方式2
&X11--计数器工作在方式3
&100--计数器工作在方式4
&101--计数器工作在方式5
& &(4) D0:数值选择--D0 =
0,计数初值被认为是二进制数
& & & D0 =
1,计数初值被认为是十进制数
读出控制字
D7D6 = 11(必须为11) D0 = 0.
D5 = 0:锁存计数值,以便CPU读取
D4 = 0:将状态信息锁存入状态寄存器
D3~D1:计数器选择
8254状态字
D7 = 1:表示OUT引脚为高电平
(OUTPUT)D7 = 0:表示OUT引脚为低电平
(NULL COUT)D6 = 0,:表示计数初值已装入
eg1.系统使用外扩一片可编程定时器/计数器8254,输入时钟是1MHz。8254的初始化程序如下:
MOV DX,203H
MOV AL,1000H
MOV DX,201H
由上述程序可知,设计时使用了8254的(1)号计数器,其口地址为(201)H,工作在方式(2),使用(十)进制计数,输出信号的频率为(1000)Hz。
8254在PC/AT中的使用
计数器0用于定时(55ms)中断
MOV AL,B;方式3,二进制计数
OUT 43H,AL;
MOV AL,0 &;初值为0000H
OUT 40H,AL
OUT 40H,AL
计数器1用于动态存储器刷新定时(每隔15us提出一次请求)
MOV AL,B;方式2,只写低8位,二进制计数
OUT 43H,AL
MOV AL,12H;初值为18
OUT 41H,AL
计数器2用于产生约900Hz方波送至扬声器
MOV AL,B;方式3,二进制计数
OUT 43H,AL
MOV AX,0533H;初值为533H
OUT 42H,AL
OUT 42H,AL
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。在三菱plc中怎么实现半分频,也就是输出8013输出0.5s周期的_百度知道
在三菱plc中怎么实现半分频,也就是输出8013输出0.5s周期的
求具体梯形图,只用开关实现,尽量不用功能指令的。可以用上升沿。
我有更好的答案
LD M8013ALTP M0
你都知道可以用上升沿了!用计数器记两次复位输出不就是半分频了
我试了,不好写出来,用M8012来写吧
常开点SM0.5然后加个正跳转P不可以吗?
同求大神指导
其他2条回答
为您推荐:
其他类似问题
三菱plc的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。如何用计数器实现任意分频_百度知道
如何用计数器实现任意分频
我有更好的答案
偶数分频(2N)偶数分频最为简单,很容易用模为N的计数器实现50%占空比的时钟信号,即每次计数满N(计到N-1)时输出时钟信号翻转。奇数分频(2N+1)使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为 X/(2N+1))。得到占空比为50%的奇数分频器的基本思想是:将得到的上升沿触发计数的奇数分频输出信号CLK1,和得到的下降沿触发计数的相同(时钟翻转值相同)奇数分频输出信号CLK2,最后将CLK1和CLK2相或之后输出,就可以得到占空比为50%的奇数分频器。
电子产品技术支持
如果是6分频,就取计数6个脉冲后计数器的输出(八位二进制计数器为,二位BCD码计数器为)为4-16译码器(如MC14514)的输入,取4-16译码器的S6脚作为输出,就是6分频器,10分频器依此类推,取计数10个脉冲后计数器的输出(八位二进制计数器为,二位BCD码计数器为)为4-16译码器的输入,取4-16译码器的S10脚作为输出,30分频器则需用两个4-16译码器共同组成5-32位译码器,其他参照6分频器和10分频器。
本回答被提问者和网友采纳
74LS93是什么器件?
为您推荐:
其他类似问题
分频的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。欧姆龙PLC常用基本应用程序举例
查看: 13410|
摘要: 前面介绍了欧姆龙公司C系列P型机PLC基本指令和功能指令,这些基本指令和功能指令的功能在其它PLC中也都基本具备,只是在各种继电器的数量、地址分配、图形符号、指令格式及通道分配等方面的表达方式上有所不同。只要 ...
&&&&前面介绍了欧姆龙公司C系列P型机基本指令和功能指令,这些基本指令和功能指令的功能在其它PLC中也都基本具备,只是在各种的数量、地址分配、图形符号、指令格式及通道分配等方面的表达方式上有所不同。只要熟练地掌握了一种PLC的编程指令,结合新接触的其他手册,了解各种功能的指令表达方式,就能很快地掌握新机型的使用和编程。
&&&&一、定时器的应用
&&&&1、通电延时
&&&&所谓通电延时,是指满足定时条件时,定时器的设定值作为初值赋给该定时器的当前值寄存器,并开始作减运算,直到当前值减到零时,定时器才动作,使其动合触点闭合,动断触点断开。当定时器的输入断开时,定时器立即复位,即把当前值恢复到设定值,使其动合触点断开,动断触点闭合。上一节中的图6-6即是此种情况。
&&&&2、失电延时
&&&&失电延时是指从某个输入条件断开时开始延时,见图1。
图1 失电延时电路
&&&&当0002为ON时,其动合触点闭合,输出继电器0500接通并自锁。当0002变为OFF后,且断开时间达到10s时,0500才由ON变OFF,实现了失电延时。
&&&&3、双延时
&&&&所谓双延时定时器,是指通电和失电均延时的定时器。用两个定时器完成双延时控制,如图2所示。
&&&&当输入0002为ON时,TIM00开始定时,5 s后接通0500并自锁。当0002由ON变OFF时,TIM01开始定时,10 s后,TIM01动断触点断开0500,实现了输出继电器0500在输入0002通电和失电时均产生延时控制的效果。
图2 双延时电路
&&&&4、闪光控制
&&&&闪光控制是广泛应用的一种实用控制程序,它既可以控制灯光的闪烁频率,又可以控制灯光的通断时间比。当然也可控制其它负载,如电铃、蜂鸣器等。实现闪光控制的方法很多,常用的方法是用两个定时器或两个计数器来实现。  图3所示是用两个定时器编写闪光电路的梯形图程序。
图3 通断比不一定相同的闪光电路
&&&&在途6-60中,当0002为ON时,内部辅助继电器1000线圈接通并自锁,1000的动合触点使0500为ON(灯亮)。2 s后,定时器TIM00动作,其动断触点断开0500(灯灭),其动合触点闭合使TM01开始定时。又经过1 s后,TIM01的动断触点断开时TIM00复位,TIM00的动断触点接通0500,TIM00的动合触点断开使TIM01复位,TIM01的动断触点闭合又使TIM00开始定时。(http://www.diangon.com/版权所有)这样,输出0500所接的负载灯,以接通2 s、断开1 s的频率不停的闪烁,直到0003变ON为止。若要想改变闪光电路的频率,只需要改变两个定时器的时间常数即可。
&&&&在闪光控制中,如果通断比相同时,可用一个定时器和一个内部辅助继电器实现闪光控制,见图4(a)。如0002为ON,启动定时器TIM01,1 s后TIM01的动合触点闭合,1001的线圈为ON。到下一个扫描周期,TIM01的动断触点断开,使TIM00复位。待扫描到1001的动合触点及TIM01的动断触点时,由于它们均闭合,使1001的线圈继续为ON。再到下一个扫描周期,由于TIM01的动断触点为闭合状态,又重新启动定时器TIM01,1 s后TIM01的动断触点断开,使1001的线圈为OFF,再经过一个扫描周期使TIM01复位,又回到了初始状态。如果0002仍为ON,则开始下一个闪光控制工作周期。
&&&&另外,借助专用内部辅助继电器和1902来控制输出继电器,也可实现特定频率的闪光控制,如图4(b)所示。
图4 通断比相同的闪光电路
&&&&5、长延时控制
&&&&PLC定时器的定时范围是一定的,如C系列PLC的单个TIM定时器的定时范围是0~999.9 s。当需要设定的定时值超过此值时,可通过几个定时器的串级组合或定时器与计数器的串级组合来扩大定时器的设定范围。
&&&&1)定时器的串级组合
  图5所示是由两个定时器TIM00和TIM01组成的延时时间为1500 s的延时电路。当0002为ON时,定时器TIM00开始计时,900 s后TIM00的动合触点闭合,定时器TIM01开始计时,又经过600 s,接通输出继电器0500。因此,两个定时器的延时范围为T=T1+T2=900+600=1500s。n个定时器串级组合的延时时间为T=T1+T2+…+Tn。
图5 两个定时器的串级组合
&&&&2)定时器与计数器的串级组合
  图6所示是由定时器TIM00和计数器CNT01组成的延时范围为7200 s的延时电路。TIM00是设定值为800 s的具有自复位功能的定时器。当0002为ON时,TIM00开始计时,800s时,TIM00动合触点闭合,CNT01计数一次,下一次扫描时,TIM00的动断触点断开TIM00的线圈,待下一次扫描时,TIM00的动断触点又闭合,TIM00的线圈重新接通。这样作为计数器CNT01计数脉冲输入的TIM00动合触点,每800 s接通一次,每次接通时间为一个扫描周期。TIM00动作9次,即800×9=7200 s后,计数器CNT01动作,其动合触点闭合使0500得电。因此,用一个定时器和一个计数器串级组合可实现的延时时间为定时器和计数器设定值的乘积。图中1815是为了实现开机时对计数器复位。
图6 定时器和计数器的串级组合
&&&&二、计数器的扩展
&&&&C系列PLC的计数器的计数范围是,如果需要的计数值超过此数值时,可将两个或多个计数器进行串级组合。
  图7所示为两个计数器的串级组合,CNT00每计数900次后,CNT11计数1次,CNT11计数800次后其动合触点闭合使0500得电,此时总的计数值为900×800=720 000 次。因此,n个计数器的串级组合可实现的计数值为各计数器设定值的乘积。图中CNT00的复位输入端的CNT00动合触点是为了使CNT00每计数900次动作后及时复位,以便下一次计数。0006用来使CNT01手动复位。
图7 计数器的串级组合
&&&&三、单脉冲发生器
&&&&在实际应用中,我们常用到单个脉冲,用它控制系统的启动、复位、计数器的清零和计数等。在这种情况下,我们就用到了单脉冲发生器。单脉冲往往是在信号变化时产生的,其宽度就是PLC的一个扫描周期。
&&&&在图8中,如0002变为ON,及0500为ON。然而一个扫描周期以后,由于1001的动断触点断开,使1000为OFF,从而使0500断电,只产生一个脉冲,即0002每次由OFF→ON,0500得电一个扫描周期。
&&&&用前沿微分或后沿微分指令也可以构成单脉冲发生器。
图8 单脉冲发生器
&&&&四、单按钮启停控制程序
&&&&通常一个电路的启动和停止控制是由两只控制按钮分别完成的,当一台PLC控制多个这种具有启停操作的电路时,将占用很多输入点,这时就会面临输入点不足的问题,因此用单按钮实现启停控制的意义日益重要。
  图9和图10分别是用计数器和不用计数器实现的单按钮启停控制程序。
  图9所示是用计数器实现的单按钮启停控制,当按一下0002所对应的输入按钮时,由微分指令使1000得电一个扫描周期,使输出0500得电并自锁,同时计数器CNT00计数一次,当第二次按下0002所对应的输入按钮时,1000又得电一个扫描周期,计数器CNT00又计数一次,由于计数器CNT00的计数值达到设定值,计数器CNT00动作,其动合触点使CNT00复位,为下次计数做好准备,其动断触点断开输出0500回路,实现了用一只按钮启停的单数次计数启动、双数次计数停止的控制。
图9 用计数器实现的单按钮启停控制
图10 不用计数器实现的单按钮启停控制
  图10所示是不用计数器就能实现的单按钮启停控制,当按一下0002所对应的输入按钮时,前沿微分指令使1000得电一个扫描周期,在当前扫描周期内,当扫描到第二个梯级的0500的动合触点时,它为OFF状态,因此1001为OFF状态。当扫描到第三个梯级时,0500为ON状态。在程序执行到下一个扫描周期使,尽管第二个梯级的0500的动合触点为ON,但此时1000的动合触点已为OFF状态(它只得电一个扫描周期),所以1001仍为OFF状态,0500继续保持为ON。(http://www.diangon.com/版权所有)当第二次按下0002所对应的输入按钮时,1000又得电一个扫描周期,这时1001才变为ON,其动断触点断开输出0500回路,实现了用单按钮的启停控制。
&&&&五、分频器
&&&&单按钮的启停控制已经包含了分频器的思想。如果我们用有规律的时钟脉冲(如、1902)来代替用于启停控制的单按钮,这就是典型的二分频器。图11所示就是用二分频器实现的ON、OFF时间均为1 s的闪光控制程序,而图1(b)中0500的ON、OFF时间均为0.5s。
图11 用分频器实现的闪光控制
上一篇:下一篇:
看过《欧姆龙PLC常用基本应用程序举例》的人还看了以下文章:
Powered by &
这里是—这里可以学习 —这里是。
栏目导航:

我要回帖

更多关于 multisim分频计数器 的文章

 

随机推荐