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