欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機(jī)可控硅移相調(diào)壓程序和電路原理圖 光耦過零檢測
[打印本頁]
作者:
51hei圓圓
時(shí)間:
2023-10-27 01:48
標(biāo)題:
單片機(jī)可控硅移相調(diào)壓程序和電路原理圖 光耦過零檢測
電路原理圖如下,左邊是由光耦組成的過零檢測電路:
51hei.png
(213.1 KB, 下載次數(shù): 32)
下載附件
2023-10-27 01:47 上傳
單片機(jī)源程序如下(多路可控硅移相調(diào)壓)程序注釋很詳細(xì):
#include <STC15F2K60S2.H> //STC15系列單片機(jī)頭文件都是這個(gè)。
#define uchar unsigned char
#define uint unsigned int
#include <STC15F2K60S2.H>
#define MAIN_Fosc 24000000UL //定義主時(shí)鐘
uchar num=0; //對可控硅移相角控制
uchar jishuqi=0; //記錄中斷次數(shù),有軟起動作用,值不電輸出電壓不變
uchar sec1=0;
uchar sec10=0;
uchar sec100=0;
uchar sec1000=0;
sbit cdqd=P3^3;//啟動充電信號0開1關(guān)
sbit fdqd=P3^4;//啟動放電信號0開1關(guān)
//sbit cdr=P3^5;//充電停止信號 1關(guān),0開
sbit fd=P3^7;//充電可控硅通斷 0:放電 1:關(guān)閉
sbit pwm1=P3^5;//放電可控硅位通 0導(dǎo)通,1關(guān)閉
sbit pwm2=P3^6;//放電可控硅位通 0導(dǎo)通,1關(guān)閉
// sbit led=P1^0; 實(shí)驗(yàn)板指示燈
sbit led=P1^2;
sbit cf=P1^0;
unsigned char i;
unsigned int ms;
void delay_ms( ms);
/////////////主程序
void main()
{ cdqd=1;
fd=1;
pwm1=1;
cf=1;
//初始化
TMOD=0x01;
// TL0 = 0xa6; //設(shè)置定時(shí)初始值 0.1ms
// TH0 = 0xFf; //設(shè)置定時(shí)初始值
// TL0 = 0x4a; //設(shè)置定時(shí)初始值0.2ms
// TH0 = 0xFf; //設(shè)置定時(shí)初始值
// TL0 = 0x91; //設(shè)置定時(shí)初始值0.4ms
// TH0 = 0xFe; //設(shè)置定時(shí)初始值
// TL0 = 0x38; //設(shè)置定時(shí)初始值0.5ms
// TH0 = 0xFe; //設(shè)置定時(shí)初始值
TL0 = 0x9c; //設(shè)置定時(shí)初始值 0.1ms
TH0 = 0xFf; //設(shè)置定時(shí)初始值
// TL0 = 0x68; //設(shè)置定時(shí)初始值 1ms
//TH0 = 0xFC; //設(shè)置定時(shí)初始值
EA=0;
ET0=1;
EX0=1;
IT0=0;//必須設(shè)外部中斷觸發(fā)方式為上升沿下降沿同時(shí)觸發(fā)。STC最新15系列單片機(jī)外部中斷INT0口有上下沿同時(shí)觸發(fā)功能
pwm1=1;
pwm2=1;
led=1;
// EA=1;
// TR0=1;
while(1){
while(cdqd==0){EA=1; } //充電啟動
// if(cdqd==0){EA=1; cf=0; } //充電啟動
jishuqi=0;
if(cdqd==1){EA=0; jishuqi=0; } //充電關(guān)閉
if(fdqd==0){jishuqi=0; fd=0; for(i=0;i<3;i++); fd=1; for(i=0;i<3;i++); }//放電延時(shí)2us};
// fd=1;
// if(cf==0) {
////////////////////////////////////////
// delay_ms(500);
led=~led;
// pwm=0;
// delay_ms(500);
// pwm=1;
// led=0;
// }
/////////////////////////////////////////////
}
}
//延時(shí)程序
void delay_ms(ms)
{
unsigned int i;
do{
i = 200;
while(--i) ; //14T per loop
}while(--ms);
}
void Timer0Init(void) //1000微秒@24.000MHz
{
AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x40; //設(shè)置定時(shí)初始值
TH0 = 0xA2; //設(shè)置定時(shí)初始值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
}
//1毫秒定時(shí)器中斷程序
void t0() interrupt 1
{
unsigned char i;
TL0=0x9c;
TH0=0xff; //1haomiandingshi
// TL0 = 0xa6; //設(shè)置定時(shí)初始值 0.1ms
// TH0 = 0xFf; //設(shè)置定時(shí)初始值
// TL0 = 0x4a; //設(shè)置定時(shí)初始值0.2ms
// TH0 = 0xFf; //設(shè)置定時(shí)初始值
// TL0 = 0x91; //設(shè)置定時(shí)初始值0.4ms
// TH0 = 0xFe; //設(shè)置定時(shí)初始值
// TL0 = 0x38; //設(shè)置定時(shí)初始值0.5ms
// TH0 = 0xFe; //設(shè)置定時(shí)初始值
// TL0 = 0x9c; //設(shè)置定時(shí)初始值 0.1ms
// TH0 = 0xFf; //設(shè)置定時(shí)初始值
// led=~led;
// pwm=~pwm;
num++;
// jishuqi=8; 固定電壓輸出
// if(jishuqi>4) {jishuqi=5; if(cdqd==0){}} //全導(dǎo)通
//jishuqi=4;
//第一個(gè)半波
if(jishuqi==1){
if(num==75) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi==2){
if(num==70) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi==3){
if(num==65) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
//led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi==4){
if(num==60) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi>=5){
if(num==50) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi==6){
if(num==40) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi==7){
if(num==30) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi==8){
if(num==20) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
if(jishuqi>=9){
if(num==60) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
{
TR0=0;
pwm1=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
pwm2=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
for(i=0;i<2;i++);//延時(shí)2us
pwm1=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
pwm2=1; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
num=0; //清零變量 if(jish
// led=~led; //驗(yàn)證指示LED
//led=0;
}
} //
//第二個(gè)半波
// if(jishuqi>=10){
// if(num==5) //延時(shí)1毫秒導(dǎo)通,改變num的值即可改變移相觸發(fā)時(shí)間,即改變負(fù)載功率大小。num的范圍:0<num<10
// {
// TR0=0;
// pwm=0; //觸發(fā)MOC3021導(dǎo)通,即觸發(fā)可控硅導(dǎo)通
// for(i=0;i<2;i++);//延時(shí)2us
// pwm=1; //延時(shí)2us之后,關(guān)掉脈沖輸出,因?yàn)榭煽毓柙诜沁^零點(diǎn)情況下觸發(fā)信號丟失,會繼續(xù)保持導(dǎo)通。
// num=0; //清零變量
// led=~led; //驗(yàn)證指示LED
//led=0;
// }
// } //
//第二個(gè)半波
//第10和大于10個(gè)半波
// pwm=1;
//if(num==7){led=~led;}
// led=~led; //驗(yàn)證指示LED
//10MS計(jì)時(shí)器
// if(sec1>=10) {sec1=0;sec10++;}
// if(sec10>=10) {sec10=0;sec100++;}
// if(sec100>=10) {sec100=0;sec1000++;}
// if(sec1000>=8) {sec100=0;sec1000++;}
}
//中斷程序
void ex0() interrupt 0
{
IE0=0;
num=0;
// jishuqi++; //軟起過程的半波個(gè)數(shù)
TR0=1; //交流過零點(diǎn)的時(shí)候,清楚標(biāo)志、計(jì)數(shù)變量并啟動定時(shí)器。 /
// cf=0;
sec1++;
if(sec1>=10){sec1=0;jishuqi++;} //sec可以改移相角導(dǎo)通時(shí)間
//jishuqi=1;
if(jishuqi>=7){jishuqi=7;} //sec可以改移相角導(dǎo)通時(shí)間
}
復(fù)制代碼
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1