标题: 晶闸管过零调功器,假如单片机定时器0设置100个周期时间,定时器1设置导通周期时间 [打印本页]

作者: 安分的女汉子    时间: 2022-5-13 10:36
标题: 晶闸管过零调功器,假如单片机定时器0设置100个周期时间,定时器1设置导通周期时间
晶闸管过零调功器,假如定时器0设置100个周期时间,定时器1设置导通周期时间,检测到零点时,单片机外部中断下降沿触发,怎么设置外部中断在100个周期时间内只触发一次。
作者: xianfajushi    时间: 2022-5-13 14:52
http://www.51hei.com/bbs/forum.p ... mp;page=1#pid745097
作者: yzwzfyz    时间: 2022-5-13 17:12
不建议用软件触发。学习时除外。
方法:假如定时器0的中断周期为1,也就是你所讲的【设置100个周期时间】中的1个周期。
1、设置一个计数寄存器,作为触发角名为:R_CFJ。
2、检测到零点时:设置触发角,让R_CFJ=33(开始计时,假设你需要触发角=33个周期)。
3、中断产生(服务程序):
  3.1、如果R_CFJ=0(还未起动),什么也不做退出。
  3.2、 如果R_CFJ<>0,则将R_CFJ-1(计时),并看看R_CFJ=0?
         3.2.1、 <>0(触发时间未到),什么也不做退出;
         3.2.2、 =0(触发时间到了),则给出触发可控硅的脉冲。
以下教你【如何保证在80个周期时间内只触发一次。】
参考方式一:再增加一个识别器TT,
检测到零点时:让TT=80,
每次中断时,TT=0不动它,TT<>0则-1。
发出触发脉冲前,如果TT<>0(说明距上次触发时间不足80个周期)则拒发;如果=0,则正常发出脉冲。

作者: Hephaestus    时间: 2022-5-13 18:38
实在搞不懂为什么要用定时器,过零触发定时器完全没有用么。
只用外部中断就可以实现全部功能。
  1. exti_interrupt(){
  2.   static int i;
  3.   if(i<j){
  4.     delay10us();
  5.     trig();
  6.   }
  7.   if(++i>100)i=0;
  8. }
复制代码

其中delay10us();是为了防止触发时电压过低,可控硅无法达到保持电流从而造成触发失败,等过零后电压上升到一定程度再进行触发。
trig();看你怎么触发了,暂时不好写,可能用光耦,也可能用触发变压器。
j就是你设定的“只触发一次”的一。
作者: yzwzfyz    时间: 2022-5-14 08:59
delay():
1、会占用CPU的时间,在此时间内无法做其它事。尤其是导通角大的时候,占用时间更多。
2、延时会不准。当CPU发生中断时,极可能打断delay(),一直要到中断程序返回。这段时间就会插入到里面。
当delay()在中断程序中运行时,delay()是准了,但它会耽误其它程序的运行。例如其它可控硅的触发。
注:
delay()是我最不推愿意使用的东东。也就最害初学者的东东。你可以不信。当你的设计比较复杂时,就会知道了。例如:【多键】【多点阵显示】【多串行通讯】……同时应用时。
作者: Hephaestus    时间: 2022-5-14 18:19
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdint.h>
  4. #define MAX 173
  5. #define CUR 23

  6. int main(int argc, char **argv)
  7. {
  8.     uint32_t trigger_table[MAX];
  9.     for(uint16_t i=0;i<MAX;i++)trigger_table[i]=0;
  10.     for(uint16_t i=0;i<CUR;i++)trigger_table[MAX*i/CUR]=(MAX*i/CUR)%2?1:-1;
  11.     for(uint16_t i=0;i<MAX;i++)printf("%d,",trigger_table[i]);
  12. }
复制代码
这是过零调功如何把功率均匀分布的代码,MAX是总周期半波个数,CUR是导通次数。
实际执行起来的图如下:

楼上某位根本不懂什么叫“过零调功”的灌水大师就别来%了。
作者: 安分的女汉子    时间: 2022-5-18 19:09
yzwzfyz 发表于 2022-5-13 17:12
不建议用软件触发。学习时除外。
方法:假如定时器0的中断周期为1,也就是你所讲的【设置100个周期时间】 ...

好的,谢了,我再研究研究

作者: 安分的女汉子    时间: 2022-5-18 19:09
Hephaestus 发表于 2022-5-14 18:19
这是过零调功如何把功率均匀分布的代码,MAX是总周期半波个数,CUR是导通次数。
实际执行起来的图如下:
...

好的,谢了,我再研究研究
作者: Hephaestus    时间: 2022-5-18 21:12
安分的女汉子 发表于 2022-5-18 19:09
好的,谢了,我再研究研究

你为什么不去研究我在地板位的回复???那个才是最重要的,属于雪中送炭。6楼我的回复算锦上添花,做了很好,不做也没问题。
作者: 安分的女汉子    时间: 2022-5-18 21:50
Hephaestus 发表于 2022-5-18 21:12
你为什么不去研究我在地板位的回复???那个才是最重要的,属于雪中送炭。6楼我的回复算锦上添花,做了 ...

好的谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1