打印

楼上的,别把牛刀给别人杀**

[复制链接]
2927|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwspare|  楼主 | 2008-11-3 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在在做移相调光,可是灯泡闪烁,用示波器观察触发信号有抖动,程序中把T0中断屏蔽后波形就好的多,可是TO也是我必须用的。
  我调光的基本思想是:T1产生50HZ的驱动波形,中断检测零点,零点到则给T1一个时间(相位),T1中断则产生驱动。

  调试了很久,方法也换了很多,可是波形就是不稳,不知道大家都有什么好的方法,请大家指教!零点检测还算准确
沙发
xieyuanbin| | 2008-11-4 08:23 | 只看该作者

T0中断影响了你的调光触发延时

使用特权

评论回复
板凳
wwspare|  楼主 | 2008-11-5 14:07 | 只看该作者

谢谢你!有没有什么办法去处理呀!

使用特权

评论回复
地板
工控秀才| | 2008-11-5 17:54 | 只看该作者

我一朋友碰到类似问题

当时他调光时,当LED微亮时闪烁,也是因为PWM抖动,后来就用我的IC去开发他那款产品,客户一下子就接受了,你的问题,用我的IC也肯定可以处理,请联系我.

使用特权

评论回复
5
xieyuanbin| | 2008-11-5 19:09 | 只看该作者

楼上的,别把牛刀给别人杀**

这种东西,没有中断的12系列就可以做得很好.

使用特权

评论回复
6
xieyuanbin| | 2008-11-5 19:11 | 只看该作者

看看这个贴

https://bbs.21ic.com/club/bbs/list.asp?boardid=27&t=2562040&tp=%u4F7F%u752812C508%u7684%u8C03%u5149%u53F0%u706F%u53CA%u5176%u8FC7%u96F6%u68C0%u6D4B

使用特权

评论回复
7
工控秀才| | 2008-11-5 23:25 | 只看该作者

是我的牛刀贵,还是你的水果刀贵

各位兄弟,我的虽然是牛刀,但价格和水果到一样,便宜,好用

使用特权

评论回复
8
xieyuanbin| | 2008-11-6 20:27 | 只看该作者

楼上

牛刀能便宜至2,3元?

使用特权

评论回复
9
工控秀才| | 2008-11-6 20:41 | 只看该作者

可以

甚至比你想象的便宜更多,请直接联系我,不过提醒大家,没有合适的产品项目,就不用来套价格了,没有用的.哈哈

使用特权

评论回复
10
yewuyi| | 2008-11-6 22:17 | 只看该作者

LS,连编译器都没做好,就别乱吹大气了。。。

等你把编译器弄好了再和俺吹大气才对。。。

使用特权

评论回复
11
fzj| | 2008-11-8 07:46 | 只看该作者

哈哈,你的菜刀要2~3快被人砍了

偶小商品买的只要1.5RMB够了

使用特权

评论回复
12
fzj| | 2008-11-8 07:50 | 只看该作者

不过有时侯任务多用中断也是比较好的办法

有现成的资源为什么不好好利用呢?
      void      interrupt isr_716    (void)
  {
         PORTB=PORTB;
       

         if      (RBIF)            //同步信号端RB4-7电平变化中断
      {   RBIF=0;
          if      (lamp_off)   lampoff();  /*((lamp_off)||(lamp_test))*///关闭灯泡
            else
        {
           
           if  (f_count<10)        //50HZ/60HZ判断
           {  if  (fg_f==0) {fg_f=1;time1_buff=0;TMR1L=TMR1H=0;T1CON=1;} //TMR1预分频1
                 else
               { time1_buff=(TMR1H<<8|TMR1L);
                 fg_f=0;
                 T1CON=0;
                 TMR1L=TMR1H=0;
                 if (time1_buff>18000) {lamp_buff=lamp_low;}   //50hz,18000*0.5US=9MS
                 else
                 {lamp_buff=(lamp_low-50);}  //60hz
                 rw_temp=(lamp_buff+10);//可控硅触发时间寄存器
                 lamp_rw=rw_temp;       //可控硅触发软启动时间寄存器
                 ++f_count;
               }
            }
              else
            {
                if     (rw_temp>lamp_rw)
               {
                 --rw_temp;
               }
                  if     (rw_temp<lamp_rw)
               {
                  ++rw_temp;            //软启动
               }
               time1_buff=(rw_temp*64);//64*0.5=32US
               time1_buff=~time1_buff;
               TMR1L=(time1_buff&0x00ff);
               TMR1H=(time1_buff>>8);
               PIR1=0;              //TMR1IF=0
               PIE1=1;              //使能TMR1中断
               T1CON=1;             //TMR1预分频1
             }
           }
         }
       if      (TMR1IE&&TMR1IF)
       {   TMR1IF=0;
           if      (lampbz)
            {
              lampbz=0;
              lampoff();           //可控硅触发端口
              PIE1=0;              //关闭TMR1
              T1CON=0;
            }
              else
            {
              lampon();            //可控硅触发端口
              lampbz=1;
              TMR1L=0;              //触发脉宽256+256=512US
              TMR1H=0XFC;
            }
        }
 }

使用特权

评论回复
13
gx_huang| | 2008-11-9 17:34 | 只看该作者

干吗这么复杂?

只要速度足够,一个定时器中断就够了。
一个半波的周期是10ms,假如定时中断周期是100us,
在这个时间里可以完成所有的过零检测、触发延时等计算。

普通的调光,1/100的时间步进是不会有太多问题的。
如果MCU速度再快一些,中断周期50us就更好了。

使用特权

评论回复
14
fzj| | 2008-11-12 11:57 | 只看该作者

没看到我的是32US吗?

哈哈,我的过零点非常准确,而且最低可以调到接近0V电压

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

44

帖子

0

粉丝