Yandex を使用して、arduino タコメーターから非接触周波数カウンターを作成します。 回転数センサー

タコメーターは、回転している車輪などの RPM (1 分あたりの回転数) をカウントするのに便利なツールです。 タコメーターを作成する最も簡単な方法は、IR 送信機と受信機を使用することです。 それらの間の通信が切断されると、何かが回転していることがわかるので、コードを使用して通信切断の頻度に基づいて RPM を計算できます。

この記事では、赤外線トランスミッターとレシーバーを使用して、Arduino を使用してタコメーターを作成する方法を見ていきます。 結果は 16x2 LCD ディスプレイに表示されます。

このプロジェクトの目標は、1 つの入力と 1 つの出力を持つシステムを作成することです。 デバイスの入力には、通信障害の場合にハイ (+5V) からロー (+0V) レベルに変化する信号があります。 この信号に従って、Arduino は内部カウンターの値を増やします。 その後、追加の処理と計算が実行され、トリガーが中断されると、計算された RPM が LCD に表示されます。

通信には、低抵抗の抵抗を介して接続された IR LED からの IR ビームを使用して、明るく光ります。 受信機として、赤外線 LED 光がない場合に「閉じる」フォトトランジスタを使用します。 コンピューターのファンを IR 送信機と受信機の間に配置し、電源を入れます。 トランジスタ回路を介して接続された IR 受信機は、割り込みを生成します。 結果を表示するために使用されます アルドゥイーノ液晶インターフェイスを使用して、最終的な RPM 値を LCD に表示できます。

要素:
Arduino UNO
16x2 液晶
ブレッドボード
トリマ抵抗 5kΩ
ジャンパー
SIP コネクタ
2x 2N2222 NPN トランジスタ
赤外線LED
フォトトランジスタ
抵抗器 10 オーム
抵抗器 100kΩ
抵抗器 15kΩまたは16kΩ
コンピュータファン

詳細アイテム一覧

プロジェクトで使用されるすべての要素は上にリストされていますが、主な要素の機能について詳しく説明します。

Arduino UNO
これは、コンピューターのファン ブレードが受信機とセンサーの間にあることを知らせる IR 割り込みパルスを処理するために使用する Arduino ボードです。 Arduino はこれらのパルスとタイマーを使用して、ファンの RPM を計算します。

LCD ディスプレイ 16x2
Arduino が RPM を計算した後、この値がユーザーフレンドリーな方法でディスプレイに表示されます。

トリマ抵抗 5kΩ
このトリマーは、16x2 LCD のコントラストを調整するために使用されます。 0 ~ +5V の範囲のアナログ電圧を提供し、LCD の明るさを調整できます。

赤外LEDとフォトトランジスタ
強力な赤外線が当たると、フォトトランジスタが開きます。 したがって、IR LED がオンの場合、フォトトランジスタを開いたままにしますが、IR LED がファンブレードなどで覆われている場合、フォトトランジスタは閉じます。

2N3904 および 2N3906
これらのトランジスタは信号レベルを変換するために使用され、フォトトランジスタから +0 と +5V 以外の電圧がない Arduino に出力パルスを提供します。

回路図


図では、LCD 通信インターフェイスは簡略化されており、2 つの制御ラインと 4 つのデータ ラインしかありません。

回路の特徴

LCD ディスプレイ インターフェイス 16x2
Arduino から LCD に 2 つの制御ピンと 4 つのデータ転送用ピンが接続されています。 これは、何をいつ行うべきかを LCD に指示するものです。

赤外線ビーム遮断回路
IR ビーム ブレーク信号は第 2 デジタルに行きます Arduinoピン. これによりArduinoが中断され、Arduinoがパルスをカウントできるようになり、タコがデータを受信できるようになります。

Arduino LCD ライブラリ

このプロジェクトでは、Arduino LCD ライブラリを使用します。 基本的には、2 行目の RPM 値を新しい値に更新するだけです。

準備として、このライブラリを使用して LCD に「Hello, World!」を表示する以下のコードを見てください。 タコメーターでは、特に「lcd.print(millis()/1000);」という同様のコードを使用します。


先に進む前に、この LCD ライブラリの機能をできるだけ詳しく理解してください。 それほど複雑ではなく、Arduino Web サイトで十分に文書化されています。

Arduino での RPM カウント

コンピューターのファンの RPM を計算しようとしているので、IR ビーム割り込みを使用して計算していることを理解する必要があります。 これは非常に便利ですが、コンピューターのファンには 7 つのブレードがあることを考慮する必要があります。 これは、7 回の中断が 1 回転に等しいことを意味します。

割り込みを追跡する場合、7 回の割り込みごとに 1 回の完全な回転が発生したことを意味することを知る必要があります。 完全な回転にかかる時間を追跡すると、RPM を簡単に計算できます。

最初の回転の時間 = P * (µS/rev)
RPM = RPM = 60,000,000 * (µS/分) * (1/P) = (60,000,000 / P) * (RPM)

RPM を計算するには、上記の式を使用します。 式は正確であり、精度は Arduino が割り込み間の時間を追跡し、完全な回転数をカウントできるかどうかに依存します。

下の写真では、図のように必要なすべての部品とジャンパーを見ることができます。


最初に +5V と LCD データ/制御ラインを接続します。 次に、LCD、コントラスト ポテンショメーター、電源 LED です。


IRビームを遮断するための回路が組み立てられています。 IR LED とフォトトランジスタの間に距離を保つようにしてください。 この写真は、IR LED とコンピュータ ファンを配置するフォトトランジスタの間の距離を示しています。


ハードウェアの話はもう十分! ファームウェア/プログラムを作成して、デバイスがどのように機能するかを見てみましょう!

ソフトウェア部分

コードには 2 つの主要な部分があり、以下に詳細を示します。
・メイン液晶リフレッシュ周期
- 割り込み時間を更新

メインサイクルでは、回転数と LCD の更新がカウントされます。 メイン ループは巨大な while(1) ループであるため、常に実行され、RPM がカウントされ、LCD が 1 秒あたり数回更新されます。 割り込みの関数は IR 割り込み間の時間をカウントするため、メイン ループで RPM をカウントできます。

回転数センサーFC -03

速度センサーモジュールまたは 直線運動. モジュールタイプ FC-03。 家庭用および教育用のさまざまなメカニズムの可動部分の機械的パラメーターを制御するように設計されています。 小型ロボット工学のベース プラットフォームにインストールすると、エンジン制御システムを組み立てて、オブジェクトの動きを制御することができます。

車輪付きロボットのシャーシに回転速度センサー FC-03 を取り付けます。

特徴

電源 3.3~5V
スロット付きディスクのクリアランス幅 5 mm
モジュール寸法 38 x 14 x 7 mm
3mmネジ用取付穴

連絡先FC-03



連絡先はボード上にマークされています。

VCC は電源です。
GND- 共通線、負の電柱。
DO - パルス信号出力。
AO - ITR9608 オプトカプラーからの直接出力。

動作原理


モジュールの受信エレメントは、光ペア ITR9608 です。 赤外線 LED はハウジングの 1 つの棚にあり、別の棚にあるフォトトランジスタに向けられています。 不透明なプレートが突起の間のギャップに挿入されると、LED からの IR 放射がブロックされ、フォトトランジスタが閉じます。 このようなコンポーネントは、フォトインタラプタと呼ばれることもありますが、割り込みをラッチするだけです。 光束. トランジスタのエミッタからの図に示すように、信号はデバイス回路に入ります。

光は、制御機構の可動部分に固定されたプレートによってブロックされます。 センサーの助けを借りて、移動面の極端な位置への移動は、それに関連する構造要素がセンサーに入ると決定されます。 さまざまな機械部品の回転パラメータを測定します。 これは、機械パラメータが電気量に変換され、次にプログラム値に変換される方法です。

FC-03 回転速度センサーは、回転速度を測定するために使用されます。 回転方向の判別には使用できません。 モーターシャフトまたは減速機のギアに穴の開いたディスクが取り付けられています。 モジュールのフォトカプラには幅 5 mm のスロットがあります。 アニメーションに示すように、ディスクが回転すると、プレートの穴とセクションがスロット内で常に交互になります。 センサーは、ディスク要素の交替を電気インパルスに変換します。 モジュールの電子機器により、センサー信号をデジタルで読み取り可能にします ロジックチップまたはマイクロコントローラ。

