モータドライバ回路動いた?!
実装ですが、結局8時間か9時間かかったかな。疲れる。
よかったこと。
- 部品面側は、被服線AWG28にしたので前回より細くなってよかった。
- パターン面側はスズメッキ線にしてEAGLEのパターン通りに実装。これもすっきりしてよい。
- 今回は実装後、EAGLEのInfo機能を使って、丹念に導通テストをした
反省点。
- モータの電流が通る配線がスズメッキ線など細い。太くしたい。
- 部品面側の被服線だが単線にしようと思っていたのに、より線だった。より線の方が被服をむくのにちょっと手間取る
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オシロを買ってあるので、明日はこれで波形をみてみようっと。