回すだけ IQ2306 (2) コマンドを使う-1 ステータス

 前回、ブラシレスDCモータIQ2306の概要を説明しました。MKRZEROには二つのUARTがあります。MKRZEROの13/14番UARTとモータをつないで、各種コマンドを実行します。

  • シリアルコンソールはUSB-serial Serialでアクセス
  • 13/14番のUARTとはSerial1でアクセス

 コマンドの詳細はこちらにあります。

●マイコンの温度

Sub ID Short Name データ・
タイプ
単位 備考
0 uc_temp float マイコンの温度
1 filter_fs uint32 Hz ローパス・フィルタのサンプル周波数
2 filter_fc uint32 Hz ローパス・フィルタのカットオフ周波数
3 otw float 過熱警告。 モータのディレーティングが開始される
4 otlo float 過熱ロックアウト。 この温度でモータのディレーティングが終了し、モータは完全に無効になる
5 derate float PU モータに適用されるディレーティングの量[0 1]

 コマンドは上記のShort Nameの項目に書かれており、スケッチではShort Nameの最後にアンダスコアを追加します。
 温度を表示するスケッチです。

#include <iq_module_communicaiton.hpp>

IqSerial ser(Serial1); // MKRZERO 13;Rx,14;Tx
TemperatureMonitorUcClient tmp(0);

void setup() {
Serial.begin(9600); // USB-serial console
Serial.println("Start ");
Serial1.begin(4800); // independent UART
ser.begin();
}

void loop() {
float temperature = 0.0f;
if(ser.get(tmp.uc_temp_,temperature))
Serial.println(temperature);
delay(1000);
}

 実行例です。

パワー・モニタ

 モータ(モジュール)にかかる電圧や流れる電流を取得します。

Sub ID Short Name データ・
タイプ
単位 備考
0 volts float V モジュールへの入力電圧
1 amps float A モジュールへの入力電流
2 watts float W モジュールへの入力ワット数
3 joules float J モジュールによって消費される総エネルギー
4 reset_joules - - ジュールをゼロに設定
5 filter_fs uint32 Hz ローパス・フィルタのサンプル周波数
6 filter_fc uint32 Hz ローパス・フィルタのカットオフ周波数
7 volts_raw uint16 bit  
8 amps_raw uint16 bit  
9 volts_gain float V/bit  
10 amps_gain float A/bit  
11 amps_bias float bit  

 上記の温度のスケッチに、電圧の表示を追加しました。

#include <iq_module_communicaiton.hpp>

IqSerial ser(Serial1); // MKRZERO 13;Rx,14;Tx
TemperatureMonitorUcClient tmp(0);
PowerMonitorClient pwr(0);

void setup() {
Serial.begin(9600); // USB-serial console
Serial.println("Start ");
Serial1.begin(4800); // independent UART
ser.begin();
}

void loop() {
float temperature = 0.0f;
float voltage = 0;
if(ser.get(tmp.uc_temp_,temperature))
Serial.println(String(temperature) + "'C");
if(ser.get(pwr.volts_,voltage))
Serial.println(String(voltage) + "V");
delay(1000);
}

 実行例です。

ブザー

 モータに内蔵されているビープ音のコントロールをします。コントロールは標準のMIDIコマンドを模倣し、MIDIからブザー・コントロール・コマンドへの簡単な変換すると解説に書かれていますが、詳細不明です。

Sub ID Short Name データ・
タイプ
単位 備考
0 ctrl_mode uint8 enum no_change = -1, brake=0, coast=1, note=2, song=3
1 ctrl_brake - - ローパス・フィルタのサンプル周波数
2 ctrl_coast - - ローパス・フィルタのカットオフ周波数
3 ctrl_note - - 発生指令。事前に「hz」と「volume」を設定しておく
4 volume_max float V 最大電圧
5 hz uint16 Hz 音の周波数
6 volume uint8 0~127 音量
7 duration uint16 ms  音の長さ。 設定ない場合、最大値(65535ms)

 前記のスケッチに音(tone)を出す部分を追加しました。

#include <iq_module_communicaiton.hpp>

IqSerial ser(Serial1); // MKRZERO 13;Rx,14;Tx
TemperatureMonitorUcClient tmp(0);
PowerMonitorClient pwr(0);
BuzzerControlClient buz(0);

void setup() {
Serial.begin(9600); // USB-serial console
Serial.println("Start ");
Serial1.begin(4800); // independent UART
ser.begin();
}

uint16_t oto = 440;

void loop() {
oto +=10;
float temperature = 0.0f;
float voltage = 0;
if(ser.get(tmp.uc_temp_,temperature))
Serial.println(String(temperature) + "'C");
if(ser.get(pwr.volts_,voltage))
Serial.println(String(voltage) + "V");

ser.set(buz.hz_,oto);
ser.set(buz.volume_,(uint8_t)127);
ser.set(buz.duration_,(uint16_t)500);
ser.set(buz.ctrl_note_);

delay(1000);
}

前へ

回すだけ IQ2306 (1) IQ Position Module​のセットアップ

次へ

回すだけ IQ2306 (3) コマンドを使う-2 位置決め