[PR]当たる!無料占いで仕事鑑定:大人気!無料占い『スピリチュアルの館』


回転計の実験 2009.03.03(火)〜
著作者名: 中野 良知 作成開始: 2009.03.03(火) 更新 : 2009.03.29(日) △1 ゼネラルフローチャートを追加。
目次 1. 目的 2. 概要 3. ブロックダイヤグラム 4. 回路図 4.1. センサーI/F 4.2. メイン 4.3. 7segLED 5. ゼネラルフローチャート 5.1. メイン 5.2. センサー信号入力 5.3. インターバルカウント 5.4. 除算 6. 実験の経過 1. 目的 スピンドルの回転計を製作します。 2. 概要 計測範囲 : 回転計 1rpm〜983,606rpm。 : 周波数カウンター 1Hz〜888,888Hz。 計測誤差(*1) : 回転計 1〜983,606rpm 表示値の±0.2%以下。 : 周波数カウンター : 1Hz〜100,000Hz 表示値の±1.25%以下。 : 1Hz〜888,888Hz 表示値の11.1%以下。 使用マイコン : ATtiny2313。 使用クロック : 内蔵RCクロック8MHz。分周比=1/1。 計測トリガー : 立下りエッジから次の立下りエッジまでのインターバルを計測。 表示 : 7segLED 6桁。フロートビット点灯方式。 (*1) 内蔵RCクロック8MHzの誤差を0%とした場合。 3. ブロックダイヤグラム ┌─────────┐ ┌────┐ ┌─────┐ ┌──────┐ │フォトリフレクター├─┤波形整形├─┤ATtiny2313├─┤7segLED 6桁 │ └─────────┘ └────┘ └──┬──┘ └──────┘ ○PD1 Hi=回転計 Lo=周波数計 4. 回路図 回路図はPDF形式で保存してあります。Adobe Readerでご覧下さい。 4.1. センサーI/F フォトリフレクターとのI/Fで、 1) 74HC14を使った回路 2)トランジスタによるシュミット回路 の2種類です。 センサーI/F回路図(PDF) 4.2. メイン センサーI/Fに74HC14を使用した回路図です。 メイン回路図(PDF) 4.3. 7segLED 7segLED6桁、フロートビット点灯方式。 フロートビット点灯の原理は、AVR LessonA_08を参照してください。 7segLED回路図(PDF) △1 5. ゼネラルフローチャート 5.1. メイン (main) │ No <インターバル計測終了?>─────┐ │Yes │ │ No(周波数計モード)│ <回転計モード?>────┐ │ │Yes │ │ │ │ │ 分子=480000000 分子=8000000 │ │ │ │ ├───────────┘ │ │ │ 分子÷インターバルカウント │ │ │ 10進数に変換(6桁) │ │ │ ├────────────────┘ │ 7segLED表示 │ (mainへ戻る) 5.2. センサー信号入力 (INT0立下り割込み) │ <インターバル計測中?>──────┐ │No │ │ │ タイマー1スタート タイマー1ストップ │ │ インターバル計測開始 インターバル計測終了 │ │ (終了) (終了) 5.3. インターバルカウント タイマ1は0.125usec毎にカウントアップし、65536カウント(8.129msec)でオーバ ーフロー。8.129msec毎に割込みが発生します。 (タイマ1オーバフロー割込み)(8.129msec毎) │ i_cnt0++ │ No <オーバーフロー?>───┐ │Yes (2.097sec毎) │ │ │ i_cnt1++ │ │ │ ├───────────┘ │ (終了) 5.4. 除算 除算はシフトと減算を組み合わせて実施。 (除算) │ 答えを初期化 │ 被除数の最大ビット位置(MSB1)を探す │ 除数の最大ビット位置(MSB2)を探す │ Yes <除数が0?>───────────(終了) │No │ MSB位置の差分を計算。MSB2-MSB1 │ Yes <被除数<除数?>─────────(終了) │ 倍率を初期化=1 │ 除数をMSBの差分左シフト │ 倍率をMSBの差分左シフト │ (除算1) │ 被除数=被除数ー除数 │ Yes <ボロー有り?>──────┐ │No │ 倍率を答えに加える │ │ │ (除算1へ戻る) │ │ ┌────────────┘ │ Yes <MSB位置の差分=0?> ───┐ │No │ │ │ 除数を右シフト(1/2) │ │ │ 倍率を右シフト(1/2) │ │ │ MSB位置の差分-- │ │ │ (除算1へ戻る) │ │ ┌────────────┘ │ (除算2) │ 被除数=被除数ー除数 │ Yes <ボロー有り?>──────┐ │No │ │ │ 答えを++ │ │ │ (除算2へ戻る) │ │ ┌────────────┘ │ 余り=被除数+除数 │ (終了) 6. 実験の経過 2009.03.23(月) 周波数計に対応。 PINDのPD1=Hiで回転計。 PD1=Loで周波数計。 計算式の分子の値をPD1の入力で切換えます。 計算式 f[Hz]=1/(0.125usec×N)=8000000/N。 rev[rpm]=1/(0.125usec×N)×60=f×60=480000000/N。 0.125usecはインターバルカウントパルス周期。Nはインターバルカウント値。 分母=インターバルカウント値 ↓ <PD1>0→────────┐ ↓1 │ 分子=480000000 分子=8000000 │ │ ├───────────┘ ↓ 割り算へ 2009.03.22(日) ケースに収納。 W65×H35×D100。 2009.03.18(水) 基板製作、動作チェック。 main基板(上):LED ONで計測中。 LED基板(下) :ドット点滅で計測値の変換と表示。 2009.03.16(月) 回転センサー用ホルダーを製作。 2009.03.12(木) 軸の回転検出。 1.8度ステッピングモータを1/8分割で駆動。ステップパルス周波数=5.4KHz。 幅約3mmの黒い紙を軸に貼り付けて計測。 回転計の表示 2009.03.10(火) フォトリフレクターをピンソケット(2×2)にマウント。 レンズ部拡大。左:フォトトランジスター。右:フォトダイオード。 2009.03.09(月) インターバル計測開始と停止のタイミング調整。 TINT0(PD2)の割込み発生からTCCR1Bの設定までの実行命令サイクル数が、カウント の開始と停止で同じサイクル数になるように調整。 INT0割込み処理 INT0割込み処理 ├─────┤ ├─────┤ ──┐ ┌─── ─ ─ ─ ───┐ ┌────── └───────┘ └───────┘ ├───┤(17命令サイクル) ├───┤(17命令サイクル) ↓ ↓ カウント開始 カウント停止 TCCR1B=$02 TCCR1B=$00 ├─────── ─ ─ ─ ───────┤ インターバルカウント期間 17命令サイクル×0.125us=2.125us。カウント開始の遅れをカウント停止で補正。 2009.03.05(木) インターバルカウンタをタイマー0(8bits)からタイマ1(16bits)に変更。 プリスケーラーの分周比を1/1に設定しタイマークロックを0.125usecに変更。 16bits 8bits 8bits ┌───────┐8.192ms ┌───┐2.097s┌───┐ 0.125us→┤TCNT1H,TCNT1L ├───→┤i_cnt0├──→┤i_cnt1│ └───────┘ └───┘ └───┘ ├────────────────────────┤ 回転数/周波数に変換する範囲(32bits) カウント範囲 回転計 1rpm :480,000,000カウント 999,999rpm:480カウント 周波数計 1Hz :8,000,000カウント 999,999Hz :8カウント 計測誤差(内蔵RCクロック8MHzの誤差を0%とした場合) 回転計 1rpm :1÷480,000,000×100=0.0000000208% 999,999rpm:1÷480×100=0.208% 周波数計 1Hz :1÷8,000,000×100=0.00000125% 100,000Hz :1÷80×100=1.25% 200,000Hz :1÷160×100=2.5% 999,999Hz :1÷8×100=12.5% 2009.03.04(水) 1) インターバルの変換範囲を変更。 ┌───┐256us ┌───┐ ┌───┐ ┌───┐ 1us→┤TCNT0 ├──→┤i_cnt0├→┤i_cnt1├→┤i_cnt2│ └───┘ └───┘ └───┘ └───┘ ├───────────────────────┤ 回転数/周波数に変換する範囲 (1〜983,606rpm:60,000,000〜61us) (1〜500,000Hz:1,000,000〜2us) 2) インターバルカウント開始時にタイマープリスケーラーのリセットを実施。 TCCR0B ┌───┐ PSR10───┤RESET │ 1us ┌───┐ ┌───┐ │ ├───┤TCNT0 ├─┤i_cnt0├─ 0.125us──┤ 1/8 │ └───┘ └───┘ └───┘ 2009.03.03(火) 除算の高速化検討。 除算の処理時間を計測。 計算式=600000÷N N シフト・減算 減算のみ -------+--------------+---------- 0 55us ∞ 1 194us 1.46s 10 156us 146ms 100 138us 14.6ms 1000 111us 1.48ms 10000 84us 159us 100000 59us 19.2us 600000 43us 6us 600001 40us 4us 7segLEDのちらつきが解消。 答えが9以下になるバイナリをBCDに変換する場合は減算のみの方が高速。 999999÷1の場合、シフト・減算が204us、減算のみが2.44s。約12000倍高速。 2009.03.02(月) 除算の高速化でシフト・減算方式を検討。 2009.03.01(日) REV_COUNTER.asm作成。 インターバルカウンタを32ビットに設定し、0.1msecのタイマークロックでカウン ト。 計測範囲は9rpm〜600Krpm。 擬似データをプログラムし 7segLEDで6桁表示を実行。 インターバルを回転数に変換する際に、7segLEDのちらつきが発生する為、 除算ルーチンの高速化が必要。 2009.02.28(土) 0.128msecのタイマークロックで、7.153rpmから468,750rpmをカバー。 2009.02.26(木) 回転計の構想。 ATtiny2313使用。クロック=内臓RC発信器8MHz、分周=1/1。 16ビットタイマーカウンターでインターバル計測。

回転計の実験のTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。

[PR]看護師の好条件求人なら:転職のプロがサポート!年間5万人が利用