Project_OKI’s diary

エンジニアの勉強ブログ

mbedとマルチプレクサで、複数サーボモータ制御

mbedとマルチプレクサで、複数サーボモータ制御

1.今回の目標

 (1) nucleo f401でGPIO出力を行い、マルチプレクサを制御する。


 (2) nucleof401とマルチプレクサで、複数のサーボモータを制御する。

作成したもの:



2.使用部品

個数 部品名 型番
1 接続ケーブル  ジャンパーワイヤ​​
1 mbed(マイコンボード) ​​ nucleo f401RE
1 USBケーブル USBミニBタイプ
4 サーボモータ ​​ SG-90
1 マルチプレクサ ​​​ ​TC4052BP​
1 ブレッドボード ​​ EIC104j
1 両端ロングピンヘッダ(40×1) ​​​ ​40P 6.1

 

その他、あった方が良い工具
ペンチ(静電気対策):​139 PS-01

※ペンチは、両端ロングピンヘッダを折るのに使います。
 ペンチは今回はなんでも大丈夫です。
 今後電子部品を扱う場合、電子部品は静電気に弱いので、静電気対策されているものを買う方が良いです。



折りたいピン数のところにペンチで支えて、指で折れば簡単に折れます。

※リンクは基本楽天がついてますが、秋月やマルツで安く買えるものもあるので、安く手に入れたいものがあれば、調べてみて下さい。

3.概要

今回は、nucleo f401とマルチプレクサ(TC4052BP)を使用して、サーボモータ(SG-90)を動作させます。

サーボモータの動かし方については、下記記事で紹介しています。
・​mbed(nucleo f401)でサーボモータを動作させる

 

4.マルチプレクサとは

​マルチプレクサとは​
 電子回路では、簡単に言うと「複数の入力から一つを選んで出力する素子」のこと。
 別名データセレクタとも呼ばれる。

​デマルチプレクサとは​
 「1つの信号を、複数ある出力先から、出力先を1つ選択し出力する素子」のこと。

今回は、そのマルチプレクサの「TC4052BP」の使い方について書いていきます。
​TC4052の使い方:​​
 TC4052は、2つの信号を入力にし、出力先を2チャンネル×4分岐にすることが出来ます。
参考:​TC4052データシート

 
​​基本的な使い方:​
・下記9番ピン、10番ピンがA,B:コントロールする役割

下記XとYとなっているものが、
・XCOMがX0~X3に出力
・YCOMがY0~Y3に出力
・VSSとVEEは、GND
・VDDが電源(今回は3~5V予定)

​詳細:
 AとBがLowの時:     XCOMに入力された信号が0Xに出力
               YCOMに入力された信号が0Yに出力
AがHigh、BがLowの時:  XCOMに入力された信号が1Xに出力
                            YCOMに入力された信号が1Yに出力   
AがLow、BがHighの時:  XCOMに入力された信号が2Xに出力
                                    YCOMに入力された信号が2Yに出力   
AとBがHighの時:    XCOMに入力された信号が3Xに出力
                             YCOMに入力された信号が3Yに出力 
 
TC4052の場合、INHはGNDに接続する。





​電源電圧:​
後は、絶対最大定格を確認します。
絶対最大定格は、この電圧以上の電圧をかけると、壊れる電圧です。




ICの電源は、デジタル系とアナログ系で電源が分かれている。
 電源電圧:VDD - VSS:デジタル系の電源電圧
 電源電圧:VDD - VEE:アナログ系の電源電圧
 
入力電圧:
 アナログ信号は、VDD-VEE間の電圧を使用する。
 コントロール入力電圧:AとBの電圧は、VSS-0.5V~VDD+0.5V間の電圧を使用する。
 
電源電圧:
 VDD~VSS は-0.5V~20Vの間の電圧。
 VDD-VEE は-0.5V~20Vの間の電圧。


コントロール電圧:



この高レベルと低レベルを確認します。
今回使用するのは、3V~5Vの電源を使用する予定のため。
・VDD=5Vの部分を確認。
・高レベルは25℃で標準2.75V
・低レベルは25℃で、標準2.25V
これより、今回は普通にmbedのポートをこのままマルチプレクサに接続して使います。

実際、何度か逆電圧をかけてしまったことはありますが、壊れませんでした
ただ、壊れる可能性は高いので、十分注意しましょう。

とりあえず、ここら辺が分かってれば、動きはするので、実際に使ってみる。
 

5.マルチプレクサとmbedの使用


まず、回路を考えるのに、mbedで使用するピンを確認します。
今回は、下記ピン配置にしました。

mbedピン位置 接続先 役割
A0 XCOM  ​​PWM出力(サーボ制御用)  
A1 YCOM ​​PWM出力(サーボ制御用)
A2 A GPIO_​​​H/L出力(コントロール用)
A3 B ​GPIO_H/L出力(コントロール用)

これに合わせて、マルチプレクサと、mbedの配線を行っていきます。


電源電圧は5Vなので、マルチプレクサの電源は、mbedの5V電源を使用。
mbedはPCから電源を供給。
後は、上記位置に合わせて、
mbedのA0をマルチプレクサの13番ピン(XCOM)
mbedのA1をマルチプレクサの3番ピン(YCOM)というように接続していきます。

後は、マルチプレクサの出力先に、
サーボモータを取り付けて、
電源とGNDも接続すれば完成です。

mbedに下記プログラムを書き込んで、動作の確認をします。
 /*
使用ボード:mbed nucleo STM32F401
プログラム内容:
  TC4052の出力切り替えプログラム
  0X,0YにPWM出力
  3回回転後
  1X,1YにPWM出力
  3回回転後
  0X,Y0に出力を繰り返すプログラム
*/

#include "mbed.h"

//ピンの設定
PwmOut XCOM(A0);
PwmOut YCOM(A1);
DigitalOut A(A2);
DigitalOut B(A3);
DigitalOut Yobi1(A4);
DigitalOut Yobi2(A5);

int main() {
    //X0 , Y0に出力
    A = 0;
    B = 0;
    Yobi1 = 0;
    Yobi2 = 0;
    
    //周波数設定
    XCOM.period_us(20000);  
    YCOM.period_us(20000);  
    
    while(1){
        //0X,0Yに出力
        A = 0;
        B = 0;
        
        XCOM.pulsewidth_us(500); //パルス幅変更
        YCOM.pulsewidth_us(500); //パルス幅変更
        
        wait(2);
        XCOM.pulsewidth_us(1450);
        YCOM.pulsewidth_us(1450);
        
        wait(2);
        XCOM.pulsewidth_us(500);
        YCOM.pulsewidth_us(500);
        
        wait(2);
        XCOM.pulsewidth_us(2400);
        YCOM.pulsewidth_us(2400);
        wait(2);

       //1X , 1Yに出力
        A = 1;
        B = 0;
        XCOM.pulsewidth_us(500); //パルス幅変更
        YCOM.pulsewidth_us(500); //パルス幅変更
        
        wait(1);
        XCOM.pulsewidth_us(1450);
        YCOM.pulsewidth_us(1450);
        
        wait(1);
        XCOM.pulsewidth_us(500);
        YCOM.pulsewidth_us(500);
        
        wait(1);
        XCOM.pulsewidth_us(2400);
        YCOM.pulsewidth_us(2400);
        wait(1);
    }
}

これで、マルチプレクサを使って、
・サーボを2個同時
・計8個動作
・2本のPWM出力と2本のGPIOで
できるようになります。

以上、になります。

 

3.関連記事

mbedプログラム関連:
 
過去の記事一覧:
​​