2024年4月7日日曜日

 




 


環境

  • PC: Ubuntu 18.04
  • HackRF One (SDR)

目的

Open SourceのSDRインターフェースライブラリであるSoapySDRを使用すれば、GNU RadioなどのアプリケーションでSDRを使用できるようになります。
本記事では独自SDR用のSoapySDRドライバの作成方法について説明します。

SoapySDRのインストール

まずはSoapySDRをインストールします。

$ git clone https://github.com/pothosware/SoapySDR.git
$ cd SoapySDR
$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ sudo make install
$ sudo ldconfig
$ SoapySDRUtil --info

HackRFドライバ(参考用)

いきなり自作ドライバを作成するのはハードルが高いため、まずは参考となるGREAT SCOTT GADGETS社のSDRであるHackRFのドライバの動作を確認してみます。

HackRFのHost用ライブラリをインストール

HackRFのHost用ライブラリをインストールします。本ライブラリを使用すればSoapySDRを使用しなくてもHackRFと接続ができます。

$ sudo apt-get install build-essential cmake libusb-1.0-0-dev pkg-config libfftw3-dev
$ git clone https://github.com/greatscottgadgets/hackrf
$ cd hackrf/host
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig

HackRFをUSBで接続してから、下記のコマンドで動作確認ができます。

$ hackrf_info
hackrf_info version: git-26c0f70
libhackrf version: git-26c0f70 (0.6)
Found HackRF
Index: 0
Serial number: 000000000000000006d065dc2aa875df
Board ID Number: 2 (HackRF One)
Firmware Version: 2018.01.1 (API:1.02)
Part ID Number: 0xa000cb3c 0x007d435d

HackRFのSoapySDR用ライブラリ(SoapyHackRF)をインストール

SoapyHackRFはSoapySDRのAPIでHackRFを動作させるためのライブラリです。SoapySDRとHackRFライブラリがインストールされている状態で下記を実行すると、 /usr/local/lib/SoapySDR/modules0.8にlibHackRFSupport.soが追加されます。

$ git clone https://github.com/pothosware/SoapyHackRF.git
$ cd SoapyHackRF
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

HackRFをUSBで接続してから、下記のコマンドで動作確認ができます。

$ SoapySDRUtil --probe="driver=hackrf"
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Probe device driver=hackrf
[INFO] Opening HackRF One #0 6d065dc2aa875df...

----------------------------------------------------
-- Device identification
----------------------------------------------------
  driver=HackRF
  hardware=HackRF One
  clock source=external
  part id=a000cb3c007d435d
  serial=000000000000000006d065dc2aa875df
  version=2018.01.1

----------------------------------------------------
-- Peripheral summary
----------------------------------------------------
  Channels: 1 Rx, 1 Tx
  Timestamps: NO
  Other Settings:
     * Antenna Bias - Antenna port power control.
       [key=bias_tx, default=false, type=bool]

----------------------------------------------------
-- RX Channel 0
----------------------------------------------------
  Full-duplex: NO
  Supports AGC: NO
  Stream formats: CS8, CS16, CF32, CF64
  Native format: CS8 [full-scale=128]
  Stream args:
     * Buffer Count - Number of buffers per read.
       [key=buffers, units=buffers, default=15, type=int]
  Antennas: TX/RX
  Full gain range: [0, 116] dB
    LNA gain range: [0, 40, 8] dB
    AMP gain range: [0, 14, 14] dB
    VGA gain range: [0, 62, 2] dB
  Full freq range: [0, 7250] MHz
    RF freq range: [0, 7250] MHz
  Sample rates: 1, 2, 3, 4, 5, ..., 16, 17, 18, 19, 20 MSps
  Filter bandwidths: 1.75, 2.5, 3.5, 5, 5.5, ..., 14, 15, 20, 24, 28 MHz