図式FC-03




ITR9608 からの信号は LM393 コンパレータの入力に供給され、その出力から D0 ピンに供給され、インジケータ LED が供給されます。 デジタル信号ハイとローの論理レベルで構成されます。 出力 A0 は、ロジック レベルに変換せずに ITR9608 から直接供給されます。 LM393コンパレータを使用すると、滑らかなパルスエッジを取得し、センサー出力の現在の負荷をわずかに増やし、出力の状態を示す回路にLEDを取り付けることができます.

表示

ボードには 2 つの LED があります。 1 つは FC-03 回転速度センサーを含むことを示し、もう 1 つはセンサーに障害物がないことを示します。 最初の試運転では、両方の LED が点灯するはずです。 ブレーカーの空きスペースに金属板を差し込むと、LED が 1 つ消灯します。

応用

センサーの助けを借りて、回転速度、加速度だけでなく、車輪付きロボットが移動した距離も測定し、エンジンの寿命を記録することができます。 各ホイールが独自のエンジンで駆動される場合、ホイールの回転速度を制御することが特に重要です。 直線運動の場合、すべての車輪の回転速度は等しくなければならず、回転中は制御システムのアルゴリズムに従います。


ディスクが回転すると、既知の数の穴が 1 回転でセンサー スリットを横切ります。 穴の数を数えることで、ホイールの 1 回転、たとえば 15.5 回転を判断できます。 単位時間あたりの回転数を測定することで、車輪の回転数、つまり物体の速度がわかります。 センサーからの信号と時間間隔の正確な値に基づいて、デバイスは動きのパラメーターを計算します。 ここでマイクロコントローラの出番です。
次の Arduino プログラムでは、1 分あたりの回転数を決定し、結果をシリアル ターミナル ウィンドウに出力できます。

#define PIN_DO 2 // Arduino が使用するピンを設定
volatile unsigned int パルス;
フロートrpm;
署名されていない長い時間古い;
#定義 HOLES_DISC 15

ボイドカウンター()
{
パルス++;
}

ボイドセットアップ()
{
Serial.begin(9600);
pinMode(PIN_DO, INPUT);
パルス=0;
timeOld = 0;

}

