H8マイコンでC言語で、パルスモータを制御
パルスモータを使用した、自動車のパワーウィンドウシミュレートプログラムを作成したいのですが、if文の書き方がわかりません。
1.プログラム開始時、窓が閉まっている状態を想定。2.完全に閉じた状態から左回りに5回転したときの状態を完全に開いた状態とする。3.完全に開いた状態から右回りに5回転したときに、窓が完全に閉じた状態となる。
キー入力は、A :左回り全開:窓が完全に閉じた状態(5回転目)になるまで左回転し、停止。B :左回り部分開:キー押下時に左回転。キーを離す、窓が完全に閉じた状態になったら停止。C :右回り部分閉:キー押下時に右回転。キーを離す、窓が完全に開いた状態になったら停止。D :右回り全閉 :窓が完全に開いた状態(5回転目)になるまで右回転し、停止。
ヒントを教えてください。お願いします。
#include <stdio.h>
#include <key.h>
/* 外部ポート A1,B1,C1 */
#define EPA1 (*((unsigned char *)0x60000))
#define EPB1 (*((unsigned char *)0x60001))
#define EPC1 (*((unsigned char *)0x60002))
#define EPCW1 (*((unsigned char *)0x60003))
void wait(long);
void counterclockwise (void);
void clockwise (void);
unsigned char Keydat, count, cf, state;
int cwpuls,ccwpuls;
void main(){
//開始時は、窓が閉じている状態
state = 0;
//回転数を初期化
count = 0;
/* uPD71055(82c55) 初期化 */
init_key();
Keydat = 0;
cf = 0;
while (1) {
if((Keydat = get_key_code())==KEY_A){
//左回り全開
clockwise();
//全開(5回転目)になったら停止
EPC1 = 0; /* 一度電流OFF */
wait(90000);/* 時間まち */
} else if (Keydat == KEY_B){
//左回り部分開
clockwise();
//全開(5回転目)になったら停止
EPC1 = 0; /* 一度電流OFF */
wait(90000);/* 時間まち */
} else if (Keydat == KEY_C){
//右回り部分閉
counterclockwise();
//全閉(5回転目)になったら停止
EPC1 = 0;
wait(90000);
} else if (Keydat == KEY_D){
//左回り全閉
counterclockwise();
//全閉(5回転目)になったら停止
EPC1 = 0;
wait(90000);
}
}
}
void wait(long time)
{
long i;
for (i = 0; i < time; i++)
;
}
void counterclockwise (void){
for (cwpuls = 0; cwpuls < 96; cwpuls++){/* CW方向96パルス回す*/
cf++;
if (cf == 4) {
cf = 0;
} /* 励磁相カウンタ+1*/
switch (cf) {
case 0:EPC1 = 0x50; /* 励磁パターン出力 */
break;
case 1:EPC1 = 0x60;
break;
case 2:EPC1 = 0xa0;
break;
case 3:EPC1 = 0x90;
break;
}
wait(1000); // モーター速度
}
}
void clockwise (void){
for (ccwpuls = 0; ccwpuls < 96;ccwpuls++){/* CCW方向96パルス回す*/
cf--;
if (cf == 0xff) {
cf = 3;
} /* 励磁相カウンター -1 */
switch(cf) {
case 0:EPC1 = 0x50; /* 励磁パターン出力 */
break;
case 1:EPC1 = 0x60;
break;
case 2:EPC1 = 0xa0;
break;
case 3:EPC1 = 0x90;
break;
}
wait(1000); //200~500が限界
}
}
お礼
すみません。 アドバイスを頂いてから、そもそも左巻きと認識していたのが間違いなのではと思い、さらにその後様々なキーリングの画像を調べましたら、確かに左巻き・右巻きと両方ありました。 勉強不足でした。 アドバイスありがとうございました。