VGS(th) に結構バラつきがあるみたいで、データシートだと 0.8〜3V となっている。VGS = VDS ID = 1mA の条件が書いてあるから、たぶん温度変化について書いてあるんだと思うけど、よくわからない。

VDS= 5V, ID = 1mA ぐらいで、手元のをいくつか試すと。室温20度で、約2.28〜2.32V付近でスイッチする。指でつまんで温めると0.1Vぐらい下がったりする。おもしろい。

2.1V ぐらいまでスイッチできてほしいんだけど、なんかうまい手はないんだろうか。負荷側の電圧は決まってしまっているし、ほかの素子を探すしかないのかな。すごい困るというほどではないから、そこまではしたくない。

  1. トップ
  2. tech
  3. MOS-FET 2N7000
  1. トップ
  2. avr
  3. MOS-FET 2N7000
  1. トップ
  2. arduino
  3. MOS-FET 2N7000

Watch Dog Timer

ワッチドッグタイマー。基本はプログラムが意図しない挙動をしたときにリセットをかけるためのタイマー。

例えば、「常に1秒後にリセットをかけるワッチドッグタイマー」をセットして、ワッチドッグタイマーによってリセットされる前にメインプログラム側からワッチドッグタイマーをリセットする。もしプログラムが暴走してタイマーが初期化されなくなると、ワッチドッグタイマーがリセットをかけてくれる。

用途上、メインのクロックとは別のクロックで動いている。

Brown Out Detection

電源電圧を監視して、一定より下がったらリセットをかけてくれる。

もちろん瞬間的な電源電圧変動では反応しないようにヒステリシスな感じになってる。

  1. トップ
  2. avr
  1. トップ
  2. tech
  1. トップ
  2. arduino

1608 (1.6mmx0.8mm)のチップコンデンサを安いばっかりに現物見ずに買ってみたらだいぶ小さすぎた……

3216 か 2012 にしておいたほうがよさそう

とりあえず完成なので、今まで書いたやつのまとめで整理。

要求

  • 外に持ちだせるように小型で電池駆動できること
  • 電池交換をあまり気にしなくてもいいこと
  • 実用的であること

仕様

  • 短点・長点それぞれ1点のメモリー
  • スクイーズ
  • インヒビット
  • 無段階スピードコントロール (10wpm〜30wpmまで想定)
インヒビットについて

エレキーは片方のパドルを押したままだと、ずっとその符号が出続けるので、いいタイミングで手を離す必要がある。

このとき、どのタイミングで符号メモリーを効かせるかで使い勝手が大きく異なる。

  • 前の符号が終わった瞬間にパドルが押されていたら即メモリーさせるか
    • 前の符号が鳴っている間にパドルから手を離す必要がある
    • 前のめったキーイングが必要
  • 前の符号の直後のスペースが終わった瞬間にメモリーさせる
    • 前の符号が鳴り終わってからも多少時間がある
    • 落ちついたキーイングが必要

後者のほうが基本的に落ちついて打てる感じだけど、パドルを早く動かしすぎると変な符号が出たりする。一長一短な感じ。

このエレキーでは、これらの中間として、前の符号が終わってから、短点の長さ * 0.3 の間は「インヒビット」として押し続けていてもメモリーされない挙動にした。これは単に好みなので、ソースコードの定数で変えれるようにした。

回路図

前回とピンの使いかたが変わっているけど、あまり変更はない。

パドル入力には静電気サージ (ESD) 用にツェナーダイオードを入れた。AVR の仕様上「All I/O pins have protection diodes to both VCC and Ground」となっていてクランプダイオードが入っているみたいだけど、クランプされたのを消費する部分がどこにもないので前段で入れたほうがよさそう。

FET のゲートについてる 150Ω は電流制限用だけど、一応なくても動く。AVR のポートの絶対定格が 40mA なので 3V/20mA=150Ω。流れるとしても瞬間だけなんだけど、絶対定格を守るなら必要そう。

