ダイセンμCOREで、αエクスプローラー用4輪制御アイコンを使う

 ロボカップジュニアでは、TJ3Bで有名なダイセンの製品にμCORE(マイクロコア)というものがあります。Arduinoのようにも見えますが、最大の違いはC-STYLEでプログラムが書けるということです。TJ3B用とは別の専用のC-STYLEがホームページからダウンロードできます。
TJ3Bから卒業したい、またはサイズを小さくしたい、だけどArduinoはまだ不安という選手にお勧めです。Arduinoで必要になる回路設計や配線なども経験することができます。


見た目はほぼ変わらず、モーターが標準装備ではないので、それ以外のアイコンがあります。


センサモニタが面白くて、ピンすべてが表示できます。センサのデバッグはかなりやりやすいでしょう。この見やすさだけでもμCOREを使う意味はありそうです。

また、TJ3BのオプションのI2C機器、コンパスやモータードライバーも使うことができます。


ただし、コネクタなどは何もついていないため、自分で配線をしていく必要があります。これが新しい点です。

自分でコネクタを配置できるということはサイズも大きさも自分で決められるということです。設計の自由度が大きく上がりますし、センサーを同一の基板に収めてしまうこともできます。

難しそうですが、電源さえつなげばとりあえず動きます。あとは必要な端子と端子をつないでいきましょう。



今回はこのμCOREを使って、4輪制御をしてみます。


【方法1 一番簡単な方法】


6chモータードライバ、または4chモータードライバを使ってI2Cでつなげば、TJ3Bでも使えるアイコンを使って数字で指定できるので、簡単です。





【方法2 通常の方法】

モータードライバを自前で用意し、これをArduinoのようにデジタル出力を使ってモーター制御をすることができます。モータードライバの入力に使うPinを決めて、デジタル出力に設定し、H/Lの出力をすれば、モーターを回せると思います。スピード制御なども関数を作ればできると思います。



【方法3 今回紹介する方法】

モータードライバを自前で用意し、ほぼ6chモータードライバーのような見た目で、モーターを制御します。
方法2のようにPIN単位でH/Lの制御をする必要がなく、方法1と同様の簡単さで速度も指定できるので制御がわかりやすく、かつ、方法2のように、自由にモータードライバを使うことができる、いいとこどりのような方法です。



このアイコンは数年前からずっとあるんですが、ダイセンさんに問い合わせたところ、同じマイコンを使用しているαエクスプローラーの拡張機能だそうです。

μCOREのために用意してくれている機能ではないので、ちょっと裏技的な使い方です。これが動かないからと言って、DAISENさんに問い合わせはしないでください。

  • 使うための手順
  1. セットアップのAdvanced ModeからEXT-Motor Boardに☑をいれると「4ch M」のアイコンが現れる


  2. ただし、このままではプログラムしてもビルドエラーになるので、C-STYLEのプログラムを書き換える。
  3. PIN配置通りにモータードライバーと配線する。(最初はブレッドボードがおすすめ)
  4. プログラムをテストしてみる。

これで使えるようになります。特殊なのは、手順2だけで、3,4はArduinoでモータードライバを動かすときも同じ手順が必要なものです。

手順2のC-STYLEの書き換えについて説明します。

ビルドエラーの内容をみると、どうやらPINの定義がαエクスプローラーとμCOREで異なるらしく、(αエクスプローラーはモータードライバーなどが最初から配線されているから当然)μCOREでも、同様のPIN設定をしてやって、一部αエクスプローラーのみで行われるセットアッププログラムを走らせてやればビルドできるようになります。

C:\Daisen\C-Style for uCORE V190705\Build\BuildAX_V190705
のファイルを変更します。(バージョンによって末尾の数字が異なります)

※変更するファイルは念のためバックアップをとっておき、問題があれば戻せるようにしておくことをお勧めします。もし、どうしようもなくなった場合は、C-STYLEをアンインストール後、インストールしなおしてください。

