Arduino互換機を作りたい(3)
Atmega328P-PUの自動リセット回路を検討します。
一方、ArduinoのIDE(統合開発環境)は、ArduinoをRESETする際にシリアルのDTRをアサート(Onにする。負論理なのでLowにするとOn)します。
つまり、シリアルのDTRをAtmega328P-PUのRESETピンへ接続することが必要です。
ところで、これだけ読むと単にシリアル変換アダプタのDTRをRESETへ接続すれば良さそうなものですが、以下の書籍のどの回路図をみてもDTRとRESETの間にコンデンサが入っています。
- ボクのArduino工作ノート (鈴木哲哉さん著)
- 作って遊べるArduino互換機(鈴木哲哉さん著)
- たのしい電子工作 Arduinoでガジェットを作ろう (高橋隆雄さん著)
外部リセットはRESETピンのLowレベルによって生成されます。
(中略)
印加された信号の上昇がリセット閾値電圧(VRST)に達すると(遅延タイマを起動し)、遅延タイマは遅延時間(tTOUT)経過後にMCUを始動します。
え、ホント?ということで、またまたLTSpice登場です。
DTRが時刻0には5Vで、1m秒の間5Vを継続し、その後、1μ秒で0Vになって、それを3m秒継続して、次の1μ秒で5Vに戻るというシナリオです。
やはりDTRがHigh(5V)に戻った瞬間RESETピンは、10V近くになっています。
Atmega328Pのデータシートの図11-1 リセット回路構成には、「スパイク除去」という回路がRESETピンとRESET回路の間にあり、これが保護してくれて不具合の心配はないのかと思って調べたらこちらにAtmegaがハングすることがあるとの記述が。
対策として、RESETをpull upしている抵抗 と並列にダイオードを逆向きに入れるという手があることが書かれていました。
つまり、こういうことですね↓
回路図とシュミュレーション結果です。DTRの電圧変動のシナリオはコンデンサーだけのときと同じです。だいぶ軽減されています。RESETピンの電圧が5V+シリコンダイオードの順方向電圧(0.6V)を超えるとダイオードを経由して電源V2へ一気にコンデンサーが放電して極端な高電圧になることを防いでくれるということでしょうか。ところで、Atmega328Pのデータシートの図11-1 リセット回路構成を見ていると、RESETピンの内側で30kΩ~60kΩでpull upされています。ひょっとして、外でpull upしなくていいのでは?という気もしますが、Arduino UNO Rev.3の回路図を含めてどこで見かける回路図でもpull upしてますので(なぜ必要なんでしょう?という疑問はありつつも)、ここはそのままにすることに。
ということでまとまった回路図は↓です。
(追記:2013/9/4)
上のシミュレーションと回路図では手持ちのシリコンダイオードを使っていますが、順方向電圧降下が小さいショットキーバリアダイオードの方がさらに良いかと。
(追記ここまで)
(追記:2013/9/4その2)
シミュレーションにかなり適当(いい加減)なところがあることに気が付きました。DTRが立ち上がってきた時にRESETピンの電圧がどの程度上昇するかは、DTRが立ち上がるスピード、コンデンサーの応答、これらと密接に関連しますが、ダイオードを追加した回路の方であればダイオードの両端の電位差が順方向降下電圧を超えるまでの時間、超えてから電気が流れ始めるまでの時間に依存するはずですが、これらについては全く吟味していません。例えば、DTRが5Vになる時間がコンデンサの放電開始よりも早く、ダイオードの通電よりも早ければダイオードを入れた意味はなく、RESETピンの電圧は、10Vになるはずです。それから、ダイオードの選定ですが、手持ちの小信号用ダイオードを何も考えずに入れていますが大丈夫でしょうか?1N4148のデータシートを見ると「Non-repetitive Peak Forward Surge Current」という気のなるデータが。Pulse Width = 1.0 microsecond のとき、4.0A との記述が。DTRが立ち上がってきたときにダイオードを流れる電流がこれを超えるとまずそうです。コンデンサーに蓄積されている電荷Q = 0.1μF x 5V = 0.5μC (で、あってます?)。仮に1m秒で放電するなら0.5μC x (1/1m秒) = 0.5mA となります。大丈夫そうです。でも、1m秒かけて放電するという根拠は(くつしたねこの知識の中には)まるでないので、仮に1μ秒だったら0.5Aとなります。もう一桁くらい余裕がありそうですが、さてどうなんでしょう。こちらでは、同じダイオードを入れてからはトラブルがないとのことですので、とりあえず真似ておきます
(追記ここまで)
手動リセットの場合のシミュレーションもしておきます。LTSpiceに機械接点のスイッチは無いようですので、電圧制御スイッチ(Voltage controlled switch)で代用してみました。電圧が設定した閾値を超えるとスイッチがオンになり、閾値以下となるとオフになる部品です。使い方の詳しい説明は、キットと初歩の電子工作 LTSPICE入門 アーカイブ ー LTSPICE入門(27) 電圧制御スイッチについて で詳しく解説されています。それで、シミュレーション結果はこれ↓です。
スタートから1m秒後にスイッチがオンになり、さらに1m秒後にスイッチがオフになるシナリオです。問題ないようです。
つづく
(追記:2013/09/03)
これまで20番ピン(AVCC)は何も考えないで電源にだけつないでいました。このピンは、ADコンバータの電源を供給するピンです。電源なのでパスコン入れるかなと思って一応データシートに何か書いてあるか見てみました。そして、ATMEGA328Pのデータシートには、こんな記述がありました。
1.1.7 AVCC
AVCC is the supply voltage pin for the A/D Converter, PC3:0, and ADC7:6. It should be externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC through a low-pass filter.
ローパスフィルタを経由して、VCCにつなげとのことです。ということで、AVCCを電源につなぎつつ、グランドとの間にバイパスコンデンサをつなぐことにして、修正した回路図がこれ↓です。
(追記ここまで)
それでは、また!
« Arduino互換機を作りたい(2) | トップページ | 超簡単!無線マイコン TWE-Lite DIP がやって来た! »
「Aruduino」カテゴリの記事
- Arduino互換機を作りたい(3)(2013.09.02)
- Arduino互換機を作りたい(2)(2013.09.01)
- Arduino互換機を作りたい(1)(2013.09.01)
- Aruduinoで作るオシロスコープ(4)(2013.09.07)
- Aruduinoで作るオシロスコープ(3)(2013.08.25)
「電子工作」カテゴリの記事
- Arduino互換機を作りたい(3)(2013.09.02)
- Arduino互換機を作りたい(2)(2013.09.01)
- Arduino互換機を作りたい(1)(2013.09.01)
- Aruduinoで作るオシロスコープ(4)(2013.09.07)
- Aruduinoで作るオシロスコープ(3)(2013.08.25)
コメント
トラックバック
この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1939480/53108879
この記事へのトラックバック一覧です: Arduino互換機を作りたい(3):
« Arduino互換機を作りたい(2) | トップページ | 超簡単!無線マイコン TWE-Lite DIP がやって来た! »
応用すれば簡易的に10Vを作り出せそうですね。
投稿: ちじたぜ | 2017年10月27日 (金) 00時24分