2019年7月31日水曜日

菊水のアナログファンクションジェネレーター MODEL 459

最近いろいろと忙しくて、このBlogの記事の更新が減っています。3日1回は更新という目標だったのですが、さすがにしんどくなってきました(^q^;

縁があって菊水のMODEL 459というアナログ・ファンクションジェネレーターを入手できたので、早速中を覗いてみました。

フロントパネル

昔の高級な無線機はみんなこんな面構えだったな!という強面。

内部

蓋を開けてびっくり。アナログ機器なので当然ですが、アナログ素子しか載っていません。実装密度は高くなく、なんとも牧歌的でありつつ職人芸的な実装技に感動してしまいました。

電源部からメイン基板への配線

電源系のケーブルが絶妙なカーブを描いて、信号系のシールド・ケーブルを回避するように配線されています。シールド・ケーブルなんだからノイズに強いし、どうでもええやんという投げやりなことはしないようです。

どういう電圧が来ているのかは調べてませんが、磁束が互いに打ち消されるように電流の向きが交互に逆向きになるようにしているんじゃないかな~と憶測します。

Trを取り囲む謎の線材

何のためかは定かではありませんが、Trをぐるりと囲むように線材が引き回されています。Q12とシルクパターンにあるのでTrだと思いますが、位置的に型番が読めません。歯科医のミラーとかちっこい顕微鏡などあれば確認できそうですが。線材がGNDなら電磁シールド的な役割を果たしてるとか?

電源基板

4つ並んでいるTO220っぽいトランジスタは2SC4793でした。

ロータリースイッチ周りの配線

周波数レンジを切り替えるロータリースイッチの配線です。レシプロ機のエンジンまわりを彷彿とさせます(^q^;

メインのポテンショメーター

周波数を選択するポテンショメーターです。COPALのJP-30B、10kΩ/LIN 誤差±0.5%と読めます。経は30Φでしょう。型番が手書きというのがなんとも贅沢な感じですね。

出力波形も測定してみるつもりです。

2019年7月18日木曜日

Mbed StudioのGPIOと浮動小数点数演算の速度測定

毎度のことながら、浮動小数点数演算の速度を測定しました。Mbed Studioというか、ARM Compilerをmbedで使った場合の速度ということになります。

GPIO


GPIOをH/Lさせてオシロで拾って演算速度を測定するので、まずはGPIO単体をH/Lさせるのにかかる時間を測定しました。

ターゲットボード: Nucleo-F446RE
Mbed Studio: 0.5.3
mbed-os: 5.12.0

<ソースコード>

#include "mbed.h"
DigitalOut CheckPin1(D2);
// main() runs in its own thread in the OS
int main()
{
    while (true) {
        CheckPin1 = 1;
        CheckPin1 = 0;
    }
}

Mbed Studioには、Build profileに「Debug」「Develop」「Release」があります。それぞれのprofileでBuildして測定しました。

Debug

周期: 361.0ns

Develop

周期: 61.17ns

Release

周期: 61.08ns

mbed-cliの場合は、61.09nsだったので(参考「GPIO出力の速度比較 mbed OS5 vs HAL API vs LL API」)、profileが「Release」「Develop」の場合はほとんど同じです。「Debug」の場合は遅くなっています。Debug用の割り込みがかかってるんでしょう。

浮動小数点数演算


<ソースコード>

#include "mbed.h"
#include <cstdio>
#include <cmath>

#define PI_F (3.14159265f)
#define LOOP_N (1000)

DigitalOut CheckPin1(D2);

volatile float buffer[LOOP_N];

// main() runs in its own thread in the OS
int main()
{
    while (true) {
        CheckPin1 = 1;
        volatile float fv = 0.0f;
        for (int i = 0; i < LOOP_N; i++) {
            fv += 0.001f;
            //buffer[i] = fv + PI_F; // Add
            //buffer[i] = fv - PI_F; // Sub
            //buffer[i] = fv * PI_F; // Mul
            //buffer[i] = fv / PI_F; // Div
            //buffer[i] = sinf(fv);
            //buffer[i] = cosf(fv);
            //buffer[i] = tanf(fv);
            //buffer[i] = expf(fv);
            //buffer[i] = logf(fv);
            //buffer[i] = powf(2.0f, fv);
        }
        CheckPin1 = 0;
    }
}

1000回ループさせて処理時間を測定しました。
#include <cstdio>
#include <cmath>
は、
#include <stdio.h>
#include <math.h>
とするとアラートが出たので変更しています。

コメントアウトしてある部分を、一つずつコメントアウトしたり外したりして再Buildして測定しました。



測定データ(us)

- mbed-cli Mbed Studio 差2
no-op 39 55.9 16.9
add 77.8 94.75 16.95 0.05
sub 77.8 94.625 16.825 -0.075
mul 77.8 94.75 16.95 0.05
div 145 167 22 5.1
sinf() 569 448 -121 -137.9
cosf() 621 415 -206 -222.9
tanf() 986 555 -431 -447.9
expf() 958 645 -313 -329.9
logf() 946 573 -373 -389.9
powf() 2625 2010 -615 -631.9

no-opは演算をすべてコメントアウトした場合の処理時間です。

四則演算ではmbed-cliの方が速くて残念な感じですが、算術関数はMbed Studioの方がかなり速くなっています。

測定データの「差2」はループ固有の処理時間の差を考慮したMbed Studioとmbed-cli処理時間の差です。no-op分を差し引くと四則演算でも引き分けに近い結果です。

メモ


Mbed Studioではbare metal profileというのがあって、RTOSなしで動作するようです。速度はどうだかわかりませんが、サイズはコンパクトになるはず。

「Using the Mbed OS bare metal profile in Mbed Studio」https://os.mbed.com/docs/mbed-studio/0.5/using-mbed-studio/using-the-mbed-os-bare-metal-profile.html

2019年7月12日金曜日

Mbed Studioを使ってみる

ST Micro のSTM32Cubeを使いこなせるようになりたいと思っていますが、ドキュメントの不足・不備で躓く箇所が多く(平たく言えばコナレていない)、速度的にもMbedと比較して有利とは言えません。

Mbedと言えばオンラインIDEの楽ちんプログラムですが、Mbed OS 5からはmbed-cliというCUI主体のローカル環境に移行しました。OS 5からは、とても楽ちんとは言えない開発環境になってしまいましたが、さすがMbedです。Mbed Studioという開発環境が登場しました。

Mbed Studioの利点


ARMコンパイラが使える


GCCは優秀なコンパイラですが、特定のプロセッサーに特化したコンパイラにはかなわないと思います。なんと、Mbed StudioはARM Compilerが無償&無制限で使えるそうです。


逆にMbed StudioでコンパイラをGCCにするにはどうすればいいんかと。

ローカル開発環境


オンラインIDEは確かに楽ですが、「仕事(お金儲け)」に使うには心もとない。ローカル環境なら誰にも見られず、うまいことできればうっしっしです。ソース管理もGitが使えるので楽です。

Visual Studio Codeベース


Visual Studio、Eclipce、Xcodeなど使ったことがありますが、今は主にNotepad++でコードを書いています。Visual Studio Codeの利点は見い出せなかったのですが、Mbed StudioはCUIの弱点をVisual Studio Codeでうまく補完できていると思います。

Arduinoみたく門戸が広いわけではないですが、ソフト屋さんからのハード屋さんの橋渡しにもちょうどいい感じだと思います。

Mbed Studioの弱点


STM32ではDebugできない


まだDebugができないプラットフォームがあります。

https://os.mbed.com/docs/mbed-studio/0.5/using-mbed-studio/building-and-running-a-program.html

Note: Mbed Studio uses pyOCD to communicate with the connected platform. If you attempt to run a program on a platform with a DAPLink version that is not supported by pyOCD, it will fail with exit code 1. We are still adding support for pyOCD and more platforms will be available over time.

主に使っているNucleo-F446も、まだDebugに関しては未対応のようで、Debugボタンがグレーアウトされています。

次回はGPIOの出力速度について。

2019年7月2日火曜日

DASS01 TLF01の組み込み

tozさんに手焼きしてもらったプリント基板をDASS01に組み込みました。


右下あたりの茶色い基盤が新生TLF01です。

ブロック図

VCOはデジタルなNucleo-DCOですが、VCF+VCAはフル・アナログです。アナログならではの野太いひずみ感に我ながら感動しています。

もう少し遊んでみたいと思います。