西山 茂丸 について

組み込みマイコンでエンジニアを続けてきました。今の時代で見えない部分についても体験してもらってより深い理解を得てもらいたい広報教育活動をしています。

電池半田ごてのボディを直す(Step1 Inkscapeで2DスキャンデータからSVGを作り、Fusion360へ渡して)

DSC_0591

大洋電機が出しているMSD20という電池式半田ごての本体ボディの作りがいまいちで元々電池蓋が取れがちだった。そしてやがてそれは折れてしまい使えなくなっていた。放置していたのだが3Dプリントで修理することにした。

DSC_0590

手順としては、まず折れた部品をコピー機にかけてスキャンする。

得られたbitmapファイルをInkscapeでインポートしてビットマップを
トレースしてパスを得る。

得られたパスはfillされている形なのでfillをなしにして
strokeをありにすると以下のようになる。

表示モードを変えると構成点で以下の様に表示される。

要らない外枠をctrlキー押しながら、選択していく。

削除すると2つのデータになる。

左のデータをマウスで領域選択する

削除すると目的の底板のアウトラインが得られる

ページサイズを選択オブジェクトに合わせる。

この状態でSVGファイルとして保存する。このSVGファイルをFusion360で取り込んでサイズの補間をする。

実際にノギスで測ったサイズとSVGデータのサイズをスケーリングするわけだ。
Fusion360では、計測機能があるのでSVGのサイズ(S)を求めて実際のサイズ(A)で縮尺処理をする。スケーリング指定では(A/S)の形で与えれば実際のサイズに変換できる。

下絵のベースが出来たら少しずつ実物をトレースしていき仕上げていく。
実際には、半分だけ仕上げてカットした形からミラーリングで作り上げる。

作り上げたファイルはSTLにして落として、プリント用にスライスしてgcodeファイルを生成して、プリンタに掛けるという手順だ。Thingiverseに登録しておいたが、まだ印刷前なのでinprogressとしている。
修理は実際には、その先で始まり爪がうまく止まるように調整していくことが必要ではある。

 

 

 

トイレのフロータンクがズレて水が溜まらなくなること(水が出っぱなし)を修理した

別宅は、普段は住んでいない週末の家なのだ。先日、水洗トイレが止まらなくなるという事態が発生して、フロータンクの中の部品(大小で流す水量を調整する可動式の弁?)がズレてしまうことが問題のようだ。写真での右中央にあるものが大小で動作する部品なのだが、これが収まる黒い樹脂部品容器がずれてしまうことで問題が起きるようだった。問題がおきたら、水栓を止めてから、この黒い容器を動かして調整をして様子を見てきた。トイレの水量が止まらなくなると水道代として漏水扱い(実際そうなのだが)として料金が跳ねあがるのだ。1週間あるいは2週間留守にすることもあるので実際に今回の水道料金は普段が2500円程度のものが12000円程度になっていて水道メーターの管理で来た人もたまらずベルを鳴らして訪ねてきた。普段は在宅していないので偶々休日にこられたのだが・・・。顛末は理解していたので、あの1件だとわかった。何かの拍子でずれることもあるだろうから、固定化する修理までは、留守にするときにトイレ内の水栓を止めるようにしていた。

本質的な修理をすべきと判断して黒い樹脂容器が収まっている位置にクリップできるような部品を3Dプリンタで作成することにしたのだが、測定するのがとても難しい、タンクの中に金属の巻き尺をまげていれて大まかなサイズを割り出して、手探りで構造を押さえてから部品を試作繰り返して左の写真にある緑の部品のような形が最終形として仕上がった。もともとの何かの不具合に至った理由はわからないのだが、たぶん何かの樹脂部品が破損したのではないかとは思う。

水道代の請求から修理することにしたのだが落ち着いてよかった,

トイレタンク修理部品

掃除機のズームパイプの調節リングが壊れた・・・

  1. SHARPの掃除機の所謂パイプ長さを調整するリングが壊れてしまったそうだ。
    壊れたところを見ると締め付けた後に樹脂の劣化が生じたのだろうか、この部品だけを売っていたりすることがないのがこのご時世だ。効率最優先で全交換でパイプ込み
    で3000円ほどするようだ。3Dプリンタでアプローチしようとするも肉厚を増したうえでABSで出力してみるしかないという所だろうか。

