CubeIDE環境でJ-Link関連のものを更新する方法

IDE
STM32CubeIDE
Version: 1.0.0
Build: 2872_20190423-2022 (UTC)

標準で入っているJ-Link関連の物のバージョンが古いため、
STM32H7でのデバッグでは少し調子が悪そうに動きます。

そのため、今回は無理やりバージョンアップする方法を紹介します。

以下環境です。

IDE
STM32CubeIDE
Version: 1.0.0
Build: 2872_20190423-2022 (UTC)

①J-Linkをインストールする
https://www.segger.com/downloads/jlink/
からJ-link Software and Documentation Pack
のClick for downloadsから、自分の環境にあったものをダウンロード。

インストーラの形式で配布されているので、指示に従ってインストール。

以下、私はWindows環境で
「C:\Program Files (x86)\SEGGER\JLink_V652」にインストールしましたので、
ご自身の環境に合わせて読んでください。

②インストールしたものをCubeIDE環境にコピーする
標準のインストールだと、CubeIDE環境で使われるJLink.exeなどは、
「C:\ST\STM32CubeIDE_1.0.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.jlink.win32_1.0.0.201904160814\tools\bin」
にあります。クソ長いですね。

先程インストールした、
「C:\Program Files (x86)\SEGGER\JLink_V652」の中身を、
「C:\ST\STM32CubeIDE_1.0.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.externaltools.jlink.win32_1.0.0.201904160814\tools\bin」内にコピーします。

推測ですが、このディレクトリはバージョンによって異なるため、
「C:\ST\STM32CubeIDE_1.0.0\STM32CubeIDE\plugins」内部を「JLink」などで検索すると目的のディレクトリが見つかります。

(念の為バックアップ取っておいたほうがいいと思います。)

以上で、最新のJ-Link SoftwareがCubeIDE内で利用できるようになります。

前回作成したLチカClassをHALに対応させる

前回 https://ioloa.com/?p=157 このページでLチカをしました。

前回はSTM32G4+LLという構成でLチカをしていますが、
STにはLLに非対応なマイコンもあります。

そこで今回は、GPIOCtrl.hppとGPIOCtrl.cppをほんの僅かに変更して、
STM32H7+HALで全ての機能が動くようにします。

以下、既にSTM32H7のプロジェクトがCubeMXを用いて吐かれてる状態から書きます。

①前回のソース
これが前回のソースです。