----------------------------------------------------
-- TX Channel 0
----------------------------------------------------
  Full-duplex: NO
  Supports AGC: NO
  Stream formats: CS8, CS16, CF32, CF64
  Native format: CS8 [full-scale=128]
  Stream args:
     * Buffer Count - Number of buffers per read.
       [key=buffers, units=buffers, default=15, type=int]
  Antennas: TX/RX
  Full gain range: [0, 61] dB
    VGA gain range: [0, 47, 1] dB
    AMP gain range: [0, 14, 14] dB
  Full freq range: [0, 7250] MHz
    RF freq range: [0, 7250] MHz
  Sample rates: 1, 2, 3, 4, 5, ..., 16, 17, 18, 19, 20 MSps
  Filter bandwidths: 1.75, 2.5, 3.5, 5, 5.5, ..., 14, 15, 20, 24, 28 MHz

自作ドライバ

Example Driverの実行

大枠の流れがわかったところで、SoapySDRが提供しているExample Driverを使用して、自作ドライバを作成してみます。

$ git clone https://github.com/pothosware/SoapySDR.git
$ cd SoapySDR/ExampleDriver
$ nano makeMyDevice.cpp

このままコンパイルするとエラーとなるので、MyDeviceSupport.cppのmakeMyDeviceの戻り値をここでは一旦削除します。

MyDeviceSupport.cpp
SoapySDR::Device *makeMyDevice(const SoapySDR::Kwargs &args)
{
    //create an instance of the device object given the args
    //here we will translate args into something used in the constructor
    return new MyDevice();
}
$ mkdir build
$ cd build
$ cmake ..
$ nano CMakeFiles/MyDevice.dir/link.txt

リンクでLibSoapySDR.soが見つからないというエラーが出るので、link.txtを修正して-Lオプションでライブラリの場所を指定します。

link.txt
/usr/bin/c++.exe -O3 -DNDEBUG -shared -Wl,--enable-auto-import -o cygMyDevice.dll -Wl,--major-image-version,0,--minor-image-version,0 CMakeFiles/MyDevice.dir/MyDeviceSupport.cpp.o  -L/usr/local/lib -lSoapySDR -Wl,--no-undefined -pthread 
$ make
$ sudo make install

/usr/local/lib/SoapySDR/modules0.8にlibMyDevice.soが追加されて、SoapySDRからmy_deviceが使用できるようになります。

$ SoapySDRUtil --info
######################################################
##     Soapy SDR -- the SDR abstraction library     ##
######################################################

Lib Version: v0.8.1-g722207a2
API Version: v0.8.0
ABI Version: v0.8
Install root: /usr/local
Search path:  /usr/local/lib/SoapySDR/modules0.8
Module found: /usr/local/lib/SoapySDR/modules0.8/libHackRFSupport.so (0.3.3-8d2e7be)
Module found: /usr/local/lib/SoapySDR/modules0.8/libMyDevice.so
Available factories... hackrf, my_device
...

独自SDR用にAPIを修正

SoapySDR::Deviceクラスに記載されているAPIのうち、独自SDRで必要なものをオーバーロードして実装します。
SoapySDR DriverGuideSoapyHackRFのコードが参考になります。

API一覧

API概要関数(一部)
Registrationデバイスの登録registerMyDevice
- Discoverying Deviceデバイスの発見findMyDevice
- Instantiating Deviceデバイスの作成makeMyDevice
Identificationドライバ、デバイスID取得getDriverKey, getHardwareKey
Channelsチャネル、DuplexgetNumChannels, getFullDuplex
Streamデータ読み書きreadStream, writeStream
Direct Buffer AccessDMAによるデータ読み書きacquireReadBuffer, acquireWriteBuffer
AntennaアンテナgetAntenna
Frontend Corrections補正処理(DC Offset, IQ Imbalance等)hasDCOffsetMode
GainゲインgetGain
Frequency周波数getFrequency
Sample RateサンプリングレートgetSampleRate
Bandwidth帯域(フィルタ)getBandwidth
ClockingクロックgetMasterClockRate
Time時刻同期getTimeSource
Sensorステータスモニタ(RSSI等)の読み出しreadSensor

