|
AC230V交流電機調速原理圖和程序,供大家參考和學習,嚴禁用于商業用途。
#pragma vector ISR_EXINT @0x04
//外部中斷--雙邊沿
void ISR_EXINT(void)
{
_intf=0; //清中斷標志位
out=0; //過零關閉
f_time=1;
if(frequency_count>=190)
f_mode=1; //50HZ
else
f_mode=0; //60hz
frequency_count=0;
}
//定時器中斷--100us
#pragma vector ISR_STMINT @0x10
//定時器中斷--50us
void ISR_STMINT(void) //0.05MS
{
_stma0f = 0; //清中斷標志位
if(frequency_count<250)
frequency_count++; //200=50hz,166.6=60hz
if(f_3) //初始=0,上電延時15MS進入
{
if(f_time) //接收到外部中斷后開始計時
cnt_100us++;
if((cnt_100us>=angle) &&(!f_temp)) //angle + 溫度保護
out=1;
if(cnt_100us>=(angle+20)) //20=1ms
{
out=0;
cnt_100us=0;
f_time=0;
}
}
else
{
cnt_100ms++;
if(cnt_100ms>=250) //150
{
f_3=1;
cnt_100ms=0;
}
}
}
//時基中斷服務函數
#pragma vector ISR_TB0INT @0x08
//用作定時中斷
void ISR_TB0INT(void)
{
_tb0f = 0; //清中斷標志位
if(f_3)
{
if(!f_ruanqi) //軟啟動標記,f_ruanqi=1,軟啟動OK
{
cnt_50ms++;
if(cnt_50ms>=RUAN_QI) //ruanqi=40常數,軟啟動速率,數值越大,啟動越慢
{
ruanqi_data--;
cnt_50ms=0;
}
}
//電流電壓反饋值
ad_cur=0;
_sadc0=0x32; //an3
_sadc1=0x04; //fad=fsys/16;
_sadc2=0x00; //參考電壓VDD
_start=0;
_start=1;
_start=0; //啟動一次ADC
while(_adbz); //等待ADC結束
ad_cur=_sadoh;
ad_cur<<=8;
ad_cur|=_sadol; //讀取并返回數據
if(!f_1) //初始為0,
{
ad_zong+=ad_cur;
ad_ci++;
if(ad_ci>=16) //16次后標記f_1=1;
{
ad_ci=0;
f_1=1;
}
}
cnt_100++;
if(cnt_100>=100) //數字越大,補償越慢,開始是100,補償速率
{
cnt_100=0;
if(r>l) //0<=r<=6補償目標值
l++;
if(r<l)
l--;
}
}
}
|
|