雰囲気としては、昔のアマチュア無線のノブを設計するのに似ているが、大きなネジ
自体は近いサイズのネジを作りこんでからスケーリングで合わせるしかなさそうだ。

回転体として設計するのが都合が良いので、断面をイメージして計測結果から作図をする。補助線で引いた中心線に基づいて回転させる。長さ方向は合わせて、直径は計測したものに近いねじ径とピッチで円柱を作りオネジで作り長さ方向以外でサイズを調整して作った。

ちなみにDMMで一番安い印刷は最近強度もありそうな試作プロレジンの割引で2537円ということだ。実際にプリントしてみてから頼んでみるかな。タフレジンだと5056円ということだから、試作は特別価格のようだ。

DSC_0560

なんだか、それなりのものが出来た。一番難しかったのは螺子の谷に埋め込まれたサポートの取り外しだったが、バリ取り工具のプラ用で取り去ることが出来た。

 

[解決しました] STM32のADCで嵌った( MultiChannel 非連続 循環バッファ DMA TIM3駆動 )

DMAでADC開始した後にさらにADC開始をしていたために一回チャネルがずれてしまうことになったようだった。

pUart = &huart1;
HAL_ADC_MspInit(&hadc1);
HAL_UART_Receive_DMA(pUart, RdBuff, RCV_BUFF_SIZE); /* 受信開始 */
HAL_ADC_Start_DMA(&hadc1, ADC_BUFF, ADC_BUFF_SIZE*6);
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start(&hadc1);

修正にいたる過程では6chのうち一つだけを増やしてサンプリングしたいということなどの要望がありDMAを使うものと割り込み駆動をするものとでトライしたがままならずDMAのみでサンプルするチャネルを当該のみ10倍にすることにした。この際に、バッファ段数の動的切り替えなどをトライする過程でADCとDMAの停止・取り込み再開の検討をする中で上記の点について気づきなおすことでトリガ単位で一つのチャネルをADC取り込みがなされることを確認できた。

HAL_ADC_MspInit(&hadc1);
HAL_UART_Receive_DMA(pUart, RdBuff, RCV_BUFF_SIZE); /* 受信開始 */
HAL_TIM_Base_Start(&htim3);
HAL_ADCEx_Calibration_Start(&hadc1);
HAL_ADC_Start_DMA(&hadc1, ADC_BUFF, ADC_BUFF_SIZE*15);

 

I2Cメモリの連続アクセスと個別アクセスの問題に遭遇した

STM32を使った測定器開発案件で、i2Cデバイスで2つのメモリ領域を持つデバイスの対応で嵌った。I2Cで用いるHAL層は以下の関数なのだが、領域全体をアクセスする場合と個別をアクセスする場合とでズレるのだ。ちなみに個別アクセスした場合には正しくアクセスできるが、連続アクセスした場合には1番地ズレた形でアクセスされて、最終領域に先頭データが読み込まれた。

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)

そう、HAL層に違いはないのだ。

この事例では0x50(0xA0)と0x51(0xA2)のI2Cアドレスを持ち、それぞれに256バイトの空間を持つデバイスでした。以下のAPIを変えて実行してみると結果が異なった。

HAL_I2C_Mem_Read(&hi2c1, 0xA0, 0, 0x100, BUF, 256, 100)
1番地から読み出されて最後に0番地の内容が得られる

for(i=0;i<256;i++){
HAL_I2C_Mem_Read(&hi2c1, 0xA0, i, 1, &BUF[i], 1 , 100)
}
正しく読みだされる

CubeMXのバージョン違いを確認してHAL層のコードとしては違いはなかった。
i2Cの仕様として、メモリデバイスとそうでないものをMemAddSizeにて処理を分けている。今回のデバイスはどうも、メモリデバイスではあるもののそのプロトコルの実装に問題があるようだ。

I2Cの評価用ツールをお客様がお持ちだったのでその内容と検証して後者の実装で
逐一アドレス指定をする形での実装を行った。デバイスの検証は必要なステップだと改めて感じた。

STM32のADCで嵌った( MultiChannel 循環バッファ DMA TIM3駆動 )

