ここから本文です

arduino で車速信号を拾って0-255または0-1023で内部処理したいのですが なかなか...

aku********さん

2018/7/207:02:18

arduino で車速信号を拾って0-255または0-1023で内部処理したいのですが
なかなかいい案が思い浮かびません。
どなたか教えてください。

duty比50%固定で周波数のみ変更の信号だと思います。

https://ehbtj.com/electronics/calc-speed-rpm/

閲覧数:
99
回答数:
3

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

fri********さん

2018/7/209:26:44

車速信号を5Vに波形整形して割込入力(D2)し、
16bitタイマーのタイマー1を使って
入力パルスの周期を計測するのが簡単です。

long timer1; //周期
float t_facter=*** //周期から車速への換算率

void setup() {
TCCR1A = 0; //タイマー1設定:標準タイマー
TCCR1B = 0; //タイマー1設定:プリスケーラ無し
attachInterrupt(0, irq_handle, FALLING); //割込許可
TCNT1 = 0; //タイマー1クリア
}

void loop() {
//車速を使いたい時に周期から換算します
int Speed = timer1 * t_facter;
}

void irq_handle() {
timer1 = TCCR1B; //タイマー1の値を取り込み
TCNT1 = 0; //タイマー1クリア
}


車速信号の周波数によっては適宜プリスケーラを設定して
タイマー1がオーバーフローしないようにしてください。

タイマー1を占有するので、他の用途には使えません。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

nac********さん

2018/7/209:27:37

> 0-255または0-1023で内部処理したい
この部分の意味が判りません。(勿論8ビットか10ビットというのは判りますよ)
車速をその分解能にしたい、という事でしょうか?
それなら上限値を仮定して、それを255や1023に割り当てればいいのでは?

実際のところ、「いい案」と聞かれても、何に困っているか自体が判らないのですが…。
周期、もしくは周波数を測り、そこから、前記の分解能の値にして、内部処理する、
で、何が問題になっているのでしょうか?

dai********さん

2018/7/208:59:41

arduinoに使われているマイコンにはタイマー/カウンターというペリフェラル(周辺機能)があります。

そのペリフェラルを用いることによって入力パルスの周期(間隔の間に何クロック数えられたか)を測定することができます。

タイマー/カウンターには8ビットの物と16ビットの物がありますから質問のどちらも可能です。

周期が判れば逆数にして周波数が判ります。

周波数は車速に比例しますから係数をかければ換算できます。

入力信号はマイコンの入力レベルに合わせて整えてください。できればフォトカプラーなどで絶縁してください。

あくまで車速の参考データぐらいに考えてください。正式には自動車に付いた車速計の値を元に公道では走行してください。

自分で作ったものは自分で責任を持ってください。人に迷惑をかけることもあるのですから・・・

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる