サーボモータ制御
サーボモータ(SG90)を制御するプログラムをエイヤッと書いてみた.マイコンは秋月で45円のPIC10F222.
写真は実験中のブレッドボード.タクティルスイッチは黄,白,赤の順に0,90,リセットのボタン.
最初クロック周波数を4000000と書いて動かしてみたら,パルス周期・パルス幅とも所定の値より一定割合で大きくなったので, その割合の逆数をXTAL_FREQのデフォルト値(PIC10F222の場合4000000)に乗じて調整した(本当はOSCCALを設定してクロックを本当に4MHzにもっていくのが正解なんだけど).
![]() |
![]() |
| ポジション0の波形 | ポジション90の波形 |
左の波形は電源投入直後,黄色スイッチを押した時,リセットを押した時のもの.右側が白スイッチを押した時の波形.
プログラムの主要部はこんな感じ:
servo = 0;// ポジション0while(1){ if(GP1 && (!GP0)){ // 白ボタンを押した servo = 1; // ポジション90 }; if((!GP1) && GP0){ // 黄ボタンを押した servo = 0;// ポジション0}; if(servo){ GP2 = 1; __delay_us(2400); GP2 = 0; __delay_us(17600); } else{ GP2 = 1; __delay_us(1450); GP2 = 0; __delay_us(18550); }; };
パルス周期がクロックに比べて十分長いので,これで十分だと思う.実際にサーボモータが来たら,繋いで動作確認してみよう.


