PICでCの練習 2007.05.20(日)〜 LessonC_21。 CLOCK、CW/CCW信号をLessonC_22の回路へ供給し、ステッピングモータを回します。
著作者名: 中野 良知 作成開始: 2007.05.19(土) 修正 : 2007.05.20(日)
目次 1. 目的 2. ゼネラルフローチャート 3. プログラムソースコード 4. キーワード 4.1. タイミングチャート 5. 実行結果 6. 実験回路 1. 目的 クロック信号(CLOCK)と回転方向信号(CW/CCW)を発生し、LessonC_22のプログラムを 実装した回路へ供給します。 コンデンサーと可変抵抗による充電時間で、クロック信号の発生周期が変わります。 2. ゼネラルフローチャート (main) ↓ ポートの初期化 ↓ ├←────────────────┐ ↓ │ CW/CCW出力 │ ↓ │ CLOCKパルス出力 │ ↓ │ コンデンサー放電終了 │ ↓ │ コンデンサー充電完了待ち │ ↓ │ コンデンサー放電開始 │ ↓ │ └─────────────────┘ 3. プログラムソースコード //***************************************************************************** // タイトル : LesssonC_21 // 作者 : ioio // 目的 : CLOCKとCW/CCW信号を発生させます。CLOCK周期はCR時定数で可変です。 // : LessonC_22のステッピングモータ駆動プログラムを搭載したPIC16F84A // : に制御信号を供給します。 // マイコン : 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.17(木) 作成 //***************************************************************************** //----------------------------------------------------------------------------- // ヘッダーファイル #include "pic.h" // デバイス関連の定義を展開 //----------------------------------------------------------------------------- // コンフィグレーション定義 __CONFIG(0x3FFA); // PROTECT=OFF, WDTE=OFF, HS_OSILLATOR //----------------------------------------------------------------------------- // 関数定義 void dly1us(void); // 1usソフト遅延 void dly2us(void); // 2usソフト遅延 //----------------------------------------------------------------------------- // 定数の定義 #define T200US 100 // 200usecソフト遅延カウント //----------------------------------------------------------------------------- // グローバル変数定義 //----------------------------------------------------------------------------- // ビットフィールド構造体定義 //----------------------------------------------------------------------------- // ポートマップ // NAME PIN NO USE // -----+--------+-------------------------- // RA0 17 CW/CCW(回転方向切換え) // RA1 18 Out:放電。In:充電 // RB0 6 CW/CCW // RB1 7 CLOCK //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- void main(void) { unsigned int dly_cnt; // 遅延カウンタ TRISA = 0x0D; // PortA b0,b2,b3=In、b1=Out TRISB = 0x00; // PortB b0,b1,b2,b3,b4,b5,b6,b7=Out PORTB = 0x00; // ポートB初期化。 PORTA = 0x00; // ポートA初期化。 while(1){ if(RA0){ // スイッチオフなら RB0 = 1; // CWを出力 }else{ // スイッチオンなら RB0 = 0; // CCWを出力 } // CW/CCWの前置保持時間分を遅延 dly1us(); // 2usec遅延 // CLOCKパルス出力 RB1 = 1; // CLOCKパルス立上げ // パルス幅を確保 dly2us(); // 2usec遅延 RB1 = 0; // CLOCKパルス立下げ // パルス周期設定用のCR充電による遅延 TRISA = 0x0F; // PA1を入力に切換え。C放電終了 while(!RA1); // 充電完了待ち TRISA = 0x0D; // PA1を出力に切換え。C放電開始 // Cの放電を確保する為の遅延 dly_cnt = T200US; // 200usec遅延カウンタ設定 while(dly_cnt--); // 遅延 } } //----------------------------------------------------------------------------- // 機能 : 1usec遅延関数 // 引数 : なし // 戻値 : なし // 作成 : 2007.05.18(金) //----------------------------------------------------------------------------- void dly1us(void) { NOP(); } //----------------------------------------------------------------------------- // 機能 : 2usec遅延関数 // 引数 : なし // 戻値 : なし // 作成 : 2007.05.18(金) //----------------------------------------------------------------------------- void dly2us(void) { unsigned char cnt; for(cnt = 0; cnt < 1; cnt++){ NOP(); NOP(); NOP(); } } //***************************************************************************** //***************************************************************************** 4. キーワード 4.1. タイミングチャート ┌─────────────┐ CW/CCW ───┘ └──────── →││←1usec以上 ┌─┐ ┌─┐ CLOCK ────┘ └───────────┘ └───── →│ │←2usec以上 SLA7078(サンケン)のカタログを参考にしました。 5. 実行結果 上:CW/CCWの切り換わり。 クロック立ち上がりの1.64usc前に変化。 下:クロック。保持時間=2.8usec。 6. 実験回路 PIC16F84A ┌────┐14 │ VDD├──────●──────●────●───← +5V │ │ │ │0.1u │ │ │ R10K ┴ /50V │┴│100u/16V │ │4 │ 0.1u/50V ┬ └┬┘ │ -MCLR├──────●─┤├───●────┘ │ │ │ │ │16 ┌ ─ ─ ─ ┐ │ │ OSC1├───●─┤├──┐ │ │ │ │┴ ││ │ │ │ □ 20MHz │ │ │ │15 │┬ ││ │ │ OSC2├───●─┤├──● │ │ │ └ ─ ─ ─│┘ │ │ │5 ┌───────┘ │ │ Vss├─●───────────● │ │ │ │ │6 │ │ RB0├──────────────────────→ CW/CCW │ │ │ │ │7 │ │ RB1├──────────────────────→ CLOCK │ │ │ │ │ +5V │ │ │ │ │ │ │ R10K CW/CCW │ │ │ │ ─┴─ │ │ RA0├───●──○ ○────● │ │ │ │ │ │ │ │ +5V │ │ │ │ │ │ │ R1K │ │ │ │ │ │ │ VR10K 1u/50V │ │ │18 │ ─┐ │ │ RA1├───●──┤├─────● │ │ ─┘ │ │ │ │ └────┘ ┴ GND パスコン0.1u/50VのセラミックコンデンサーはVDDとVssの近くに接続します。 発振子のGNDはVssの直ぐ近くに接続します。
LessonCのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。
inserted by FC2 system