找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1209|回复: 9
收起左侧

晶闸管过零调功器,假如单片机定时器0设置100个周期时间,定时器1设置导通周期时间

[复制链接]
ID:1018689 发表于 2022-5-13 10:36 | 显示全部楼层 |阅读模式
晶闸管过零调功器,假如定时器0设置100个周期时间,定时器1设置导通周期时间,检测到零点时,单片机外部中断下降沿触发,怎么设置外部中断在100个周期时间内只触发一次。
回复

使用道具 举报

ID:332444 发表于 2022-5-13 14:52 | 显示全部楼层
回复

使用道具 举报

ID:123289 发表于 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,则正常发出脉冲。
回复

使用道具 举报

ID:883242 发表于 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就是你设定的“只触发一次”的一。
回复

使用道具 举报

ID:123289 发表于 2022-5-14 08:59 | 显示全部楼层
delay():
1、会占用CPU的时间,在此时间内无法做其它事。尤其是导通角大的时候,占用时间更多。
2、延时会不准。当CPU发生中断时,极可能打断delay(),一直要到中断程序返回。这段时间就会插入到里面。
当delay()在中断程序中运行时,delay()是准了,但它会耽误其它程序的运行。例如其它可控硅的触发。
注:
delay()是我最不推愿意使用的东东。也就最害初学者的东东。你可以不信。当你的设计比较复杂时,就会知道了。例如:【多键】【多点阵显示】【多串行通讯】……同时应用时。
回复

使用道具 举报

ID:883242 发表于 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是导通次数。
实际执行起来的图如下:
202739fn3wciopv0qo32v6.png.thumb.jpg
楼上某位根本不懂什么叫“过零调功”的灌水大师就别来%了。
回复

使用道具 举报

ID:1018689 发表于 2022-5-18 19:09 | 显示全部楼层
yzwzfyz 发表于 2022-5-13 17:12
不建议用软件触发。学习时除外。
方法:假如定时器0的中断周期为1,也就是你所讲的【设置100个周期时间】 ...

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

使用道具 举报

ID:1018689 发表于 2022-5-18 19:09 | 显示全部楼层
Hephaestus 发表于 2022-5-14 18:19
这是过零调功如何把功率均匀分布的代码,MAX是总周期半波个数,CUR是导通次数。
实际执行起来的图如下:
...

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

使用道具 举报

ID:883242 发表于 2022-5-18 21:12 | 显示全部楼层
安分的女汉子 发表于 2022-5-18 19:09
好的,谢了,我再研究研究

你为什么不去研究我在地板位的回复???那个才是最重要的,属于雪中送炭。6楼我的回复算锦上添花,做了很好,不做也没问题。
回复

使用道具 举报

ID:1018689 发表于 2022-5-18 21:50 | 显示全部楼层
Hephaestus 发表于 2022-5-18 21:12
你为什么不去研究我在地板位的回复???那个才是最重要的,属于雪中送炭。6楼我的回复算锦上添花,做了 ...

好的谢谢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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