2014年7月27日 星期日

使用 raspberry Pi 當藍牙喇吧 Bluetooth audio streaming


Bluetooth audio streaming

IPAD 測試過ok

測試過程中如果發生不正常動作請查看系統日誌
nano  /var/log/syslog

按CTRL-G 可查看NANO現在操作說明
^X 的^ 表按下CTRL在加按X
^X :離開檔案編輯
M-/ 的M表按下ALT在加按/
M-/ :跳到檔案最後一行

參考:
http://www.raspberrypi.org/forums/viewtopic.php?f=38&t=68779&p=584129&hilit=Bluetooth+audio+streaming#p584129

1. Install required packages
sudo apt-get update
sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2

2. Change audio default settings 
sudo usermod -a -G lp pi
sudo nano /etc/bluetooth/audio.conf
Add/Complete the following line in the [General] section :
改變內容為下
Enable=Source,Sink,Media,Socket

sudo nano /etc/pulse/daemon.conf
改變內容為下
resample-method = trivial

sudo reboot

3. Make sure your bluetooth adapter is working
確認藍芽設備有工作
sudo hciconfig -a
You can see the bluetooth address of your USB adapter on the line BD Address: XX:XX:XX:XX:XX:XX
可以改變PI 的藍芽名稱
sudo nano /var/lib/bluetooth/XX:XX:XX:XX:XX:XX/config
sudo nano /etc/bluetooth/main.conf
You can use some other useful bluetooth commands to make sure it is working with your phone (or other device)

搜尋手機(記得打開可搜尋)
sudo hcitool scan
You should see your phone with its bluetooth address under the form XX:XX:XX:XX:XX:XX
ping 設備
sudo l2ping XX:XX:XX:XX:XX:XX
連線測試
sudo hcitool cc XX:XX:XX:XX:XX:XX

4. Pair your phone and your raspberry
sudo hciconfig hci0 piscan
sudo hciconfig -a
會看見 UP RUNNING PSCAN ISCAN
開始配對  bluez-simple-agent
A "Enter Pin :" message should appear on your raspberry asking you for the PIN code : enter the same code you just defined on your phone and press enter. If you try to connect your phone without stopping the bluez-simple-agent, you should be asked to authorize the connection (message "Authorize connection (yes/no):").
Your phone is now paired. You can stop the bluez service by pressing Ctrl+C.
按CTRL-C 離開
以上配對僅短暫使用
要記錄在PI 中需使用下列指令
bluez-test-device trusted XX:XX:XX:XX:XX:XX yes

5. Connect the bluetooth source to the default sink
當連線後
pactl list sources short
確認出現
0    alsa_output.platform-bcm2835_AUD0.0.analog-stereo.monitor    module-alsa-card.c    s16le 2ch 44100Hz    SUSPENDED
1    bluez_source.XX_XX_XX_XX_XX_XX    module-bluetooth-device.c    s16le 2ch 44100Hz    SUSPENDED

pactl list sinks short
確認出現
0    alsa_output.platform-bcm2835_AUD0.0.analog-stereo    module-alsa-card.c    s16le 2ch 44100Hz    SUSPENDED

輸入下面指令 (一定要輸入 不然沒有聲音,XX_XX_XX_XX_XX_XX表設備位置)
pactl load-module module-loopback source=bluez_source.XX_XX_XX_XX_XX_XX sink=alsa_output.platform-bcm2835_AUD0.0.analog-stereo

