Soraken’s Style

つれづれ

TrinketでPWM出力

前回(TrinketでLEDの続き)、analogWrite()関数を使って、Trinketから2msec周期のPWM出力を行う基本的なテストをやってみました。

このPWM出力がけっこう面白そうなので、今後、いろいろなデバイスにPWMで出力することができるように、Trinketの周辺回路を簡単に作ってみたいと思います。

今回の目標は、

  • 外部から電源を供給する(電池、または外部電源)
  • GPIO#1からの出力をトランジスタで増幅して、多少ドライブ能力を大きくする

をやってみたいと思います。また、今後、回路を説明するのに、回路図があった方がいいと思ったので、Macで使える回路図エディタQt-BSch3V Modifiedを導入してみました。

 

このQt-BSch3Vを使って、今回作成した回路を表すと以下のようになります。

f:id:soraken:20141102223721p:plain

今回は、外部電源を使ってDC5VをTrinketに供給しています。そして、GPIO#1の出力に、R1 1kΩをはさんでQ1 2SC1815(NPNトランジスタ)のベースにつなぎました。Q1のエミッタはGND(グランド)に、コレクタはR2 10kΩを挟んで電源につなぎます。(R2はとりあえずのドライブ負荷ですので、あんまり意味はないです。)この状態で、TrinketのGPIO#1の出力TP1と、Q1のコレクタ端子TP2の電位を計ってみました。

f:id:soraken:20141102224416p:plain

CH1がTP1でCH2がTP2を示しています。

見ての通り、使っているTrinketは内部動作電圧が3.3Vですから、GPIO#1の出力も3.3Vです。一方、外部電源は5Vで供給しましたので、トランジスタのドライブ電源電圧は5Vです。こんな感じで、トランジスタを使って、ドライブ電圧を変換することができるようにしておきましょう。ただし、この時のPWMのOn/Offは逆になっています。

 

ところで、何故、R1を1kΩにしたかですが、一般に2SC1815というNPNトランジスタのベースとエミッタ間の電圧は、流れる電流に関わらず0.7Vくらいです。2SC1815をドライブするには2〜3mAのベース電流で足りるはずですので、Trinketが出力する3.3Vでドライブするとするなら、オームの法則で、

  V = I × R

  R = V / I

   = ( 3.3 - 0.7 ) / 0.002 (または0.003)

   = 1300 (または870)

つまり、870Ω 〜 1.3kΩくらいの抵抗で良いということになります。手持ちでちょうど1kΩを持っていましたので、この範囲に入っている1kΩにしたというわけです。

 

一方、R2を10kΩにした訳は特にありませんが、今回は、トランジスタの出力段は単に電圧を測ることが目的でしたので、トランジスタによってコレクタ部の電圧がしっかりと変化し、かつあんまり電流を消費しない程度ということで、適当に10kΩにしました。

 

では、ドライブするものをR2=10kΩではなく、LEDにしてみたらどうなるでしょうか。早速回路図を以下のように変更してみます。

f:id:soraken:20141103231756p:plain

今度は、出力段にLEDを加えて、R2を100Ωにしました。R2をこの値にした理由は、まず、Q1が適切にドライブされている前提で、先程のオシロの測定結果から、Q1がOnしている時にTP2が0Vになっているので、R2とD1を合わせた電圧は5V(電源から供給される)、今回使ったLEDの仕様がよくわからなかった(その辺にあった物を使った)ので、大体2Vくらいと仮定して、またLEDを光らせるためには20mAかそれ以上あれば一般的に光るだろうけど、ちょっと暗いかもしれないので、マージンをとって30mA(この辺も例によって適当ですが)、またまたオームの法則から、

 V = I × R

 5 = ( 0.03 × R2 ) + 2

 R2 = 3 / 0.03

    = 100 (これ30mAの時)

という感じで決めました。

 

Trinketのプログラムは先程と同じで問題ありませんので、ちくちくちくっとブレッドボード上で回路を組んで、やってみました。 


Trinket PWM LED drive - YouTube

ちゃんと思惑通り、Trinket上の赤いLEDと同じ周期でブレッドボード上の黄色いLEDも明滅しています。ちょっと暗いかな。

 

ここまで結構大雑把にやってきましたけど、そこそこ思った通りにできてよかったです。まあまだLED光らせた(Lチカ)だけですけどね。