STM32F1 做可控硅移相控制,疑问

2019-07-21 04:27发布

首先这个可控硅移相控制,我之前在51上做过,成功的,现在用的是STM32F103C8T6,利用外部中断做过零检测电路,在交流电的过零点时启动定时器,定时时间保证在10ms以内,比如定时6ms,然后触发MOC3041打开可控硅,稍延时几us,断开MOC3041触发信号,因为断开触发信号后,可控硅会依然保持在下一个零点信号之前一直导通中,现在我按照这个原理来干,触发导通3041后,延时的时间在1000us以内,灯泡都不亮,把延时时间加大至1500us,灯泡亮了,一直闪烁,明显不对,没有实现调压效果,问题出在哪呢?
这个延时时间应该只要几us,或者几十us就行了,太大了,就不对了。
外部过零检测电路,我在做过测试,没问题,用LED在中断里看到效果了。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
36条回答
爱问知识人
1楼-- · 2019-07-21 07:05
这个是main里 设置定时时间的程序
设为9,即1ms
edmund1234
2楼-- · 2019-07-21 08:29
应该每次进TIM3中断都把TIM3关掉(TIM_Cmd(TIM3,Disable)), 而不是6次后才关
爱问知识人
3楼-- · 2019-07-21 14:23
 精彩回答 2  元偷偷看……
edmund1234
4楼-- · 2019-07-21 17:41
爱问知识人 发表于 2019-3-3 11:49
你说的不对,我定时时间是1ms中断一次,过零信号触发定时器开始从0ms开始计时,计时到比如6ms的时候,触 ...

理解错了你的程式
以为你的TIM3是设定为6ms,
但以上的都不应该有你说的问题
我猜你的问题是, Tim3的溢出时间错了
再就是触发维时不够,通常我做可控硅控制时, 触发时间一定不是规格书上的极限, 因为那是要求峰值电流计算下的时间.
如果是我, 我不会用delay_us,而是会改为
num++;
if (num==6){
  UPWM=0;
}
if (num==7){
  TIM_Cmd(TIM3, Disable);  
  UPWM=1;
  num=0;
}

仅供参考
lvb
5楼-- · 2019-07-21 21:55
你把UPWM=1;去掉能不能一直亮呢? 如果可以就是中断跟定时器时序配合有问题。
还有你需要确定一个过零点是否触发了两次中断,这个很重要
另外你的moc3041限流电阻会不会太大了,500R的电阻只有不到5ma的电流
edmund1234
6楼-- · 2019-07-21 23:36
lvb 发表于 2019-3-3 17:03
你把UPWM=1;去掉能不能一直亮呢? 如果可以就是中断跟定时器时序配合有问题。
还有你需要确定一个过零点 ...

可控硅不比Mos或三极管, 它不是你想象的, G极给个信号它就导通, 不给就关掉
它是依靠G极触发, 然后用T1至T2的电流保持导通的状态(而不是靠G极来保持导通的状态)
简单而言, G极只负责触发它导通, 要关掉T1至T2的电流, 靠的是这电流归零, 所以不会有人把可控硅用在直流开关上, 因为电流永远不会归零, 也就是永远关不了

一个过零点只触发一次中断, 根据你的电路它应该配置为下降沿, 因为是全波整流, 如果说以50Hz来算, 1秒应该产生100次外部中断

如果说, int0只是接到CPU, 没用在别处, 根本就不应该用到510R, 用4.7K~10K即可, 正因你用了510R, 所以R2的1.5K是非常的不合理, 就你这1.5K的电阻所消耗的功率=220^2/1500=32W, 不知道的还以为你做的是电热毯呢。光耦的LED端开关的电流一般都是5mA压右, 这类型的应用甚至低到2~3mA, 你呢, 用了200多mA

另外在光耦的1&2脚并联47K电阻吧

一周热门 更多>