Mais conteúdo relacionado
Semelhante a PSoCまつり「PSoCの美味しい料理法」 (20)
PSoCまつり「PSoCの美味しい料理法」
- 2. 自己紹介
betaEncoder について
• twitterではこういうアイコンの人→
• ふぁぼボタンの人
• 学生の頃:LSI作ってた&電子部品屋バイト
• 現職:生産技術(車載組み込み,品質管理)
• よく使うマイコン:PSoC4/5LP,LPC11Uxx
• コミケ,Makeにたまに出てる
2
ふぁぼボタン
- 3. 本日のおしながき
• PSoCの美味しい所とは?
• PSoCってどんな素材?
• PSoCで何ができるの?
• PSoC4を料理してみる
• WS2812Bを素材にLチカ
• UDBを使う
• Datapathをたたいてみる
• PSoC5LPを料理してみる
• PSoC4と何が違うの?
• デジタル制御電源に仕立てる
• DMAにやってもらう
3
- 6. Switched capacitor とは
• SCB : switched capacitor block
• LSIの中ではポピュラーな回路
• AD/DA等,アナログ信号処理によく用いられる
• スイッチとキャパシタでできている
• スイッチの動作タイミング,容量をPSoC Designerで指定する
ことで,様々な動作が可能.
→増幅器(反転/非反転),全波整流器,フィルタ,AD/DA,etc…
• フィルタ設計ウィザードや多くのアナログ機能ブロックはこれを
自動化したもの
PSoC1で一番のパズル要素
6
- 7. PSoC3ってどんな素材?
• CPUが強化
→8051コア
• UDB
• 20bitΔΣADC
7
PSoC4/5ってどんな素材?
• ARMコアCPU(Cortex-M0/M3)
• ARMだけど5V動作
• 20bitΔΣADC
• 最大80MHz
• DMA
• DFB
• UDB
- 8. Universal Digital Block とは
• PLD(書き換え可能なデジタル回路)の一種
• UDB1つあたり8マクロセル(フリップフロップ)
• Datapath
• FIFO
• ALU
• シフトレジスタ
• 比較/一致
• 0検出
• 0xff検出
• 複数Datapathのチェーン
• etc.
UDBを使えば任意のペリフェラルを作れる
PSoC3~5のパズル要素
8
UDB の構造
Datapath の構造
- 9. 9
PSoCで何ができるの?
• ワンチップでアナログ回路も内蔵
• SCB,UDBでハードウェア処理
• パズル
• 例えば…
• Lチカ:殆どマウスだけでできる
• レベルメータ(PSoC1)
マイク
BIAS
GAIN
増幅
SCB
全波整流
SCB
LPF
ADC
LCD
Bargraph API
- 11. WS2812B
• Neo Pixel LED
• シリアルでRGBの色情報を転送すると光る
• 数珠繋ぎにしてたくさんのLEDを1本のシリアルで制御できる
11
- 16. UDB・Datapath を叩く
• シンボルを作ってソースのひな形を生成
16
参照:Lynx-EyEDの電音鍵盤新館
PSoCでVerilog(http://lynxeyed.hatenablog.com/entry/2012/09/17/130644)
- 17. UDB内の構成
17
FIFO
レジスタA0
左シフト
データ要求
タイミング検出
レジスタA1
レジスタD0
レジスタA0
Dec
比較器CMP1
パルス出力
Shifter
→UARTのような動作
PulseGen
→PWM動作
PWM比較値
1bitづつ出力
PWM比較カウンタ
初期値(PERIOD)
レジスタD1
参照:
AN82156(PSoC® 3, PSoC 4, and PSoC 5LP – Designing PSoC Creator™ Components WithUDB Datapaths)
PSoC® 4 Architecture TRM
- 18. 状態遷移図
IDLE
LOAD
FIFOから
読み出し
WAIT
リクエスト
待ち
SHIFT
1bitシフト
IDLE
!PG_START
LOAD
PIから読
み出し
DEC_A
ZERO
DEC_B
18
Shifter PulseGen
FIFO_EMPTY
!FIFO_EMPTY
SHIFT_DATA_REQ
!SHIFT_DATA_REQ
SHIFT_CNT==0
SHIFT_CNT>0
PG_START
!CMP1
!ZEROSHIFT_DATA_REQ
発行
CMP1
!FIFO_EMPTY
PG_START
- 23. レジスタへの書き込みは
• マクロを使ってアクセスする
• CY_SET_REGX(addr, value)
• CY_READ_REGX(addr)
• 作ったモジュールを動かす為のドライバを書くと便利
• 既存のコンポーネントのようにドライバやドキュメントを準備し
て再利用/配布しやすくすることもできる(らしい)
23
- 25. 出力波形
25
デバイスの入力パルス幅要件を満足
0 出力パルス:400ns
パルス幅
400ns
1 出力パルス:800ns
パルス幅
800ns
出力パルス周期:1.25us
パルス間隔
1.25us
データシートよりパルス幅要件
- 26. デモ
• PSoC4 PIONEER KIT
※arduinoシールド基板使ってるけどarduinoではない
26
- 34. 定数選定(ゲートドライバ)
• ブートストラップ容量C5:0.1uF
→2SK2796の入力容量Ciss(180pF)より十分大きいこと
• ゲート抵抗R2, R3:100Ω
• →Vgsの立ち上がり時間+立ち上がり時間がドライバのデッドタイムよりも短いこと
• 時定数=Ciss×R=180pF×100Ω=18ns
• tf=55ns
2SK2796
IRS2108
34
- 36. インダクタ選定
NJM2360アプリケーションノートを参考
• L>45uH → E系列より,47uH
• ピーク電流331mA
※SW周波数は他のARM系CPUにも移植できるよう,BUS_CLK=48MHzを想定し,
8bit分解能でカウンタを回した時の周波数である,48MHz/256=187.5kHzとした.
36
- 39. PSoC内部回路構成
UDBに作った積分制御コントローラ
• AD変換結果はDMAでControl_Reg1に転送される
• DMAの転送完了を受けてI_Controller1が演算を行う
• カウンタ値と制御出力を比較しPWMする
• 一度モジュールを起動してしまえばCPUの介在無し
39
- 41. 合成&Build結果
• Flash used: 5670 of 262144 bytes (2.2%).
• SRAM used: 20837 of 65536 bytes (31.8%).
• datapathを使えばadderでの
リソース消費を削減可能
(使い方よくわからない)
• つまり、まだまだ入る。
※FPGA程内部配線に柔軟性が
無いので、横着するとすぐに
配置配線できなくなる
41
- 45. もっと実用的にするためには
• 設計した電源の悪いところ
• 低分解能
• オーバーシュート
• 負荷変動に追従遅い
• 改善方法
• 分解能を上げる
→ADC,指令値の小数点以下も演算する
• I制御→PID制御
• DFBを使えばもっと複雑なフィルタを使える
→f特向上、DMAでCPU負荷無し
• 軽負荷ならPFMモードの方が効率良い
→PFMの方が簡単
いろいろな位相補償
電源制御用DSPでなくても、いろいろできる!
45