PICでCの練習 2007.05.15(火)〜 LessonC_20。CRの充電時定数でステッピングモータの回転数を可変にします。
著作者名: 中野 良知 作成開始: 2007.05.14(月) 修正 : 2007.05.15(火) 実行結果を追加。 : 2007.05.16(水) 充放電観測波形と回転映像のリンクを追加。
目次 1. 目的 2. ゼネラルフローチャート 3. プログラムソースコード 4. キーワード 4.1. 放電時間 4.2. 充電時間 4.3. 回転数調整範囲 5. 実行結果 6. 実験回路 1. 目的 コンデンサーと可変抵抗による充放電回路を使い、充電時のC端電圧がマイコンの入 力閾値に達するまでの時間を遅延に利用しステッピングモータの回転数を変化させま す。 2. ゼネラルフローチャート (main) ↓ ポートの初期化 ↓ ├←────────────────┐ ↓ │ 配列データ出力(駆動パルス) │ ↓ │ コンデンサー放電 │ ↓ │ コンデンサー充電完了待ち │ ↓ │ └─────────────────┘ 3. プログラムソースコード //***************************************************************************** // タイトル : LesssonC_20 // 作者 : ioio // 目的 : CRの充電時間でステッピングモータ回転数を可変します。 // マイコン : 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.14(月) 作成 //***************************************************************************** //----------------------------------------------------------------------------- // ヘッダーファイル #include "pic.h" // デバイス関連の定義を展開 //----------------------------------------------------------------------------- // コンフィグレーション定義 __CONFIG(0x3FFA); // PROTECT=OFF, WDTE=OFF, HS_OSILLATOR //----------------------------------------------------------------------------- // 関数定義 //----------------------------------------------------------------------------- // 定数の定義 #define T100US 50 // 100usecソフト遅延カウント #define T200US 100 // 200usecソフト遅延カウント #define T300US 150 // 300usecソフト遅延カウント //----------------------------------------------------------------------------- // グローバル変数定義 //----------------------------------------------------------------------------- // ビットフィールド構造体定義 //----------------------------------------------------------------------------- // ポートマップ // NAME PIN NO USE // -----+--------+---------------------- // RA0 17 回転切換え // RA1 18 Out:放電。In:充電 // 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 }; // ステップパルスデータを配列に定義 unsigned char* step_ptr; // 配列要素指定ポインターを宣言 unsigned int dly_cnt; // 遅延カウンタ step_ptr = step_data; // ポインター初期化 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){ PORTB = *step_ptr; // ステップパルス出力 if(++step_ptr == (step_data + 8)){ step_ptr = step_data; // 配列の[0]を指定 } TRISA = 0x0F; // PA1を入力に切換え while(!RA1); // コンデンサー充電完了待ち TRISA = 0x0D; // PA1を出力に切換えコンデンサーの放電開始 dly_cnt = T200US; // 200usec遅延カウンタ設定 while(dly_cnt--); // 遅延 } } //***************************************************************************** //***************************************************************************** 4. キーワード 4.1. 放電時間 C=1uF R=71Ω Rは、ポートAのVOL時の内部抵抗=0.6V(VOL)÷8.5mA(IOL)=70.6 で求めました。 コンデンサーにフル充電した状態から70.6Ωで放電した時のC端の電圧変化は です。 放電時間を200μsecに設定すると、C端電圧は0.5V以下まで下がります。 グラフはVc=Vfull*εの(t/CR)乗 で計算しました。 4.2. 充電時間 C=1uF R=1KΩから11KΩ Rは、保護抵抗1KΩと可変抵抗10KΩのシリーズに接続したときの可変範囲です。 コンデンサーが未充電状態から充電を開始した時のC端の電圧変化は です。 PIC16F84AのポートAの入力閾値min=2Vとすると、約1msecから約7msecが調整可能です。 グラフはVc=Vfull*(1-εの-(t/CR)乗) で計算しました。 4.3. 回転数調整範囲 充電時間の計算で、1ステップの遅延時間は約1msecから約7msecです。 実験で使用したステッピングモータの仕様は、 ステップ数: 48ステップ/1回転 巻き線方式: ユニポーラ 巻き線抵抗: 約18Ω/相 1−2相駆動方式を採用した為、1回転当り96ステップです。 Rmax:1回転時間=7[msec/ステップ]*96[ステップ/回転]=672[msec/回転] Rmin:1回転時間=1[msec/ステップ]*96[ステップ/回転]=96[msec/回転] Rmax:回転数=1/回転時間*60[sec/min]=1/0.672[sec/回転]*60[sec/min]=89.3[rpm] Rmin:回転数=1/回転時間*60[sec/min]=1/0.096[sec/回転]*60[sec/min]=625.0[rpm] 5. 実行結果 上:半固定抵抗10KΩ。RB0出力パルス幅=12.4msec。4.13msec/ステップ。 下:半固定抵抗0KΩ。 RB0出力パルス幅=3.6msec。 1.2msec/ステップ。 回転数[rpm] 実験値 計算値 ------------+--------+-------- Rmax:11KΩ 151.3 89.3 Rmin: 1KΩ 520.8 625.0 計算値とは多少?ずれがありますが、簡単で実用的な回転数制御の方法です。 上:RB0の出力波形。 下:コンデンサー端の充放電波形。 CR時定数=11KΩ×1uF。 こちら もご覧下さい。 6. 実験回路 PIC16F84A ┌────┐14 │ VDD├──────●──────●────●──── +5V │ │ │ │0.1u │ │ │ R10K ┴ /50V │┴│100u/16V │ │4 │ 0.1u/50V ┬ └┬┘ │ -MCLR├──────●─┤├───●────┘ │ │ │ │ │16 ┌ ─ ─ ─ ┐ │ │ OSC1├───●─┤├──┐ │ │ │ │┴ ││ │ │ │ □ 20MHz │ │ │ │15 │┬ ││ │ │ OSC2├───●─┤├──● │ │ │ └ ─ ─ ─│┘ │ │ │5 ┌───────┘ │ │ Vss├─●───────────● ステッピング │ │ │ モータ │ │ │ ┌────┐ │ │ 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├─────┤ ├─────● └────┘ │ │ └─┘ │ │ │ │ │ │ +5V │ │ │ │ │ │ │ R1K │ │ │ │ │ │ │ VR10K 1u/50V │ │ │18 │ ─┐ │ │ RA1├───●──┤├─────● │ │ ─┘ │ │ │ │ └────┘ ┴ GND 0.1u/50VのセラミックコンデンサーはVDDとVssの近くに接続します。 発振子のGNDはVssの直ぐ近くに接続します。
LessonCのTopへ
サイトのTopへ
法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。
inserted by FC2 system