搜索
bottom↓
回复: 23

请问如何将一个方波降频 1000 倍但占空比不变

[复制链接]

出0入0汤圆

发表于 2011-8-4 14:52:00 | 显示全部楼层 |阅读模式
下图是一个 500KHZ 的方波,HI 的部分占整个周期的1/4,
请问如何将它降频 1000 倍变成 500HZ,并且占空比不变,
可以用哪一种计数器或正反器来达成?
谢谢。

(原文件名:500KHZ_Square_Wave.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-4 15:45:15 | 显示全部楼层
既然数据这摸清楚,用单片机PWM出一个不就得了。

出0入0汤圆

发表于 2011-8-4 15:56:02 | 显示全部楼层
频率固定的就好办,500KHZ先积分,然后与500HZ的三角波比较,比较输出的就是你所需的信号了

出0入0汤圆

 楼主| 发表于 2011-8-4 15:57:21 | 显示全部楼层
能不能直接降频,这样好麻烦。

出0入0汤圆

发表于 2011-8-4 16:12:32 | 显示全部楼层
很好解决:先把它500分频.然后用二四译码器.四个输出随便选一个.

出0入0汤圆

 楼主| 发表于 2011-8-4 16:37:16 | 显示全部楼层
回复【4樓】dragon_hn  
很好解決:先把它500分頻.然後用二四譯碼器.四個輸出隨便選一個.
-----------------------------------------------------------------------

请问怎麽做?有没有范例?

出0入0汤圆

发表于 2011-8-7 04:52:17 | 显示全部楼层
将Hi与Lo分开除频,然后再合。
例如:500khz载入 2MHZ后(周期1/4),然后在使用逻辑方式除频掉,去除Lo就好了。

出0入0汤圆

发表于 2011-8-7 05:41:07 | 显示全部楼层
低成本的CPLD就好了。 不到5元可以搞定吧。

PWM频率500k,如果分辨率是8bit,数字采样的话频率需要128MHz(哈,你降1000倍频,用 >128kHz采样就可以保证脉冲宽度的分辨率;但是频率的分辨率还是需要较高的采样频率哦)。


如果频率是固定的,那么低成本的单片机就可以搞定了。

出0入0汤圆

发表于 2011-8-7 07:58:03 | 显示全部楼层
用 AVR 可以搞定。


(原文件名:DutyCycle25.png)

注意:

1. 可将 PORT value 存於 R16, R17, 用 OUT 指令, 这样一周期便可更改 PORT Bit.
2. 如使用 CBI 或 SBI 指令, 是占用 2 周期, 上方的等待值需减小1。
3. 以下用Tiny2313试验成功, 楼主可用任何AVR, 只须改变 PORT 及 DDR 便可。

;*******************************************************************
;*******************************************************************
;
; Description
;
; To produce a frequency 1/1000 of the original input,
; with 25% duty cycle
; Author = eblc1388
; Target = Tiny2313 or any AVR
; Date   = 2011-08-7
;
; Code is written for use with AVR assembler
;
; Making use of cycle accurate delay macro by Danni
;
; Program operation verified using AVR simulator on 07-Aug-2011
;
;******************************************************************************

.include "tn2313def.inc"

;************************************************************************/
;*                                                                      */
;*              Delay Macro 8 ... 65543 Cycle                           */
;*                                                                      */
;*              Author: Peter Dannegger                                 */
;*                                                                      */
;************************************************************************/
.macro  mdelay
        ldi     r24, low( @0 - 8 )
        ldi     r25, high( @0 - 8 )
        sbiw    r24, 4
        brcc    pc - 1
        cpi     r24, 0xFD
        brcs    pc + 4
        breq    pc + 3
        cpi     r24, 0xFF
        breq    pc + 1
.endmacro

        .org 0

        ldi r16,0x01            ; port B bit 0 as output
        out DDRB,r16

        clr r17

loop:
        out   PORTB, r16        ; set port in high
        mdelay        249             ; delay 249 cycles

        out PORTB, r17          ; set port pin low
               
        mdelay        747             ; delay 747 cycles

        rjmp        loop


;******************************************************************************
; end of file   
;******************************************************************************

出0入0汤圆

发表于 2011-8-7 08:10:26 | 显示全部楼层
再传一个由 AVRFreak Danni 所写的 Delay Macro, 可 delay 8-65543 cycles.

danni - Dec 01, 2009 - 08:03 AM
Post subject: RE: Re: RE: Re: RE: Precise clock cycle delay with
inline AS In 1997 I started with the AT90S1200 and the AVR assembler
supported no conditional assembling.
Then I wrote this macro for cycle accurate delay:
Code:

;************************************************************************/
;*                                                                      */
;*                      Delay Macro 8 ... 65543 Cycle                   */
;*                                                                      */
;*              Author: Peter Dannegger                                 */
;*                                                                      */
;************************************************************************/
.listmac

;delay 8 ... 65543 cycle

.macro  mdelay
        ldi     r24, low( @0 - 8 )
        ldi     r25, high( @0 - 8 )
        sbiw    r24, 4
        brcc    pc - 1
        cpi     r24, 0xFD
        brcs    pc + 4
        breq    pc + 3
        cpi     r24, 0xFF
        breq    pc + 1
.endmacro

使用例子:
        mdelay  8
        mdelay  9
        mdelay  10
        mdelay  11
        mdelay  12
        mdelay  65543

出0入0汤圆

发表于 2011-8-9 05:39:52 | 显示全部楼层
呵呵,貌似eblc1388误会了。
有点吃果果的味道

出0入0汤圆

发表于 2011-8-9 06:38:03 | 显示全部楼层
"请问如何将一个方波降频 1000 倍但占空比不变"

if your problem requires such a weird solution, your approach to the problem is likely wrong.

出0入0汤圆

发表于 2011-8-9 08:16:48 | 显示全部楼层
回复【10楼】highend  
呵呵,貌似eblc1388误会了。
有点吃果果的味道
-----------------------------------------------------------------------
貌似是您误会了。

我只是根据楼主的要求, 提供其中一种解决办法。我习惯上是尽可能提供除建议外, 验证可行(仿真), 能即用的解决方法。

当然我也非常希望看到别人是如何解决同样问题,但非常多的场合都单单只是一些建议, 而非能立刻应用的解决方法。很多人都知硬件问题多能用 CPLD/FPGA 来解决, 例如楼主【7楼】所言, 亮点是不用5元可以搞定。但对我及其它人说是完全不懂,那该如何造?用什麽元件?

所以我完全不明白您【10楼】所指误会是什麽?请说明。

出0入0汤圆

发表于 2011-8-9 09:11:03 | 显示全部楼层
74LS221/74HC221,全完可以实现

出0入0汤圆

 楼主| 发表于 2011-8-10 15:58:08 | 显示全部楼层
向各位大大报告一下:

我制作了如下一个电路,总共是(÷2)×(÷5)×(÷2)×(÷5)=÷100,
但发现一个致命伤,就是从第一阶÷2开始,就无法反映周期的变动,
这样用除频的方式就不能用了,可能要改成单击电路(Single shot)可能比较有效。

(原文件名:Divide_100.jpg)

出0入0汤圆

 楼主| 发表于 2011-8-11 10:58:16 | 显示全部楼层
回复【13樓】msdy  
74ls221/74hc221,全完可以實現
-----------------------------------------------------------------------
我用74122做了一个单击电路,
但发现他只能延长佔空比(Duty Cycle),频率还是不变,
所以单击方法也行不通。

看来最有弹性的方法还是用单片機,
但是频率那么高,时间那么短,单片機也是力有未逮。
难道真的没有办法除频并且忠实反应 Duty Cycle 的变化吗?
苦惱中。

出0入93汤圆

发表于 2011-8-11 11:31:11 | 显示全部楼层
首先进行500分频,得到占空比1:1的方波。

比如:               1010 1010 1010 1010 1010(500分频了)
然后再分频,得到:   1100 1100 1100 1100 1100(1000分频了)
逻辑与之,得到:     1000 1000 1000 1000 1000

其中500分频使用一个计数器芯片,再分频使用74HC74,或者使用两片74HC393完成。
逻辑与可以直接使用两个二极管,一个电阻就可以了。

出0入0汤圆

 楼主| 发表于 2011-8-11 17:22:55 | 显示全部楼层
大家好:

由于 500KHZ 方波是一个 PWM 调变信号,我改用RC低通滤波后得到右边的直流电压,
假设满刻度是左边的 1/4 占空比,代表 90 度(电压1.5V),所以占空比为 0 时就是 0 度(0V),
如果没有一个满刻度参考源的话,如何由电压换算回角度?谢谢。

(原文件名:Phase_PWM_RC.jpg)

出0入0汤圆

发表于 2011-8-12 09:01:21 | 显示全部楼层
几个疑问:
1)是不是一定要1000分频,1024不行吗?
2)输入与输出频率固定吗?
3)输入PWM的占空比可变吗?若可变,输出的PWM是否也要跟着变?
4)输入与输出的PWM相位有要求吗?
5)最好把应用的地方讲出来,我们可以为你提出更好的实现方案.

