在項目中原理圖如下:
如果不能保證I/O的輸出性能可以根據情況增加上拉或者下拉電阻。
切入正題:在程序里面這個蜂鳴器的驅動就是個高低電平驅動。高電平三極管導通、蜂鳴器發聲,低電平三極管關斷、蜂鳴器不發聲。這的確很簡單,程序上最開始我是這樣寫的:
當然,如果單片機沒有很好的I/O跳變函數也可以這樣修改:
這里稍作解釋:
1)
函數功能:蜂鳴器發聲驅動
傳入參數:蜂鳴器發聲的次數
2)
傳入的次數cnt需要再函數內翻倍。這是因為傳入的參數是想讓蜂鳴器連續的發cnt聲。但是蜂鳴器除了發聲還有不發聲的時候。也就是說蜂鳴器每響一次都需要關閉一次,如果沒有關閉操作肯定就不會出現響幾聲而是連續的響一聲,這個也很容易推理。
3)
在while循環完之后需要加一個蜂鳴器關閉操作。
這里假如傳進的參數是2,目的是讓蜂鳴器響兩聲。根據程序的執行步驟:
cnt2變成4。
第1次while(4) 蜂鳴器開 cnt自減到3
第2次while(3) 蜂鳴器關 cnt自減到2
第3次while(2) 蜂鳴器開 cnt自減到1
第4次while(1) 蜂鳴器關 cnt自減到0
第5次while(0) 跳出while
可以看出其實在while之后蜂鳴器狀態已經是關閉的了,但是保險起見,確保函數調用完之后蜂鳴器是關閉的狀態。比如第一個函數I/O跳變的就更需要保障了,因為代碼上只能看出跳變,看不到跳變之后的狀態。
至此,一個簡單的蜂鳴器電路和驅動程序就都溫習完了,接下來上干貨:
在寫程序的時候很多時候講究程序的效率,比如這個蜂鳴器驅動,驅動過程中會降低效率,厲害的人很快能看出來,就是這個Delay延時的問題。但是上面也說了,不延時也是不行的。所以趨于效率我嘗試著換了一種方法驅動蜂鳴器。
代碼如下:
實現起來也很簡單,簡單說下原理:
1)首先是提供蜂鳴器驅動的I/O配置,
2)其次是定時器的配置
3)最后是定時器中斷函數實現
我選用的定時器是項目單片機中最簡單的一個定時器,配制成1ms中斷,能夠提供溢出中斷。其實這個定時器我常用做計系統運行時間Systick_ms。但是該項目對這個系統時間沒有用到,那就用這個定時器做文章把。
實現方法:
1、同樣函數在調用蜂鳴器驅動的時候接口是一樣的,傳入的參數還是蜂鳴器的響聲次數。
2、函數體變了,這里改成了兩個變量的賦值,第一個BELL_CNT同普通方法中的cnt2,這里不再贅述。第二個是FLAG_BELL是用來保存蜂鳴器是否需要驅動的狀態變量。所以既然是調用驅動函數,那肯定這個變量要為真。
3、定時器中斷函數里面加上了一個靜態變量NOW,他的作用就是和Systic_ms產生一個50ms的時間片,干嘛用?肯定是給蜂鳴器開關之間的延時用咯。模擬軟件延時嘛。然后再來分析下這段代碼:
1)首先這個NOW和Systic_ms是無條件需要賦值保證50ms時間片的。對應的代碼為NOW=Systick_ms+50;
2)判斷蜂鳴器驅動狀態變量是不是真,如果不為真就關閉蜂鳴器,這個也是無條件的。
3)如果狀態變量為真:蜂鳴器先跳變Bell_Tog();當然如果沒有這個跳變函數也可以用上述的判斷cnt的方法,就不多寫了都是一樣的。同時次數自減BELL_CNT--;同時判斷是不是減到0了,減到0了說明響完了啊,那就把狀態變量賦值為假。再次進來不管蜂鳴器是開著的還是關著的都會執行關閉操作,這個跟上面說的保險一樣。
4)最后,這兩個變量用的是全局變量,這里是以結構體的形式呈現的,因為很多情況這兩個函數不在一個C里面。如果硬要寫在一個C可以忽略本條。
容-源-電-子-網-為你提供技術支持本文地址:http://www.189yp.com/dz/22/15445095132760.shtml
本文標簽:
猜你感興趣:
深圳市永阜康科技有限公司現在大力推廣一顆單相正弦波/方波直流無刷電機驅動IC-ACM6252. 工作電壓3.1V-18V、工作電流1.2A, 可覆蓋大多數中小功率(<1A)的風機、泵機類應用。
關鍵詞: 所屬欄目:其他文章
關鍵詞: 所屬欄目:開關電源電路圖
YSX321SL石英諧振器的核心特點是其頻率穩定性和精確性。采用27.12MHz頻率,經過精密設計和優化,常溫頻差僅為±10PPM,能夠提供高精度的時鐘信號輸出。這為電動車儀表提供了準確可靠的時間參考,使得儀表顯示更加精準,功能操作更加流暢。
關鍵詞: 所屬欄目:電子基礎
深圳市永阜康科技有限公司現在大力推廣一顆三相無傳感器正弦波驅動直流無刷馬達驅動IC-ACM6753,集成驅動算法+預驅+MOS,內置電流檢測,外圍元件僅需5個電容,應用極其簡單。
關鍵詞: 所屬欄目:其他文章
VK1640是一種數碼管或點陣LED驅動控制專用芯片,內部集成有數據鎖存器、LED 驅動等電路。SEG腳接LED陽極,GRID腳接LED陰極,可支持8SEGx16GRID的點陣LED顯示。適用于小型LED顯示屏驅動。采用SOP28的封裝形式。
關鍵詞: 所屬欄目:元器件知識
工作電壓 : 2.4V~5.2V,內建 256KHz RC oscillator 提供 1/4 偏壓 1/8 COM 周期省電模式
64x8 LCD 駆動器內建 64x8 bit 顯示內存,3-wire serial interface
軟件程控
資料及指令模式自動增加讀寫地址 
概述
PC1625 是一個 64x8 的 LCD 駆動器. 可軟件程控使其適用于多樣化的 LCD 應
關鍵詞: 所屬欄目:集成塊資料
PC1621B是一個32*4的LCD驅動器,可軟體程控使其適用于多樣化的LCD應用線路,僅用到3至4條訊號線便可控制LCD驅動器,除此之外也可介由指令使其進入省電模式
特色:
 工作電壓:2.4-5.2V
 內建256KHz RC oscillator
 可外接 32.768KHz石英震蕩器或256KHz頻率
 可選擇1/2,1/3 偏壓,也可選擇1/2,1/3或1/4的COM周期
&
關鍵詞: 所屬欄目:集成塊資料
兆科推薦高導熱硅脂來幫助LED驅動器散熱,高導熱硅脂是電子元器件的熱傳遞介質,如:CPU與散熱器填隙、大功率三及管、可控硅元件二及管、基材鋁、銅接觸的縫隙處填充,均可降低發熱元件的工作溫度。
關鍵詞: 所屬欄目:led
GC4931F/S 是一款三相無刷直流電機預驅動芯片。 芯片可以驅動N型功率MOSFET,最高電源到 36V。芯片狀態切換邏輯受三個相位差為 120°的霍爾輸入確定。兼容替代A4931,MS4931芯片集成固定衰減時間的脈沖調制來控制電流并且抑制勵磁涌流;堵轉保護時間可調;過溫保護,過壓監測,同步整流等等。其中內置的同步整流器通過在衰減周期內,打開合適的低內阻的開關管以取代反向續流二極管來降低功耗。當芯片監測到過壓時芯片會關斷同步整流以減小變化電流引起的電源電壓波動。
GC4931F/S 的邏輯輸入腳有
關鍵詞: 所屬欄目:集成塊資料
GC8837是一款12V直流電機驅動芯片,為攝像機,消費類產品,玩具和其他低壓或者電池供電的運動控制類應用提供了集成的電機驅動解決方案。芯片一般用了驅動一個直流電機或者使用兩顆來驅動步進電機。
GC8837可以工作在0-12V的電源電壓上,能提供高達1.5A持續輸出或則2A峰值電流,睡眠模式功耗小于1Ua.
GC8837具有PWM(IN/IN)輸入接口與行業標準器件兼容,并具有過溫保護功能,芯片集成了過溫保護,欠壓保護,短路保護,過流保護等功能
芯片特點
關鍵詞: 所屬欄目:集成塊資料
GC8549 是一款雙通道 12V 直流電機驅動芯片,為攝像機、消費類產品、玩具和其他低壓或者電池供電的運動控制類應用提供了集成的電機驅動解決方案。芯片一般用來驅動兩個直流電機或者驅動一個步進電機。GC8549 可以工作在 3.8~12V 的電源電壓上,每通道能提供高達 1.5A 持續輸出電流或者2.5A峰值電流, 睡眠模式下功耗小于1uA。GC8549 具有 PWM(IN/EN)輸入接口,與行業標準器件兼容,并具有過溫保護,欠壓保護,短路保護,過流保護等功能。GC8549 內置 LDO,不需要邏輯電源,
關鍵詞: 所屬欄目:集成塊資料
在MOS管的結構中可以看到,在GS,GD之間存在寄生電容,而MOS管的驅動,實際上就是對電容的充放電。對電容的充電需要一個電流,因為對電容充電瞬間可以把電容看成短路,所以瞬間電流會比較大。選擇/設計MOS管驅動時要注意的是可提供瞬間短路電流的大小。
關鍵詞: 所屬欄目:元器件知識
光耦驅動芯片HCPL-316J是Agilent公司[編者注:2014年8月更名為keysight(是德)公司]生產的柵極驅動電路產品之一,可用于驅動150A/1200V的IGBT,開關速度為0.5?s,有過流
關鍵詞: 所屬欄目:元器件知識
GC4931F/S 是一款三相無刷直流電機預驅動芯片。 芯片可以驅動N型功率MOSFET,最高電源到 36V。芯片狀態切換邏輯受三個相位差為 120°的霍爾輸入確定。兼容替代A4931,MS4931芯片集成固定衰減時間的脈沖調制來控制電流并且抑制勵磁涌流;堵轉保護時間可調;過溫保護,過壓監測,同步整流等等。其中內置的同步整流器通過在衰減周期內,打開合適的低內阻的開關管以取代反向續流二極管來降低功耗。當芯片監測到過壓時芯片會關斷同步整流以減小變化電流引起的電源電壓波動。
GC4931F/S 的邏輯輸入腳有
關鍵詞: 所屬欄目:集成塊資料
首先看看,GC9110T 是一款 12V 直流電機驅動芯片,為攝像機、消費類產品、玩具和其他低壓或者電池供電的運動控制類應用提供了集成的電機驅動解決方案。芯片一般用了驅動一個直流電機或者使用兩顆來驅動一個步進電機。GC9110T 是 GC9110(低壓 6V 驅動)的 12V 升級版本,客戶根據應用電壓與成本
來選擇芯片。GC9110T 可以工作在 3.8~12V 的電源電壓上,能提供高達 1.5A 持續輸出電流或則2.5A 峰值電流,睡眠模式下功耗小于 1uA。GC9110T 具有 PWM(IN/IN
關鍵詞: 所屬欄目:集成塊資料
GC8548 是一款雙通道 12V 直流電機驅動芯片,為攝像機、消費類產品、玩具和其他低壓或者電池供電的運動控制類應用提供了集成的電機驅動解決方案。芯片一般用來驅動兩個直流電機或者驅動一個步進電機。GC8548 可以工作在 3.8~12V 的電源電壓上,每通道能提供高達 1.5A 持續輸出電流或者 2.5A 峰值電流,睡眠模式下功耗小于1uA。GC8548 具有 PWM(IN/IN)輸入接口,與行業標準器件兼容,并具有過溫保護,欠壓保護,短路保護,過流保護等功能。GC8548 內置 LDO,不需要邏輯電源
關鍵詞: 所屬欄目:電子報
首先看看,GC9110T 是一款 12V 直流電機驅動芯片,為攝像機、消費類產品、玩具和其他低壓或者電池供電的運動控制類應用提供了集成的電機驅動解決方案。芯片一般用了驅動一個直流電機或者使用兩顆來驅動一個步進電機。GC9110T 是 GC9110(低壓 6V 驅動)的 12V 升級版本,客戶根據應用電壓與成本
來選擇芯片。GC9110T 可以工作在 3.8~12V 的電源電壓上,能提供高達 1.5A 持續輸出電流或則2.5A 峰值電流,睡眠模式下功耗小于 1uA。GC9110T 具有 PWM(IN/IN
關鍵詞: 所屬欄目:電子報
完全兼容A4931、MS4931,價格實惠。
關鍵詞: 所屬欄目:集成塊資料
描述
GC9110 是一款低壓 5V 全橋驅動芯片,為攝像機、 消費類產品、 玩具和其他低壓或者電池供電的運動控制類應用提供了集成的電機驅動解決方案。GC9110 能提供高達 1.3A 的持續輸出電流。 可以工作在 1.2~7V 的電源電壓上。GC9110 具有 PWM(IN/IN) 輸入接口,與行業標準器件兼容, 并具有過溫保護功能。GC9110S 是 SOP8pp 封裝, GC9110D 是DFN 封裝。
關鍵詞: 所屬欄目:集成塊資料
IR2110采用HVIC和閂鎖抗干擾CMOS制造工藝,DIP14腳封裝。具有獨立的低端和高端輸入通道;懸浮電源采用自舉電路,其高端工作電壓可達500V,dv/dt=±50V/ns,15V下
關鍵詞: 所屬欄目:其他文章