碰巧了,类似楼主的问题我也遇到过,不过我是用触发变压器来控制可控硅的,不用调相而是靠调整半波的个数来进行负载功率的调整。其中部分代码回忆如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define MAX 100
#define CUR 17
int main(int argc, char **argv)
{
uint8_t trigger_table[MAX];
for(uint16_t i=0;i<CUR;i++){
trigger_table[i]=MAX*i/CUR;
printf("%d ",trigger_table[i]);
}
}
MAX是含义是整个周期的半波个数,对于50Hz,100就是1秒的意思。CUR是当前想要设置的功率,17表示17/100=17%满功率。
输出结果是:0 5 11 17 23 29 35 41 47 52 58 64 70 76 82 88 94
也就是说在100个半波周期内,第0,5,11,17,23……个半波内让输出有效。
根据后续的控制代码的不同,也可以这么写,生成一个100个成员的表格,内容是0表示可控硅不导通,内容是1表示可控硅导通。
for(uint16_t i=0;i<MAX;i++)trigger_table[i]=0;
for(uint16_t i=0;i<CUR;i++)trigger_table[MAX*i/CUR]=1;
当然我是个有强迫症的人,上面的代码对于阻性负载没问题,但是对于感性负载有问题,比如上面17这个结果,如果前面连续输出17,每个控制周期内正半周的半波个数会比负半周多一个,时间长了变压器这样的感性负载会出现偏励磁问题,所以MAX不能用偶数,用奇数可以解决这个问题,当然实践中我用的是质数,哈哈哈。
|
?