/*
 * GPIOCtrl.hpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#ifndef GPIOCTRL_HPP_
#define GPIOCTRL_HPP_

#include "gpio.h"
#include "stm32g4xx_hal.h"

class GPIOCtrl {
public:
	enum GPIOStatus {
		GPIO_OFF = 0,
		GPIO_ON = 1,
	};

private:
	GPIO_TypeDef *mGPIOx;
	uint32_t mPinMask;
	GPIOStatus mGPIOStatus;
public:
	GPIOCtrl( GPIO_TypeDef *pGPIOx, uint32_t pPinMask );
	virtual ~GPIOCtrl();
	void ON();
	void OFF();
	void Toggle();
};

#endif /* GPIOCTRL_HPP_ */
/*
 * GPIOCtrl.cpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#include "GPIOCtrl.hpp"

GPIOCtrl::GPIOCtrl( GPIO_TypeDef *pGPIOx, uint32_t pPinMask)
:mGPIOx(pGPIOx), mPinMask(pPinMask), mGPIOStatus(GPIO_OFF) {
	OFF();
}

GPIOCtrl::~GPIOCtrl() {
}

void GPIOCtrl::OFF() {
	mGPIOStatus = GPIO_OFF;
	LL_GPIO_ResetOutputPin(mGPIOx, mPinMask);
}

void GPIOCtrl::ON() {
	mGPIOStatus = GPIO_ON;
	LL_GPIO_SetOutputPin(mGPIOx, mPinMask);
}

void GPIOCtrl::Toggle() {
	if(mGPIOStatus) {
		OFF();
	} else {
		ON();
	}
}

②次のように変更する
以下のように変更します。

/*
 * GPIOCtrl.hpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#ifndef GPIOCTRL_HPP_
#define GPIOCTRL_HPP_

#include "gpio.h"
//マイコンを変更したので利用するライブラリが変わる
//#include "stm32g4xx_hal.h" 
#include "stm32h7xx_hal.h" 

class GPIOCtrl {
public:
	enum GPIOStatus {
		GPIO_OFF = 0,
		GPIO_ON = 1,
	};

private:
	GPIO_TypeDef *mGPIOx;
	uint32_t mPinMask;
	GPIOStatus mGPIOStatus;
public:
	GPIOCtrl( GPIO_TypeDef *pGPIOx, uint32_t pPinMask );
	virtual ~GPIOCtrl();
	void ON();
	void OFF();
	void Toggle();
};

#endif /* GPIOCTRL_HPP_ */
/*
 * GPIOCtrl.cpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#include "GPIOCtrl.hpp"

GPIOCtrl::GPIOCtrl( GPIO_TypeDef *pGPIOx, uint32_t pPinMask)
:mGPIOx(pGPIOx), mPinMask(pPinMask), mGPIOStatus(GPIO_OFF) {
	OFF();
}

GPIOCtrl::~GPIOCtrl() {
}

void GPIOCtrl::OFF() {
	mGPIOStatus = GPIO_OFF;
	HAL_GPIO_WritePin(mGPIOx, mPinMask, GPIO_PIN_RESET);
    //LLは用意されていないのでHALを利用する。
	//LL_GPIO_ResetOutputPin(mGPIOx, mPinMask);
}

void GPIOCtrl::ON() {
	mGPIOStatus = GPIO_ON;
	HAL_GPIO_WritePin(mGPIOx, mPinMask, GPIO_PIN_SET);
	//LL_GPIO_SetOutputPin(mGPIOx, mPinMask);
}

void GPIOCtrl::Toggle() {
	if(mGPIOStatus) {
		OFF();
	} else {
		ON();
	}
}

これだけです。
(内容が薄くてすいません。)
このように、システムの中核のClassをすこし変更すれば、
マイコンを変更しても対応できます。

やる気になれば、別のメーカーのマイコンへの移植も容易にできます。

STM32 CubeIDE環境で、C++にて開発する

特にCubeMXなどを弄ることなく、C++を用いて開発するTipsです。

最近発売されたG431のNucleoボードを、C++なソースでLチカすることを目指します。

想定している読者はCubeIDEがある程度扱える中級者です。
時間にして30分くらいの作業かと思います。

以下、執筆時の環境です。

IDE
STM32CubeIDE
Version: 1.0.0
Build: 2872_20190423-2022 (UTC)

マイコン
NUCLEO-G431RB (STM32G431RBT)

準備
今回は、
Fileタブ->New->STM32 Project
から、CubeMXを用いて雛形を生成したところからの話です。

※環境について
ライブラリはGPIO→LLを、RCC→HAL利用しています。
また、PA6を追加でGPIO_Outputとして追加しています。
Firmware Package Name and Version は STM32Cube FW_G4 V1.0.0を利用しています。

CubeMXで雛形を吐き出す再には、(効果があるのか未検証なのですが)
Targeted Language:C++を選択しています。
(これを選んだところでC++ネイティブなソースがCubeMXから出てこないので使えないんですけどね)

また、ペリフェラル等の設定ファイルをmain.cに書かずに、別のファイルに吐き出すオプションもつけています。

これが無いとmainが肥大化して読みにくいです。

①ディレクトリを作る+Pathを通す
C++で開発する以上、1Classに対して1ファイルが一般的なので、標準のInc/Src内に大量にファイルが必ずできます。

まずディレクトリを作ります。
プロジェクトを選択して
Fileタブ->New->Source Folder(フォルダ名MyClass)
MyClassを選択して、
Fileタブ->New->Folder(フォルダ名Inc)
MyClassを選択して、
Fileタブ->New->Folder(フォルダ名Src)
と操作します。
この段階で以下のようになるはずです。

次にPathを通します。
Projectタブ->Properties->C/C++General->Paths and Symbols
で以下のように追加します。

上図では、GNU CのPathを設定していますが、
GNU C及び、GNC C++の両方にPathを通す必要があります。
そのため、GNU C++に対しても同様の設定をしてください。

②Classを作成する
Fileタブ->New->ClassでClassを作成します。

こんな感じで。コンストラクタやデストラクタはお好みで。
コンストラクタとは、オブジェクト生成時に叩かれる関数、
デストラクタとは、オブジェクトがスコープから外れる等の理由で破棄される際に叩かれる関数です。

私の個人的な感想だと、ハードウェアに近い処理ほど、オブジェクトが破棄されることはないため、使わない事が多いです。

生成された後に、然るべき場所にファイルを移動しましょう。

ここではMyClassのIncにヘッダ、Srcにソースファイルを配置しています。
ファイルの移動はドラッグ+ドロップでできます。

今回のClassはGPIOの制御なので、以下のように記述しました。

/*
 * GPIOCtrl.hpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#ifndef GPIOCTRL_HPP_
#define GPIOCTRL_HPP_

#include "gpio.h"
#include "stm32g4xx_hal.h"

class GPIOCtrl {
public:
	enum GPIOStatus {
		GPIO_OFF = 0,
		GPIO_ON = 1,
	};

private:
	GPIO_TypeDef *mGPIOx;
	uint32_t mPinMask;
	GPIOStatus mGPIOStatus;
public:
	GPIOCtrl( GPIO_TypeDef *pGPIOx, uint32_t pPinMask );
	virtual ~GPIOCtrl();
	void ON();
	void OFF();
	void Toggle();
};

#endif /* GPIOCTRL_HPP_ */
/*
 * GPIOCtrl.cpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#include "GPIOCtrl.hpp"

GPIOCtrl::GPIOCtrl( GPIO_TypeDef *pGPIOx, uint32_t pPinMask)
:mGPIOx(pGPIOx), mPinMask(pPinMask), mGPIOStatus(GPIO_OFF) {
	OFF();
}

GPIOCtrl::~GPIOCtrl() {
}

void GPIOCtrl::OFF() {
	mGPIOStatus = GPIO_OFF;
	LL_GPIO_ResetOutputPin(mGPIOx, mPinMask);
}

void GPIOCtrl::ON() {
	mGPIOStatus = GPIO_ON;
	LL_GPIO_SetOutputPin(mGPIOx, mPinMask);
}

void GPIOCtrl::Toggle() {
	if(mGPIOStatus) {
		OFF();
	} else {
		ON();
	}
}

C++の中身については、「C++の本読んで」とか、「ツヨツヨな友達に聞いて」とか、「C++扱う業種に転職して体で覚える」とか、「Twitterでリプください」などと乱暴な事しか言えないのですが、ほんの少しキーワードを置いておきますと、
:mGPIOx(pGPIOx), mPinMask(pPinMask), mGPIOStatus(GPIO_OFF)
はメンバイニシャライザです。
関数内での代入よりちょっと早いです。
参考:
http://jagabeeinitialize.hatenablog.com/entry/2018/01/21/192043
マイコンと相性が良いですね。

このClassは
GPIOCtrl myIO(GPIOA, GPIO_PIN_5);
myIO.ON();
みたいな感じで使うことを想定して書きました。

続いて神クラスを作ります。普通はタブーなのですが、
ちょっとした理由で必要なんです。
同様の要領で以下のように作ってください。

Godだと思った?残念、Deusでした。

さて、DeusClassは以下のように実装してください。

/*
 * Deus.hpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#ifndef INC_DEUS_HPP_
#define INC_DEUS_HPP_

#include "GPIOCtrl.hpp"

class Deus {
public:
	Deus();
	virtual ~Deus();
	void Ctrl();
};

#endif /* INC_DEUS_HPP_ */
/*
 * Deus.cpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#include "Deus.hpp"

Deus::Deus() {
	// TODO Auto-generated constructor stub

}

Deus::~Deus() {
	// TODO Auto-generated destructor stub
}

void Deus::Ctrl() {
	GPIOCtrl myGPIO1(GPIOA, GPIO_PIN_5);
	GPIOCtrl myGPIO2(GPIOA, GPIO_PIN_6);

	myGPIO1.ON();
	myGPIO2.OFF();

	while(1){
		myGPIO1.Toggle();
		myGPIO2.Toggle();
		HAL_Delay(1000);
	}
}

③Wrapperを作成する
やっとこれらをMainに読ませます。
ただし、直接Mainに読ませてはいけません。
Wrapperファイルを作ります。以下のように配置してください。

/*
 * Wrapper.hpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */

#ifndef WRAPPER_HPP_
#define WRAPPER_HPP_

#ifdef __cplusplus
extern "C" {
#endif

void cppWrapper(void);

#ifdef __cplusplus
};
#endif


#endif /* APPLICATION_USER_WRAPPER_HPP_ */
/*
 * Wrapper.cpp
 *
 *  Created on: Sep 8, 2019
 *      Author: Nakamura(Yutaka)
 */
//このClassだけは、C/C++の架け橋なので、
//.hppの#includeがHedder側でできない。
//なのでソース内に記述する。

#include "Wrapper.hpp"
#include "Deus.hpp"



Deus Bosatsu;


void cppWrapper(void){

	Bosatsu.Ctrl();

}

わざわざbosatsuを作った理由は、WrapperではhppのIncludeができないので、C++の記述ができず、例えばbool型などが扱えません。非常に使いづらいので、これを回避するためだけに2重にWrapしているイメージです。

③Mainに記述する
ようやくmain.cに記述します。

/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"

#include "Wrapper.hpp"
/* Private includes ----------------------------------------------------------*/

中略

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  cppWrapper();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

④Debugする
これでようやく完成です。長かったですね。たかがLチカなのに!

お疲れさまでした。
面倒臭かったですよね?ここまでコストを払ってまでC++で開発するメリットは勿論あって、Cに比べてカプセル化が容易です。

Classに状態と動作を記録し複製できるので、
例えばPID制御や微分演算子、積分演算子等は1~2周期前の状態と、動作を記録するので、Cでは面倒臭い or ソースを汚す手法でしか、(例えば積分演算子を)複製できませんが、C++ならばClassのオブジェクトとして複製できます。

もちろんデメリットもあり、それはソースが非オブジェクト指向の言語に比べて肥大化しやすい→技術的負債が発生することです。

つまり、 バカが作るとゴミの山が発生する ということです。

これを回避するために、プログラマたちは、テスト駆動開発などの、管理しやすいソースを記述する方法が考案されていたりします。

いつかはそのあたりの話も書きたいと思います。

STM32 CubeIDE環境で、UTF-8に対応する

「ええっ!?このIDEはUTF-8に対応していないの???」

いや、対応はしているんです。対応は。私達が文字を認識できないだけでして…
早速環境の設定をしていきます。

以下、執筆時の環境です。

IDE
STM32CubeIDE
Version: 1.0.0
Build: 2872_20190423-2022 (UTC)

①プロジェクトのUTF-8化
開発したいプロジェクトのプロパティを開きます。
Projectタブ->Propertiesを
(またはWindows:Alt+Enter Mac:Command+I)
を押してください。

適当に画像のようにチェックを入れればOKです。
私はWindowsのほか、Macでも開発をするので、Other:Linuxに設定してあります。

Macの方はここで終わりです。お疲れ様です。内容が無い記事でごめんなさい。
以下Windowsの方。

②フォントを変更する
CubeIDEの標準のフォントは、一部日本語に対応していません

Windowsタブ->Preferences->General->Appearance->Colors and Fontsを開きます。

上図のように、C/C++ Editor Text Fontを、
フォント名をConsolasからお好きなものに変更します。
おすすめはTakao P ゴシック などが読みやすいと思います。

Takaoフォントは、
https://launchpad.net/takao-fontsからTakaoFonts_xxxxx.xx.zip
をダウンロードして、インストールするだけで、Windows環境でも利用できるようになります。

これでコメントアウトが文字化けして困る事もなくなりました。
以上です、お疲れ様でした。

STM32 Nucleo-64 boards(NUCLEO-F446RE) にJTAGで接続する

NUCLEO-F446RE
など、Nucleo-64 boardsには、ボード上にSTLink-V2/1というプログラマ/デバッガが載っていますが、
・デバッグの速度が足りない
とか、
・J-Linkを繋げたい
とか、諸々の都合でJTAGで接続することがあるかと思います。

毎回接続ピンが行方不明になって調べているので、メモとして残しておきます。