おまけ(Cygwin環境)

Windows+Cygwinの環境でも試しましたが、デフォルトで作成されるライブラリ名がUbuntuとは異なるため、動作しませんでした。下記のようにライブラリ名をUbuntuでのライブラリと同じ名前に変更すると動作しました。

  • /usr/local/lib/libSoapySDR.dll.a --> libSoapySDR.so
  • /usr/local/lib/SoapySDR/modules0.8/cygHackRFSupport.dll --> libHackRFSupport.so

2024年1月8日月曜日

 

 

参考

Ubuntu 向け

https://mojeld.medium.com/ubuntu-server-20-04-lts%E3%81%A7-sysv-rc-conf-%E3%81%8C%E7%84%A1%E3%81%84-b96952bffc6f  参照

 

 

Ubuntu Server 20.04 LTSで「sysv-rc-conf」が無い

sudo apt install sysv-rc-conf

上記コマンドを入力すると「E: Unable to locate package sysv-rc-conf」ということだった

sudo apt install sysv-rc-conf
sudo vi /etc/apt/sources.list

「sources.list」を編集する

sudo vi /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse

編集したら:wq保存し

sudo apt update
sudo apt upgrade
sudo apt install sysv-rc-conf

インストールが完了した

sudo sysv-rc-conf — list

上記コマンドを入力すると サービス一覧が表示された

 

2023年12月26日火曜日

 

新電元 レクチレギュレタ SH847AA


    


 たぶん正しいだろう。あす、現車で確認だ

出力側に電圧が印加されていないと動作しないようだ。ほぼ無負荷(テスターのみ)では、電圧が出力されなかった。


次の書き込みは、「https://ameblo.jp/ikkotei/entry-11969055651.html」から

いきなり車両に接続して電装品をぶっ飛ばしたらえらい事なので、オルタネーターからの出力をバッテリーにのみ繋げてみます
レギュレータからの出力はUPSで寿命を迎えた小さなバッテリー

レギュレータの端子のサイズは250なので一般的な平端子を接続できますが、接点容量が少ないのであくまでテストです
実際に搭載する際は必ず専用の物が必要

当初H4のバルブを簡易負荷にして接続してみたんですが、全く出力がありませんでした
従来型やMOSFETタイプは電圧が上がったら制御するタイプですが、オープンタイプでは電源が無いと位相制御が始められないためだと思われます
そのためこのオープンタイプはバッテリーレス車には搭載不可です
KSRPROの単相全波制御レギュもひょっとしたらバッテリーレス不可なのかも・・・


いつものオシロで出力を見てみます


バッテリーの容量が少ないのと、負荷が充電電流の500mA程度のみなので、かなり最大値が大きくなっていますが、平均で15Vと問題無さそうです

車両に搭載した時の出力
 
左がV-Strom(DL1000)のオープンタイプ、右がノーマル
寒い始動直後なので両方1050rpmとちょっと低めですが、どちらもほぼ同じ電圧

 
2500rpm辺りの出力
オープンタイプはインジェクション前提で設計されているので、スパイクノイズが無いのが素晴らしいですね
電圧の振れ幅も少ないです

平均の出力電圧は両方とも14.9Vとちょっと高めですがレギュレータ直下での測定なのでこんなもんでしょうか
エンスト直前のアイドリングはもうちょっと低い出力電圧になるかと思いましたが純正と遜色無いですね
ここ10年数年での進化でしょうか
と言うわけでV-Strom1000のレギュレータをそっくりそのまま入れ換えても問題は無さそうという結論になりました

 
アイドリング(低)と2500rpmのオルタネーター出力波形
ちゃんとオープンタイプしてます

