[STC单片机]

STC12c5a60s2通过晶闸管调光问题

[复制链接]
964|3
手机看帖
扫描二维码
随时随地手机跟帖
S96TBN|  楼主 | 2015-7-7 22:29 | 显示全部楼层 |阅读模式
本帖最后由 S96TBN 于 2015-7-7 22:34 编辑

用stc12c5a60s2单片机内部自带的pwm寄存器通过双向晶闸管调光 p37接的独立按键按一下输出不同占空比的pwm波 占空比是通过CCAP0H(最大值0xff 也就是255)调节的 CCAP0H 取(255/8)x1,2,3....8 用switch case语句输出 但是做成实物发现pwm没有控制效果 撤掉pwm以后灯泡依然亮  仿真图和程序如下   求大神指导 忘记补充了 实物光耦是moc3023 双向可控硅是 bt138
#include <12C5A.H>                         //??STC12????????
#define uchar unsigned char                 //???

sbit kp1=P3^7;                                                //pwm1 ???+

uchar count,count1;                                //c??pwm1 c1??pwm2
/********************???????***************/

         uchar a1,b1,i1;
//nms????
void delayms(uchar n)
{
        
        for(i1=0;i1<n;i1++)
        {        
        for(a1=120;a1>0;a1--)
        for(b1=225;b1>0;b1--);
        }
}

/**************************END********************/

/***********************???***********************/
void main()
{

        P0=0;                                                //????
        P2M1=0xff;
        P2M0=0x00;                                        //?P2?????????
        P1M1=0x00;
        P1M0=0xFF;                                       
        CCON=0;                                                //???PCA?????
                                                                //PCA???????
                                                                //?? CF ??

        CL=0;                                                //PCA ?????
        CH=0;

        CMOD=0x00;                                        //????????PCA?????
                                                                //??PCA????

        CCAP0H=CCAP0L=0xFF;                        //PWM0 ???????0?????
        CCAP1H=CCAP1L=0xFF;
        CCAPM0=0x42;                                //PCA module-0 ???PWM??
                                                                //?PCA??
        //CCAPM1=0x42;

        CR=1;                                                //PCA ?????

while(1)
{

        
               
           if(kp1==0)                                                                        //zkb1+
           {
                     delayms(2);
                  if(kp1==0)
                  {
                          count=count+1;
                        if(count>2)
                        count=0;
                  }
                  while(!kp1);
           }
                 
                 switch(count)
                 {
                         case 0:  CCAP0H=0x0f; break;
                         case 1:         CCAP0H=0X1f; break;                                        // 1/8
                         case 2:         CCAP0H=0X3F; break;         // 2/8   3f
                         case 3:         CCAP0H=0X5F; break;                                        // 3/8
                         case 4:         CCAP0H=0X7F; break;                                        // 4/8        
                         case 5:         CCAP0H=0X9F; break;                                        // 5/8
                         case 6:         CCAP0H=0XbF; break;         // 6/8
                         case 7:         CCAP0H=0XdF; break;                                        // 7/8
                         case 8:         CCAP0H=0XfF; break;                                        // 8/8
                 }

                          
         }

}
               


QQ截图20150707222111.jpg

相关帖子

fsgm388| | 2016-4-8 09:56 | 显示全部楼层
不应该用占空比来控制,应该用中断检测过零点,然后延时触发晶闸管,通过延迟的时间来控制导通角

使用特权

评论回复
dwq175| | 2016-4-8 10:56 | 显示全部楼层
双向晶闸管只有在过零的时候才能关断。
首先中断要过零检测。
然后启动PWM,PWM不要启用自动重载,使用一次性的(如果不行按沙发的来做)。

使用特权

评论回复
coody| | 2016-4-8 12:44 | 显示全部楼层
晶闸管(可控怪)是过0点后移相触发,不是用PWM的。

使用特权

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

本版积分规则

3

主题

12

帖子

0

粉丝