jqfsjt 发表于 2013-7-24 10:20:36

哪个大虾能用定时器产生这样的波形

我现在需要这样的波形。每次产生16个周期为25毫秒的脉冲波群,每个脉冲波是由12个周期为8微秒,占空比为50%的方波组成。这个只能用1个定时器产生。现在没有思路,哪个大虾能伸出援手支持一下。谢谢。

rifjft 发表于 2013-7-24 10:51:00

以产生8uS的脉冲为最小基准,并计数12个。然后外环累计到25mS,计数16次。以外环触发内环,输出12个8uS的脉冲

问题是你用的MCU是否能响应几uS级的中断

jqfsjt 发表于 2013-7-24 10:56:40

本帖最后由 jqfsjt 于 2013-7-24 10:58 编辑

嗯,我是采用的STC的片子。我看到的样品是NXP的LPC89C932,我现在对这个程序感觉很模糊,能写个实例吗?
//T0 方式1 16位模式, T1 方式2 自动重装模式
/*
#include<STC12C5A60S2.H>

sbit PWM=P1^0;       
               
void Timer0Init(void)                //4微秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x02;                //设置定时器模式
        TL0 = 0xD4;                //设置定时初值
        TH0 = 0xD4;                //设置定时重载值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}


jqfsjt 发表于 2013-7-24 10:57:19

上面的程序是用STC 的ISP软件产生的。

XA144F 发表于 2013-7-24 11:08:52

如果是Atmega128单片机的话,使用输出比较调制器就能实现,不过需要定时器1的PWM方式和定时器2的CTC方式,只在PB7输出。

ztrx 发表于 2013-7-24 13:41:34

25毫秒中断一次,中断里发12个周期为8微秒

lw2012 发表于 2013-7-24 13:43:48

本帖最后由 lw2012 于 2013-7-24 17:36 编辑

u8 OutEn = 1;
void Timer0_ISR(void)
{
        static u8 Out = 0;
        static u8 OutLoop = 0;
        static u16 InLoop = 0;


        if(OutEn)
        {
                if(Out)
                {
                        Out = 0;
                        P0_0 = 0;
                }
                else
                {
                        Out = 1;
                        P0_0 = 1;                       
                }
        }
        InLoop++;
        if(InLoop == 12)
        {
                OutEn = 0;
        }
        else if(InLoop == 62500)//25ms
        {
                OutLoop++;
                InLoop = 0;
                OutEn = 1;
        }

        if(OutLoop == 16)
        {
                Stop Timer 0;
                OutEn = 1;
                OutLoop = 0;
                InLoop = 0;
        }
}

zxq6 发表于 2013-7-24 14:13:40

用fpga很轻松的

lw2012 发表于 2013-7-24 15:00:40

是, 用程序出这个波形,跟FPGA比起来应该是有些差距。既然样品是单片输出的,那就是说用程序出这个波形是可以接受的。

severewinner 发表于 2013-7-24 15:08:01

顶一个8us的定时器,弄个变量里面计时,
然后用PWM就调整占空比0和50%,
或者引脚反转,该是很容易的。

jqfsjt 发表于 2013-7-24 15:33:09

lw2012 发表于 2013-7-24 13:43 static/image/common/back.gif
u8 OutEn = 1;
void Timer0_ISR(void)
{


谢谢。我试试。

yongjia 发表于 2013-7-24 16:14:29

这个不难吧,一个timer就可以实现了,短脉冲记数时间断点,然后设置1-2个软件记数纪录脉冲个数,和产生的序列间隔什么的,形成一个循环就可以了。{:handshake:}

oufuqiang 发表于 2013-7-24 16:26:21

顶6楼,6楼的方案才是正解。

a794001114 发表于 2013-7-24 17:42:02

mark,脉冲波

song77 发表于 2013-8-1 09:03:54

先记下来

颜靖峰 发表于 2013-8-3 13:54:14

还要把单片机的晶振、还有程序的时间周期算好。

millwood0 发表于 2013-8-3 20:10:51

每次产生16个周期为25毫秒的脉冲波群,每个脉冲波是由12个周期为8微秒,占空比为50%的方波组成。

1. set a timer to interrupt every 25ms;
2. in the isr, flip an IO pin 12 times, each 8us.

n0831 发表于 2013-8-3 21:21:42

楼上和6楼一个意思。

Friendz 发表于 2013-8-15 22:08:21

我给楼主个方案,看能不能拿分:

用MCU自带的 SPI 或者 UART 模块, 设置好晶振和分频,让模块输出0x555 或者 0xaaa 就是上图那12个包包了。 因为你是一根线上的波形,用MCU自带的并转串是个很好的方案。

chaily 发表于 2013-8-16 08:47:59

本帖最后由 chaily 于 2013-8-16 08:50 编辑

随便一个51机用汇编都能轻易实现,用6楼的方案。C语言吧,仔细调整调整一样能实现。
但楼主没说清楚:“每次产生16个周期为25毫秒的脉冲波群”,,但没描述每次之间的间隔是多少,比如是每经过1秒就产生一次16个周期为25毫秒的脉冲波群呢,还是说当达到某个条件的时候就触发一次产生16个周期为25毫秒的脉冲波群呢

huhulixin 发表于 2013-8-16 12:17:59

学习了~~~~~~~~~

LearningASM 发表于 2013-8-16 12:47:27

STC的芯片,能不能用PCA实现,这都不用你的定时器。

szzxl10 发表于 2013-8-16 13:37:03

过来看看。{:lol:}

luolj 发表于 2013-8-16 14:02:23

Friendz 发表于 2013-8-15 22:08 static/image/common/back.gif
我给楼主个方案,看能不能拿分:

用MCU自带的 SPI 或者 UART 模块, 设置好晶振和分频,让模块输出0x555...

你这方案也不错哦!

huang_1688 发表于 2013-8-16 16:40:42

应该好做
页: [1]
查看完整版本: 哪个大虾能用定时器产生这样的波形