STM32F103を用いてADCを複数チャネル使い、常時計測を行い計測要求があった時点で過去10mS間の64回のデータを移動平均を取って処理報告制御するという処理を組んでいたのだが、STM32の持つDiscontinuousモードを用いて各チャネルを一回ずつ分割して順次TIM3のイベント周期で計測していくという形で計測をした。TIM3で25uS毎にイベントを出してADCが1chずつ計測していきDMAがサーキュラーバッファに格納していく。PA0にNucleoのGND/3.3Vを接続してバッファにどの様に入るのかを確認した。この使い方をすると、3.3V result on PA0 discontinuous modeの様にバッファの先頭に入るべきが2つ目に入る結果となった。

150uS周期に全てのチャネルを一気に計測するContinuous modeにして計測した結果は、3.3V result on PA0 continuous modeのようにバッファ先頭に入る形となった。期待値は、こちらなのでこのモードを用いる形にした。なぜズレるのかは不明だ。

ちなみにCubeMXは6.5.0でIDEはTrueStudio9.3.0でのケースなのでCubeMXでの問題があるのかも知れない。納入先の指定で開発環境が指定されているのでその範囲で対応と対策を試みて納品に漕ぎつけた。

 

STM32マイコンの評価ボードで開発支援

フリーランスでの仕事をいただくと実機前に適用マイコンに近い評価ボードで実装してみて開発環境に用いている。今回のマイコンはSTM32F103CBT6で128kBのFlashと20kBほどの組み込みマイコンではMidRangeのものだ。アーキテクチャの近いものとしてSTM32F103RBが搭載されているNucleo-103RBを用いて開発をしている。実際の機器との違いはピンアサインなど種々あるのだが、必要なI/Fについては割付先の違いくらいなのでコード生成機能(CubeMX)を用いて変更する程度で処理としては簡単に変更するのも最近のツール進化で楽になっている。

こうした評価ボード自体も、そのまま小規模なシステムに組み込んで用いてしまうことも多いのは昨今のチップ不足などもあり普通に見かける。評価開発にブレッドボードやArduino互換での端子なども含めて便利だからでもある。

ArduinoのAVRなどに比べるとARM-CoreM3が搭載されているこのボードは強力でクロックは72MHzまで高める事が出来るし内蔵の周辺機能も沢山集約されていてマイコンメーカーとして名をはせているST Micro社が世界に沢山出している人気マイコンでもある。

SPI/I2C/UART/ADC/TIMER/GPIOが多く搭載されているので、仕事でよくいただく測定器のファーム開発ではとても有用だし開発ボードにデバッガも組み込まれているのでUSBでPCと接続すればそのままソースコードをみつつ確認動作が出来る。USB一本でVCPチャネル経由でのアプリからの通信処理も確認できるので、主にシリアルコマンドで動作させることが多いのでこれも便利な一面だ。

さて、今回の開発では多くのアナログ信号のセンサ処理でフィードバックしたりセンサデバイスの線形補間処理も行って所要機能の精度確保を実現したりする必要もある。ADCからのデータ収集を一括して常時DMAで集信することも出来て処理としては過去のデータから移動平均を取るなどの作りこみも容易だ。ちなみに今回は6chを10ms周期にそれぞれ64回測定したものをオンデマンドで平均処理をして返送するという使い方だ。タイマから25uS周期でトリガを発生させて順次20uS程度の取り込み処理でADCがメモリ配列に取り込んでいく。DMAでサイクリックバッファに取り込むわけだ。

いろいろと稼働させていくと標準の動作クロック8MHzのままではリソース不足となりPLL設定のクロック割付にして高速にしていく。コアの速度・周辺クロックをそれぞれ調整して必要なものに変えていく。むやみに上げるとCMOS構造故に消費電力は周波数に比例して上昇する。USB接続で動作する構造のボードなので5Vから3.3Vのレギュレータを経て、300mA/100mAの二種の設定が出来るもののこれを越す場合には別途電源を供給する必要がある。USBハブの能力を上げてもこれは解決できない。しかしながら、このマイコン自体の消費電流からみても十分だということが分かった。ARM CortexM3クラスのマイコンなので消費電流は100mA程度に収まるらしい。拡張基板などを搭載したりする場合を除いては十分なものだろう。

今回は、デバッグ時点で応答しないという現象が多発して「Target not responding」というようなメッセージが出ていたのだが、評価基板の回路図と照らして間違ったIOの設定をしたりして端子同志がショートしたりといった事象が起きてしまったからのようだった。ともあれ。必要十分な低めのクロックを与えて消費電流を抑えることは必要だろう。コマンドとアイドルループ処理で凡そ0.6mS程度でソフトは回っているようだ。表示LEDにフリックを入れてオシロで確認できた。ADC以外にもシリアルコマンドの受信はDMAに任せていてコマンド処理ループ側で取り込みバッファからの読み出しで実行している。

測定器として接続されるのでホストからの処理を取りこぼしてはならないので、DMA任せにしているのは気楽だ。DACで出力した結果のADCを読みだす必要もあり、時間経過後に取り込んだADCバッファを移動平均処理したものを扱うには時間経過のポスト処理も必要だ。タイマ割り込みでの時間経過通知などで対応している。

 

CADデータからサンプルを作りたい

一緒に都立産業技術高専で非常勤講師を勤めている友人から、ある製品のCADデータに基づいて3Dプリンターでサンプルが作れないのかという相談を頂いた。学校の研究室にあるそれを使ったら出来るのではないだろうというレベルの話だった。以前から、授業に使う教材を支える道具や治具的なものを自宅工房で作成したりしたものを共有していたことからそんな相談になった。
「データがあったら始められるんでしょ」的な話ではあったものの、彼と私の出勤日も異なるので私の出勤日に合わせてその授業前後で依頼した人も交えてチャチャッと
済ませられるものだと思っていたようだ。まずはどんな形式のファイルなのかもわからないままに時間が経ち、学校は夏休みになってしまった。木更津の工房にある3DプリンターではFDMモデルなので制限事項が多いことから、そうした目的にはかなわないかも知れないが、まずはCADデータが入手出来たら確認するよと話を結んでいた。
そんな工房でのオープンも既に夏休み体制も終わろうとしていた時にデータが入手できたのでと送られてきた。メッセージは、いつ行ったら良いかな的なノリだった。
届いたものはSTEPフォーマットだった。レジャー用に設計された船らしい。沢山の製造部品がそのまま集大成になっていてどうしたものかと思いつつ、一つずつの部品のボディをSTLに変換していくと40弱のパーツになってしまった。これではプラモデルにもならないし組み立てるの大変だろうと一旦回答をしておいた。相談に伺いたいという話だったが、自宅のプリンタで済むかどうかも含めてネットでオンラインで知人への依頼主交えて状況を説明することにしておいた。
何か解決策はないだろうかと探っているとSTEPファイルでFusion360に取り込まれていた全体を纏めてSTLファイルとしてExportできることが分かった。時間はかかるもののCloud側で処理されて暫くしてからダウンロード出来た。
早速、DMM.makeにuploadして見積をしてみた。元々のファイル指定ではサイズを1/20にしたつもりだったが、350cm(1/2サイズ)になっていたらしく出力不能となった。再度スケーリングして1/20サイズで長さ35cmにしたところ18万円弱というものだった。展示会などで説明するモックアップにしても高すぎるのだろうと思い、サイズを更に20cmにすると4万円弱ほどになり体積見合いであることが分かると共に一括でSTLにしたため一番大きな船体部分が全て体積として計算されていることが支配的な理由だろうと判明した。
あいにくと一括で一つのSTLにしたファイルはMeshモデルなので空洞化させる為の演算などは出来ずソリッドモデルに変換する必要があったが、とりあえず依頼元の方と知人交えて目的のサンプル作成というゴールについては手の届きそうな費用範囲になりそうなのでデータを渡してDMM.makeに発注することを勧めておいた。
Meshからsolidに変換することは主要な最大部品である船体に限れば自分のマシン環境でも出来たので、中にたい焼きでいうところの餡子部品を作成して引き算することで空洞化処理をできた。他の部品も全てsolid化したのだが次に結合しようとすると末端のマシンではリソース不足になるらしく諦めた。ちなみにマシンのメモリは16GBしかないのだ。
最初に立ち帰って全てのsolidモデルのまま凡そ150ほどの部品を纏めてSTLに再度Exportすることで解決した。無理をしないことが肝要だ。なお、空洞化するだけでは不足で穴をあけて固体化しない材料が抜け落ちるようにしないとモデルとしてはNGだ。底面に3か所の穴をあけてこれらに対処した。
同様な条件でDMM.makeで見積を取ったところ13000円ほどになったから良いのかと思います。

