2014年3月14日 星期五

Beaglebone black with Arduino microphone module


使用平台Beaglebone Black
元件Arduino 高感度聲音傳感器



最近因為實驗室需要聲音的應用,加上Beaglebone Black上有ADC,所以就想來研究一下AM335X上的ADC,讀完manual之後,才知道原來這個AM335XADC原本是設計給觸控螢幕用的,不過manual上的介紹寫得滿清楚的,雖然我還不是很明白step為什麼需要16個就是,可能也是因為我的應用比較單純吧,一個channel只要配一個step就夠了,看來有空要來存點錢買塊小觸控螢幕了!


因為之前有研究BBBIO的經驗,因此ADC方面也是依靠mmap的方式來操作,就花了幾天寫了一個簡單的ADC library,加到BBBIO之中,但是我沒辦法在User-space之中打中斷,所以只能用Busy-polling的方式去掃ADCFIFO,算是一個比較失敗的地方吧,不過如果做為基本應用的話,我覺得目前的實做已經足夠了。


我用的聲音模組是Arduino的高感度聲音模組,如下圖1,應該算是非常好入手的元件,有Analogy的輸出跟Digital的輸出,因為是用ADC,所以就接Analogy的腳位。



1. Arduino 高感度麥克風

詳細的腳位如圖2,使用時需要注意增益的輸出,建議先接到示波器上,把增益調到1.8V內,不然Beaglebone blackADC可能會直接被打穿燒掉



2. Circuit Layout


接著因為我不喜歡在Beaglebone black上接HDMI線,那個腳位設計常跟USB互卡還挺麻煩的,因此我用socket,把ADC讀進來的資料傳到電腦上顯示,順道寫了一個專用的簡易示波器,詳細的Demo與截圖如下,Demo中播放了1KHz和3KHz的出來,可以看到其波形的改變。



3. UI




接下來只要用fftw之類的library進行複利葉轉換的分析,就可以做一些特別的應用了,而Beaglebone black的ADC最快可以到1.6MHz,只要調ADC的參數即可,我同時也在BBBIO的toolkit中寫了一個Toolkit_GPIO_CLK_Status來計算參數,如果不想算的朋友,也許可以參考一下!