出0入0汤圆

发表于 2011-8-12 09:13:30 | 显示全部楼层
用10进制计数器,3片叠加,然后输出再和源信号“与”一下,就行了。

10进制计数器好像叫4010。。。不确定。

出0入0汤圆

发表于 2011-8-12 11:42:02 | 显示全部楼层
回楼上,是4017

出0入0汤圆

 楼主| 发表于 2011-8-12 14:03:11 | 显示全部楼层
回复【18樓】kent  
幾個疑問:
1)是不是一定要1000分頻,1024不行嗎?
2)輸入與輸出頻率固定嗎?
3)輸入pwm的佔空比可變嗎?若可變,輸出的pwm是否也要跟著變?
4)輸入與輸出的pwm相位有要求嗎?
5)最好把應用的地方講出來,我們可以為你提出更好的實現方案.
-----------------------------------------------------------------------

回答如下:
(1)1024分頻也行
(2)輸出頻率只要能將輸入頻率降頻1000倍即可
(3)輸入PWM的佔空比會變,所輸出輸入PWM的佔空比也要跟著改變
(4)輸入與輸出的pwm無相位要求,只要求降頻即可
(5)應用的地方就是要設計一個可以同比例降頻的電路,過去都沒有人觸到這一塊,因為用不到。

出0入0汤圆

 楼主| 发表于 2011-8-12 14:06:16 | 显示全部楼层
回复【19樓】gale  
用10進制計數器,3片疊加,然後輸出再和源信號「與」一下,就行了。
10進制計數器好像叫4010。。。不確定。
-----------------------------------------------------------------------
請問3片疊加意指需要3顆4017嗎?那4017的輸出要選擇哪一端?
還有「與」是代表 OR 還是 AND?

出0入0汤圆

发表于 2011-10-23 18:35:47 | 显示全部楼层
将Hi与Lo分开除频,然后再合。
例如:500khz载入 2MHZ后(周期1/4),然后在使用逻辑方式除频掉,去除Lo就好了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 21:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表