ラジオの製作は難しい!?

6石スーパーAMラジオキット

電子工作オープンラボ開設に至った経緯からも、どこでも鳴らすことが出来るラジオとして6石スーパーラジオを取り上げて中華メーカーのキットを扱ってきた。ゲルマラジオのキットを都会で鳴らすことは現在の住環境では難しく電子工作の入口にはふさわしくない状況になっていることを知ったからでもあります。

さて、そんなラジオキットですが安価故に懐かしいベークの片面基板です。部品は中華仕様ではありますが日本の中波ラジオの範囲はカバーしています。中間周波数が465kHzになっていたりするのは国情を表しているのかもしれません。2028年秋には、AM放送の国内民放局は停波することになっており、既にFM移行も始まっています。電波の不思議を学ぶためにはAM放送はとても良い機会なのです。

しかなしがらそんなAMラジオを今の子供たちは聞くことはありません。タクシーの運転手も聞きながら運転しているという光景にもならなくなりました。車の中ではデジタルオーディオかCDなどを聞くようになりました。かつての自動車ラジオというジャンルはナビに置換されています。311のような大災害が起きたときに安定に離れた地域からの放送を聞くメソッドはAM放送しかありません。あの時に、「おばあちゃんの家ではラジオしか聞けなかった」という話をしていた少年を思い出します。

さて、ベーク基板は柔らかく銅箔の厚みも薄いので慣れない手つきで子供たちがはんだ付けで加熱し続けると剥離してしまいパターンが切れてしまいがちです。部品の密度も多くて昔の電子工作キットでは2石レフレックスなどの構成でも同様なもので慣れない手つきでのはんだ付けでパターンが切れてしまったときには途方に暮れた小学生時代のことを思い出します。無論、ブリッジしてしまい、回路が繋がってしまったりもします。最近では、鉛フリーの半田を使うと昔以上に半田付け不良が多発してしまうこともあります。見た目と接続は異なります。

地道に回路図から電源と信号の流れをおっていくことになります。

部品は間違えなくついているのか。抵抗のカラーコード、ダイオード・電解コンデンサの向き、トランジスタの品番とその向き。

ついている部品はただしいのか、バーアンテナのコイルは断線していないか、中間周波トランスのコイルは導通しているか、中点タップも導通しているのか。低周波トランスも同様。

「一通り見て回って怪しい箇所は吸い取ったりハンダを入れ直したりしたら薄っすらと受信するようになりました。でも、特定の局がスピーカーに耳を当てると聞こえる程度です。 電圧を調べると3と4が降圧されずに1.5vです。 430Ωの抵抗も所定の位置です。 何か考えられる事有りますでしょうか?」

こうした問い合わせをいただいた。ラジオキットを買い求められて、一つ目は鳴らすことが出来ずに2つ目をご購入いただいて挑戦して成功されたとのことだった。

スーパーラジオなのでBG1の所での局部発振とミキサーが動作しているのかどうかが最初の課題だが、局が受信できているとのことなのでBG1/BG2での中間周波変換までは動作しているのだろう。バリコンを回して同調がとれているのであれば、トラッキングをしていけばよいのかもと思うが、大体中間周波トランスの設定は予め調整できているのが最近の中華品質なのでまずは検波されてからの段階での問題かもしれない。

BG3/BG4でのトランジスタ端子に掛かっている電圧の確認をされているようだが、BG4以降は1.5Vが直接かかっているのだが、BG3までは100Ωを介しての接続なので1.5Vが観測されるということは、足回りで導通確認をしていただくことが必要かとも思う。それぞれのトランジスタのベースとコレクタから電源+の間、エミッタから電源-の間の抵抗などを見て頂くのが必要だろう。

あやしいのは、R7の抵抗、ボリュームの辺りになるかとも思われますが、果たして・・・。

スライスチーズの場所を作る

頂いた奥様からの設計メモ
冷蔵庫内部を測っていただいたチーズのサイズも含めてのものです
2つの部品に分けて設計した。
厚みは2mmPLAでサポート無しで強度を確保する作戦チーズを束ねる枠についてはひっかけ側から挿入してくびれで支える

出力時間はそれぞれ7時間ほど

これで設計メモのイメージのものとなった筈。

実際のデータはこちらにあげている