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)