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の使い方:
基本的な使い方:
・下記9番ピン、10番ピンがA,B:コントロールする役割
・下記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に出力
YCOMに入力された信号が2Yに出力
AとBがHighの時: XCOMに入力された信号が3Xに出力
YCOMに入力された信号が3Yに出力
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の部分を確認。
・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プログラム関連:
過去の記事一覧: