目錄
一、原理簡述
二、系統硬件設計
1.stm32f103c8t6核心控制器
2.無線藍牙模塊
3.LM386音頻放大模塊
4.PWM水泵控制模塊
三、系統軟件設計
1.ADC初始化及使用
2.PWM初始化及使用
3.ADC檢測與PWM反饋
四、實物展示
五、完整原理圖
六、完整代碼
所謂音樂噴泉就是噴泉水柱會隨著音樂節奏的快慢或者聲音的高低而起伏變化,要實現這個變化,從技術的角度上來說需要解決如下兩個問題:
①如何感知音樂節奏的快慢或者聲音的高低?
②獲取到音樂的變化后,如何變化成水柱的變化?
事實上解決了上述兩個問題,本設計就完成了一大半。按照常識,可以使用水泵來控制水柱的高低,音頻可以使用模數轉換將音樂這一連續變化的模擬量變成可以量化、方便處理的數字量,再將這個變化反饋給水泵,讓水泵隨著音頻的變化而變化,這樣就完成了本設計。
本設計,將以stm32為核心,設計一個音樂噴泉,使用藍牙模塊與手機相連后放大相應的音頻,并將音樂音調高低的變化轉換成水泵水柱噴射高低的變化。具體表現為:手機通過藍牙,將音頻信號傳輸至音頻放大器,音頻放大器將音頻處理后,通過喇叭輸出,同時將這個處理之后的信號送至stm32自帶ADC模塊采集,stm32將以此為依據,控制PWM輸出,從而達到控制水泵水柱高度的目的。
本系統中,將以stm32為核心,配合LM386音頻放大模塊、無線藍牙模塊、PWM水泵控制模塊,共同實現本設計所有功能設計。
系統的整體硬件設計框圖如下:
圖一? 整體硬件框圖
下面,將分別介紹這四個核心模塊:
stm32f103c8t6的實物圖如下:
圖二? stm32最小系統板
其原理圖如下:
圖三? stm32最小系統原理圖
stm32f103c8t6為意法半導體生產的一款高性能32位處理器,采用ARM cortex-M3為內核,在穩定運行的情況下,主頻可高達72M,是傳統51單片機的性能的幾十倍,能完成許多復雜的功能。其最小系統主要包括:stm32芯片、復位電路、時鐘電路、電源電路、代碼燒錄電路和boot選擇電路。
stm32f103c8t6用著豐富的外設,例如GPIO、USART、ADC、PWM、TIMER、硬件SPI、硬件IIC、USB等。在本設計中,將會使用到的它的外設有:GPIO、ADC、TIMER和PWM。其中,ADC負責采集音頻音調的高低,然后反饋給PWM,控制PWM占空比的高低,從而達到控制水柱高低的效果。
無線藍牙模塊實物圖如下:
圖四? 無線藍牙模塊
該藍牙模塊輸出音頻可以達到雙聲道立體效果,且無線距離最遠可達到20m,配對后可自動會連手機,且支持低功耗,且成本低廉。在本設計中,只需要用音頻線,連接藍牙模塊的PHONE口和LM386模塊的PHONE,打開手機音頻就可以達到音頻無線傳輸的效果,操作簡單,易于控制,方便快捷。
LM386是專為低損耗電源所設計的功率放大器集成電路。其內置增益為20,透過pin 1 和pin8腳位間電容的搭配,增益最高可達200。LM386可使用電池為供應電源,輸入電壓范圍可由4V~12V,無作動時僅消耗4mA電流,且失真低。其應用原理圖如下:
圖五? LM386應用電路
上圖應用電路中,LM386的增益為200。將音頻線一端連接藍牙模塊,一端連接圖四中的PHONE中,這樣,手機傳輸過來的音頻就可以通過藍牙,傳輸至LM386,經過LM386的放大之后,經過JP1上插著的喇叭播放。圖中,RP1為電位器,可以通過旋轉電位器,改變輸入電阻,從而調節JP1喇叭的音量大小輸出;E2為一個電解電容,起著“通交流、隔直流”的作用,可以濾除掉電路總的直流成分,這樣,輸出到JP1的聲音就比較完整,且雜音相對小很多。同時,在VOUT引腳,連接著stm32的PB0腳,該引腳為stm32自帶adc的輸入引腳,起著采集音量大小的作用。
當stm32通過自帶adc采集到音頻大小后,需要反饋給水泵,控制水柱輸出。這里的水泵,就是通過PWM控制輸出功率高低的,其原理圖如下:
圖六? PWM水泵控制原理圖
水泵通過兩個三極管來驅動。其前級SS8050,為一個NPN三極管,它的基級連著stm32的PB5,后級是SS8550,為一個PNP管。當stm32的PB5輸出一個高電平時,SS8050導通,此時,SS8550的基級電壓被拉低,8550導通,JP2上面的水泵工作。同理,PB5輸出低電平時,8050截止,8550的基級為高電平,8550也是截止的,水泵不工作。當PB5輸出PWM時,水泵的輸出功率就會隨著PB5輸出PWM的占空比的高低而高低變化,從而達到控制水柱高低的效果。
本設計中,軟件設計流程明晰,具體系統的軟件設計流程圖七所示:
圖七? 軟件設計流程圖
上圖中大致可以將軟件代碼分為三個部分:ADC初始化、PWM初始化、ADC檢測及PWM的反饋。
stm32的ADC是12位ADC,stm32f103c8t6一共有三個ADC,每個ADC最多有18個通道,其最大轉換速率可達到1Mhz。本設計中使用的ADC1的通道八進行音頻音調高低信號的采集。在初始化任何外設之前,都需要先初始化其對應的外設時鐘,然后再設置對應的ADC通道、設置ADC采樣速率轉換方式等。其具體代碼如下:
初始化完成之后,在后續的代碼中就可以使用PB0開始測量工作了。為了避免信號的干擾,使測量的數據更加準確,這里采用多次測量取平均值的方式。具體代碼如下:
PWM,譯為脈沖寬度調制,簡單說就是對脈沖寬度的控制。stm32有八個定時器,分為基本定時器、通用定時器和高級定時器。除了基本定時器,其他定時器都可以用來產生PWM,而TIM1和TIM8這兩個高級定時器,可以同時產生7路PWM輸出。本設計中使用的TIM3的通道2來產生PWM,對應stm32的PB5引腳。
首先是PWM的初始化,其具體代碼如下:
PWM初始化完成之后,就可以控制占空比輸出了,可以直接調用下面函數,修改PWM的占空比:
完成上述操作之后,需要在主函數中調用初始化函數,設定PWM的頻率,這里設置PWM的頻率為1KHz,如下:
如果設置PWM的占空比為50%,可以這樣:
TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);的第二個參數占TIM3_PWM_Init(899,159, 800);函數第一個參數的百分比,即為PWM所占的占空比。
初始化完成之后,接下來的就是根據要求完成具體功能邏輯了。在本設計中,需要根據ADC的值來調節PWM的輸出。聲音音頻越大,對應的ADC值越大,那么輸出的PWM占空比就越高。前面章節已經知道,stm32的ADC為12位,對應十進制最大
評論(0)