FET の GS 間の抵抗は入力オープン時に GS を確実に 0V にするためで、普通入れるみたい。AVR の出力ポートってローのときは吸い込み動作するしいらないんじゃ? と思ったけど、電源 OFF->ON からのタイミングとかいろいろなタイミングで入力オープンのとき不意にONになるとそのままになってしまうらしい。一応入れたほうがよさそう。

2.2MΩ の抵抗はパドルのプルアップ抵抗で、省電力のため外部に大きなのをつけてる。ただ、人体アースの電圧降下でもキーイングとみなされる(接点を触れるとキーイングされてしまう)ようになるので、善し悪しがある。

いろいろ突き詰めると部品点数が減らせない。

基板図

ステレオミニジャックでパドルと繋ぐようにしてるけど、別に直結でもいいと思う。その場合ジャック部分はいらない。

ボリュームは半固定として書いてあるけど、普通のやつのほうがいいと思う。基板取り付けの小型ボリュームだとお手軽だけどあまり手に入らないみたい。なんでもいいけど場所をとる。

ファームウェア

これだけしか書いてないけど、ATTiny13A だと 96.7% Full (990 bytes) なので、結構ギリギリです

CrossPack-AVR-20130212 の avr-gcc (GCC) 4.6.2 で開発

AVR ISP Mark II なら、Makefile 変更なしに make install で書きこみが走る。

ISP も回路を切断せずに一応動いて、書きこみもできるけど、キーイング出力にノイズが入るので注意が必要 (ブレークインを切っておくか、リグとは切断して書きこみする必要がある)。

電源と実測消費電流

  • CR2032
  • eneloop lite

あたりを想定

CR2032 (3V) は公称 3V、終止電圧 2〜2.5V 程度。約 225mAh 使い捨てだけど、よく売ってる。使い捨てなので限界まで動いて電池しぼりとって動かなくなるほうが効率的。

eneloop lite 2本だと公称は 2.4V (1.2*2)、終止電圧 2.0V (1.0 * 2) 程度で、単4で550mAh、コイン電池に比べると体積は大きい。lite 版のほうが用途的にはいいだろうと思う。エネループの場合普通のニッケル水素より自然放電が少ないのと、比較的高い電圧が長く続く。ただし過放電すると致命的なので、2.1V程度で動かなくなるのが理想。

最低動作電圧

本体の最低動作電圧は 1.8V 程度なので、スイッチング用の FET の Vth に支配される。

実測すると、最低動作電圧は室温20℃で2.3V 程度 (≒ FET Vth)

CR2032 で動かすなら、もっと低い電圧でも動いてほしいけど、もっとぎりぎりの別のFETにするほかない。

エネループの場合2本で2.3Vを切る (1本で1.15V) になるのは、だいたい70%〜90%ぐらい放電したあたりなようなので、これでも悪くはなさそう。

消費電流

消費はいろいろ工夫してみたので、結構減らせてる。

  • キーイング中: 96μA (約 0.1mA 実測)
  • パワーダウン中: 0.15μA
    • (測定不可なので、ATTiny13A の仕様書から。実測では 0.0μA未満の表示だった)

電源に CR2032 (225mAh) を使った場合、1日に2時間キーイングすると仮定すると、約1152日ほど持つ。1日8時間フルタイムでキーイングしても 292日ほど持つ。1日16時間キーイングし続ける廃人でも146日ほど持つ。

eneloop lite (550mAh) の場合、容量の70%程度使うまででも、1日2時間のキーイングで1971日ほど持つ計算になる。自然容量減を考えてもそこそこ持ちそう。

消費電流減の対策

具体的には以下のような対策をしてる

  • 動作周波数は内蔵 128kHz
  • FET でスイッチング (なのでキーイング端子に高電圧がかっているリグでは使えない。5Vとか12Vとかなら全然大丈夫なはず)
  • スピード調節用のボリュームにできるだけ通電しない
  • キーイング用のプルアップ抵抗を高抵抗に
  • できるだけアイドルモードで動くように
  • 10秒経過ですぐパワーダウンモードに移行
    • キー入力割込みで復帰するので特に違和感はないと思う

