PICでCの練習 2007.05.13(日)〜-> LessonC_18。 ステッピングモータを正転/逆転させます。
著作者名: 中野 良知 作成開始: 2007.05.13(日) 修正 : 2007.05.14(月) ソースコードでconfigのXTALをHSに変更。 : 実験回路図に電源パスコンを追加。 : 発振子のGNDと5PIN(GND)を直近に変更。
目次 1. 目的 2. ゼネラルフローチャート 3. プログラムソースコード 4. キーワード 4.1. 配列 5. タイミングチャート 6. 回転周期 7. 実行結果 8. 実験回路 1. 目的 スイッチのオフ/オンで配列添え字変数を増/減して、ステッピングモータを正転/逆転 させます。 2. ゼネラルフローチャート (main) ↓ ポートの初期化 ↓ ├←────────────────┐ ↓ │ 配列データ出力(駆動パルス) │ ↓ yes │ <スイッチオン?>────┐ │ ↓no │ │ 配列添字変数を 配列添字変数を │ インクリメント デクリメント │ ↓ ↓ │ ├──────────┘ │ 20msecソフト遅延 │ ↓ │ └─────────────────┘ 3. プログラムソースコード //***************************************************************************** // タイトル : LesssonC_18 // 作者 : ioio // 目的 : ステッピングモータを正転/逆転させます。 // マイコン : PIC16F84A // クロック : 20MHz // Config : PROTECT=OFF, WDTE=OFF, XTAL // Compiler : PICC Lite(V9.6)。 HI-TEC software製。 // Compile : >picl -16f84a lesson.c // ASM List : >picl -16f84a --ASMLIST lesson.c //***************************************************************************** // 変更履歴 // 2007.05.13(日) 作成 // 2007.05.14(月) configでXTALをHS_OSILLATORに変更 //***************************************************************************** //----------------------------------------------------------------------------- // ヘッダーファイル #include "pic.h" // デバイス関連の定義を展開 //----------------------------------------------------------------------------- // コンフィグレーション定義 __CONFIG(0x3FFA); // PROTECT=OFF, WDTE=OFF, HS_OSILLATOR //----------------------------------------------------------------------------- // 関数定義 void delay_msec(unsigned int); //----------------------------------------------------------------------------- // 定数の定義 #define T1MS 500 // 1msecソフト遅延カウント //----------------------------------------------------------------------------- // グローバル変数定義 //----------------------------------------------------------------------------- // ビットフィールド構造体定義 //----------------------------------------------------------------------------- // ポートマップ // NAME PIN NO USE // -----+--------+------------------- // RA0 17 正転/逆転スイッチ // RB0 6 A // RB1 7 -A // RB2 8 B // RB3 9 -B //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void main(void) { unsigned char step_data[8] = { 1, 1 + 4, 4, 4 + 2, 2, 2 + 8, 8, 8 + 1 }; // ステップパルスデータを配列に定義 int step_no = 0; // ステップパルスデータ添え字 TRISA = 0x0F; // PortA b0,b1,b2,b3=In TRISB = 0x00; // PortB b0,b1,b2,b3,b4,b5,b6,b7=Out PORTB = 0x00; // ポートB初期化。 while(1){ PORTB = step_data[step_no]; // ステップパルス出力 if(RA0){ // スイッチオフなら(正転) if(++step_no == 8){ // 配列要素変数をインクリメント step_no = 0; // 配列の[0]を指定 } }else{ // スイッチオンなら(逆転) if(--step_no == -1){ // 配列要素変数をデクリメント step_no = 7; // 配列の[7]を指定 } } delay_msec(20); // 20msecソフト遅延 } } //----------------------------------------------------------------------------- // 機能 : 引数で遅延時間を設定 // 引数 : unsigned int。 遅延時間をmsecで設定。 // 戻値 : なし // 作成 : 2007.05.02(水) //----------------------------------------------------------------------------- void delay_msec(unsigned int cnt1) { unsigned int cnt2; while(cnt1--){ cnt2 = T1MS; while(cnt2--); // 約1msecの遅延 } } //***************************************************************************** //***************************************************************************** 4. キーワード 4.1. 回転方向の切換え 配列の添え字変数 setp_no をインクリメントすると正転。デクリメントすると逆転 します。 setp_no → 0 1 2 3 4 5 6 7 ┌──┬──┬──┬──┬──┬──┬──┬──┐ 配列要素 →│ 1 │ 5 │ 4 │ 6 │ 2 │ A │ 8 │ 9 │ └──┴──┴──┴──┴──┴──┴──┴──┘ 正転 step_no 0→1→2→3→4→5→6→7→0→1→2→3→4→5→6→7→0→─┐ ポートB 1→5→4→6→2→A→8→9→1→5→4→6→2→A→8→9→1→┐│ ││ 逆転 ││ step_no 0←1←2←3←4←5←6←7←0←1←2←3←4←5←6←7←0←─┘ ポートB 1←5←4←6←2←A←8←9←1←5←4←6←2←A←8←9←1←┘ 5. タイミングチャート 正転 逆転 スイ ──────────────────┐ ッチ └──────────────── 0 1 2 3 4 5 6 7 0 0 7 6 5 4 3 2 1 ─────┐ ┌─────┐ ┌─── A └─────────┘ └─────────┘ ┌─────┐ ┌─────┐ B ───┘ └─────────────────┘ └─ ┌─────┐ ┌─────┐ -A ───────┘ └─────────┘ └───── ┌─────────────┐ -B ───────────┘ └───────── →├─┤← 20msec →├─────┤← 60msec 6. 回転周期 実験で使用したステッピングモータの仕様は、 ステップ数: 48ステップ/1回転 巻き線方式: ユニポーラ 巻き線抵抗: 約18Ω/相 1−2相駆動方式を採用した為、1回転当り96ステップになります。 1回転時間=96[ステップ/回転]×20[msec]=1.92[sec/回転] 7. 実行結果 こちら ご覧下さい。 8. 実験回路 PIC16F84A ┌────┐14 │ VDD├──────●──────●────●──── +5V │ │ │ │0.1u │ │ │ R10K ┴ /50V │┴│100u/16V │ │4 │ 0.1u/50V ┬ └┬┘ │ -MCLR├──────●─┤├───●────┘ │ │ │ │ │16 ┌ ─ ─ ─ ┐ │ │ OSC1├───●─┤├──┐ │ │ │ │┴ ││ │ │ │ □ 20MHz │ │ │ │15 │┬ ││ │ │ OSC2├───●─┤├──● │ │ │ └ ─ ─ ─│┘ │ │ │5 ┌───────┘ │ │ Vss├─●───────────● │ │ │ │ │ +5V │ │ │ │ │ │ │ R10K 正転/逆転 │ │ │17 │ ─┴─ │ ステッピング │ RA0├──●──○ ○─────● モータ │ │ │ ┌────┐ │ │ 2SK2782 │ │ │ │ │ D┌──────│────┤A相 │ │ │6 G┌┴┐S │ │ │ │ RB0├─────┤ ├─────● │ │ │ │ └─┘ │ │A_COMMON├──┐ │ │ │ │ │ │ │ │ 2SK2782 │ │ │ │ │ │ D┌──────│────┤-A相 │ │ │ │7 G┌┴┐S │ │ │ │ │ RB1├─────┤ ├─────● │ │ │+5V/6A │ │ └─┘ │ │ │ ├── │ │ │ │ │ │ │ │ 2SK2782 │ │ │ │ │ │ D┌──────│────┤B相 │ │ │ │8 G┌┴┐S │ │ │ │ │ RB2├─────┤ ├─────● │ │ │ │ │ └─┘ │ │B_COMMON├──┘ │ │ │ │ │ │ │ 2SK2782 │ │ │ │ │ D┌──────│────┤-B相 │ │ │9 G┌┴┐S │ │ │ │ RB3├─────┤ ├─────● └────┘ │ │ └─┘ │ │ │ │ └────┘ ┴ GND 0.1u/50VのセラミックコンデンサーはVDDとVssの近くに接続します。 発振子のGNDはVssの直ぐ近くに接続します。
LessonCのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。
inserted by FC2 system