かみやんの技術者ブログ

主にプログラムの話です

モータドライバ回路動いた?!


実装ですが、結局8時間か9時間かかったかな。疲れる。
よかったこと。

  1. 部品面側は、被服線AWG28にしたので前回より細くなってよかった。
  2. パターン面側はスズメッキ線にしてEAGLEのパターン通りに実装。これもすっきりしてよい。
  3. 今回は実装後、EAGLEのInfo機能を使って、丹念に導通テストをした

反省点。

  1. モータの電流が通る配線がスズメッキ線など細い。太くしたい。
  2. 部品面側の被服線だが単線にしようと思っていたのに、より線だった。より線の方が被服をむくのにちょっと手間取る


8時間も9時間もかかるなら、はやり感光基板を買ってエッチングの方がよいか。
エッチングなら2時間ぐらいでできるのではないかな。電源線が細い問題も解決だし。今回すでにEAGLEで割りと正確にパターン図を書いてあるし。

さて、次はハーネス。今回は、お手軽にピンヘッダとピンソケットを使った。間は被服線。が、これまたちょっと失敗で、6色被服線を買ってあったのだが、単芯だった。ケーブルのように可動する場合は、単芯は折れやすいのでやめた方がよい。より線も持っていたけど黄色1色しか持っていなかったので。ま、断線したらまた考えよう。

さて、次はマイコンH8/3069Fでコーディング。まずは、正転、逆転のプログラム。

//タイマ用タスク
void timer_task(VP_INT exinf)
{
	SYSTIM  lastTime, now;
	TMO     sleepTime = 0;
	int mode;
	
	syslog(LOG_NOTICE, "PWM timer task starts (exinf = %d).", exinf);
	InitializeBoard();     //初期化
	get_tim(&lastTime);    //現在時間の取り出し
	for(;;){
		mode=(lastTime/1000)%4;// 1000ms ごとに変化
		if(mode==0){//+
			syslog(LOG_NOTICE, "PWM+.");
			SetMotor(MOTOR_L_CW,OFF);
			SetMotor(MOTOR_L_CCW,ON);
		} else if(mode==1 || mode==3){//OFF
			syslog(LOG_NOTICE, "PWM OFF.");
			SetMotor(MOTOR_L_CW,OFF);
			SetMotor(MOTOR_L_CCW,OFF);
		} else {//-
			syslog(LOG_NOTICE, "PWM-.");
			SetMotor(MOTOR_L_CW,ON);
			SetMotor(MOTOR_L_CCW,OFF);
		}
		//スリープ処理
		get_tim(&now);
		if(now >= lastTime){
			lastTime += T_TICK;
		}
		sleepTime = lastTime - now;
		if(sleepTime < 0){
			sleepTime = 0;
		}
		tslp_tsk(sleepTime);
	}
}

ま、こんな感じ。TOPPERSを使っているのでsyslog()とかtslp_tsk()(スリープ)などはシステム側にあるのでちょっと便利。

スイッチON!

ドキドキでしたが一発で動きました。

次は、PWMで速度制御。
PWM信号は、H8/3069Fの16bitタイマのPWM機能を使っているのでソフトウエアでは、速度が変わるタイミングのみ制御で、あとはマイコン任せ。

なんか速度は変わるには変わるけど、指定した速度とは全く違う速度で回る。。。
格闘すること2時間ぐらい。ダメだ。

今日は、ここまで。秋月でUSBオシロを買ってあるので、明日はこれで波形をみてみようっと。