3/2011
33/49

 では、この回路で、まず、スイッチ赤を押したときにサーボ軸が右に回転、スイッチ緑を押したときにサーボ軸が左回転するようにプログラムしてみます。 プログラムの注意点としては、時間待ちをする関数、delay_ms(*)と、delay_us(*)です。delay_ms(*)は、( )内に入れる数値によってそのミリ秒(1/1000秒)間は次へのステップに行きません。delay_us(*)は、( )内に入れる数値によってそのマイクロ秒(1/1000000秒)間は次へのステップに行きません。ただ、delay_us(*)の( )内に14260などと入れると、うまくいかなかったので、プログラム上では、ミリ秒部分とマイクロ秒部分に分けて記述しています。//------------------------------// ラジコンサーボ制御実験プログラム// Programed by Mikiya Niitsuma//------------------------------#include <12F675.h>#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT#use delay (clock=4000000)#byte RA = 5#bit sig = RA.5 //サーボへの信号#bit LED_r= RA.1//赤LED#bit LED_g= RA.2//緑LED#bit sw_1 = RA.3//赤スイッチ#bit sw_2 = RA.4//緑スイッチvoid main() { //t1=1008,t2=1912,tn=1472,shuki=14250; set_tris_a(0x19);//01,1001 GP1,GP2,GP5が出力ポート、他は入力に設定 RA = 0; while(1){ while(!sw_1){//赤スイッチ sig=1;//1008 delay_ms(1); delay_us(8);//delay_usはマイクロ秒 sig=0;//13242 delay_ms(13); delay_us(242); } while(!sw_2){//緑スイッチ sig=1; delay_ms(1); delay_us(912); sig=0; delay_ms(12); delay_us(338); } while(sw_1==1 && sw_2==1){ //プロポ操作がないときはニュートラルの位置 sig=1;//1472 delay_ms(1); delay_us(472); sig=0;//12778 delay_ms(12); delay_us(778); } }} このプログラムでは、ボタンのON・OFFだけである特定の位置に軸が回転します。 次に、PIC12F675のA/Dコンバータ機能を使って、アナログ的にサーボをコントロールする実験もしてみましょう。実験回路に付けてある、ボリュームを動かして、その動きに応じたようにサーボが回転するようにしてみます。 考え方としては、PIC12F675のGP0ポートをアナログ入力に設定し、そこに加える電圧をボリュームで変化させ、その値を読み取り、パルス幅(1008から1912)を変化させるようにします。回路図は、何も変わらず、基板もそのまま使います。変えるのはプログラムだけです。−31−実験ノート

元のページ  ../index.html#33

このブックを見る