PSoCまつり「PSoCの美味しい料理法」

5,101 views

Published on

2014/09/20に行われたPSoCまつりでプレゼンテーションした資料です.
Lチカの章ではWS2812BをドライブするペリフェラルをPSoC4のUDBに実装しました.
制御器の章ではI制御によるデジタル制御電源をPSoC5LPのUDBとDMA,ADCを使って実装しました.
プロジェクトファイルはこちらhttps://github.com/betaEncoder/PSoC_WS2812Bdriver

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,101
On SlideShare
0
From Embeds
0
Number of Embeds
443
Actions
Shares
0
Downloads
18
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

PSoCまつり「PSoCの美味しい料理法」

  1. 1. PSoCまつり 「PSoCの美味しい料理法」 PSoCを用いたLEDドライバ・お手軽デジタル制御電源 @betaEncoder
  2. 2. 自己紹介 betaEncoder について • twitterではこういうアイコンの人→ • ふぁぼボタンの人 • 学生の頃:LSI作ってた&電子部品屋バイト • 現職:生産技術(車載組み込み,品質管理) • よく使うマイコン:PSoC4/5LP,LPC11Uxx • コミケ,Makeにたまに出てる 2 ふぁぼボタン
  3. 3. 本日のおしながき • PSoCの美味しい所とは? • PSoCってどんな素材? • PSoCで何ができるの? • PSoC4を料理してみる • WS2812Bを素材にLチカ • UDBを使う • Datapathをたたいてみる • PSoC5LPを料理してみる • PSoC4と何が違うの? • デジタル制御電源に仕立てる • DMAにやってもらう 3
  4. 4. 4 PSoCの美味しい所とは?
  5. 5. PSoC1ってどんな素材? 豊富なアナログ機能 • AD/DA • アンプ • アクティブフィルタ • CapSense 特に面白いのは スイッチトキャパシタ 5 デジタル アナログ
  6. 6. Switched capacitor とは • SCB : switched capacitor block • LSIの中ではポピュラーな回路 • AD/DA等,アナログ信号処理によく用いられる • スイッチとキャパシタでできている • スイッチの動作タイミング,容量をPSoC Designerで指定する ことで,様々な動作が可能. →増幅器(反転/非反転),全波整流器,フィルタ,AD/DA,etc… • フィルタ設計ウィザードや多くのアナログ機能ブロックはこれを 自動化したもの PSoC1で一番のパズル要素 6
  7. 7. PSoC3ってどんな素材? • CPUが強化 →8051コア • UDB • 20bitΔΣADC 7 PSoC4/5ってどんな素材? • ARMコアCPU(Cortex-M0/M3) • ARMだけど5V動作 • 20bitΔΣADC • 最大80MHz • DMA • DFB • UDB
  8. 8. Universal Digital Block とは • PLD(書き換え可能なデジタル回路)の一種 • UDB1つあたり8マクロセル(フリップフロップ) • Datapath • FIFO • ALU • シフトレジスタ • 比較/一致 • 0検出 • 0xff検出 • 複数Datapathのチェーン • etc. UDBを使えば任意のペリフェラルを作れる PSoC3~5のパズル要素 8 UDB の構造 Datapath の構造
  9. 9. 9 PSoCで何ができるの? • ワンチップでアナログ回路も内蔵 • SCB,UDBでハードウェア処理 • パズル • 例えば… • Lチカ:殆どマウスだけでできる • レベルメータ(PSoC1) マイク BIAS GAIN 増幅 SCB 全波整流 SCB LPF ADC LCD Bargraph API
  10. 10. 10 PSoC4を料理してみる:Lチカ
  11. 11. WS2812B • Neo Pixel LED • シリアルでRGBの色情報を転送すると光る • 数珠繋ぎにしてたくさんのLEDを1本のシリアルで制御できる 11
  12. 12. WS2812Bに流し込む信号は? • 1/0はHのパルス幅で送る • 暫く(>50us)Lが続くと色が更新される • 繰り返し周期,パルス幅がシビア 12
  13. 13. みんなどうやって使ってる? adafruit公式Arduinoサンプル アセンブラ データ転送中は CPUを占有してしまう 13
  14. 14. PSoC4を活用 • タイミングにシビアな所をUDBで処理したら美味しいはず • 安い(1ドル) 14 今回使ったのはこれ↑
  15. 15. クロック設定 • 50ns分解能を実現するためのクロックは20MHz • 倍の40MHzを設定 15
  16. 16. UDB・Datapath を叩く • シンボルを作ってソースのひな形を生成 16 参照:Lynx-EyEDの電音鍵盤新館 PSoCでVerilog(http://lynxeyed.hatenablog.com/entry/2012/09/17/130644)
  17. 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. 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
  19. 19. Datapathウィザードで設定 19
  20. 20. ALUのParallel入出力を使うときの注意 ALUの入力をダイナミック切換(8bitのパラレルIOを有効化)する ために, PI DYN=Enable とする. ※グレーアウトしている所は右クリックすると入力できるように なる. 20
  21. 21. ステートマシンを作ってdatapathを繋ぐ • ここが正念場 • たぶん一番コード書きが必要 • Verilog-HDL • デバッグしにくいですCypressさん… 21 ステートマシン.これを書く↓ Datapathの設定は ウィザードが自動生成↓
  22. 22. ビルドが通ったら cyfitter.hに作ったモジュールのレジスタへアクセスするための #defineができている 22
  23. 23. レジスタへの書き込みは • マクロを使ってアクセスする • CY_SET_REGX(addr, value) • CY_READ_REGX(addr) • 作ったモジュールを動かす為のドライバを書くと便利 • 既存のコンポーネントのようにドライバやドキュメントを準備し て再利用/配布しやすくすることもできる(らしい) 23
  24. 24. main.c • 各モジュールの起動 • ドライバを叩く (FIFO_FULLを見ながらデータを流し込む) 24
  25. 25. 出力波形 25 デバイスの入力パルス幅要件を満足 0 出力パルス:400ns パルス幅 400ns 1 出力パルス:800ns パルス幅 800ns 出力パルス周期:1.25us パルス間隔 1.25us データシートよりパルス幅要件
  26. 26. デモ • PSoC4 PIONEER KIT ※arduinoシールド基板使ってるけどarduinoではない 26
  27. 27. 27 PSoC5LPを料理してみる:制御器
  28. 28. PSoC4でいろいろできるのは分かったが 「いちいちパズルやってらんないよ…」 「さすがに32マクロセルはちょっと…」 「仕事に使えるレベルの機能が欲しい」 たくさんUDBが乗っている石を使いましょう 最大24UDB(192マクロセル) PSoC3 or PSoC5LP 28
  29. 29. 様々な電源トポロジ • リニア • チャージポンプ • スイッチング • 降圧 • 昇圧 • 昇降圧 フィードバック制御によるシステム 29
  30. 30. デジタル制御電源とは • ADC/DACを使った,CPUによるフィードバック制御 • 柔軟なフィードバック制御が可能 • 最近増えてきた← 高性能なCPUがたくさん出てきたため • 回路規模:大← スイッチに加えてCPUとIFが必要 • 設計工数:大← 制御にHWだけでなくSWも必要 ⇒これ,PSoC5を使えばうまくいくのでは…? 30
  31. 31. 設計コンセプト • 出来る限り簡単に(納期優先) • 出来る限りコードは書かない(レビュー最小化) • 出来る限りCPUを使わない(CPUリソースを主たる処理へ) ⇒PSoC5の持つ機能を活用 31
  32. 32. システム 指令値フィルタFET-SW LPF 出力 ADC この部分をCPUで実装する CPU:PSoC5LP(CY8C5868AXI) 積み基板を活用!! 32
  33. 33. 回路 • 入力:12V • 出力:5V100mA以上 33
  34. 34. 定数選定(ゲートドライバ) • ブートストラップ容量C5:0.1uF →2SK2796の入力容量Ciss(180pF)より十分大きいこと • ゲート抵抗R2, R3:100Ω • →Vgsの立ち上がり時間+立ち上がり時間がドライバのデッドタイムよりも短いこと • 時定数=Ciss×R=180pF×100Ω=18ns • tf=55ns 2SK2796 IRS2108 34
  35. 35. 定数選定(MOS-FET) • On抵抗が極端に大きくないこと → <1Ω を目安 • ゲートドライバのドライブ電圧でonできること → Vth<12 2SK2796 35
  36. 36. インダクタ選定 NJM2360アプリケーションノートを参考 • L>45uH → E系列より,47uH • ピーク電流331mA ※SW周波数は他のARM系CPUにも移植できるよう,BUS_CLK=48MHzを想定し, 8bit分解能でカウンタを回した時の周波数である,48MHz/256=187.5kHzとした. 36
  37. 37. コンデンサ選定 NJM2360アプリケーションノートを参考 • リプル電圧<100mV → E系列より,4.7uF 37
  38. 38. FB用分圧抵抗選定 • PSoCの入力電圧範囲:0~3.3V • →狙い値5Vとなったときに入力電圧範囲の中央(1.65V) • ADCの入力インピーダンスを考慮 38
  39. 39. PSoC内部回路構成 UDBに作った積分制御コントローラ • AD変換結果はDMAでControl_Reg1に転送される • DMAの転送完了を受けてI_Controller1が演算を行う • カウンタ値と制御出力を比較しPWMする • 一度モジュールを起動してしまえばCPUの介在無し 39
  40. 40. 積分制御コントローラ • UDBにVerilogで書いて合成 • PIDのI制御だけ →位相補償が簡単 • 飽和演算させるべきだった (後述) 指令値 k 8bit 1-z-1 8bit 8bit Fixed Point 17bit 40
  41. 41. 合成&Build結果 • Flash used: 5670 of 262144 bytes (2.2%). • SRAM used: 20837 of 65536 bytes (31.8%). • datapathを使えばadderでの リソース消費を削減可能 (使い方よくわからない) • つまり、まだまだ入る。 ※FPGA程内部配線に柔軟性が 無いので、横着するとすぐに 配置配線できなくなる 41
  42. 42. main.c • 各モジュールの起動 • DMAの設定 →wizardからコピペ • 後は何もしない 42
  43. 43. 一巡伝達特性(octave シミュレーション) • 位相余裕:90deg. • ゲイン余裕:20dB 43
  44. 44. 立ち上がり波形 飽和演算していないため, 桁溢れが起こることがある オーバーシュート →I制御のみのため 44
  45. 45. もっと実用的にするためには • 設計した電源の悪いところ • 低分解能 • オーバーシュート • 負荷変動に追従遅い • 改善方法 • 分解能を上げる →ADC,指令値の小数点以下も演算する • I制御→PID制御 • DFBを使えばもっと複雑なフィルタを使える →f特向上、DMAでCPU負荷無し • 軽負荷ならPFMモードの方が効率良い →PFMの方が簡単 いろいろな位相補償 電源制御用DSPでなくても、いろいろできる! 45
  46. 46. 他のUDB応用 • UART入出力にインバータを入れてRS-232C直結 • “自称SPIバスインターフェイス”のADCとの接続 • etc… 46
  47. 47. PSoCは非常にフレキシブルかつパワフルなCPUです. 様々な可能性を活かし活用しましょう. 御静聴ありがとうございました 47

×