ショート式なら電圧制御が入った時点で0V付近まで出力が落ちますが、オープン式では電圧制御時に開放される違いがハッキリ見て取れます

ノーマルは回転数の上昇で発電すればするほどレギュレータが熱くなりますが、オープンタイプは負荷が増えれば増えるほど発熱します
ブレーキランプを踏んで、ファンモーターが回っている状態が一番発熱することになるので、渋滞中が一番熱的に厳しい状態でしょうか
走行風も見込めないので大丈夫か心配でしたが、ノーマルの方がよっぽ熱くなります
わずか数分で熱々になったノーマルに比べて、冷たいままのVストロレギュ
これは行けそうです
冬眠開けしたら装着して走行してみます


MOSFETショート式やサイリスタショート式では、LEDバルブに交換して省エネ化してもレギュレータとコイルに負荷が増えて故障の危険が高まるだけでメリットはほとんどありませんでしたが、オープンタイプでは負荷が減るのでわずかですが、燃費と出力に期待ができます(ほぼ無いに等しいですがw)

理論的には三層交流を全てショートさせると±0Vになるので打ち消し逢うらしいですが、実際はわずかな位相のずれや電圧のずれで低い方へ電流が流れ、磁力と熱に変わるそうな
磁力は馬力のロスになったり、熱はコイル焼けの原因になったりするらしいので、古くて電装品の貧弱な旧車にも相性が良いのではないかと思います
馬力の少ない250CCクラスなんかに付けてみると効果が出やすいと思います

MOSFETタイプの情報はそこそこありますが、オープンタイプはほとんど情報が無く全ての車種に問題無く搭載できるとは断言できないため試す際は自己責任でお願いします




色んなタイプのレギュが手に入ったのでネタはまだありますが、3回連続で書いたらちょっと飽きたので気が向いたらまた書きます





2023年12月25日月曜日

新電元 FH020AA はショート型MOSFET レクチファイアなんだそうだ。OPEN型と書いている人が多かった・・。で、買ってしまった。
取り付けたところ、低回転時は良さがだが、オルタネータあたり本来のレクチファイアより熱くなるような気がする。FH020AAは多少低めだが、ショート型は空冷をしっかりしてやらないとダメかな。(電圧がふらつく)MOSFETは原理的に熱暴走しやすいよね?RF PAでもMOS FETはしっかり保証回路使うか特性揃えないと、デバイスに穴が開くほど熱くなる。

