找回密码
 立即注册
查看: 1178|回复: 24

单片机过零检测控制可控硅导通角

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-24 13:38:48

2

主题

11

回帖

82

积分

注册会员

积分
82
发表于 2024-12-5 23:26:49 | 显示全部楼层 |阅读模式

想用32G单片机过零检测进行可控硅导通角的控制。能不能输入捕获过零检测方波,然后移相输出pwm波形。怎么实现这个功能,求助大家,感谢。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-06-16 00:13:00
已绑定手机

37

主题

2221

回帖

2658

积分

荣誉版主

积分
2658
发表于 2024-12-5 23:44:35 | 显示全部楼层
把你要输出的波形和220V市电的波形相位对照图画一下,你现在的描述不太好理解要做成什么样子。
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:167
  • 最近打卡:2025-06-10 20:55:54

24

主题

233

回帖

1337

积分

金牌会员

积分
1337
发表于 2024-12-6 02:41:46 | 显示全部楼层
2016年做的
  1. #include <STC15F2K60S2.H>
  2. #include <STC15F2K60S2.H>
  3. #include <intrins.h>
  4. #define                PHASE_A                P54
  5. #define                PHASE_B                P55
  6. #define                BUTTON                P15
  7. #define                IN                        P32
  8. #define                OUT                        P33
  9. bit Power;
  10. unsigned char Value;
  11. unsigned int Time;
  12. /*----------------------------延时10us@STC-Y5@24MHz----------------------------*/
  13. void Delay_10us(void)
  14. {
  15.         unsigned char i;
  16.         _nop_();
  17.         _nop_();
  18.         i=57;
  19.         while(--i);
  20. }
  21. /*----------------------------延时x10us----------------------------*/
  22. void Delay_x10us(unsigned char x)
  23. {
  24.         while(x--)
  25.                 Delay_10us();
  26. }
  27. void Clear_Display(void)
  28. {
  29.         //清屏函数略
  30. }
  31. void Display(unsigned char x,unsigned char brightness)
  32. {
  33.         //显示函数略
  34. }
  35. void Encoder_Scan(void)
  36. {
  37.         //编码器函数略
  38.         if(/*略*/)
  39.         {
  40.                 Value--;
  41.                 if(Value>100)
  42.                         Value=0;
  43.         }
  44.         if(/*略*/)
  45.         {
  46.                 Value++;
  47.                 if(Value>100)
  48.                         Value=100;
  49.         }
  50. }
  51. void Key_Scan(void)
  52. {
  53.         static bit Key_Flag;
  54.         if(BUTTON==0)
  55.         {
  56.                 if(Key_Flag==1)
  57.                 {
  58.                         Key_Flag=0;
  59.                         Power=~Power;
  60.                 }
  61.         }
  62.         else
  63.                 Key_Flag=1;
  64. }
  65. void Init(void)
  66. {
  67.         Clear_Display();
  68.         TMOD=0x01;
  69.         IT0=1;
  70.         EX0=1;
  71.         ET0=1;
  72.         EA=1;
  73.         Power=1;
  74.         Value=0;
  75.         Time=15000;
  76. }
  77. void main(void)
  78. {
  79.         Init();
  80.         while(1)
  81.         {
  82.                 Key_Scan();
  83.                 if(Power)
  84.                 {
  85.                         Display(Value,5);
  86.                         Encoder_Scan();
  87.                         Time=15000-150*Value;
  88.                 }
  89.         }
  90. }
  91. void INT0(void) interrupt 0
  92. {
  93.         TR0=0;
  94.         TH0=(0xffff-Time)/256;
  95.         TL0=(0xffff-Time)%256;
  96.         TR0=1;
  97. }
  98. void Timer0(void) interrupt 1
  99. {
  100.         if(Power)
  101.         {
  102.                 OUT=0;
  103.                 Delay_x10us(2);
  104.                 OUT=1;
  105.         }
  106.         else
  107.                 OUT=1;
  108. }
复制代码
实物:
截图202412060240137270.jpg
截图202412060240215943.jpg
截图202412060240306297.jpg
截图202412060240372867.jpg
参考:
截图202412060239436237.jpg
外部中断+定时器,软件查理复用数码管,软件编码器,简单粗暴

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-06-17 11:06:43
已绑定手机

29

主题

306

回帖

674

积分

高级会员

积分
674
发表于 2024-12-6 08:40:12 | 显示全部楼层

<br /> <br />

优化后的过零检测电路1.png

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-06-11 20:08:34

3

主题

46

回帖

567

积分

等待验证会员

积分
567
发表于 2024-12-6 09:08:06 | 显示全部楼层

我是这样实现的,一个过零信号接入外部中断IO口,然后使用定时器来控制可控硅开关。当检测到过零信号后打开可控硅,再次检测到过零前给个关信号,关闭可控硅,(可控硅特性只能通过降低电流到维持电流以下或反向电压来关断,不会自动关)。这样就是全开,如果你要控制功率,就是检测到过零信号后,使用定时器延时一段时间后再打开可控硅,再次检测到过零前给个关信号,关闭可控硅。通过延时的时间长短可以控制功率。这种方式俗称斩波。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:167
  • 最近打卡:2025-06-10 20:55:54

24

主题

233

回帖

1337

积分

金牌会员

积分
1337
发表于 2024-12-6 12:31:38 | 显示全部楼层
a阿*** 发表于 2024-12-6 09:08
[md]我是这样实现的,一个过零信号接入外部中断IO口,然后使用定时器来控制可控硅开关。当检测到过零信号后 ...

我是导通后20μs立即关,就给个触发脉冲,过零时候它自己就关了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-06-11 20:08:34

3

主题

46

回帖

567

积分

等待验证会员

积分
567
发表于 2024-12-6 14:21:48 | 显示全部楼层
CyberH*** 发表于 2024-12-6 12:31
我是导通后20μs立即关,就给个触发脉冲,过零时候它自己就关了

开完立马关,反正都不会关的,等到下一个零点才会关。但感觉太快关,总感觉不太好
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:523
  • 最近打卡:2025-06-17 09:55:53
已绑定手机

23

主题

593

回帖

2989

积分

金牌会员

积分
2989
发表于 2024-12-6 19:57:11 | 显示全部楼层

可控硅过零早就有过零检测光耦【如MOC3063】可用,成熟可靠,纯硬件。只需MCU来控制其开关即可,不必绕来绕去的再用MCU来检测过零点,到了零点可控硅自己即会关闭。

不停地学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:468
  • 最近打卡:2025-06-17 09:14:57
已绑定手机

40

主题

371

回帖

973

积分

高级会员

积分
973
发表于 2024-12-7 10:49:10 | 显示全部楼层
WH*** 发表于 2024-12-6 19:57
可控硅过零早就有过零检测光耦【如MOC3063】可用,成熟可靠,纯硬件。只需MCU来控制其开关即可,不必绕来绕 ...

过零检测更多的时候是用来斩波的
纸上得到终觉浅,绝知此事要躬行。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-02-24 13:38:48

2

主题

11

回帖

82

积分

注册会员

积分
82
发表于 2024-12-7 21:46:55 | 显示全部楼层
CyberH*** 发表于 2024-12-6 02:41
2016年做的
实物:

十分感谢,我这边是斩波控制风机电压,控制功率,变相控制风速。需要过零检测后,控制导通角,每个半波都需要进行控制,所以输出的可以是50hz的pwm波就行。就是启动的瞬间需要过零点移相。看教学视频里面有个移相输出,有这个功能的话,调速的时候就不需要时刻进中断 了,只需要调整移相的角度就可以了。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 12:59 , Processed in 0.138537 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表