UMEHOSHI ITA TOP PAGE    COMPUTER SHIEN LAB

「UMEHOSHI ITA」にESP32-WROOM-32E-N16を、「UMEHOSHI ITA」へ取り付ける例で、 このページの続きの内容です。
(「UMEHOSHI ITA」は一部の端子だけをCN11とCN12を介して引き出し、 そこに別途の自作基板を取り付けて、少しだけ利用することを想定しています。)

Hブリッジ制御部を改造して正転だけの2つモータ制御に変更

UMEHOSHI ITA基板は、次のHブリッジ制御がある。U09とU10はTPC8408(MOSFETシリコンP/NチャネルMOS)です。
これでモータを正・逆転を可能にしているが、パターンカットの改変で、正転だけの2つモータを制御します。

MOSFET(金属酸化膜半導体電界効果トランジスタ)の使い方のおさらい。
ゲート電圧を下げるとONするPチャネルと、ゲート電圧を上がるとONするNチャネルがあります。
これらはゲート電圧が0Vの時にOFFになり、エンハンスメント型と呼ばれ、現在の主流素子です。
逆に0Vの時にONになる方がディプレッション型と呼ばれます。
なお、NチャンネルMOSFETの方が、同じサイズ(チップ面積)であればより多くの電流を流すことができます。

MOSFETをスイッチで使う場合ハイサイドスイッチとローサイドスイッチの接続があります。
ハイサイドスイッチローサイドスイッチ
ハイサイドスイッチは、正電源(プラス)と負荷の間にMOSFETを配置して 電流の供給経路を制御する方法です。 ローサイドスイッチは、負荷とグランド(GND)の間にMOSFETを配置して戻り経路を制御する方法です。
●メリット: 負荷のグランド側が常にGNDに直結されているため、負荷から見て安全(オフ時に負荷に電圧がかからない)。PチャネルMOSFETであれば回路構成がシンプルで使われることが多い。
●デメリット: NチャネルMOSFETを使う場合、ゲートに電源電圧よりも高い電圧をかける必要があるため、チャージポンプ回路や専用のゲートドライバICが必要になり、回路が複雑になる。
●メリット: MOSFETのソース側がGNDに落ちているため、マイコンなどの制御信号(3.3Vや5V)で NチャネルMOSFETを使えば直接・簡単に駆動できる。
●デメリット:スイッチをオフにしても負荷のプラス側には電源電圧がかかりっぱなしになるため、安全面や誤動作防止の配慮が必要になる場合がある。PチャネルMOSFETを使うと複雑になる。
以上から、TPC8408内のPチャネルMOSFETだけを使って、TPC8408の5,6ピンとGND間にモータを付けて、 次のハイサイドスイッチとして使うことにしました。


次の画像が「UMEHOSHI ITA」の半田面で、赤線の所のパターンをカットすることで、 Hブリッジが外れたことになります。

これで、TPC8408内でPチャネルMOSFETだけをハイサイドスイッチとして使います。

CN6の�A端子とGNDの間にモータを繋ぎます。
同様に�@端子とGNDの間にモータを繋ぎます。
上記の紫のJMP4をショートしてそのGNDをモータのGNDを繋ぎます。
(これでHブリッジ制御部を改造して正転だけの2つモータ制御に変更したことになります)
この供給は、電池ボックスの3.6vを�@に、 GNDを�Aに接続します。

また上記では、
右のTPS61088使用のスイッチング電源モジュールを拡張基板に取り付け、
単3×3=3.6vから5vに昇圧して利用しています。
同時に3.6vは半田付けしてモータ用として供給しています。

上記のモータ制御は、 Hブリッジを使ったPWMを使わないで、単純にRB2とRB3のON・OFF制御する。
この2つのモータ制御に、Hブリッジ制御用の「UME専用Hexコマンド」は使えない。
そこで、2つのモータに繋がるビットはRB2とRB3のビットをON・OFFするだけで、1秒間だけそれぞれのモータをONするチェック用コードを次のように作った。
#include <xc.h>
#include "common.h"

#define AdrStart 0x80005000 //下記start関数の起動アドレス
#define ON_1 0x80005100 # 関数エントリアドレス
#define OFF1 0x80005150 
#define ON_2 0x80005200 
#define OFF2 0x80005250 
__attribute__((address( ON_1  ))) void on1 (void);
__attribute__((address( OFF1  ))) void off1 (void);
__attribute__((address( ON_2  ))) void on2 (void);
__attribute__((address( OFF2  ))) void off2 (void);
__attribute__((address( AdrStart  ))) void start (void);
void start()
{
	_clear_beep_code(); // ビープ処理を初期化
	_UM_PTR_GOTO_BEEP  = NULL;// ループをしない設定

	PORTBCLR = 0b0000000000001100;//RB2,3 をOFF
	_core_wait(10000); // 約11秒待つ
	
	on1();// CN6-2モータ(RB2)をON
	_core_wait(1000); // 約1秒待つ
	off1();// CN6-2モータ(RB2)をOFF

	on2();// CN6-4モータ(RB3)をON
	_core_wait(1000); // 約1秒待つ
	off2();// CN6-4モータ(RB3)をOFF

	PORTBCLR = 0b0000000000001100;	//RB2,3 をOFF

	_debug_hex4(1,0x55,1);// 実行終了確認ブザー
}

void on1()// CN6-2モータ(RB2)をON
{
	PORTBSET = 0b0000000000000100;
}

void off1()// CN6-4モータ(RB3)をON
{
	PORTBCLR = 0b0000000000000100;	
}

void on2()// CN6-4モータ(RB3)をOFF
{
	PORTBSET = 0b0000000000001000;
}

void off2()// CN6-4モータ(RB3)をOFF
{
	PORTBCLR = 0b0000000000001000;	
}