SH847AAはOPEN型なんだそうな。。こっちはよいかな。しかし、でかいらしい。電流に余裕が出るので(このSH847AAは50Aなんだそうだ)サイリスタだが、20A程度なら熱くならないと言っている方がいる。(どう考えてもOPEN型が良いと思うが

とにかく、グランド側(還流側)のコネクタ端子付近がとろけてしまうことのないように、レクチファイアレギュレータがチンチンに熱くなり、走っている途中で電圧が出なくなってしままわないようにできれば問題解決なんだが・・。


2023年7月6日木曜日

 


Lazarus on Linux 


https://ubuntuhandbook.org/index.php/2021/11/install-lazarus-ide-ubuntu/   参照


Ubuntu だが Dragon OS(Lubuntu)でもOK


How to Install Lazarus IDE in Ubuntu 20.04, 18.04, 21.10

This is a step by step guide shows how to install the Lazarus IDE in Ubuntu 18.04, Ubuntu 20.04, Ubuntu 21.10 and their derivatives, e.g., Linux Mint, Elementary OS and more.

Lazarus is a free Delphi compatible cross-platform IDE for rapid application development using the Free Pascal compiler. User may install the project either from Ubuntu repository or by using the official DEB packages.

Lazarus IDE in Ubuntu

Option 1: Install Lazarus via Ubuntu repository:

Ubuntu includes Lazarus in its own repositories, but it does not provide updates for the package. So the package will always be old, though Ubuntu 21.10 has v2.0.12, most recent release at the moment.

The good side is that user may install the package on 64-bit modern PC, old 32-bit PC on Ubuntu 18.04, and/or arm64/armhf devices (e.g., Apple silicon and Raspberry Pi).

To install the package, press Ctrl+Alt+T on keyboard to open terminal. When it opens, paste the command below and hit Enter:

sudo apt install lazarus

This command will install Lazarus, fpc compiler, as well as all other required packages:

Once installed, search for and open the IDE from activities overview and enjoy!

Option 2: Install Lazarus via its official DEB packages:

The IDE provides official Linux packages available to download at the sourceforge.net. You can always get the latest version from the link button below, though it’s only provides packages for modern 64-bit and old 32-bit PC.

The official deb packages are made up of:

  • fpc-laz – the Compiler, some command line tools, base units and non visual components like database access
  • fpc-src – the sources of fpc and its packages, needed for code browsing
  • lazarus-project – the IDE, visual components and help files

Grab all the 3 packages. Then, open file manager and go to ‘Downloads‘ folder, right-click and choose ‘Open in Terminal‘ to open terminal with that folder as working directory. Finally, run command to install them:

sudo apt install ./fpc*.deb ./lazarus-project*.deb

NOTE: the official package conflicts with the one in Ubuntu own repository. Though the IDE supports for having multiple package versions in same system, installing Lazarus via either way in this tutorial will remove another (if any) automatically.

And it will prompt to either upgrade or downgrade configuration when switching between different app versions on first startup.

Uninstall Lazarus:

To remove the Lazarus IDE, run command below in terminal will do the trick for the software installed via both methods.

sudo apt remove --autoremove lazarus lazarus-project fpc-*


2023年6月25日日曜日


参照 

http://blog.smallserver.jp/raspberry-pi-%e7%94%a8%e3%81%aesd%e3%82%ab%e3%83%bc%e3%83%89%e3%82%92%e5%88%9d%e6%9c%9f%e5%8c%96%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/ 


Raspberry Pi 用のSDカードを初期化する方法

RaspberryPiで使用していたSDカードの中身を入れ替えようとWindowsのPCでカードリーダーから読み込ませた場合、パーティションの情報をうまく認識することができません。
今回はSDカード内のパーティションをすべて削除し、何も書き込まれていない状態に戻す方法を紹介します。

初期化前の状況

RaspberryPiで使用していたSDカード(16GB)をカードリーダで読ませると次の様になります。2つの領域に分かれてしまっている上に、認識できた部分の領域は100MB弱しかありません。

初期化の手順

コマンドプロンプトを開き、コマンドラインから「diskpart」と入力してエンターキーを押します。なお実行時には許可を求められます。

別のウインドウでDiskPartが起動します。

「list disk」と入力してエンターキーを押してください。接続されているディスクが表示されます。
ディスク容量が16GBに近いディスク1が初期化するSDカードとなります。間違ってディスク0を消すとPCが起動しなくなるのでご注意を。

「select disk 1」と入力してエンターキーを押してください。ここでディスク1に対し設定を行うことを宣言します。

再度「list disk」と入力してエンターキーを押してください。ディスク1に印(*)がついており、ディスクが選択されていることが確認できます。

「list partition」と入力してエンターキーを押してください。SDカードのパーティションの一覧が表示されます。2つのパーティションが表示されているのがわかります。

すべてのパーティションを削除します。なお、Windows上でSDカード内を開いたままだとエラーになりますので、エクスプローラなどはすべて閉じた上で、再度コマンドを実行してください。正常にパーティションを削除すると次のメッセージが表示されます。

再度「list partition」と入力してエンターキーを押してください。パーティションが全くないことが確認できます。

マイコンピュータを開いてもドライブが1つになり、フォーマットしていない状態なので容量も表示されません。

あとはmicroSDカードにOSイメージを書き込む方法を参考にOSイメージを書き込んでください。