熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
就是一個(gè)比較器,負(fù)輸入端選擇內(nèi)部的1.19V基準(zhǔn),從P3.7輸入比較電壓。 |
Y_G_G 發(fā)表于 2023-7-20 00:17 STC8H的比較器比PWM好懂多了; /*********比較器初始化函數(shù)****************/ Void CMPint(Void) { CMPCR2 = OX00;//清零 CMPCR2 &=0xBF; //1011 1111, 開(kāi)啟0.1us濾波 CMPCR2 |= 0x3F;//0001 1111, 比較器結(jié)果經(jīng)過(guò)63個(gè)去抖時(shí)鐘后輸出 CMPCR1 = 0x00; //清零 CMPCR1 |= 0x10; //0001 0000,開(kāi)啟比較器下降沿中斷(根據(jù)需要修改) CMPCR1 &= 0XF7; //1111 0111,P3.7為CMP+輸入腳 CMPCR1 &= 0xFB; //1111 1011,內(nèi)部1.19V為CMP-輸入腳 CMPCR1 &= 0xFD; //1111 1101,禁止比較器輸出(根據(jù)需要是否輸出) CMPCR1 |= 0x80; //開(kāi)啟比較器模塊 } 此函數(shù)在main主函數(shù)中作初始化函數(shù),去抖可根據(jù)自己需要修改。 需要執(zhí)行的任務(wù)放在比較器中斷函數(shù)內(nèi) /******比較器中斷函數(shù),級(jí)別在初始化中設(shè)置為最高級(jí)3*********/ void CMP_Isr() interrupt 21 { CMPCR1 &= 0xBF;//1011 1111,使CMPIF=0,清中斷標(biāo)志 想要執(zhí)行的任務(wù);//要簡(jiǎn)潔明了,不要占用過(guò)多步驟,如多可執(zhí)行一個(gè)標(biāo)志位,由標(biāo)志位觸發(fā)執(zhí)行相關(guān)復(fù)雜任務(wù)。 } |
談到比較,必須有兩個(gè)量。一個(gè)是標(biāo)準(zhǔn),一個(gè)是對(duì)象。 標(biāo)準(zhǔn)取什么?可以外部分搭建,也可以從內(nèi)部獲取。即然CPU嵌入了比較器,設(shè)計(jì)者必會(huì)給出一個(gè)內(nèi)部的標(biāo)準(zhǔn)。建議你使用。 比較的對(duì)象:電池,必須將它映射到標(biāo)準(zhǔn)附近,否則如何比較呢?最簡(jiǎn)單的方法就是用電阻分壓至標(biāo)準(zhǔn)附近。 但這會(huì)浪費(fèi)電池的能量。 節(jié)能:如果不需要時(shí)時(shí)刻刻檢測(cè),可以加控制開(kāi)關(guān),只在檢測(cè)時(shí)接入分壓電阻(不是主題,不在此討論細(xì)節(jié))。 如果必須時(shí)時(shí)刻刻檢測(cè),可以加大電阻的阻值。或其它更高級(jí)的方案(不在此討論)。 |
![]() |
STC的比較器就跟它的PWM一樣,數(shù)據(jù)手冊(cè)洋洋灑灑一大堆,你啃半天都不一定知道它在說(shuō)什么 電池供電還是用帶ADC的單片機(jī)好一點(diǎn),可以精確處理,也可以知道電池的實(shí)際電壓 關(guān)鍵是STC帶ADC的單片機(jī)并沒(méi)有比不帶ADC的單片機(jī)貴多少,有的型號(hào)甚至是更便宜 |
不如將電池電壓送到ADC,得到電壓值,然后根據(jù)電壓值判斷,這樣的好處是,比較的電壓門(mén)限可以設(shè)置,比較靈活。 |
Powered by 單片機(jī)教程網(wǎng)