金属などを切削、研削などによって加工する機械を工作機械と言います。図1は、フライス盤と呼ばれる工作機械の写真で、モータで刃物を回転させて金属などを切削するために用いられます。工作機械は、コントローラ(指令回路)、サーボドライバ(駆動回路)、モータで構成されています。マイコンなどのコントローラと駆動回路が直接電気的に接続されていると、駆動回路の電気的なノイズによりコントローラが正常に動作しないことがあります。そのため、「フォトカプラ」と呼ばれる部品を用いて、コントローラと駆動回路を電気的に切り離し、信号だけを伝達するようにします。駆動回路と電気的に絶縁されているため、コントローラがノイズの影響を受けず、正常に動作します。工作機械にはフォトカプラが多数使われていますが、樹脂封止された部品であるため、フォトカプラが動作している様子を外部から見ることができません。今回は、発光ダイオード(LED)と光検出器(フォトトランジスタ)を使ってフォトカプラを作製し、電気的に絶縁された電気回路の間で光を使って信号を伝達する仕組みを学習します。最後に、光信号でモータを動かします。
マイコン(M5Stack)でLEDを点滅させてその点滅をフォトトランジスタで受信し、電気信号に変換します。その電気信号を駆動回路に入力しモータを動かします。(図2)
この装置は2つの電気回路から構成されています。一つはマイコンでLEDを点滅させる回路、もう一つはフォトトランジスタで受信した点滅を電気信号に変換して駆動回路を動作させる回路です(図3)。図4に回路図を示します。また、図5に作製した装置の写真を示します。この装置を動作させるためには、マイコンのプログラムを書く必要があります。プログラムでは、PWM(Pulse Width Modulation)信号のパルス幅(ONの時間)を変化させてモータを制御します。PWMとはパルス幅を変化させたデジタル信号で、デューティ比(1周期の間のONの時間)を調整することでモータの速度を制御することできます。図6にM5stackのPWM発生プログラムを示します。
/*
*******************************************************************************
* Kobe University
* Date: 2023/12
*******************************************************************************
*/
#include
const uint8_t nBits_forPWM = 8; // PWMのビット数 8[bit]
const double PWM_Frequency = 5000.0; // PWM周波数 5000[Hz]
const uint8_t PWM_CH = 2; // PWMチャンネル
const uint8_t PWM_PIN = 2; // PWM出力に使用するGPIO PIN番号
const int PWM_Values[] = {0, 128, 154, 179, 192, 204}; //デューティ
const int Arraynum = sizeof(PWM_Values)/sizeof(int);
int IndexNum = 0;
void setup() {
M5.begin();
M5.Power.begin();
M5.Lcd.setTextSize(2);
M5.Lcd.print("PWM Out");
//PWM信号発生ピンを出力モードにする
pinMode(PWM_PIN, OUTPUT);
// チャンネルと周波数の分解能を設定
ledcSetup(PWM_CH, PWM_Frequency, nBits_forPWM);
// PWM出力ピンとチャンネルの設定
ledcAttachPin(PWM_PIN, PWM_CH);
//画面に表示
M5.Lcd.setCursor(10, 20);
M5.Lcd.printf("duty ratio = %d/256 ", PWM_Values[IndexNum]);
//PWM信号発生開始
ledcWrite(PWM_CH, PWM_Values[IndexNum]);
}
void loop() {
M5.update();
if (M5.BtnA.wasPressed()) {
//配列番号
IndexNum++;
if (Arraynum<=IndexNum) IndexNum = 0;
//画面に表示
M5.Lcd.setCursor(10, 20);
M5.Lcd.printf("duty ratio = %d/256 ", PWM_Values[IndexNum]);
//PWMを出力
ledcWrite(PWM_CH, PWM_Values[IndexNum]);
} else if (M5.BtnB.wasPressed()) {
//Turn off PWM
IndexNum = 0;
//画面に表示
M5.Lcd.setCursor(10, 20);
M5.Lcd.printf("duty ratio = %d/256 ", PWM_Values[0]);
//PWMを出力
ledcWrite(PWM_CH, PWM_Values[IndexNum]);
} else if (M5.BtnC.wasPressed()) {}
}
図6 PWMの発生プログラム
信号の伝達に可視光線を使うと誤動作しやすいため、今回は近赤外線(LEDの波長880[nm])を使います。人の目は近赤外線に感度が無いため、LEDの点灯を確認するためには赤外線カメラが必要です。身近な赤外線カメラとして、iphoneのカメラがあります。フロントカメラでLEDの赤外線を確認できます。図7にiphoneのカメラで撮影したLEDの写真を示します。PWM信号がONの時にLEDが光っていることがわかります。
次に、LEDの光でモータを動作させてみましょう。LEDをフォトトランジスタに近づけると、フォトトランジスタが光信号を受信し、モータが回転します。図8にその様子を示します。また、ムービーも見てください。
最後に、LEDの点灯時間を変化させてモータの回転数をコントロールしましょう。M5stackは、ボタン操作でPWM信号のデューティ比を変化させることができます。ON時間を長くするとLEDの点灯時間が長くなり、モータが速く回転します。使用するモータギヤセットの仕様では、電源電圧12[V]、ギヤ比256:1で、最大回転数が33[RPM]です。図9にデューティ比を50%から80%まで変えた時の回転数を示します。デューティ比によって回転数を制御できていることがわかります。尚、安全のため、実験はデューティ比80%以下で行ってください。
フォトカプラを作製し、光をスイッチとして利用してモータを動作させました。デューティ比を変えることでモータの回転速度をコントロールできることも確認しました。みなさんもロボットなどモータ、ヒータなどを製作する際に試してください。
掲載大学 学部 |
神戸大学 工学部 | 神戸大学 工学部のページへ>> |
私たちが考える未来/地球を救う科学技術の定義 | 現在、環境問題や枯渇資源問題など、さまざまな問題に直面しています。 これまでもわたしたちの生活を身近に支えてきた”工学” が、これから直面する問題を解決するために重要な役割を担っていると考えます。 |