OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6258|回复: 11

STM32单片机控制可控硅调压

[复制链接]

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
发表于 2021-1-21 23:11:37 | 显示全部楼层 |阅读模式
本帖最后由 zhang062061 于 2021-1-21 23:19 编辑

1.       可控硅简介
可控硅,也叫晶闸管,广泛应用于交流控制系统中,可实现小功率控制大功率设备。可控硅分单向可控硅和双向可控硅,双向可控硅在结构上相当于两个单向可控硅反向连接,可以实现双向导通。以BTA41为例,其电路符号及封装如下:
1.png
         G极为控制极,当G极有正向(或负向)脉冲时,双向可控硅导通,直到交流信号过零点时关断,如下图所示。因此,要通过单片机控制输出电压,首先需要检测交流信号的过零点,然后延时一定时间后,输出一个脉冲,使可控硅导通。延时时间越长,导通时间越短,输出电压越低。
2.png
2.       电路设计
首先过零检测电路如下。原理比较简单,由一个整流桥和光耦组成。
3.png
输出波形如下图所示。上方为整流桥输出的波形,下方为光耦输出的波形。光耦输出端直接接单片机IO口即可。
4.png
可控硅驱动一般采用专用的光耦,该光耦内部集成了小功率的可控硅,用于驱动外部大功率的可控硅。电路如下:
5.png

3.       程序设计
首先使能外部中断和一个定时器,定时器打开溢出中断。外部中断用于检测过零点,定时器用于控制导通角和输出脉冲。
调压过程:单片机外部中断被触发后(检测到过零点),根据要输出的电压,计算导通角(延时时间),通过定时器设置延时时间,开启定时器溢出中断。定时时间到后输出一个脉冲,控制可控硅导通。程序如下:
外部中断函数:
  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. {
  3.          ac_flag = 0;
  4.          if(VoltFan != 0)
  5.          {
  6.                   if(VoltFan > 220)//大于220V 直接导通
  7.                   {
  8.                           HAL_GPIO_WritePin(DOUT2_GPIO_Port,DOUT2_Pin,GPIO_PIN_SET);
  9.                   }
  10.                   else
  11.                   {
  12.                            ac_delay = ac_delay_us[VoltFan/5];//查表获得延时时间
  13.                           __HAL_TIM_SET_AUTORELOAD(&htim2,ac_delay);//设置定时器延时时间
  14.                           __HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE);
  15.                           __HAL_TIM_ENABLE(&htim2);
  16.                   }
  17.          }
  18. }
复制代码

定时器中断函数:
  1. void TIM2_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN TIM2_IRQn 0 */
  4.   /* USER CODE END TIM2_IRQn 0 */
  5.   //HAL_TIM_IRQHandler(&htim2);
  6.   /* USER CODE BEGIN TIM2_IRQn 1 */
  7.          if (__HAL_TIM_GET_IT_SOURCE(&htim2, TIM_IT_UPDATE) != RESET)
  8.          {
  9.                   if(ac_flag == 0)
  10.                   {
  11.                           ac_flag = 1;
  12.                           HAL_GPIO_WritePin(DOUT2_GPIO_Port,DOUT2_Pin,GPIO_PIN_SET);//输出脉冲
  13.                           __HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);
  14.                           __HAL_TIM_SET_AUTORELOAD(&htim2,100);//设置定时时间100us(脉冲宽度)
  15.                   }
  16.                   else if(ac_flag == 1)
  17.                   {
  18.                           HAL_GPIO_WritePin(DOUT2_GPIO_Port,DOUT2_Pin,GPIO_PIN_RESET);//100us时间到 关闭脉冲
  19.                           __HAL_TIM_CLEAR_IT(&htim2, TIM_IT_UPDATE);
  20.                           __HAL_TIM_DISABLE(&htim2);
  21.                   }
  22.          }
  23.   /* USER CODE END TIM2_IRQn 1 */
  24. }
复制代码

可控硅的触发脉冲一般在20~50us即可,感性负载脉冲宽度需要加大,一般不小于100us。
程序中延时时间是预先计算好通过查表获得的。计算方法通过计算sinx的积分获得,可参考下表。
6.png




欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。
gzh.png
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2017-10-3
在线时间
25 小时
发表于 2021-2-2 15:59:49 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2017-10-3
在线时间
25 小时
发表于 2021-2-2 16:01:50 | 显示全部楼层
这个整流桥前面是220V,整流桥后就是220X0.9=198V的脉动直流,后面光耦承受这么高耐压????很疑惑
B0699EAF-17D9-4783-9AB4-A4940C218E97.png
回复 支持 反对

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2021-2-2 17:35:22 | 显示全部楼层
别想多了, 现在的电网是不容许你在非零点时打开可控硅的
回复 支持 反对

使用道具 举报

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-3-29
在线时间
17 小时
发表于 2021-4-12 10:30:38 | 显示全部楼层
有程序参考吗》谢谢
回复 支持 反对

使用道具 举报

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-3-29
在线时间
17 小时
发表于 2021-4-12 10:34:54 | 显示全部楼层
ac_delay = ac_delay_us[VoltFan/5];//查表获得延时时间,,,这个查表函数为什么是VoltFan/5?谢谢
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2021-4-12 20:31:41 | 显示全部楼层
jiming716 发表于 2021-4-12 10:34
ac_delay = ac_delay_us[VoltFan/5];//查表获得延时时间,,,这个查表函数为什么是VoltFan/5?谢谢

这个表是5V步进的,0-5V对应的数组索引是0,5-10V对应的数组索引是1.。。。
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

10

主题

205

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1322
金钱
1322
注册时间
2015-3-3
在线时间
127 小时
发表于 2021-4-13 08:59:33 | 显示全部楼层
好帖子,不过,支持下.
海纳百川者,荣耀伴一生!
回复 支持 反对

使用道具 举报

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-3-29
在线时间
17 小时
发表于 2021-4-14 16:43:04 | 显示全部楼层
能否上传下代码?
谢谢
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2021-4-15 15:38:58 | 显示全部楼层
dream11 发表于 2021-2-2 16:01
这个整流桥前面是220V,整流桥后就是220X0.9=198V的脉动直流,后面光耦承受这么高耐压????很疑惑

压降主要在两个功率电阻上~
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

8

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2014-3-29
在线时间
17 小时
发表于 2021-4-16 11:02:56 | 显示全部楼层
延时导通时间us
=20000*导通角/360,请教下这个20000是依据什么判定的?谢谢
回复 支持 反对

使用道具 举报

17

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
394
金钱
394
注册时间
2015-1-7
在线时间
101 小时
 楼主| 发表于 2021-5-18 16:16:59 | 显示全部楼层
jiming716 发表于 2021-4-16 11:02
延时导通时间us
=20000*导通角/360,请教下这个20000是依据什么判定的?谢谢

20000就是20000us即20ms,也就是220V交流电的周期(50Hz频率)
https://shop72315368.taobao.com
承接软硬件项目开发
微信搜索 “嵌入式技术开发”,关注我的公众号
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 18:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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