单片机过零检测控制可控硅导通角
想用32G单片机过零检测进行可控硅导通角的控制。能不能输入捕获过零检测方波,然后移相输出pwm波形。怎么实现这个功能,求助大家,感谢。把你要输出的波形和220V市电的波形相位对照图画一下,你现在的描述不太好理解要做成什么样子。
2016年做的
#include <STC15F2K60S2.H>
#include <STC15F2K60S2.H>
#include <intrins.h>
#define PHASE_A P54
#define PHASE_B P55
#define BUTTON P15
#define IN P32
#define OUT P33
bit Power;
unsigned char Value;
unsigned int Time;
/*----------------------------延时10us@STC-Y5@24MHz----------------------------*/
void Delay_10us(void)
{
unsigned char i;
_nop_();
_nop_();
i=57;
while(--i);
}
/*----------------------------延时x10us----------------------------*/
void Delay_x10us(unsigned char x)
{
while(x--)
Delay_10us();
}
void Clear_Display(void)
{
//清屏函数略
}
void Display(unsigned char x,unsigned char brightness)
{
//显示函数略
}
void Encoder_Scan(void)
{
//编码器函数略
if(/*略*/)
{
Value--;
if(Value>100)
Value=0;
}
if(/*略*/)
{
Value++;
if(Value>100)
Value=100;
}
}
void Key_Scan(void)
{
static bit Key_Flag;
if(BUTTON==0)
{
if(Key_Flag==1)
{
Key_Flag=0;
Power=~Power;
}
}
else
Key_Flag=1;
}
void Init(void)
{
Clear_Display();
TMOD=0x01;
IT0=1;
EX0=1;
ET0=1;
EA=1;
Power=1;
Value=0;
Time=15000;
}
void main(void)
{
Init();
while(1)
{
Key_Scan();
if(Power)
{
Display(Value,5);
Encoder_Scan();
Time=15000-150*Value;
}
}
}
void INT0(void) interrupt 0
{
TR0=0;
TH0=(0xffff-Time)/256;
TL0=(0xffff-Time)%256;
TR0=1;
}
void Timer0(void) interrupt 1
{
if(Power)
{
OUT=0;
Delay_x10us(2);
OUT=1;
}
else
OUT=1;
}实物:
参考:
外部中断+定时器,软件查理复用数码管,软件编码器,简单粗暴
CyberHamster 发表于 2024-12-6 02:41
2016年做的
实物:
优化后的过零检测电路!(data/attachment/forum/202412/06/083933mh99bqppeffg9nji.png "1.png")
我是这样实现的,一个过零信号接入外部中断IO口,然后使用定时器来控制可控硅开关。当检测到过零信号后打开可控硅,再次检测到过零前给个关信号,关闭可控硅,(可控硅特性只能通过降低电流到维持电流以下或反向电压来关断,不会自动关)。这样就是全开,如果你要控制功率,就是检测到过零信号后,使用定时器延时一段时间后再打开可控硅,再次检测到过零前给个关信号,关闭可控硅。通过延时的时间长短可以控制功率。这种方式俗称斩波。
a阿德 发表于 2024-12-6 09:08
我是这样实现的,一个过零信号接入外部中断IO口,然后使用定时器来控制可控硅开关。当检测到过零信号后 ...
我是导通后20μs立即关,就给个触发脉冲,过零时候它自己就关了 CyberHamster 发表于 2024-12-6 12:31
我是导通后20μs立即关,就给个触发脉冲,过零时候它自己就关了
开完立马关,反正都不会关的,等到下一个零点才会关。但感觉太快关,总感觉不太好 <p>可控硅过零早就有过零检测光耦【如MOC3063】可用,成熟可靠,纯硬件。只需MCU来控制其开关即可,不必绕来绕去的再用MCU来检测过零点,到了零点可控硅自己即会关闭。</p>
WHX 发表于 2024-12-6 19:57
可控硅过零早就有过零检测光耦【如MOC3063】可用,成熟可靠,纯硬件。只需MCU来控制其开关即可,不必绕来绕 ...
过零检测更多的时候是用来斩波的 CyberHamster 发表于 2024-12-6 02:41
2016年做的
实物:
十分感谢,我这边是斩波控制风机电压,控制功率,变相控制风速。需要过零检测后,控制导通角,每个半波都需要进行控制,所以输出的可以是50hz的pwm波就行。就是启动的瞬间需要过零点移相。看教学视频里面有个移相输出,有这个功能的话,调速的时候就不需要时刻进中断 了,只需要调整移相的角度就可以了。