JP7FKFの備忘録

ヒトは,忘れる生き物だから.

第36回電通大コンテストの結果

題のとおりです.
2017年に開催された第36回電通大コンテストの結果がかなり前に発表されておりました. 私は7MHz部門に参加し,113QSOという結果でした.

第36回電通大コンテストに参加した - JP7FKFの備忘録

結果は...

f:id:jp7fkf:20180518174611p:plain:w500

ちなみに2015年に開催された第34回電通大コンテストでは, 123QSO, 316pts, 33multiで総合得点10428ptsで7MHz部門で10位でした.

電通大コンテスト2015結果発表 - JP7FKFの備忘録

今回は113QSO, 299pts, 37multi, 総合得点11063ptsで同じく10位という結果でした.

以前と比べてQSO数は下がっているものの,multi,総合ptsは上昇しており,特に成長は感じられませんでした.
ただ,知り合いの局に関東でよく聞こえていたとの報告をいただいて嬉しい限りです.

1総通を取りたいと言い始めてからもう何年も経っていますが,いまだに取得できる目処は経っていません....
和文モールス難しい(一応修行はしているのですが...).

これからも精進したいところです.

=====第36回電通大コンテスト=====
Call:JP7FKF/7 (QTH:060101), 7MHz Only
LICENSE: H
QSO: 113
MULTI: 37
TOTAL SCORE: 11063
RANK: 10

SW4STM32で実数型をsprintfするときのtips

SW4STM32で実数型の値を出したくて,実数型のフォーマット指定子である%fをいれてみたらエラーが. なんでやねんって話である. これが組み込みプログラミングらしいところで,おそらく実数型のsprintfはコードサイズが増えるため,デフォルトでは利用しないようになっているのではないかと予想する.

エラー文は下記の通り.

The float formatting support (-u _printf_float) is not enabled from linker flags

検索したところ,下記のサイトに以下のような記述を見つけた.
PrintfのFloat出力: Crescent

結論から言うとプロジェクト内のプロパティから、
C/C++ Build」->[Settings]->
[Tool Settings]->[MCU GCC Linker]->[Miscellaneous]
でLinker flagsの
「-specs=nosys.specs -specs=nano.specs」
から
「-u printf_float」
を追加して
「-specs=nosys.specs -specs=nano.specs -u
printf_float」
にすることです。

なるほど.ということでこの通りに設定をいじる. f:id:jp7fkf:20180109000457p:plain:w500

するとめでたくコンパイルは通り,正しく実数型を扱うことができました.めでたし.

Reference

STM32マイコンでADCを使ってみる話

最近はPICよりかはSTM32を用いて電子な工作をしている. 基本的なペリフェラルとして,GPIO(論理出力/入力),ADC, PWM,Timer(割り込み),通信系(I2C,SPI,USART,I2S,CAN,USBなどなど)等がある.このうちでもセンシング等でよく利用されるのがADCであろう.秋月で簡単にチップが入手できるSTM32F042には,12bitというわりと分解能の高いADCが付いている.PICでは8bitや10bitが多い中,12bitもの分解能が得られるADCはありがたいものだ.

今回はこのSTM32のADCを利用する方法を簡単にまとめてみようと思う. 主に下記の記事を参考にさせていただいた.

STM32の少しややこしいところは,PICのようにチャネルを設定しADCをGOしてフラグが落ちるまで(ADC完了まで)待ち,データを取る.というシーケンスでチャネルを次々変えて変換すれば異なるチャンネルのADCができるというわけではないという点である.特に注意するべきがこの複数チャンネルのADCであり,これはDMAを使ってやるとかなり簡単に処理することができる.STM32でADCを利用するときはDMAの利用は必須と言えそうだ.

複数チャネルのADCについては,上記の記事でかなり詳細に紹介されているので,ここは自分が忘れない程度にざっくりと記載していく.参考にするのであれば上記の記事を参考にすることをお勧めする.

DMAを用いたADC

まずはSTM32CubeMXでペリフェラルの設定をする. ADCしたいピンをADCモードに設定する.GUIなので簡単である. f:id:jp7fkf:20180108234233p:plain:w500

さらにconfigurationタブから,ADCのconfigは下記のようにしておく.

  • Continuous Conversion Mode: Enable
  • DMA Continuous Requests: Enable
  • Overrun behaviour: Overrun data overwritten

f:id:jp7fkf:20180108233837p:plain:w500

さらにDMAのconfigをいじっておく.ADCからのDMAリクエストを追加して

  • Mode: Circular
  • Increment Address: Memory
  • Data width: half word

f:id:jp7fkf:20180108233855p:plain:w500
ここまでできたらCubeMXを用いた設定は終了なので,コードを生成する.

ここからはSW4STM32でコードを書いて行く. 追加するべきは,初期化や変数宣言をするあたりに下記のコードを追加するだけである.

enum{ ADC_BUFFER_LENGTH = 2 };
uint16_t g_ADCBuffer[ADC_BUFFER_LENGTH];