空ループ()
{
if (ミリス() - timeOld >= 1000)
{
detachInterrupt(digitalPinToInterrupt(PIN_DO));
rpm = (パルス * 60) / (HOLES_DISC);
シリアル println(rpm);

TimeOld = ミリ秒 ();
パルス=0;
attachInterrupt(digitalPinToInterrupt(PIN_DO), カウンター, FALLING);


32:20 - ファームウェア アルゴリズム 16 および 18
36:50 - ファームウェア変数
40:40 - ホールセンサーのピックアップ

ここで説明されているレギュレーターを組み立ててテストした後: https://shenrok.blog...t=1489156293398
指定された速度をサポートするファームウェアのインストールを開始できます。 しかし、最初に、ホール センサーの問題について考えてみましょう。
タコジェネレーターをホールセンサーに置き換えることは、まったく難しくありません。 動画の5:48より詳しく話しています。 しかし、どれを入れますか? デジタルホールセンサー、できればバイポーラが必要です。 それは2倍以上の信号を出すからです。 そして、これは小さな革命にとって非常に重要です。 これは私のエンジンの 1 つです。 SS441 .

検討 PID_12:
スケッチの最初に、必要な値を入力する必要がある行があります。

int obMax = 6000; //最大回転数を入力

float kImp = 120; //10回転あたりのパルス数を入力

最初の行に、必要な最大回転数を入力します。 2つ目は最小限です。 3 行目には、シャフトの 10 回転に対するセンサーのパルス数を入力します。 4 行目には、最小速度電流を制限する数値を入力する必要があります。 最小回転数と負荷によって異なります。 そして5番目-ファームウェアNo. 6でエンジンが回転を開始する数(これに注意を払いました)。
次に最も重要なことです。 PID コントローラの係数を調整 (選択) する必要があります。 それらはスケッチの 19 行目にあります。
PID myPID(&入力、&出力、&セットポイント、 0.01 , 0.2 , 0 、 直接);

検索により、構成する方法がいくつか提供されます。どの方法でも使用できます。 でも正直なところ、私はこのレギュレーターがあまり好きではありませんでした。 というか、設定する気力がなかったのかもしれません。

検討 _16:
スケッチの主な変数は、PID コントローラーと同じです。

int obmin = 200; //最小回転数を入力


intminzn = 115; // 回転が始まるトライアックの最小値。
int ogrmin = 70 ; // 最小速度でのトライアック リミット。
int mindimming = 80; // マシンジャム時のトライアック値 (初期インパルス)

そして、それらは同じ方法でインストールされます。 しかし、2 つの値が追加されました。 それ マシンが詰まった状態でのトライアック値 (初期インパルス) このように選ばれています。 ファームウェア No. 6 では、シャフトのみがアイドル状態でない場合、シャフトに最小限の小さな負荷を与えます。 そして、レギュレーターを回転させ始めます。 シャフトが回転し始める番号に注意する必要があります。 この値は、マシンに初期インパルスを与えるために必要です。 この数は非常に条件付きで、ある程度の許容範囲が許容されます。 調整と選択が必要な主な変数は、 レブトレランスマイナスとプラス. これは、制限内でエンジンの速度が安定することを意味します。 さまざまな速度でのアイドル時と負荷時の両方で、エンジンがジャークなしで回転する最小値を見つけます。 このファームウェアは、指定された制限内で回転の安定性をすでに提供しており、おそらくこれで十分です。 回転数を正確に安定させる必要がある場合は、次の縫製に進みます。

検討 _18:

すべての値は以前のファームウェアから転送されます。

int obmin = 200; //最小回転数を入力
int obMax = 9000; //最大回転数を入力
int kImp = 120; //10回転あたりのパルス数を入力
intminzn = 115; // 回転が始まるトライアックの最小値。
int ogrmin = 70 ; // 最小速度でのトライアック リミット。
int mindimming = 80; //ジャム時のトライアック値(初期インパルス)
int dopusk = 200 ; //マイナスとプラスの回転の許容範囲
イントラレース = 50; //加速度変数 1 - 100

加速または滑らかさの値のみが追加されました。 値が 1 の場合はスムーズに安定し、値が大きくなるほど加速が激しくなります。 上限は非常に大きいですが、100 (私の場合) 以降は変化がありません。

並行開発: http://www.motor-r.i...og-page_19.html

チップメーカーのレギュレーターのバリアント:

詳細、どこで注文するかについて多くの質問があります。 私は自分用にセットを注文しました。あなたと共有します。

そして、リバースと保護のためにリレーのブロックを注文しました。 補足いたします。

あなたの質問に基づいて、記事は補足されます。 だから私たちは尋ねます。

それでは、フィードバック速度コントローラーの調整と改良を続けましょう。
ここから始める:
1 アイデアと開発
2 PID コントローラー
3 レギュレーターの組み立て、段階的な説明
4 つの質問 - 回答、ヒント、作業アルゴリズム
5 公差の設定、オーバーフローに関連するジャークの除去、2 速のトグル スイッチ、トライアックの故障から保護するためのリレー。

このレギュレーターをすでに作成している人は、許容変数を見つけるのが非常に難しいという問題に遭遇しました。 列挙方法は長くて不便です。 そして、低速と高速での許容範囲が異なる場合があることがわかりました。 したがって、最小速度と最大速度の両方でこの値を一度に非常に正確に選択するのに役立つファームウェアが作成されました。
これを行うには、10 kΩ の可変抵抗を中央の接点で arduino のピン A3 に一時的に半田付けする必要があります。 いつものように、抵抗の極端な接点は+と-にはんだ付けされています。
ファームウェアをアップロードした後 nastroyka_dopuska で、最初にマシンまたはエンジンに関連するすべての変数を入力します。 主なものは、マシンで必要な最小回転数と最大回転数、およびスピンドルの 10 回転あたりのパルス数です。
ビデオに示すように、許容範囲を選択します。 その後、受信したデータをファームウェア 18 に入力して使用できます。 このファームウェアで表示が改善されました。 あなたが尋ねたからです。
ファームウェア: https://drive.google...iew?usp=sharing


次に発生した問題は、特定のエンジン回転数で「ジャーク」が発生することでした。 その理由を理解するために、tic 変数の値をコンピューターに送信するファームウェアが作成されました。 これは、ホール センサーからの信号間で通過するサイクル数です。 データは、SerialPortPlotter プログラムでグラフ形式で表示されました。




相談の結果、センサーからの信号が65535サイクル後に発生するカウンターのオーバーフローと同時に到着すると、障害が発生することが判明しました。 失敗しないための方法も教えていただき、とても感謝しています。

次に直面した課題は、リレーを使用してトライアックを故障から保護することでした。 そのため、設定した回転数を一定以上超えるとリレーが作動してエンジンが停止します。
将来的にはそれらを介してエンジンリバースを実装するため、4個のリレーブロックを使用します。 ただし、リバースが必要ない場合は、1つのリレーで十分です。


GND接点にマイナスを適用し、VCCにプラス5ボルトを適用し、IN3とIN4をarduinoのA1ピンに接続します。これはリバース用で、IN2はA2ピンに接続します。 この連絡先は、電源ボードをオフにする責任があります。 ファームウェアのアップロード proverka_rele 、リレーは 1 秒間オンとオフを交互に繰り返す必要があります。 2 つのペアと 1 つの個別。 すべてが正常に機能する場合は、この単一のリレーを介して電源ボードに接続するワイヤを実行し、ファームウェアをアップロードできます roos_zashita_1 そしてコントローラーを使います。 ここでジャークが排除され、保護が実装されます。

また、3 ポジションのリバース用トグル スイッチと、必要に応じて速度範囲を分割するトグル スイッチをすぐに取り付けて接続することもできます。 私のマシンでは、旋削用の最初の速度を 100rpm から 2000rpm に、研削用の 2 番目の速度を 1500rpm から 5000rpm にしました。 次の方法でそれらを接続します。

スケッチをアップロードして確認する proverka_tumblerov トグルスイッチの位置を変えると、画面上の数字が変わります。 変更が発生した場合は、ファームウェアをアップロードできます roos_zashita_2speed そして楽しんでください。

すべてのファームウェアで、必要な値を入力する必要があることを忘れないでください。
ファームウェア:
シグネット----リバースとブレーキ用の2つのリレー付きhttps://wdfiles.ru/dr8k

シグネット ---- SMD コンポーネントと インパルスブロック D6MG ケース用電源 https://drive.google...T0JOd2pFZjI3SmM

リレー 12v の場合、ジャンパーをマーク 12 に移します。
リレーの場合、5v はすでにマーク 5 にある
リレーのダイオードを導体の側面からボードに直接はんだ付けします。
リレーに ULN2003 ダイオードを搭載したボードの場合は不要です。

選択するシグネットによってパーツリストが変わります。

抵抗器 10k 0.25W-2pcs
抵抗器 4.7k 0.25W-1pc
抵抗器 2k 0.25W-1pc
抵抗器 470 0.25W-1pc
抵抗器 100 2W-1pc
抵抗器 360 0.25w-2pcs
抵抗器 5k 0.25W-1pc (リバースボタン)
トリマ抵抗 10k-1pc (LCD ディスプレイ用)
可変抵抗器 10k-1pc (レブツイスター)
トリマー抵抗 10k (脚 A3 あたり)
ダイオード RL205 1個
コンデンサ 100n 600V-1個 С4
コンデンサ 0.05mf -1pc C3
トライアック BTA24-600 (BTA16-600) ラジエーター上
PC817C-1個
MOC3021-1個 (MOC3023)
L7805CV-1pc
ダイオードブリッジはボード上のGBL04-E3 / 51(KBL04)と同じもの、ダイオードブリッジ4A 400V
ボード上の端子台 - ダブル - 7 個、
リレー JS1-12V 2 個 5v にすることができます
電解コンデンサ 100 マイクロファラッド * 25v -2 個 (C1 および C2)
チップULN2003A - 1pc

変圧器 - あなたが見つけることができるもの (1.5-3W)
3 ポジションスイッチ - 1 個
Arduino用ソケット -1pc

機内で利用可能、記載されていません
arduinoの下の回路の抵抗は10kです(トラックの側面からですか、それとも問題ですか?)導体の側面からボード上ですが、上に置くこともできます。 また、速度制御範囲を2つのサブ範囲に分割する人に必要です。
リレーへのボードの裏側にあるダイオード - 何? 答えは可能な限りです RL205
トランジスタ BC 550 - 2 個のトランジスタも arr のいずれかです。 発行者 あなたはkt 315またはkt3102をすることができます

回路バリアント
スキームの修正版

添付画像




投稿は編集されましたorio55: 2017 年 5 月 1 日 - 20:05

エンジン速度センサー モジュールは、主にモーター シャフトの回転速度を検出するように設計されています。 このモジュールは、マイクロコントローラと共に、速度に加えて、パルス数とシャフトの位置を決定できます。



通常、センサーは特定のイベントを記録することによってマグニチュードを測定し、イベントの数はそれらが発生した期間と相関します。


したがって、この場合、速度が測定されます。ここでのイベントは、スロット付きディスクの回転中に光学センサーが動作した結果として受信したインパルスとして理解されます。 センサーは、LED と、LED 放射の有無を感知するフォトトランジスタで構成されています。


図式


提示された回路を使用して、登録されたパルスをマイクロコントローラーに送信できます。 回路の基本は、LED とフォトトランジスタ出力を備えた光学センサー OS25B10 (OC1) です。


次は、単純なシュミット トリガとして構成された LM393 デュアル コンパレータ IC (IC1) です。 緑のLED(LED1) は回路に電圧が印加されていることを示し、赤色の LED (LED2) はモーター速度センサー モジュールの出力を監視します。 おすすめされた 動作電圧モジュールは 4.5 ~ 5.5 V です。




ここでは抵抗 R1 (180 オーム) を使用して、光学センサー OS25B10 (OC1) 内の LED の動作電流を制限していることに注意してください。 必要に応じて、プロトタイプの値を変更できます。 また、抵抗 R2 (10 kΩ) の値を調整して、回路に必要な電圧を得ることができます。 抵抗 R7 (10 kΩ) はオプションのプルアップ抵抗です。


エンコーダーディスク


センサー スロットに配置されたエンコーダー ディスクは、ディスクの片側に LED が存在し、反対側にフォトトランジスターが存在するように、光センサーを分離します。 LED からの光ビームの経路がディスクによってブロックされていない場合、フォトトランジスタは電流を流し、それ以外の場合は閉じます。

これは、車の速度とエンジンのクランクシャフトの回転数を測定するデジタル装置を表しています。 インジケータはLCDタイプの1602Aで、HD44780コントローラに基づいています。

1602A という指定は、実際には、1 行あたり 16 文字の 2 行にあることを意味します。 このインジケーターはAliexpressで購入され、リクエストに応じて「HD44780」(81ルーブルからの価格)で見つかりました。 すでに述べたように、このインジケーターには 2 つの行があります。 したがって、デバイスは上の行に車の速度を示し、下の行にエンジンのクランクシャフトの速度を示します。

Orion-BK などの多くのオンボード コンピューターや LED 7 セグメント インジケーターを備えたデバイスとは異なり、この LCD ディスプレイは、バックライトがオンのときに非常に鮮明です。 シャープな画像、光の中でも夜の暗闇でも完全に見えます。これは、自動車の操作において特に重要です。

デバイス回路は既製のものに基づいています Arduinoボード ATMEGA328マイクロコントローラーが配置されているUNOと、USBプログラマーや電源など、その操作に必要なすべての「ストラップ」。

同じ「Aliexpress」でのARDUINO UNOの費用は200ルーブルからです。 ARDUINO UNOボードの説明、および ソフトウェアパソコンとの接続はL.1に書いてあるので、ARDUINOとは何か、「何と一緒に食べるのか」がわからない人はL.1の記事を先に読んでください。

このデバイスは、電源によって車のイグニッション スイッチ出力に接続され、ホール センサーから信号を受信します。そのうちの 1 つはイグニッション センサーで、もう 1 つは速度センサーです。

回路図

この装置は、噴射エンジンを搭載した車でのみ動作します (キャブレターには速度センサーがなく、すべてに点火センサーがあるわけではありません)。 デバイスの図を図 1 に示します。この図では、ARDUINO UNO ボードが「上面図」として概略的に示されています。

米。 1。 回路図 Arduinoベースのスピードメーターとタコメーター。

ポートをセンサーと一致させるために、トランジスタVT1およびVT2のカスケードが使用されます。 電源はイグニッションスイッチの出力から供給されるため、イグニッションがオンのときのみ動作します。 車のイグニッション センサーと同様に速度センサーはインパルスの発生源であり、その周波数は車の機械部品の回転に依存します。

4 気筒ガソリン エンジンを搭載した自動車のイグニッション センサーは、クランクシャフトの 1 回転あたり 2 つのパルスを生成します。 エンジンが 4 気筒でない場合、パルス繰り返し率は異なります。

速度センサーは異なりますが、ほとんどの場合、特に国産車に当てはまり、1 km あたり 6000 パルスを出力します。 1 キロメートルあたり 2500 パルスを出すものもありますが、それ以外の場合もあります。

プログラム

詳細なコメントを含む C++ プログラムを表 1 に示します。プログラムの動作は、センサーからのパルスの周期を測定し、クランクシャフトの速度と速度を計算することに基づいています。

表1。 ソースプログラム。


これを機能させるには、入力パルスの正または負のエッジの持続時間をマイクロ秒単位で測定する pulseln 関数が使用されます。 したがって、周期を調べるには、正と負の半サイクルの期間を追加する必要があります。

ここで、T は秒単位の周期、F は km/h 単位の速度です。 周期はマイクロ秒単位で測定されるため、実際の式は次のようになります。

センサーが 2500 パルス/km (日本語) の場合、式は次のようになります。

したがって、期間がマイクロ秒単位で測定されるとすれば、次のようになります。

クランクシャフトの速度を測定するには、次の式を使用します。

ここで、T は周期 (秒単位)、F はクランクシャフト速度 (回転数/分) です。 周期はマイクロ秒単位で測定されるため、実際の式は次のようになります。

次に、LCD の対応する行に結果が表示されます。 単位は「km/h」と「ob/type」で表示されます(気に入らなければ変更可能)。

たとえば、イグニッションがオンになっているが、エンジンが始動していない、動かなかったなど、入力信号がない場合は、信号がない行に「inf」と表示されます。

原則として調整は不要です。 ただし、特定の車両の速度センサーが 1 km あたりに何回のパルスを出力するかわからない場合は、まずこれを明確にする必要があります。

または、期間で割った数値を実験的に調整し、ダイヤル速度計で確認しますが、これは非常に面倒であり、通常の速度計が故障している場合は不可能です (これがこのデバイスの製造の理由である可能性があります)。

ただし、速度センサーのパラメーターを知っておくことをお勧めします。 そして、プログラム内で期間で割った数を計算します。 この数値を X とし、1 km あたりのパルス数を N とします。次に、X は次の式を使用して計算できます。

X = 3600000000 / N

たとえば、センサーが 1 キロメートルあたり 2500 パルスを出すとします。

X= 3600000000 / 2500 = 1440000

または、センサーが 1 キロメートルあたり 6000 パルスを出力する場合:

X= 3600000000 / 6000 = 600000

ついに

デバイスに障害が発生した場合、抵抗器 R3 と R6 の抵抗値とコンデンサ C2 と C3 の容量を選択することにより、トランジスタ VT1 と VT2 の入力段の動作モードをそれぞれ最適化する必要があります。

カラフキン V. RK-12-16。

文学:

1. Karavkin V. Arduino のクリスマス ツリー フラッシャーは、マイクロコントローラーに対する恐怖の救済策として。 RK-11-2016。