找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 418|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

市電過零檢測相關(guān)-STC/AI 8G單片機(jī)通過PCA模塊捕獲市電脈沖寬度,測量結(jié)果有誤

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1143744 發(fā)表于 2025-6-6 09:22 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機(jī)型號為STC/AI 8G1K08A

工程前半部分做了市電的過零檢測,P33引腳通過限流電阻、RC濾波結(jié)構(gòu)直連市交流電(火線),并開啟外部中斷INT1,檢測到下降沿后,在INT1中斷內(nèi)開啟定時器進(jìn)行延時補償(考慮到繼電器響應(yīng)到吸合需要一定時間)

為了驗證延時的效果,使用單片機(jī)P32端口監(jiān)控用電器端的電壓情況(反饋腳),繼電器吸合后用電器與火線相連接入市電,那么,只要測量P32端口初次通電的脈沖寬度,即可確認(rèn)火線進(jìn)入用電器端的初始相位

測量脈沖寬度的方法是,當(dāng)P32端口(ADC2)采集到高電平時,立即開啟PCA計數(shù),記錄初始PCA數(shù)值,并配置為下降沿中斷,中斷觸發(fā)后記錄當(dāng)前計數(shù)值,兩者相減,即為高電平持續(xù)時間,即脈沖寬度


理想情況下,經(jīng)定時器延時補償 T1 + 繼電器響應(yīng)時間 T2 后,如果在P32端口 測量初次通電的脈沖寬度為 10 ms(近似),說明繼電器觸頭導(dǎo)通瞬間,恰好正是市電零點



PCA 配置:

void PCA_Init(void){
        P_SW1 &= 0x00;        //P_SW1 是外設(shè)功能腳切換寄存器,可以控制相關(guān)引腳啟用串口、PCA、SPI等功能,本例中置位 00 ,使得CCP0功能映射到 P3.2 端口上,其實也是CCP0的默認(rèn)引腳
        CMOD = 0x0C;          //PCA 模式寄存器,[3:1] 控制PCA 計數(shù)脈沖源選擇位即單次計數(shù)的周期 末位ECF-是否允許PCA 計數(shù)器溢出中斷,0-禁止 1-使能
                                       //0000 1100 系統(tǒng)時鐘/6  禁止計數(shù)器溢出中斷
        CCON = 0x00;          //B7-CF:PCA計數(shù)器溢出中斷標(biāo)志 B6-CR:PCA計數(shù)器允許控制位 B[2:0]-CCFn PCA模塊中斷標(biāo)志
                                       //PCA 控制寄存器  0000 0000 清除所有標(biāo)志位             
        CL=CH=0;                //清零PCA 計數(shù)器
        EA = 1;
}

PCA中斷服務(wù)函數(shù):

void PCA_ISP() interrupt 7{
         unsigned int capture=0;    //記錄此時進(jìn)入中斷的時間節(jié)點
         
         if(CCF0){                        //PCA 模塊只有一個中斷向量而包含多個中斷源, 需要先分辨中斷源再進(jìn)行中斷操作
                 CCF0=0;                //清除標(biāo)志
                 capture=((unsigned int)CH) <<8|(unsigned int)CL;
                 T_end = capture;
                 T_state = 1;
                 CR=0;
         }
}

PCA計數(shù)調(diào)用:

             if(check_flag){
                        Va=ADC_Read(2);                                      //ADC采樣P32端口電壓
                        if(Va>370){                                               //采樣值370轉(zhuǎn)換為電壓值為 1.2V 只有當(dāng)檢測到高電平時才會啟用PCA 計數(shù)功能
                                CR=1;
                                T_start = ((unsigned int)CH )<<8|(unsigned int)CL;    //記錄當(dāng)前計數(shù)值
                                CCAPM0 = 0x11;                               //CCAPMn PCA模塊模式控制寄存器 詳情參見數(shù)據(jù)手冊  
                                                                                       //B5-CCAPPn 允許 PCA模塊n進(jìn)行上升沿捕獲;  B4-CCAPNn 允許 PCA模塊n進(jìn)行下降沿捕獲; B0 ECCFn 允許 PCA模塊n 的匹配/捕獲中斷
                                                                                       //0001 0001 下降沿捕獲并使能中斷                       
                                check_flag=0;
                                }      
                        }
                        if(T_state){
                                if(T_start<=T_end)
                                        high_time=T_end-T_start;
                                else
                                        high_time=65536-T_start+T_end;
                                        T_state=0;
                                       
                                }
                                if(timer>=(high_time/100)){          //PCA計數(shù)周期是1us,定時器變量timer 的計時基準(zhǔn)是100ms,high_time/1000得到ms量級,將ms量級的數(shù)字,乘以1000轉(zhuǎn)換為秒量級,觀察燈亮?xí)r間(秒級別),即可獲得脈沖寬度
                                        state=OFF;
                                        timer=0;
                                }


經(jīng)測試,定時器補償3ms時,PCA測量脈沖寬度為15.8ms;
             定時器補償1ms時,PCA測量脈沖寬度為17.8ms;

可以發(fā)現(xiàn),定時器補償部分正常運行,但PCA脈沖測量結(jié)果出現(xiàn)極大偏差,理論上最大值僅為10ms(市電周期20ms的一半)

求大佬幫忙看看,是哪里配置有誤?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:235691 發(fā)表于 2025-6-6 17:22 | 只看該作者
繼電器是機(jī)械切換有延時
回復(fù)

使用道具 舉報

板凳
ID:301191 發(fā)表于 2025-6-7 22:10 | 只看該作者
頂一下
回復(fù)

使用道具 舉報

地板
ID:301191 發(fā)表于 2025-6-11 14:47 | 只看該作者
頂一下
回復(fù)

使用道具 舉報

5#
ID:401564 發(fā)表于 2025-6-12 16:59 | 只看該作者
過零應(yīng)該是跟可控硅搭配使用,而不是繼電器
繼電器吸合跟放開的時間,都是跟彈簧有關(guān)系的,而彈簧的彈力遲早是會變化的,特別是mS級的時間,很難把握精準(zhǔn)的
如果要隔離,可用光耦控制
回復(fù)

使用道具 舉報

6#
ID:1109793 發(fā)表于 2025-6-12 17:50 | 只看該作者
繼電器也可以,一定程度上可以減小斷電時的火花的吧
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表