memset(g_ADCBuffer, 0, sizeof(g_ADCBuffer));
HAL_ADC_Start_DMA(&hadc, g_ADCBuffer, ADC_BUFFER_LENGTH);

これで,任意の場所でg_ADCBufferの中身をみてやれば各chのADC値が読み取れる.ch1とch2を使っているのであればg_ADCBuffer[0]にch1が,g_ADCBuffer[1]にch2のADC値が入っている.
ADCを複数チャネルで利用する場合であっても,チャネルの若番から順に配列に格納されていく.ch1とch3のみを有効化した場合でもg_ADCBuffer[0]にch1, g_ADCBuffer[1]にch3の結果が入る.

というわけで,これだけでDMAを使ってADC値を得ることができる.ADCするためにCPUを使う必要もないし,いい感じである.CPUのリソースを有効に使える感じがする.これからもSTM32の勉強を進めて色々なモノづくりを進めてみようと思う.

References

ACS758を使ってカジュアルに電流計を作った話

電流を測りたくなったのでわりとカジュアルに電流計を作ってみた. 電流を測定するにあたって,使ったのはAllegroのACS758というもので,このうちの,ECB-200Bというモデルのホール効果を利用した電流センサを利用した. こいつは±200Aの電流を測定することができるというわりとスゴい代物.

こいつから10mV/Aの傾きでほぼリニアに測定値を得ることができる. こいつの出力電圧をADコンバータで受け,PICを使ってLCDに表示することにした.

ADコンバータはなるべく分解能の高いものを使いたい.ここで下記のような16bitでI2CなADCを用いてカジュアルに済ませることにした. こいつの特に便利なところは,差動入力が可能なところと,基準電圧内蔵なところである. ECB-200Bは,正負の電流が測定できるのだが,出力電圧にはバイアスがかかっており,そこから上下に電圧が動くことで正負電流を表現している. この動きの測定にADCの差動入力を大いに利用し,負側にECB-200Bの0点電位を与えることで,差動的に見て負の電圧(絶対的に/GND基準では正の電圧である)も上手にADC出力として表すことができ,余計なこと(バイアスを与えたり,ADC後に0点を考慮して値をオフセットしたり)をせずに簡単に出力値を得ることができるのだ.0点調整もボリュームをつけてやることで現場で0点調整を行うことができて,多少静磁場があるところでも0点を調整して測定ができる. MCP3425(16Bit ADC I2C 基準電圧内蔵)搭載モジュール

リファレンス電源内蔵で,I2Cで測定値を得ることができる代物である. これなら普通の8bitADCしか備えていない安物PICをMCUとして用いることができる.

さらにLCDには,これまたI2Cなキャラクタ液晶モジュールを用いる. 電流値を表示するだけなので8x2行で十分である.

I2C接続小型キャラクタLCDモジュール 8x2行

この2つのI2CなデバイスをPICのI2Cポートにバス接続させて動かすことにする.これならGPIOが少ないMCUが利用できる.

f:id:jp7fkf:20180108201338j:plain:w600
(写真は誤って制作中に液晶を割ってしまったときのもの....このあと新しいのに変えました.こいつは割れやすいので気をつけないといけない.)

I2Cで値をとって表示するだけなのでPICのお仕事はほとんどない. なので安物の8pinPICであるPIC12F1822を用いる.

こいつのI2CバスにADCのICと液晶のI2Cラインをぶら下げる.

あとはADCの測定値を整形して出すだけ. 簡単だ.

ケースはタカチの単四x2の電池ボックスがついたものを使った.液晶用の穴と,陸軍端子,スイッチ用の穴を開ける. 陸軍端子と電流センサはできるだけ太い配線で結ぶ.銅板を曲げたりしても良いと思う.

電源電圧は5Vで動かしているので,単4x2だと足りない.なのでステップアップコンバータで簡単に5Vに昇圧する.こいつはカジュアルに昇圧したいときに本当に便利である.何も考えなくてもきちんと電圧を吐いてくれる.ただし電流は200mAまでなのでそこそこ電流を食わせるときには多少の注意は必要である.

PFMステップアップDC/DCコンバーター HT7750A(5個入)

f:id:jp7fkf:20180108201407j:plain:w600

つーわけで,±200Aまで測れる電流計ができた. SANWAのそれなりのテスタで確度をざっくりみてみたけど,いい感じの値を出してくれている. ただし,ホール効果を用いている以上,周りに磁石等があるばあいは値が狂ってくる.強力な磁石を近づけると数十Aオーダーで誤差が出る.一定磁場の中ではキャリブレーション(0点調整)をすればよいが,磁場が変化する場合はこいつでは正確な測定ができないので注意をする必要がある.

なんにせよ,それなりの大きな電流がそれなりの精度で測定できる電流計を作ることができた.電池駆動なので持ち運びもできて小型に収められたので使い勝手が良い.めでたし.

References

MBPにSDカードを挿してストレージ問題を解消する話

わたしのMacBookProはMid2014な13inch retinaなやつ. もうしばらく使ってる.