6. Change the sound settings
Change the default HDMI sound ouput for the jack output : (改變原來聲音預設輸出HDMI 改為JACK 輸出
amixer cset numid=3 1
調整聲音到最大聲
amixer set Master 100%
pacmd set-sink-volume 0 65537

執行到這裡 請確定有聲音輸出才執行下一步


7. Configure pulse-audio in system mode (necessary to launch pulse without being logged on the raspberry)
sudo nano /etc/default/pulseaudio
改變內容為下
PULSEAUDIO_SYSTEM_START=1
DISALLOW_MODULE_LOADING=0

加入使用者
sudo adduser pi pulse-access
sudo nano /etc/pulse/client.conf
改變內容為下
autospawn = no
sudo nano /etc/pulse/daemon.conf
改變內容為下
allow-module-loading = yes
load-default-script-file = yes
default-script-file = /etc/pulse/default.pa

sudo nano /etc/dbus-1/system.d/pulseaudio-system.conf
改變內容為下
<policy user="pulse">
      <allow own="org.pulseaudio.Server"/>
      <allow send_destination="org.bluez"/>
      <allow send_interface="org.bluez.Manager"/>
</policy>

8. Create a job that looks for bluetooth connections
mkdir /home/pi/pulseAudioBluetooth
nano /home/pi/pulseAudioBluetooth/checkForBluetoothDevice.sh
新增內容如下
#!/bin/bash

#This script looks for a bluetooth audio source and launch the pulse audio loopback module if necessary

#log traces :
#date=$(date "+%Hh%Mm%Ss")
#echo "Script Exec "$date

bluetoothSource=$(pactl list sources short | grep bluez_source)

read loopbackStatus < /home/pi/pulseAudioBluetooth/bluetoothLoopbackStatus.txt

if [[ $bluetoothSource != "" ]] && [[ $loopbackStatus == "0" ]]
then
   source=${bluetoothSource:2:30}
   pactl load-module module-loopback source=$source sink=alsa_output.platform-bcm2835_AUD0.0.analog-stereo
   echo "1" > /home/pi/pulseAudioBluetooth/bluetoothLoopbackStatus.txt
   #echo "command launched"

else
   if [[ $bluetoothSource == "" ]] && [[ $loopbackStatus == "1" ]]
   then
      echo "0" > /home/pi/pulseAudioBluetooth/bluetoothLoopbackStatus.txt
      #echo "reset loopbackStatus"
   fi
fi

sudo chmod u+x /home/pi/pulseAudioBluetooth/checkForBluetoothDevice.sh
echo 0 > /home/pi/pulseAudioBluetooth/bluetoothLoopbackStatus.txt

9. Planify a regular launch of the script
crontab -e
在檔案最下面加入(* 號不要去掉)
# automatically load loopback for new bluetooth devices (check every minute)
* * * * * /home/pi/pulseAudioBluetooth/checkForBluetoothDevice.sh  >> /home/pi/pulseAudioBluetooth/cron.log 2>&1
sudo reboot

以上如果正確無誤 IPAD及PI 在開機後連線後並撥放音樂即可在JACK 聽到輸出音樂

補助:一些藍芽指令
lsusb
hciconfig
hcitool dev
hcitool scan
hcitool inq
hcitool con
hcitool name 98:E7:9A:27:FA:64  
hcitool info 98:E7:9A:27:FA:64 
hciconfig hci0 piscan 打开PSCAN和ISCAN
hciconfig -a

2014年7月14日 星期一

2014年7月3日 星期四

MOSFET Qg 介紹及並聯電路設計方法

摘要:
本文闡述了 MOSFET 驅動的基本要求以及在各種應用中如何優化驅動電路的設計
關鍵詞: MOSFET 驅動, MOSFET 並聯

1.   引言
隨著電源高效,高功率密度的要求,電源的頻率由原來的工頻,到幾十千赫茲,再到如今幾百千赫茲甚至兆赫茲。 電源頻率的要求越來越高。 如何選擇合適的 MOSFET, 如何有效的驅動高速的 MOSFET ,提升電源效率是廣大工程師面臨的問題。 本文將探討 MOSFET 的選型以及高速驅動線路的設計的注意事項。

2. MOSFET 結構以及影響驅動的相關參數
1
1 MOSFET 的電容等效圖。 MOSFET 包含 3 個等效結電容 Cgd, Cgs Cds.
通常在 MOSFET 的規格書中我們可以看到以下參數
其中 Ciss=Cgs+Cgd
  Coss=Cgd+Cds
  Crss=Cgd
這些結電容影響著 MOSFET 開通和關閉速度。 結電容小的 MOSFET 具有快速的開關速度,可以降低 MOSFET 開通和關閉時所產生的損耗。 同時對驅動線路需求更低。
但是值得注意的是這些電容跟普通的電容並不完全相同,普通電容的容值並不會有太大的改變,而 MOSFET 等效電容容值會隨著 MOSFET Vds 的變化而變化。 2 描述了 MOSFET 結電容隨電壓的變化狀況。
2
由於 Q=C*U*t
為了方便計算 MOSFET 所需的驅動功率以及開關損耗,規格書中通常會給出 MOSFET Q 值。
3 中描述了 MOSFET 開通的過程以及不同的 Qg 值對 MOSFET 開通過程中的影響。 Qgs Cgs 的電荷量, Qgd Cgd 的電荷量,而 整個開通過程中電荷量的總和我們稱之為 Qg.
3
2.1   MOSFET 導通時序介紹
t1 階段
此階段處於 MOSFET 死區時間。
MOSFET 電壓電流並無變化
t2 階段
t2 階段 MOSFET Vgs 電壓達到閥值並繼續上升。 此時 MOSFET 開始導通,電流從 MOSFET 漏極流向源極並在 t2 結束時到達最大值,而 Vds 此時保持不變。
t3 階段
t3 階段 MOSFET Vgs 電壓到達米勒平台並保持動態平衡。 電流從 MOSFET 漏極流向源極並保持在最大值, Vds 開始下降並最終到達最小值。
t4 階段
t4 階段 Vgs 電壓上升至最大值,電流從 MOSFET 漏極流向源極並保持在最大值, Vds 同時保持在最小值, MOSFET 進入飽和區,導通電阻降至最小。
以上是 MOSFET 導通的時序介紹,而 MOSFET 關閉的時序與之完全相反。
MOSFET 驅動時序來看, MOSFET Qg MOSFET 的開通與關閉速度起決定作用。 對於 MOSFET 的驅動設計應當著手於選擇 Qg 較小的 MOSFET ,這樣不僅可以降低 MOSFET 開關損耗,同時可以降低對驅動電路峰值電流的需求。

3. 降低 dv/dt,di/dt 造成的震盪
門極震盪是 MOSFET 高速驅動一個常見問題,驅動的震盪直接影響到電源系統的損耗以及可靠性,通常 MOSFET 門極震盪包含兩個迴路如圖 4
4 中紅色曲線是震盪迴路 1 ,其迴路由 MOSFET 漏極寄生電感 Ld (包括 MOSFET 封裝電感以及 PCB 佈線等效電感) , MOSFET 結電容 Cgd,   MOSFET 門極電感 Lg (包括 MOSFET 封裝電感以及 PCB 佈線等效電感) , MOSFET 內置門極驅動電阻 Rgini, 以及裝配, PCB 佈線耦合電容 Cgdext 組成。
MOSFET 關閉時, Vds 上升,紅色迴路的電感,電容會形成 LC 諧振,該諧振頻率約在 300MHz 500MHz 之間。 此時外加的門極驅動電阻 Rgext 對於該迴路的阻尼作用並不明顯。 而能夠明顯起到阻尼作用的只有 MOSFET 內置門極驅動電阻 Rgini 尤其是對於高壓 MOSFET ,由於 dv/dt 較低壓 MOSFET 更高。
震盪迴路 2 是由圖 4 中藍色曲線組成。 其迴路由 MOSFET 源極寄生電感(包括 MOSFET 封裝電感以及 PCB 佈線等效電感), MOSFET 結電容 Cgs,   MOSFET 門極電感 Lg (包括 MOSFET 封裝電感以及 PCB 佈線等效電感) ,MOSFET 內置門極驅動電阻 Rgini MOSFET 外置門極驅動電阻 Rgext 組成。
MOSFET 開通時, MOSFET 電流上升,該迴路的電感,電容同樣會產生 LC 震盪,震盪頻率通常在 100MHz 200MHz 左右,同時急劇變化的電流 di/dt. 會在 Ls 上產生一個變化的電壓。 di/dt=VLs/Ls . 當假設 di/dt=500A/us, Ls=10nH 時,根據公式在漏極電感 Ls 上產生的電壓 VLs=di/dt*Ls=500A/us*10nH=5V. 一旦門極震盪電壓在閥值範圍內, MOSFET 會不斷重複開關,造成極大的開關損耗甚至會影響到 MOSFET 的可靠性。
4

綜上,對於驅動線路設計中如何降低 di/dt,dv/dt 減小震盪,我們有以下幾點考慮:
1.    減小 PCB 佈線所帶來等效寄生電感。
2.    選擇合適的帶內置門極驅動電阻的 MOSFET Infineon CoolMOS C6 系列。
3.    選擇無引線的封裝 MOSFET ,降低由封裝所產生的寄生電阻和電感。
4.    選擇合適的門極驅動電阻從而抑制 MOSFET 的門極驅動震盪。
5 中是 Infineon 600V 高壓 MOSFET ThinPAK 封裝。 這種封裝不僅具有小的封裝寄生參數,同時可以縮短 PCB 佈線的長度。 此外該封裝門極地線與驅動信號地線分屬於不同的管腳,可以有效的降低門極驅動震盪。
5
 
4. MOSFET 並聯
由於功率或者效率的原因,單個 MOSFET 在某些應用場合併不能完全滿足要求,此時需要兩個或多個 MOSFET 進行並聯。 我們下 ​​面來簡單分析 MOSFET 並聯會面臨那些問題。
6
6 是當兩個 MOSFET 並聯時的等效電路, MOSFET 開關時,很容易在圖 6 紅色區域形成自激震盪,該震盪迴路由 MOSFET 寄生參數和驅動電路中 Rg1ext, Lg1, Rg1 ini, Cgd1 , Ld1, Rg2ext, Lg2, Rg2 ini, Cgd2, Ld2 共同組成。
由於震盪, 並聯 MOSFET 的門極驅動電壓並不能保持一致,門極電壓高於 Vgsth MOSFET 仍然開通,門極電壓低於 Vgsth MOSFET 關閉,使得各 MOSFET 之間並不能完全均流。 同時, 由於受該震盪迴路的影響, 電磁干擾,門極擊穿同樣是工程師面臨問題。
而有效的控制 MOSFET 並聯時的自激震盪我們需要注意以下幾點:
1.   保持各個 MOSFET 佈線一直性。
2.   MOSFET 具有獨立的驅動電路,至少具備獨立的驅動電阻。
3.   合適的驅動電阻可以阻尼震盪, 門極上磁珠同樣也可以抑制高頻干擾。

7 MOSFET 並聯時的仿真電路,其初始設置為 Rg=10Ohm, Vgsth=3V, MOSFET 之間的佈線電感 L9=0nH.
下面我們通過修改該仿真線路中影響 MOSFET 均流的參數來比較其各自對 MOSFET 並聯時所產生的影響。
1.    設置門極驅動電阻
2.    設置 MOSFET 閥值電壓 Vgsth
3.    設置 PCB 佈線電感
7
設置 1 ,如圖 8
將其中一 MOSFET 門極驅動電阻 R3 設置為 12Ohm, 另一 MOSFET 門極驅動電阻 R2 保持 10Ohm 不變。
 
8
如圖 7 右所示,當門極驅動電阻相差 2Ohm 時,流過兩個 MOSFET 的電流相差並不十分明顯。

設置 2 ,如圖 9
將其中一 MOSFET DUT1 門極閥值電壓設置為 3.4V, 另一 MOSFET DUT2 門極閥值電壓保持 3V 不變。
 
9
如圖 9 右所示,當門極驅動電壓相差 0.4V 時,流過兩個 MOSFET 的電流相差也並不十分明顯。

設置 3 ,如圖 10
將其中一 MOSFET DUT1 門極閥值電壓設置為 4V, 另一 MOSFET DUT2 門極閥值電壓設置為 2V
 
10
如圖 10 右所示,當門極驅動電壓相差 2V 時,分別通過兩個 MOSFET 的電流相差近 40%
當情形為多個 MOSFET 並聯時,其中個別 MOSFET 將會出現過流,過溫現象。

設置 4 ,如圖 11
將兩個 MOSFET 之間的佈線電感設置為 10nH
 
11
如圖 11 右所示,當門極驅動電壓相差 2V 時,通過兩個 MOSFET 的電流相差近 100%
如果 MOSFET 選型中沒有留有足夠的電流裕量,在此狀況下極有可能出現失效。
 
綜合以上的模擬測試,我們不難得出, PCB 佈線對於 MOSFET 並聯影響最大,其次是 MOSFET 門極閥值電壓,再次是門極驅動電阻。
因此對於 MOSFET 並聯的驅動設計,我們應該將重點放在 PCB 佈線當中。
首先需要注意的事 PCB 的佈線一致性,盡可能使並聯中的 MOSFET 佈線保持對稱,同時減少 MOSFET 地線之間連接的距離,從而減小寄生電感值,連接注意單點接地;
其次選擇閥值電壓最小值與最大值相差較小的 MOSFET
再次保證門極驅動電阻的誤差在 5% 的範圍以內。
 
5. 避免 MOSFET 進入線性放大區
MOSFET 驅動的最小電流:
Imin=Vgs/Rg
而驅動電路的平均損耗:
Ploss=Qg*Vgs*f
在設計驅動電路時,峰值電流以及驅動平均損耗需要盡量高於最低值,避免 MOSFET 長時間工作在線性放大區。 12 MOSFET I/V 特性曲線, MOSFET 工作在線性放大區時非完全導,通 Vds 之間出現高阻抗。 MOSFET 具有很高的損耗 , 其損耗計算如下:
12
13 MOSFET 處於線性放大區長達 500uS 的波形。 如果某些應用需要 MOSFET 進入放大區,我們必須確定 MOSFET 處於安全工作區 SOA 的限制以內。
13
 
6. 結論
MOSFET 的驅動設計,我們需要考慮以下幾個方面:
1.   選擇合適的 MOSFET Qg 小的 MOSFET 可以達到快速的開關速度,同時減小對驅動的要求。 Vgsth 最小值和最大值窗口小的 MOSFET 可以達到較好的並聯效果
2.   選擇合適的封裝。 無引線封裝具有更小的封裝電阻和封裝電感,更加適合高頻的驅動設計。 同時可以有效的減小驅動震盪,降低開關損耗,提高系統的可靠性。
3.   PCB 佈線是 MOSFET 的驅動設計的關鍵。 它影響 MOSFET 的損耗,震盪,以及 MOSFET 均流效果。
4.   保證足夠驅動的功率和峰值電流,避免 MOSFET 長期工作在線性放大區。 一旦進入放大區,需要確認 MOSFET 是否工作在 SOA 範圍之內。

參考自 http://www.infineonic.org/article/12-01/3269131325652900.html?sort=2200_0_0_0