过零检测电路如下,光耦我用的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;
}
}
}
也很可能和抖有关
k 延时值 大于 10ms 的哪些 不是想当于丢 帕了
50HZ/s = 1hz/20ms = 每半期 10ms 时间大于 10ms 呵呵呵呵 这个半期还没触发 下个半期都过了
按你的 k= 10 15 30 ~~~都在丢帕 试试k= 1~9
(由于过零的 滞后性,控制信号过来到 MCU识别出来在到 发出指令 在到3061达到响应电流这都要时间 等过零信号来后在触发实际上是已经慢一些时间了)
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;
3ms ? 有什么用? 还是多少时间 AVR我不会 呵呵
bb1=0;
delay(k);
bb1=1;
TR0=0;
按你的电路接法因当是高电平触发才对 怎么控制的电平又是把过来了 这样不是很搞。。。可制硅是长期导通的。。只有过零信号来了后才~~关闭........
一周热门 更多>