結論
先に結論を書きます。みんな細かいことよりさっさと接続関係が欲しいのは理解していますから。

このとき、基板上のST-LinkV2/1にあるCN2のジャンパはすべてオープンにしてあります。

①JTAGのピンについて
J-Linkのデータシート・UM08001によると
以下のようになっています。

細かいことは省略しますが、このJTAG 20-pinのピン配置は、(デバッガのオプション的なピンを除いて)どのデバッガでもほとんど変わりはなく、STLinkV2/V3等でも僅かな違いがあるものの、利用できます。

②JTAGのピンの機能
次のようにつなぎます。

デバッガ側 マイコン側 機能
VTref Vdd target reference voltage
GND Vss GND
nTRST PB4
(NJTRST)
JTAG Reset
TDI PA15
(JTDI)
JTAG data input of target CPU
TMS PA13
(JTMS-SWDIO)
JTAG mode set input of target CPU
TCK PA14
(JTCK/SWCLK)
JTAG clock signal to target CPU
RTCK Return test clock signal from the target
TDO PB3
(JTDO/
TRACESWO)
JTAG data output from target CPU
RESET NRST Target CPU reset signal


参考にしたデータシートは
J-Linkのデータシートのほか、
F405データシートであるDocID022152が参考になります。

②Nucleoボードとのピンの関係
これらより、
3V3,GND,PB4,PA15,PA13,PA14,PB3,NRST
を接続すれば動作することがわかりました。
しかし、Nucleoボードの場合、ピンアサインがめちゃくちゃなので、自分でマイコンピンとの対応を考える必要があります。
以下を使いましょう。
UM1724
P.35には以下のような図があります。これを見て比較するのが楽かと思います。

以上の作業を得て、一番最初の接続関係が導けます。

STM32 CubeIDE環境で、CMSIS-DSPを使う方法

Arm社が提供するCMSIS-DSP Libraryを利用すると、簡単に高速な演算ができます。

できることは、三角関数や平方根だけに留まらず、行列操作、FIRフィルタ・FFT、PIDコントローラ、クラーク変換・パーク変換等、幅広く入っています。

導入することで利用できる関数は以下のページにまとめられています。

https://www.keil.com/pack/doc/cmsis/dsp/html/modules.html

さて、このCMSIS-DSPですが、故・TrueStudioでの環境構築は、わかりやすくまとめられておりますが、CubeIDEでは少し操作する項目が増えておりますのでまとめてみます。

以下、執筆時の環境です。

IDE
STM32CubeIDE
Version: 1.0.0
Build: 2872_20190423-2022 (UTC)
マイコン
STM32F446RE

①ライブラリの追加
STM32Cubeのディレクトリから以下の2ファイルをコピーします。

STM32Cube\Repository\STM32Cube_FW_F4_Vxxxx\Drivers\CMSIS\Lib\ARM\arm_cortexM4lf_math.lib
STM32Cube\Repository\STM32Cube_FW_F4_Vxxxx\Drivers\CMSIS\Lib\GCC\libarm_cortexM4lf_math.a 

これらをプロジェクトフォルダ内にコピーします。

Windows環境でしたらユーザフォルダ内にSTM32Cubeがあるかと思います。
またVxxxxは適宜読み替えてください。

②プロジェクトファイルの設定
CubeIDEの
(プロジェクトのプロパティ)>C/C++Build>Setting>ToolSettings>MCU G++ >Linker>Libraries
の設定で以下の2項目を登録します。
1.Libraries>addから、arm_cortexM4lf_mathを登録
2.Library search path>add>workspace… から、 (先程arm_cortexM4lf_math.aをコピーしたディレクトリ)を選択します。
正しく指定できていれば、 ${workspace_loc:/${ProjName}} となるはずです。

Tips
ファイル名のM4lf_mathのlfはLittle endian,fpuの略。
つまり、M4l_mathやM4b_math(Big endian)のfpuなしのmathライブラリは使う機会があるのか疑問。
また、M7系の上位マイコンでは、
arm_cortexM7lfdp_mathのような(double precision)を扱えるものもある。

③Includeをする
関数を使いたい.c/.cppファイルにて、以下を定義してIncludeします。

