
綜述
本文是藍牙音箱的手冊,
藍牙音箱作為禮物,面向的是用戶,但是這位用戶同時又是開發者,因此音箱的設計原則是實作一定的功能,并提供足夠的擴展介面、開放設計檔案,
資料下載:提取碼0910,
硬體
音箱由外殼、3塊PCB、揚聲器、面包板、若干連接線和電源配接器組成,
-
外殼包括亞克力材質的底板、面板和側板,底板和面板之間用不銹鋼合頁連接,可調整至側板上有缺口的角度處固定,可用的角度有60、65、70、75和90度,
-
3塊PCB中,底板包含電源與控制部分,2塊面板中下側的一塊為外設,右上的為音頻,
16*8點陣屏為主要輸出設備,4個按鍵(標號為0到3)的功能在下一節中介紹,
3個旋鈕中,右上調節低頻增益,左上調節低頻范圍,下面的調節音量,逆時針旋到底可靜音,
控制板上的綠燈指示藍牙連接,斷開
J5以禁用;音頻板上的紅燈指示輸出開啟,把R19移到旁邊的焊盤上以禁用,控制板和外設板、音頻板之間分別用8、4針排線連接,標“1”的位置對應;控制板和音頻板之間還需2根電源線,“+”“-”對應,
-
電源配接器為市售的12V/1A直流電源,5.5-2.1插頭,內正外負,
控制板接12V電源,LDO降壓到5V給板載設備,不分數字模擬,12V有過流保護,5V有過壓保護,外設板通過排針從控制板上取5V,音頻板通過端子從控制板上取12V,并用LDO降壓到10V用于音頻信號放大,
藍牙模塊JDY-67輸出左右聲道音頻信號,左、右與混合為3個信號源;6.35mm輔助輸入的左聲道為信號源,增益可通過控制板左下方的電位器調整;另一信號源為分壓后的單片機定時器輸出,以上信號源經CD4051選擇一路(SRC)送到音頻板上,10倍放大并調整直流電位到2.5V后送回(AUD),此信號通過截止頻率可調的低通濾波器、放大倍數為0到大約3可調的共射放大電路(反相),進入帶恒流源的、放大倍數為1的雙端輸入、單端輸出差分放大電路,另一路為AUD,差分放大電路輸出用射極跟隨器緩沖,進入D類功放芯片PAM8320,增益26dB,
AUD在控制板上經低通濾波器進入全波整流電路,信號幅度ENV輸出給單片機ADC,AUD串聯10kΩ電阻后接ADC,ADC還接有光敏電阻和熱敏電阻,后者在音頻板上,靠近PAM8320底部焊盤,
單片機采用ATmega328P,頻率20MHz,UART的RX直接引出,TX用CD4053復用為2路引出,TXDS信號選擇通道,可用跳線連接藍牙模塊,SPI連接LED驅動與按鍵掃描芯片TM1629與時鐘芯片DS1302,前者在外設板上,兩芯片均為半雙工IO設計,用SS信號驅動CD4053切換通道,
擴展介面共4組,控制板與外設板右側可插MEDS模塊,也可連接其他I2C設備;面包板右上方為UART區域,M和B分別表示單片機和藍牙模塊,ETX為TXDS高電平時單片機串口輸出;右下方為單片機GPIO與5V電源,PC可接ADC,PD可接定時器0;下方為模擬區域,從左到右分別為藍牙左、右、放大后的輔助輸入、2.5V電源、CD4051通道6、7,2.5V電源在音頻域中輸出100mA時波紋小于50mV,
已知問題與解決方案:
-
面板固定不牢固,建議在插槽處安裝螺絲,把面板卡在側板的缺口處,
-
側板上有45度缺口,但調整至該角度時杜邦線會受擠壓,因此不可用,
-
SS應連接CD4053的11號引腳,TXDS應連接9號,PCB設計錯誤,已經魔改解決, -
藍牙模塊已改為直連5V并連接MLCC,AMS1117-5.0輸出增加470Ω電阻以滿足10mA最小電流要求,但仍不能徹底消除噪音,
-
TF卡無法使用,可能是因為
CLK沒有上拉, -
音頻板上
L1和L2不焊,短接,因為貼片磁珠額定電流不夠, -
D1應改為1206封裝,TM1629引腳超出焊盤,6.35mm插座的封裝中缺口位置錯誤,但這些都不影響裝配,
界面
可切換的有5個界面:時鐘、鬧鐘、通道選擇、頻譜和影片,還有一個鬧鐘響起的界面,按鍵0用于切換至下一界面,
-
時鐘界面
顯示時間,按下按鍵2,依次顯示年份、日期、星期幾與小時,使用按鍵3在分秒和時分之間切換,
按下按鍵1后可用按鍵2、3調整分鐘,再按按鍵1調整秒鐘,再按保存,
-
鬧鐘界面
與上面類似,依次調整小時、分鐘的十位和分鐘的個位,最后按下按鍵1保存,
如果已經設定鬧鐘,會顯示目標時間,按下按鍵1取消,
-
鬧鐘響起界面
閃爍顯示時間,按任意按鍵回傳鬧鐘響起前的界面,
-
通道選擇
可選擇的通道有0、1、2、3和5,分別為靜音、藍牙左、藍牙右、藍牙左右混合和放大后的輔助輸入,按鍵3切換,按鍵1選擇,
按鍵2可關閉點陣屏,
-
頻譜
顯示頻譜,按鍵無用,
-
影片
與低頻信號響度有關的影片,按鍵無用,
已知問題與解決方案:
-
點陣屏顯示的內容越多噪音越大,也許和亮度也有關系,建議享受音樂時關閉點陣屏,
-
切換至通道0會爆音,建議用旋鈕來靜音,拔電源時也會爆音,建議一直插著,
軟體
開發環境Atmel Studio 7.0,BluetoothSpeaker包含driver和program等多個專案,driver為各設備API,program為可執行程式,其余都是開發單個功能時的代碼,
driver中的各API就對照著實作顧名思義吧,注意TM1629和DS1302相關的數字都是BCD表示的,除了UART以外,所有操作都是阻塞的,
程式使用一種有點像作業系統的任務管理方式,每個界面稱為一個“page”(“process”或“thread”更合適),每個page包含cdtor、listener和thread三個函式指標欄位:
-
cdtor為page的構造和解構式,進入和退出時呼叫,函式switch_page封裝了這一程序, -
listener為監聽器,按鍵按下時呼叫,按鍵回應有兩種方式,一種是在listener內部處理,另一種是呼叫button_forward把事件存盤在flag中,在thread中呼叫button_read讀取, -
thread為主執行緒,界面控制在此執行,函式不得回傳,
main函式先初始化,然后進入第一個頁面,在定時器中斷中,程式讀取按鍵,在有按鍵動作時呼叫當前頁面的listener,listener內部呼叫switch_page,其中依次關全域中斷、呼叫dtor、配置頁面、呼叫ctor,把堆疊指標SP寫為記憶體最高地址以防止記憶體溢位、開全域中斷,最后呼叫新頁面的thread,
independent_listener是獨立于頁面的監聽器,負責鬧鐘的計時,
頻譜頁面使用了Arduino FHT庫,規模256,計算線性幅度,取前64個分組累加,最后對數映射輸出,
影片頁面根據ENV信號的電壓檢測峰值,按照信號是否超過最大值的3/4分兩種情況,螢屏上一個點在對角線方向上移動,碰到邊緣反彈,電壓高時點變大且移動加快,
已知問題與解決方案:
-
UART接收的ISR中,如果有操作會打開中斷,一定要確保
UDR已經讀取,否則會遞回進ISR, -
ADC注意精度問題,有時8位不夠,
-
如果SPI的
SS為輸入,低電平時MSTR位會清零,置位前無法作為主機發起通信,所以要在初始化SPI暫存器之前開上拉電阻或配置輸出, -
DS1302在寫入RTC暫存器時會重新開始計秒,
-
代碼第604行對
i == 15會復位,不知道是哪里出問題了,
設計提示
硬體:
-
連接MEDS模塊(I2C自己寫哦),
-
側板上加燈條,
-
*改用電池供電,
-
魔改外設板供電,
-
藍牙音頻與輔助輸入混合,
軟體:
-
重構,
-
與藍牙模塊通信,實作暫停、下一曲等功能,
-
讓單片機像藍牙模塊那樣,允許用戶通過串口控制設備,
-
*智能校正時間,
-
根據光強調整點陣屏亮度,
-
顯示溫度、過溫保護,
-
*節奏檢測,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/4509.html
標籤:其他
上一篇:李笑來必讀書籍整理
下一篇:Spring IoC 到底是什么
