ArduinoUNOのA0ピンでanalogreadして最短数us程度の信号電圧を入力してしきい値以上か以下かの判定に用いてます。
しかし信号電圧がしきい値以上になっているのに、しきい値以上で入るルーチンに移行しない(検出できていない?)ケースがあります。
ちなみにしきい値以上になるとD10ピンを10mshighにするだけのコードを書いてます。
この信号の取りこぼしの原因は信号電圧が発生している時間が短すぎるからでしょうか?
ひとつ不安点があるとすれば2台のUNOを同時に使い、片方のボードの5v端子とanalogreadしているボードの5v端子を結線していて、片方のボードが受けたバスパワーを共用しており、電圧と電流が不足しているのでは?と思っています。
回路は組んでしまっていて容易に変更出来ないので質問させて頂きました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ただ単に電圧レベルが低いロジックパルスをみたいだけの場合は
ロジックレベル変換回路を組んでデジタル信号として割り込みかける
電圧にアナログ的な意味はあるが、特定の電圧を超えるかどうかだけが知りたい場合は
コンパレータで比較する回路を組んでデジタル信号として割り込みかける
パルスの高さに意味がある場合は
ピークホールド回路を組んでAD変換するか十分高いサンプリングレートのADCを使う
回路は組んでしまっていて容易に変更出来ない
そもそものアプローチがおかしいものをプログラムで無理してやるほうが大変です。
投稿2019/11/15 01:55
総合スコア13551
0
はい短すぎます。
ADコンバータの性能はものにより様々ですが、
ArduinoUNOのレベルのCPUですと信号の取り込みに最短数μs(信号のインピーダンス次第でもっと)、変換に10μsといったところでしょうか。
それにループを回る分でC言語ならもう数μsくらい見ておくべきかなと。
ではどうするかですが、この目的ならアナログコンパレータを使うのがよいです。
コンパレータは閾値との上下しか見ない分ADコンバータに比べ応答が速く、数μsくらいなら多分反応できます。
加えて、ポーリングでは時間的にややつらいので割り込みを使った方がよいです。
データシートを見てみました。
「Table 29-15. ADC Characteristics」を見ると、
Conversion Timeは最小で13μsであり、数μsの信号を捉えるのは厳しそうです。
ただ、Input Bandwidthが38.5kHzというのがちょっと分からないところで、これが38.5kHz以上の信号は通さないということなら、それ未満の信号も鈍って13μsのサンプリングで捉えられるようになるかもしれません。
ただ、やはりコンパレータの方がよいでしょう。
「Table 30-1. Common DC characteristics」を見ると、
Analog Comparator Propagation Delayが(Vcc=4.0V時)500nsです。詳しいことは知りませんが雰囲気的に数μsの信号を捉えるのに十分そうです。
また、ADCの入力をコンパレータに回すことができるようなので、回路の変更も外付け抵抗だけで済みそうです。
Arduinoのコンパレータの使い方は頑張って調べてください。
投稿2019/11/15 01:10
編集2019/11/15 19:30総合スコア3047
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
UNOだとデフォルトのanalogReadは約100usかかるようです。
下記を加えると、約15usまで高速化できます。(計算上は13usらしい)
C
1ADCSRA = ADCSRA & 0xf8; 2ADCSRA = ADCSRA | 0x04;
検出したデータを処理する時間も含めサンプリングレートを計算し、それが要求されている機能の要件を満足できるものなのか確認してみてはいかがでしょうか。
無理であれば、もっと高速なデバイスを利用するしかないのでは。
投稿2019/11/15 00:54
総合スコア1722
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/15 01:11 編集
2019/11/15 01:45
2019/11/15 19:08
2019/11/15 23:20
0
簡単に言うと、analogread関数を実行した瞬間のアナログ値を読んでます
これはいいですね?
その数usecのパルスのときにドンピシャでその関数を実行できればいいですが、そうできてますか?
たとえ無限ループでanalogreadを実行してたとしても、一発の数usのパルスを読み出せる確率はかなり低いと思いますよ
投稿2019/11/15 00:14
総合スコア88038
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/15 00:36
2019/11/15 01:32
2019/11/15 23:21
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/15 23:13