• 締切済み

PWM,IO,DA,AD

PWM(パルス幅変調)とはどういうものですか?また自立型ロボットを作成するとしてPWM、IOポート、DAコンバータ、ADコンバータは例えばどのように利用できますか?

みんなの回答

  • akino4
  • ベストアンサー率18% (35/185)
回答No.2

pwmについては図書館に行けば分かります。 簡単に考えれば似非アナログ出力です。 もちろん普通にD/Aしてアンプで増幅してってのより電気を食わないとか 回路が簡単とか、いいこといっぱいです。 自立型ロボットにつかうならPWMとかはアクチュエータを動かすのに IOポート・・・意味わかって質問してる? IOポートはコンピュータを実際の電気回路とつなぐのにどうしても必要でしょ? DA・・・まんま、コンピュータからアナログ値で電圧を出力したいとき AD・・・まんま、アナログ値の電圧をコンピュータで取り込むとき。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.1

参考にしてください。 http://www.e-words.ne.jp/

参考URL:
http://www.ascii.co.jp/ghelp/

関連するQ&A

  • PWMとPAMの違いについて

    PWMとPAMの違いについて PAMは「パルス振幅の高さを変えて、平均電圧を制御する」であっているようなのですが PWMは「パルス幅変調の幅を変えて、平均電圧を制御する」では違うみたいなのです PWMについて どうかできるだけ詳しくお願い致します

  • PWMのパルスを直流電圧にしたいです

    PWMのパルス幅によって電圧が0~5VとしてPICなどのADコンバータで入力して デジタルの数値として認識したいのですが、 パルス波形をDuty比に応じた直流電圧にするにはどんな回路をつければ良いでしょうか? またPWMの周波数は何ヘルツくらいが良いでしょうか? (周波数の上限、下限などがあったら教えていただきたいです)

  • 液晶の階調表現、FRC、PWM、FRC+PWMについて教えてください。

    色々なHPを検索しましたが、詳細がありませんので、アドバイスをお願いします。 液晶の階調表現について、勉強していますが、 (1)フレーム変調方式(FRC)と、 (2)パルス幅変調方式 の原理と、各方式のメリット、デメリットをご教授ください。 又は、HPを教えてください。 また、 (3)FRC+PWM方式と言うのも存在するようで、その原理と、特徴も教えて頂けたらと思います。 もちろん、それが載っているURLでもかまいません。よろしくお願いします。

  • PAMとPWMについて

    エアコンのモータ制御の中で、PWM制御とPAM制御があると思います。 PWM・・・パルスの幅で制御 PAM・・・パルスの振幅で制御 以上のことは、分かっています。 しかし、最近PAM制御方式のエアコンが増えてきています。 PWMとPAMのメリット、デメリットがよく分かりません。 分かる方いらっしゃいましたら、回答よろしくお願いいたします。

  • AD/DA変換について

    学校でAD/DA変換について学びました。携帯電話で利用されていると聞いたのですがどのような目的で利用されているのでしょうか?

  • AD/DAボードを用いたAD/DA変換プログラムについて

    C++を用いてAD/DAボードを用いたAD/DA変換プログラムを作成しようと思うのですが、何から書けばいいのか分かりません。 ボードの会社のHPにプログラミングの方法が記載されていたのですが、現在使用している開発環境よりも古いので、あまり参考に出来ませんでした。 調べたりもしたのですが、参考に出来るものがありませんでした。 環境は、  OS : WindowsXP  C++ : Visual C++ 2005 Express Edition  AD/DAボード : Interface製 PCI-3521 です。 参考になりそうなHP、本等がありましたら教えてください。 よろしくお願いします。

  • PICのPWMについてのプログラム

    先程似たような質問してしまいましたが変更します。 PICを使い外部からのアナログ音声約0.5秒をPIC内臓のAD変換機能を使用してPIC内に格納します。 元々スイッチを2つ付けて1つを押したら上記のようになり、もう1つを押したら格納されているデジタルデータがPWM波となりポートBから出力される物を作りたいです。 出力された波形はローパスフィルターを通りDA変換されてアナログ音が外部に出る。 『0.5秒しか録音できないレコーダ』みたいなものをつくりたいというのが全体図です。 AD変換やDA変換はなんとか解るのですがPICからPWM波を出力する回路(プログラム)がよく解りません。 知っている方いましたら力を貸してもらえませんでしょうか?

  • H8/3048、AD/DA変換プログラムについて。

    H8/3048、AD/DA変換について質問です。 ポート7のAN0・AN1を入力に使い、DA0・DA1で出力される変換プログラムを作成して実験したところ AN0→DA0への変換は出力されたのですが、AN1→DA1への変換が出力できません。なぜ出力されないのかわかりません。 どうしたらいいか教えてください、お願いします。 AN0がDA1でも出力されているかと思いましたが違いました。 #include <no_float.h> #include <stdio.h> #include <machine.h> #include "h8_3048.h" void init (void); double get_ad0 (void); double get_ad1 (void); void out_da0 (double); void out_da1 (double); void wait (void); int main (void) { double ad0,ad1; int d; init(); //初期化 // set_ccr(0x00); //全体の割り込み許可 //AD DA変換----------- while(1){ ad0=get_ad0(); ad1=get_ad1(); for(d=0;d<1000;d++); out_da0(ad0); out_da1(ad1); } return 0; } void init(void) { /* ポートの入出力設定 */ P1DDR = 0xff; P2DDR = 0xff; P3DDR = 0xff; P4DDR = 0xff; P5DDR = 0xff; P6DDR = 0xf0; // CPU基板上のDIP SW P8DDR = 0xff; P9DDR = 0xf7; PADDR = 0xff; // LED基板 PBDDR = 0xff; // A/Dの初期設定(単一モード) AD_CSR = 0x00; // A/Dの初期設定(スキャンモード使用AN0-AN1) // AD_CSR = 0x11; //ITU0 1ms毎の割り込み ITU0_TCR = 0x20; ITU0_GRA = 24575; ITU0_IER = 0x01; ITU_STR = 0x01; // D/Aの初期設定 DA_CR=0xc0; //DA0E1,DA0E0:1 D/Aアウトプットネーブル DAE:0 ch0,1 独立制御 } double get_ad0(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRA>>6;// i=0-1023 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } double get_ad1(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRB>>6; //i=0-1024 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } void out_da0(double d) { DA_DR0=(int)(d*255/5.0); } void out_da1(double d) { DA_DR1=(int)(d*255/5.0); } void wait(void) { long Loop=200000; while(Loop--); }

  • H8/3048マイコンAD/DA変換について

    初めて投稿させていただきます。  AKI-H8/3048キットでAD/DA変換をC言語で行いたいの ですがうまくいきません。  C言語ではどうやって記述すればいいのでしょうか? ご助言お待ちしています。  参考までに作成したAD/DA変換ソースコードを記します。 ちなみに入力端子AN0は可変抵抗器、出力端子DA1はLCDに 接続しています。 (可変抵抗器からの電圧増減に従ってLCDの表示を変化 させたい) #include <3048f.h> #include <stdio.h> main(){ int a; while(1){ AD.CSR.BYTE = 0x28; while(AD.CSR.BIT.ADF == 0){} a = AD.DRA; AD.CSR.BIT.ADF = 0; DA.DR1 = (unsigned char)((a >> 8)&0x00ff); } }

  • PICのPWMの使い方を教えてください

    PIC12F1822のPWMのテストをしていますが、正しい設定方法が判らず、以下の現象が出ています。 プログラム全体と、MPLIB のシミュレータによるLogic Analyzerの画像を添付しましたので、PICにお詳しい方のアドバイスをよろしくお願いいたします。 ◆ テスト内容: 周波数一定でデューティー比を変化させていく  今回の設定は、PR2=127 なので、パルス幅を0 ~ 最大パルス幅の 511 ((PR2+1)*4)で変化させる ●問題点1: デューティー比100%近く(508/512)でPWM出力が突然 50%に変わる。 ●問題点2: デューティー比100%以上(512/512以上)を設定するとPWMは100%('H'のまま)となる。 その後デューティ比を下げてもPWMの出力は'H'のままで、PWMの出力が出ない。 ● 問題点3: パルス幅の設定で、CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる(出力が'H'のまま) ・・・ これはシミュレータのバグでしょうか? プログラム全体は、一番下にありますが、メインロジックは以下のように簡単なものです。 while (1) { for (i = 500; i <= 512; i = i + 1) { pulse_width = i ; CCPR1L = pulse_width >> 2; // パルス幅上位8bit CCP1CON = ((pulse_width & 0x0003) << 4) | 0x0C; // パルス幅下位2bit         // ここで、CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる __delay_ms(1); } } どうぞよろしくお願いいたします。                           K.A. --------------------------------------------- /* * File: 周波数一定、ディューティー比連続変化 * Author: K.A. * * Created on 2014/07/20 * */ #include <stdio.h> #include <stdlib.h> #include <xc.h> #pragma config FOSC=INTOSC, WDTE=OFF, PWRTE=ON, BOREN=ON, MCLRE=OFF #define _XTAL_FREQ 8000000 // クロック8MHz #define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0))) int main(int argc, char** argv) { OSCCON = 0b01110010; // 内部クロックは8MHz ANSELA = 0b00000000; // すべてをデジタルI/Oに割当 TRISA = 0b00001000; // すべてのピンは出力に割当てる(RA3は入力専用) PORTA = 0b00000000; // 出力ピンの初期化(全て'0'にする) RA5 = 0; // 動作確認用LED /* PWM */ TRISA2 = 1; // RA2 出力をサスペンド TMR2IF = 0; // TMR2 フラグをクリア CCP1SEL = 0b0; // CCP1/P1Aの機能をRA2に割り当てる CCP1CON = 0x0C; // PWM モード // Period を 設定する xx ms=((PR2)+1)*4*125ns(8MHz)* PreScaler(x1-x64) PR2 = 127; // 0.064ms (プリスケーラが x1 の場合) T2CKPS0 = 0b0; // プリスケーラ 00:x1, 01:x4, 10:x16, 11:x64 T2CKPS1 = 0b0; // CCPR1L = 0; // パルス幅上位8bit CCP1CON = ((0 & 0x0003) << 4) | 0x0C; // パルス幅下位2bit TMR2ON = 1; // TMR2 カウント開始 while (TMR2IF == 0) { /** / do nothing /**/ } TRISA2 = 0; // RA2に出力を接続 unsigned int pulse_width; int i; while (1) { // パターン1 : デューティー比を変化させていく // 今回の設定は、PR2=127 なので、最大パルス幅は 511 ((PR2+1)*4) // 問題点1: デューティー比100%近く(508/512)でPWM出力が突然 50%に変わる。 // 問題点2: デューティー比100%以上(512/512以上)を設定するとPWMは100%('H'のまま)となる。 // その後デューティ比を下げてもPWMの出力は'H'のままで、PWMの出力が出ない。 // 問題点3: パルス幅の設定で、CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる(出力が'H'のまま) for (i = 500; i <= 512; i = i + 1) { pulse_width = i ; // Pulse width を 設定する PW=(CCPR1L:CCP1CON<5:4>)*125ns(8MHz)*PreScaler(x1-x64) CCPR1L = pulse_width >> 2; CCP1CON = ((pulse_width & 0x0003) << 4) | 0x0C; // CCP1CON<5:4>に'00'以外をセットすると、PWMの動作がおかしくなる // printf("PR2= %d, PW= %d, CCPR1L= %x, DCIB= %x \n", PR2, pulse_width, CCPR1L, temp2) ; __delay_ms(1); if (RA5==1) RA5=0; else RA5=1 ; } } return (EXIT_SUCCESS); } ----------------------------------------

専門家に質問してみよう