まとめ

かなり単純なものをしっかり各所考えながら作ってみたけど、いろいろと発見があった。ソフトウェアの変更がダイレクトに消費電力減に繋がったりするのは新鮮で面白い。

また、この程度の回路だと全素子の動作を考えながら作れるので、基本的なことを理解するきっかけになった。

次はもうすこし複雑なものを作りたい。

ref.

  1. トップ
  2. tech
  3. ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)
  1. トップ
  2. avr
  3. ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)
  1. トップ
  2. arduino
  3. ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)

金曜日の夜から急の鼻の奥が痛くなって、そのまま全身だるい感じで3日間ほど殆ど何もできなかった。こういうの本当にイライラする。やることいっぱいあるのになにもできない。

直列/並列共振回路の共振周波数

リアクタンスとの関係

インピーダンスの式

共振状態ではリアクタンス部(虚数部)はゼロになる (抵抗成分だけ)。

すなわち

はそれぞれ

共振状態のときの式に代入して f について解く (普通は角周波数 ω を使うみたいだけど、僕はなんか混乱するので全部展開しとく)

移項

両辺に をかける

両辺を で割る

両辺の平方根をとる

両辺を で割る

最悪リアクタンス部がゼロになれば共振ということがわかってれば、簡単に導ける。

変形して L/C を求めるとき

直列共振回路の Q

L か C のリアクタンスをRで割るイメージが覚えやすい気がする (抵抗Rが小さいほど高いQになる、というのがイメージしやすい) 直列に入っている R は単に損失なので、小さいほうがいいというイメージ。

↑ をそれぞれ で割っただけ

並列共振回路の Q

直列の逆数と覚える。並列に入っている R は小さいほど無駄に電流を流すので、大きいほうが損失がなくていいというイメージ。

  1. トップ
  2. tech

FET は電圧駆動なので電圧さえかければ電流を流す必要はない。

ただ、現実的にはFETの入力に寄生している容量を十分充電しきるまでは、電流が相応に流れ、オフにするときはすみやかにこの容量を放電することが求められる。なので容量が少なければ少ないほど早いのはイメージできる。

まではわかったけど、では実際にそれがスイッチングスピードにどう関わってくるか計算で求めるのがよくわからない。

例として 2N7000 の input capacity は最大で 50pF、150Ωの抵抗と3Vの電圧(最大電流20mA)で充電しようとすると、CRの過渡現象の例の式だけで考えると、電流は

ある時間におけるコンデンサの電圧を考える。コンデンサの電圧は電源電圧から抵抗での電圧降下を引いた値なので、

これをさらに t について解きたいけど、自分の力だと解けないので Maxima 君で解くと solve(v = E * (1 - %e^(-t/(C*R)) ), t);

で、各値を代入して計算すると

function t (C, R, E, v) {
	return C * R * Math.log(-(E / (v - E)));
}

// 入力電圧の9割まで
console.log(t(50e-12, 150,  3,  3*0.9)); //=> 約17ns
// 最低 V_th まで
console.log(t(50e-12, 150,  3,  0.8)); //=> 約2.3ns

になるけど、確かめようがない。それに、この速度が実際の FET の速度にどう関わってくるかわからない……

ググってでてきたpdf を見た感じだいぶ難しくて現時点の自分では理解できない。

要は知りたいのは、Gとグラウンド間に入れる放電用抵抗は最大どの程度にできるのか、ということなんだけど、よくわからない。大きすぎると放電に時間がかかりすぎて、オフにならなくなるのはわかる。まぁ実際試しみて定数決定するのが一番いいんだけど……

  1. トップ
  2. tech
  3. FET の入力容量と速度の関係がわからない