#define ARM_MATH_CM4
#include "arm_math.h"
#include "arm_const_structs.h"

定義しているCM4はCortex-M4の略で、
CortexM7→CM7
CortexM4→CM4
CortexM3→CM3
CortexM0→CM0 とマイコンボードによって変更します。
以後、今回利用するCortexM4のみ解説するので、
別のCPUの時は適宜読み替えてください。

③足りないものを追加する
試しにこの段階でビルドしてみましょう。
次のような怒られが発生するはずです。

../Src/main.c:24:10: fatal error: arm_math.h: No such file or directory
 #include "arm_math.h"
          ^~~~~~~~~~~~

(以前のTrueStudio環境では、この段階で勝手に足りないものを取ってきてくれて、ビルドが通った記憶があります。)

いろいろ足りないので、必要なファイルをIncに追加します。

STM32Cube\Repository\STM32Cube_FW_F4_Vxxxx\Drivers\CMSIS\DSP\Include
内にある、
arm_math.h
arm_const_structs.h
arm_common_tables.h
をインクルードできる場所に追加します。
(例えばプロジェクト内のInc)

以上の操作にて、CMSIS-DSPのライブラリが利用できるようになります。
試しに以下のようにmainの内部を変更して、コードを実行してみます。

/* Includes ------------------------------------------------------------------*/
#include "main.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#define ARM_MATH_CM4
#include "arm_math.h"
#include "arm_const_structs.h"
/* USER CODE END Includes */

 /* USER CODE BEGIN WHILE */
  int num = 0;
  while (1)
  {
	  float armsinVal = arm_sin_f32((float32_t)num*2*M_PI/255);
	  float armcosVal = arm_cos_f32((float32_t)num*2*M_PI/255);
	  float sinVal = sin((float)num*2*M_PI/255);
	  float cosVal = cos((float)num*2*M_PI/255);
	  num++;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

ブレークポイントを打って実行をすると、以下のように動作の確認ができるかと思います。

今回は手抜きをしたのでタイマを動かして動作時間の解析等はしませんでしたが、
タイマを動作させて実行時のタイマ値を読んだりすると面白いかと思います。

Tips
今回は説明の便宜上、必要なものを全てプロジェクトフォルダやIncに入れていますが、別のフォルダにパスを通して、ライブラリに必要なもの一式を入れると見やすくて良いかと思います。

モータの開発環境をA基板上に収めた

モータの開発環境は非常に散らかります。
モータ・インバータ・電源と3つの要素があり、それぞれを配線が結ぶからです。
片付けるのが大変だし、何かと異常が発生していても気づきにくいので、秋月のA基板の上に収めました。

使用している環境としては、
P-NUCLEO-IHM001のキット
https://jp.rs-online.com/web/p/power-management-development-kits/9064630/
をSTM32F446
http://akizukidenshi.com/catalog/g/gM-10176/
で開発。
電源は秋月のこちらを利用。
http://akizukidenshi.com/catalog/g/gM-10663/

現在オブザーバ構成中の為、ひたすらMATLABとIDEをにらめっこ。
(すいません…これ以上の進展はありません…)

商品購入:はんだリール台 / 軸の改良など

秋月にて、お盆前に以下のようなリール台を取り扱い始めました。
白光株式会社[HAKKO] はんだリール台 611-1
http://akizukidenshi.com/catalog/g/gT-14461/

店舗には日本アルミット製の100g品のリールが入らない旨の
注意書きがありましたが、構わず買ってきました。

 

Goot製のものは難なく入りますが、やはりアルミットのはんだは入りません

入らないので、軸を作り直します。
寸法を測定して3DCADで書き起こして、3Dプリンタで出力します。

無事にアルミット製のはんだも使えるようになりました。
ハンダ付けの作業中に、リールが机から転がり落ちる事が多々あったので、快適になったと感じております。

需要があるか分かりませんが、作成した軸については、
382円(300円+送料)にて頒布しようと思います。

支払い方法は、ジャパンネット銀行 or 三井住友銀行へ銀行振込のみとなります。
また、普通郵便での配送となります。

ご希望の方はコメントもしくはioloa.yutaka@gmail.comまでご連絡ください。