D32_Main.h
#ifdef uCORE
	#define PRODUCT "uCORE"
	#define MODELNO	"DSR1702"
	#define USE_STDM   // 4ch motorの有効化 miyazaki GPIO.h, GPIO.cも書き換え必要
//	#define MODELNO	"DSR1606"
#endif
19行目あたりに上記4行目の ”#define USE_STDM” の行を追加します。

D32_GPIO.h
//miyazaki 
//add start
 #define PA12_PORT		GPIOA
 #define PA12_CLK		RCC_APB2Periph_GPIOA
 #define PA12_PIN		GPIO_Pin_12

 #define MTR1_PORT		GPIOB
 #define MTR1_CLK		RCC_APB2Periph_GPIOB
 #define MTR1_FWD_PIN	GPIO_Pin_3
 #define MTR1_BWD_PIN	GPIO_Pin_2
 
 #define MTR2_PORT		GPIOB
 #define MTR2_CLK		RCC_APB2Periph_GPIOB
 #define MTR2_FWD_PIN	GPIO_Pin_5
 #define MTR2_BWD_PIN	GPIO_Pin_4
 
 #define MTR3_PORT		GPIOB
 #define MTR3_CLK		RCC_APB2Periph_GPIOB
 #define MTR3_FWD_PIN	GPIO_Pin_13
 #define MTR3_BWD_PIN	GPIO_Pin_14
 
 #define MTR4_PORT		GPIOA
 #define MTR4_CLK		RCC_APB2Periph_GPIOA
 #define MTR4_FWD_PIN	GPIO_Pin_11
 #define MTR4_BWD_PIN	GPIO_Pin_15
//add end

  
179行目あたり(多分実行されればどこでも良い)に上記のPIN設定を追記します。


D32_GPIO.c
//#ifdef AlphaX  miyazaki comment out
GPIO_TypeDef* GPIO_MTR_PORT[MAX_MTR] = {
	MTR1_PORT,
	MTR2_PORT,
	MTR3_PORT,
	MTR4_PORT,
};
const uint32_t GPIO_MTR_CLK[MAX_MTR] = {
	MTR1_CLK,
	MTR2_CLK,
	MTR3_CLK,
	MTR4_CLK,
};
const uint16_t GPIO_MTR_PIN[MAX_MTR][2] = {
	{ MTR1_FWD_PIN,	MTR1_BWD_PIN },
	{ MTR2_FWD_PIN, MTR2_BWD_PIN },
	{ MTR3_FWD_PIN,	MTR3_BWD_PIN },
	{ MTR4_FWD_PIN, MTR4_BWD_PIN },
};
//#endif

  
44行目の #ifdef と63行目の #endif をコメントアウトします。(αエクスプローラーではなくても起動するようにします。)

C-STYLEのバージョンが上がると行数は数行ずれるかもしれませんが、似たような箇所を探してください。

この3つのファイルを修正したら、手順2は完了です。

成功すれば、上記のモーター制御アイコンを入れてビルドが完了するようになれば成功です。


PIN配置はこうなります。

こちらの配線については、αエクスプローラーの回路図も参考にしてください。
αエクスプローラーの回路図は、αエクスプローラー用C-STYLEをインストールするとフォルダに入っています。(ここでの再配布は控えます)





とりあえず、この記事はビルドが完了するところまで行けるようにするための記事で、配線や回路設計などは別の話になります。

まだ動かすまでの説明としては不足しているかもしれませんが、これで最低限必要な情報は解説しているはずです。

もしうまくいかないということがあれば、問い合わせいただけたら答えられる範囲で回答します。これができればモーター制御の選択肢が増えると思うので、頑張ってみてください。

-----------------------------------

その他技術情報はメニューの「技術情報」をクリック

コメント

このブログの人気の投稿

センサー自作のための参考情報

TJ3Bにm5stck UnitV AI Cameraをつなぐ(暫定版)

TJ3BでHMC5883L(QMC5883L)を使う方法