单片机(通过过零检测电路)控制可控硅的导通时间,负载为电机,进行时调速时电机出现抖动的

2020-01-22 12:07发布

过零检测电路如下,光耦我用的pc817

(原文件名:过零检测.jpg)
检测过零点,然后输入单片机INT0 ,过零后单片机中断延时,来控制可控硅光耦MOC3061导通时间,隔离后控制双向可控硅,负载用的是交流单相电机。但是调节到一定速度(低速时)电机会出现抖动,这是什么原因?
电路与下图相似


(原文件名:3021 2.png)


单片机程序如下:
#include <reg52.h>
unsigned char time;
sbit bb1=P2^0;
sbit key1  = P2^4;
sbit key2  = P2^5;
sbit key3  = P2^6;
sbit key4  = P2^7;
unsigned char k;
void delay(unsigned int t)    // 延时子程序,入口参数ms,延迟时间=t*1ms,t=0~65535
{
unsigned char j;        //j=0~255
while(t--)              //t的值等于while()下面{}的语句执行的次数
{
for(j = 0; j < 30; j++);//j进行的内部循环,j=j+1,每执行一次加1,大约消耗单片机处理时间
//8us,那么执行一次for(),注意for()后面加了分号。大约消耗CPU 8us*125=1000us=1ms
}
}
void int0() interrupt 0
{
TR0=1;
}

void PWM (void)
{
if(key1==0)     //按下相应的按键

      {
                 k=0;
             }
                       
else   if (key2==0)     //按下相应的按键
      

           {
                   k=10;
             }
else   if (key3==0)     //按下相应的按键
      

           {
                   k=15;
             }
else   if (key4 ==0)     //按下相应的按键
      

           {
                   k=30;
             }
}


void timer0() interrupt 1

{      

        TH0=(65536-3000)/256;

        TL0=(65536-3000)%256;

        time=0;

}



void main()

{      
bb1=1;
time=1;
TMOD=0x01;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
EA=1;
PT0=1;
EX0=1;
IT0=1;
ET0=1;
k=0;
while(1)
{
  if(time==0)
  {
   time=1;
   PWM();
   bb1=0;
   delay(k);
   bb1=1;
   TR0=0;

  }
}

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
43条回答
biguozi
1楼-- · 2020-01-25 12:50
马克
sxyxybbao
2楼-- · 2020-01-25 13:45
我也出现楼主的情况,如何解块?谢谢7楼的想法,说一下贴下图什么叫相与?
sxyxybbao
3楼-- · 2020-01-25 14:46
没有同步信号,把同步信号和触发信号相与一下再送出去!同步信号如何取呀,贴个图…
osoon2008
4楼-- · 2020-01-25 18:24

(原文件名:789t656.JPG)

1.可能是你在电机换相的时候,点通triac造成的

2.导通时间的调整幅度每次不要太大,可以多次累加的方式来调整大值,而不是直接改变。
linlkr
5楼-- · 2020-01-25 18:34
 精彩回答 2  元偷偷看……
fmzhangpei241
6楼-- · 2020-01-25 19:59
我也在做这项目,不够好像这电路烧电机,工作1个月左右,电机就烧了,是不是缺少保护电路,加我QQ:576215230详聊

一周热门 更多>