• ベストアンサー

サーボとコンピュータ制御

サーボを制御するにはパルス信号が利用されると思うのですが、パルス信号を利用することはコンピュータ制御の観点からどのような利点はあるのでしょうか? 何故パルス信号で無いといけないのか?みたいなかんじです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Pesuko
  • ベストアンサー率30% (2017/6702)
回答No.1

>何故パルス信号で無いといけないのか 貴方なりの他の方法は考えました? 現状パルスと数値とアナログがあります。 アナログは衰退しています。 数値はPLCでは面倒だからプログラマが嫌がります。 結果パルスが残るのです。

ruriko10
質問者

お礼

ありがとうございます。そして返信遅れました。 私は、コンピュータ制御なのだからデジタル信号のほうが誤動作が少ないとか、アナログ信号だとAD変換をしてからコンピュータで制御しなきゃいけない(だから手間がかかる) などの理由が思い浮かびました。 ・・・普通に考えれば当然ですよね。 参考になりました!ありがとうございました。

関連するQ&A

  • アナログ入力でサーボバルブを制御

    サーボアンプに対して上位コントローラより変位センサー信号とサイン波信号をそれぞれD/A変換してサーボアンプに出力し、サーボバルブの停止位置及び停止までの時間制御をしたいのですが? 通常位置制御をする場合、サーボアンプにパルス列を出力しますが、アナログ信号でこのような制御ができるのでしょうか?

  • デジタルサーボとアナログサーボ

    QNo.539510で同じタイトルの質問がありましたが、よく理解できないので再度質問します。 デジタルサーボとアナログサーボはどう違うのでしょうか。 最近サーボモータをいじり始めた者ですので、サーボモータの歴史等はわかっていません。 私が知っているサーボモータはラジコンの制御に使われるもので、線が3本あって、それぞれ電源線、信号線、グランドで ポテンショメータがついているもの。 制御は信号線から受信するパルス波の幅に応じて行なわれる。 予測としてポテンショメータで制御するのがアナルグで、エンコーダで制御するものがデジタル?? 本当のところはどうなんでしょうか?

  • デジタルサーボとアナログサーボ

    デジタルサーボとアナログサーボってどう違うのでしょうか。 色々調べたのですが「信号をアナログで出すか、デジタルで出すかの違い」というごく当たり前のことしかわかりませんでした。 具体的な制御方法を入手する方法を教えてください。マイコンでサーボモータを10個くらい制御したくて調べ始めたのですがわからなくて困っています。20年くらい前にラジコン用サーボは触ったことがあります。これはアナログサーボですよね。

  • サーボのジーっという音

    ある程度PICをいじっており、 この度はじめてサーボモーターの制御を 試みているのですが。 基本的な疑問と思われますが、 サーボにパルスを出力中にジーっと 音が鳴るのは ・プログラムの不備 ・回路設計の不備 ・サーボの故障 ・普通のこと ・その他 等どういった原因からなるのでしょうか?

  • サーボを使用した モーターの距離の求め方

    サーボ制御を行う予定です。 モーターの1パルスあたりの距離の求め方がわかりません!! 誰かお助けを!

  • サーボモータの制御パルスについて

    RC用のサーボモータの制御をしようと思い、電圧をオシロスコープで見てパルス幅で制御できることは分かったのですがパルス幅とサーボの回転角に関係式はあるのでしょうか?

  • 調光のコンピュータ制御

    デジタルで光の明るさをコントロールするにはどうしたらいいのでしょうか?コンピュータからのデジタル信号で電球の明るさを制御したいのですが、どういう方法があるでしょうか?教えてください。

  • サーボドライバ

    電圧指令形の速度制御サーボドライバで DCモータを制御しているものです. タコジェネによる速度帰還を外して ドライバに入力するD/A信号と モータへの出力信号を線形に近づけたいのですが, 単に帰還を外して0Vにしただけでは うまくいきません.(発振します) どなたかノウハウを 教えていただけませんでしょうか? よろしくお願い致します.

  • AVRのサーボ制御で困っています。

    AVRマイコンを用いてサーボを8個制御するプログラムをC言語で作っています。使っているマイコンはATmega64LでサーボはフタバのS3003、AVRstudio4.17とAVR-GCCを用いてコンパイルやシュミレートをしています。 プログラムはサーボを8個動かすために タイマ2の比較一致割り込みで2.5msの周期をつくり タイマ0の比較一致割り込みで0.5ms~2.5msのパルスをつくり main関数でサーボの角度を制御するというものです。サーボ8個の角度の保持にはグローバル変数を用いています。 「サーボ初期位置→サーボ2個移動して固定」はうまくいくんですが「サーボ初期位置→※サーボ2個移動→さらに他のサーボ2個移動→はじめに動かしたサーボ2個を初期位置へ」というプログラムを書いたら、なぜか※をつけた「サーボ2個移動」の部分が実行されずその次の行動から実行されてしまいます。これはAVRに書き込んで確認したもので、シュミレータで確認するためにwait()などの待つ処理を除いてシュミレートしてみたのですが、「サーボ2個移動」の2行を飛ばして実行してしまっています。 具体的に飛ばされている部分は後述のソースコードのdo{・・・}while(1);の中の servopos[FR_LEG]=31; servopos[RL_LEG]=31; で、do{・・・}while(1);の無限ループはservopos[FR_JOINT]=70;からservopos[RL_LEG]=94;を無限ループしています。 電気回路、C言語ともに初心者なので見当がつかず、いろいろ試したり調べてみてもわかりませんでした。 質問は「なぜこのようにプログラムを数行飛ばして実行してしまっているのか」です。ソースコードの指摘をしていただけると有り難いです。 ソースコード #include <avr/io.h> #include <avr/interrupt.h> #define RL_JOINT 0 #define FR_JOINT 1 #define FL_LEG 2 #define RL_LEG 3 #define FL_JOINT 4 #define RR_JOINT 5 #define RR_LEG 6 #define FR_LEG 7 uint8_t phase=0; uint8_t servopos[8]={94,94,94,94,94,94,94,94}; /* void wait(uint16_t w){ while(w--){ volatile uint16_t i=200; while(i--); } } */ ISR(TIMER2_COMP_vect){ PORTC=0x00; TCNT0=0; } ISR(TIMER0_COMP_vect){ PORTC |= (1<<phase); OCR0 = servopos[phase]; phase++; if(phase>7){phase=0;} } int main( void ){ //ポート設定 DDRC=0xFF; PORTC=0x00; //タイマ0設定 OCR0 = 94; TCCR0 |= (1<<WGM01)|(1<<CS02)|(1<<CS00); TIMSK |= (1<<OCIE0); //タイマ2設定 OCR2 = 79; TCCR2 |= (1<<WGM21)|(1<<CS22); TIMSK |= (1<<OCIE2); // 全体割り込み許可 sei(); do{ // wait(10000); servopos[FR_LEG]=31; servopos[RL_LEG]=31; // wait(1000); servopos[FR_JOINT]=70; servopos[RL_JOINT]=70; // wait(1000); servopos[FR_LEG]=94; servopos[RL_LEG]=94; }while(1); }

  • サーボをコントロールボードを使わずに制御できないでしょうか?

    サーボをコントロールボードを使わずに制御できないでしょうか? 角度など受信機とプロポを使って調節したいです。 またその際何がいるでしょうか?