私はメインPCをデータの倉庫にしてあり,そいつが最新になるように管理している. ラップトップにはそのメインPCからデータをコピーして持ち歩いている. コピーはバックアップを取る時にやるようにしてあり,メインPCで変更されたデータは,バックアップの時にラップトップにコピーされて更新される.それまでは前のデータがラップトップに入っていることになる.どうしても最新のデータが欲しい時はリモートデスクトップやらVPNやらでメインPCにアクセスしてデータを吸い出している.

基本的にデータを作ることよりも参照することの方が多いので,この方式を採用している. するとだんだんデータ量は増えて,ついに256GBなMBPのストレージを圧迫するようになってきた.

メインPCのデータを全てコピーしているわけではなく,持ち歩きたいデータを選別してコピーしているが,そのような状況だった.

macSSDを換装することも考えたが,このモデルはなかなか厳しいようである. 他にはUSB-HDDを持ち歩く方法であったり,小さいタイプのUSBメモリをさしっぱなしにしてストレージとして利用する方法などが考えられたが,私はSDカードのユニットが空いているのが気になって,そこを埋めようかと考えた.USBポートを使いたくないということもある.ただでさえ2ポートしかないのにUSBメモリさしっぱなしにすると1ポートしか使えなくて大変不便だ.

SDカードスロットに差し込むタイプのストレージとして販売されている,TrancendのJet Drive Liteなんてものもあるのだが,なんせこれが高価である.128GBで12000円ほど. 探してみると,SDカードスロットから頭が飛び出ないタイプのmicroSD->SD変換があるらしく,こいつにmicroSDを差し込んで使うことでそれなりに安価にできるのではないかという結論に至った.

ということでコイツらを買ってみた. iSlice Pro 13" MacBook Pro 13インチ Retinaディスプレイモデル (Late2012, Early2013, Mid2014, Early2015) 専用 microSDカードアダプター シルバー EAD-303ASV
Samsung microSDXCカード 128GB EVO Plus Class10 UHS-I U3対応 (最大読出速度100MB/s:最大書込速度90MB/s) Nintendo Switch 動作確認済 MB-MC128GA/ECO

f:id:jp7fkf:20171216154554j:plain:w600
f:id:jp7fkf:20171216154621j:plain:w600
f:id:jp7fkf:20171216154636j:plain:w600

値段は...JetDriveLiteと比べて大して変わらないかも...と思う.でも少し安い.さらに,microSDの容量を変えたく鳴った時に気軽に変えることができるし,もしこのmacを使わなくなったとしてもデジタルカメラ等でmicroSDを継続して利用できるメリットもある.なかなか良いと思う.

ということで,ストレージが圧迫することもなくなり,ストレージのことを気にして使う必要も無くなってすこぶる快適.まだこのMBPに頑張ってもらおうと思う.私はこのマシンに愛着があるし使いやすくて好きであるから.

勉強って難しいよねって言う話

ただ考えたことを書き殴る.読み手のことは考えていない.

勉強は2段階か3段階必要な気がする.ひとつはきっかけを作り,知る勉強.
そしてそれを確かめる勉強.確かめて自信になったものが自分のものとなる.

勉強することって難しいなって思った.

そもそも勉強ってなにさということにもなるしなんだこの哲学的な感じは.

いわゆる普通のお勉強って,いくつかの段階に分かれてる気がする.

  1. 知らないことを知るということ.
    無知の知ってやつなんだろうか

  2. 知らないことを知ったときにそれを知ること.
    知らないことを知りたいって思う好奇心みたいなものであったり,ある程度貪欲な姿勢だったり,知らないことに心を惹かれるかとか. そういう動機から,自分で自主的に知りたいから知ろうとしているか,それを実行して実際に知ることができたかとか,理解できたかとか.

  3. 知ったことを確かめるお勉強
    知ろうとして知ったことが本当に正しいかどうか.複数の情報源で確かめたかとか,実験してみたかとか.

  4. 人にある程度の自身を持って教えることができるかどうか.
    これくらいできるようになると,自分がきちんと知って,理解できたなっていうことだと思う. 「学びというのは人に教えることで成就する」ということばをもらったことがある.
    今は,この考え方で生きている.

こういったことを経て,やっと自分で身についた/理解したなって思うことが多いかなと感じている.それだけ.

System workbench for STM32の.runインストーラからのインストール方法 on macOS

前にSW4STM32の.runでのインストールでつまずいて結局jarで入れたとか書いたけど,ちゃんとinstruction読んだらrunですんなりできたので報告.

Installing on MAC OSX

Warning: To run System Workbench for STM32 on MAC OSX systems, XCode is required. To download it, please refer to the Apple developper website (registration as Apple Developer is required).
The downloaded installer is an executable binary file. Your web browser might have removed the execution right of the file. Please set the execution right to the installer file (chmod 755 install_sw4stm32.run then ./install_sw4stm32.run) Launch it with /bin/bash (/bin/bash install_sw4stm32.run)

ということで

$ chmod 755 [.runファイル]
$ /bin/bash [.runファイル]

あとはウィンドウが出てくるので,適切にNEXTとかAGREEとかやってFINISH.

できちんとできてしまうのでした.取説読め案件である.