« 2025年3月 | トップページ | 2025年5月 »

2025年4月

2025年4月10日 (木)

Windows用 Paspberrypi PICO 公式SDKについての備忘録

ラズベリーパイPICOは安価で高性能なマイコンで、使いこなせればかなり強力なアイテムだ。
開発環境は公式SDK(C/C++)、MicroPython、Arduinoなどが選択でき、わりと気軽に試してみることができる。
ただ、特徴的な機能であるPIO(プログラマブルIO)や、USBの機能などを十分に使いこなすには公式SDKでC/C++での開発が必要になりそうなので、調べながらあれこれ試してみたが、Windows上での公式SDKの使い方がいまひとつわかりにくく、同梱のexampleのコンパイルができても、任意ホルダに配置した独自コードのビルドの方法がわからないなど、どうにも全体的に判然としないことが多かった。

今回は公式SDKのセットアップが完了していて、同梱exampleのbuildが行える、という状態から、
① exampleホルダの中から、任意の特定のプロジェクトのホルダのみを任意の作業ホルダにコピー
② CMakeLists.txtを書き換え
③ buildしてuf2ファイル(PICOに書き込む最終ファイル)を生成

という一連の作業を備忘録として書いておこうと思う。

まずは公式SDKをダウンロードして、Windowsにインストールする。
このサイトの真ん中あたりに"Downlload Windows Pico Installer"というボタンがあるので、クリックしてダウンロードし、
これを実行してインストール。
すると、VS CODE、GCC(Pico用のクロスコンパイラ)、CMake(ビルドシステムの生成ツール)、Ninja(高速ビルドツール)、Git(ライブラリ管理)、pico-sdk(SDKとサンプルコード)などが一括してインストールされる。

まずはexampleのbuildを試してみる。
SDKがインストールされていれば、WindowsのスタートメニューにRaspberry Pi Pico SDK v1.5.1という項目ができて、その中にPico-Visual Studio Codeが生成されているので、これを起動する。そして次の手順でexampleをbuildする。

①ファイルのOpen Folderからexampleのプロジェクトホルダ”pico-examples”を開く。
(場所はC:\Users\(ユーザー名)\Documents\Pico-v1.5.1\pico-examples)
②"Do you trust the authors of the files in this folder?"→Yes
③Select a Kit for pico-examples → "Pico ARM GCC"または"GCC 10.3.1 arm-none-eabi"など、有効なコンパイラを選択
④画面左側のアイコンバーのCMAKE(△マークにスパナ)をクリック
⑤PROJECT OUTLINEの下のプロジェクト名の下の”プロジェクト名(Excutable)”の右側のbuildアイコン(ごみ箱のようなアイコン)をクリック
⑥プロジェクトのbuildホルダ内にuf2ファイルが生成されるので、これをpicoに書き込めばすぐに動作を開始する

以上のようにexampleのbuildはとても簡単にできる。uf2ファイルのPICOへの書き込みは、PICOのBOOTボタンを押した状態でpcにUSB接続すると、メモリデバイスとして認識するので、そこに生成されたuf2ファイルをコピーしてやればよい。

ところがここからが問題なのだが、実際の開発は、任意の開発用ホルダ内に保存したCのソースコードをbuildするという作業になる。
上で試したサンプルのbuildは、まず作業ホルダとして、すべてのサンプルが含まれたpico-exampleホルダを開いておいて、その状態からその中に含まれる特定のプロジェクト(たとえばblink)を選んでbuildするというやり方になっていて、
たとえば最初に選ぶ作業ホルダをpico-exampleホルダの中のblinkホルダにしてbuildしようとするとエラーになってしまう。

なので、任意の場所に作ったプロジェクトホルダの中に保存したコードをbuildする、という課題に対して、まずはpico-exampleの中の任意のプロジェクトホルダを、別の場所にコピーして、それをbuildできるようにする、ということを実行してみたい。

今回は、pico-exampleに入っている、adc\microphone_adcを例にやり方を紹介する。

まずはpicoの任意の開発用ホルダに、microphone_adcをホルダごとコピーする。開発ホルダはここではc:\pico_prjとする。
microphone_adc内にbuildホルダが存在していれば、念のためその中身は空にしておく。
次にmicrophone_adcのホルダ内のCMakeLists.txtを次のように書き換えて保存する。

###################ここから############################
cmake_minimum_required(VERSION 3.13)

# pico-sdkのパス(適宜書き換えてください)
set(PICO_SDK_PATH "C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)

project(microphone_adc C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

add_executable(microphone_adc
    microphone_adc.c
)

target_link_libraries(microphone_adc pico_stdlib hardware_adc)

pico_add_extra_outputs(microphone_adc)
######################ここまで###########################

あとは上書いた手順で、CMAKEアイコンを押して、”PROJECT OUTLINE”の下のmicrophone_adcの下のmicrophone_adc(Executable)の横にあるbuildアイコン(ごみ箱のようなアイコン)を押せばbuildが実行される。
このCMakeLists.txtの記述中、ターゲットのホルダ名microphone_adcが4箇所、ソースファイル名microphone_adc.cが1箇所出てくるが、これはプロジェクト名、ファイル名に応じて都度書き換えること。

【重要事項】
最初、blinkのコピーを実行してうまくいったので、CMakeLists.txtをそのまま流用したら、microphone_adc.cの
#include "hardware/adc.h"
の行でエラーになってしまった。adc.hが見つけられない、という内容のエラーだった。
そこで原因を調べたら、CMakeLists.txtのtarget_link_libraliesの記述が
target_link_libraries(microphone_adc pico_stdlib )
となっていて、hardware/adc.hが検索範囲に含まれていなかったのが原因だった。なので、hardware_adcを追加して、
target_link_libraries(microphone_adc pico_stdlib hardware_adc)
とするとOKになった。

もともとのPICO SDKの#includeの検索範囲は、
${PICO_SDK_PATH}/src/common/pico_base/include
${PICO_SDK_PATH}/src/rp2_common/hardware_adc/include(← この下に hardware/adc.h がある)
(PICO_SDK_PATHはpico-sdkのパス)
となっていて、カッコ書きしたようにadc.hは範囲から外れているので、上のようにtgetar_link_librariesに追記する必要がある。

書式として、hardware/adc.hがhardware_adcとなっているが、このほかにも以下の例のようになっている。

pico/stdlib.h         →             pico_stdlib
hardware/spi.h     →             hardware_spi
hardware/i2c.h     →             hardware_i2c
……etc


そういうわけで、ようやく任意ホルダにPICO SDKのソースプロジェクトを構築する準備ができました(^-^)


【20250411追記】
せっかくなので、動作確認可能なサンプルで試してみよう。
pico-examplesの中身を見ていたら、i2cホルダの中にssd1306_i2cというプロジェクトがあるのを見つけた。
ssd1306はoledの表示パネルだ。aliexpressでも安く販売している。
このサンプルプロジェクトを、上述したように任意の場所にコピーして、buildして動作確認してみる。

ssd1306との接続はreadmeに書いてあるが、GP4→SDA、GP5→SCL、あとはGNDと3.3V。

まずpico-examplesのi2cの中にssd1306_i2cホルダがあるので、これを任意の場所にコピーする。
次に、コピーしたssd1306_i2cホルダの中のCMakeLists.txtの内容を次のように変更して保存する。

####################ここから
cmake_minimum_required(VERSION 3.13)

# Set the path to the SDK
set(PICO_SDK_PATH "C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")

# Import the SDK
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)

project(ssd1306_i2c C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

add_executable(ssd1306_i2c
ssd1306_i2c.c
)

target_link_libraries(ssd1306_i2c pico_stdlib hardware_i2c)
pico_add_extra_outputs(ssd1306_i2c)
###################ここまで

上でも注意したとおり、ホルダ名のssd1306_i2cが4箇所、ファイル名のssd1306_i2c.cが一箇所あるので、このCMakeLists.txtを他のプロジェクトに流用する場合などは変更忘れに注意すること。
また
set(PICO_SDK_PATH "C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")
の行はpico-sdkのパスを設定しているが、別の場所にインストールしている場合は修正すること。

次の手順でbuildする。
①Pico-Visual Studio Codeを起動して、ファイルのOpen Folderからコピーしたssd1306_i2cホルダを開く。
②Select a Kit for pico-examples → "Pico ARM GCC"または"GCC 10.3.1 arm-none-eabi"など、有効なコンパイラを選択
③左のアイコンバーから△にスパナのマークのCMAKEのアイコンをクリック。
④PROJECT OUTLINEペインのssd1306_i2cの下のssd1306_i2c(Executable)にカーソルを合わせると、右の方にゴミ箱のような形のbuildアイコンが表示されるので、これを押す。
⑤ssd1306_i2cホルダの中のbuildホルダの中にssd1306_i2c.uf2が生成されているのを確認
⑥PICOのBOOTSELボタンを押しながらPCにUSBケーブルで接続すると、ドライブとして認識するので、そこにssd1306_i2c.uf2をコピー。

以上で、自動的にリセットがかかり、プログラムが起動する。
互換ボードで確認した様子を動画1に示す。


動画1

\(^o^)/



【20250412追記】PCとのシリアル通信
pico-examplesのi2cホルダの中に、bmp280_i2cというサンプルがある。BMP280は有名な気象センサで、温度、気圧が測定できるのでたいへん便利なデバイスだ。接続は、GP4→SDA、GP5→SCL、あとはGNDと3.3V

さっそくやってみようと思ったが、測定結果はどこに表示されるのだろうか?
ソースコードbmp280_i2c.cを見てみると、いきなりprintf文で表示している。何か釈然としないと思いつつ、手順に従ってbuildしてみた。つまり、
①bmp280_i2cのホルダを任意の作業ホルダにコピー
②CMakeLists.txtを書き換え(以下のとおり)

#################ここから
cmake_minimum_required(VERSION 3.13)

# Set the path to the SDK
set(PICO_SDK_PATH "C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")

# Import the SDK
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)

project(bmp280_i2c C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

add_executable(bmp280_i2c
bmp280_i2c.c
)

target_link_libraries(bmp280_i2c pico_stdlib hardware_i2c)
pico_add_extra_outputs(bmp280_i2c)
#################ここまで

③VS CODEでホルダを開いて、コンパイラを選択して、CMAKEからbuild。
④buildホルダにbmp280_i2c.uf2ができたので、これをpicoに書き込み。

ここまでは問題なくできたが、書き込みが終わっても何も起こらない。表示するものがないので当然といえば当然なのだが、念のためCOMポートで認識していないかPC側を調べたが、認識していない。はて……?

結論を先に書くと、CMakeLists.txtのtarget_link_librariesに、”pico_stdio_usb”を追加する必要がある。つまり

target_link_libraries(bmp280_i2c pico_stdlib hardware_i2c pico_stdio_usb)

とすればOKだ(^-^)
pico_stdio_usbについては、CMakeLists.txtのこの部分で定義しているだけで、ソースコード上では特に#includeしているということもなく謎といえば謎だ……(実際はイニシャライズが必要→後述)

CMakeLists.txtを上記のように修正して、buildして書き込むと、picoは再起動し、パソコンからCOMポートとして認識するので、デバイスマネージャなどでポート番号を調べて、ターミナルソフトで確認する。速度は115200。表示の様子を図1に示す。

20250412bmp280
図1.測定値の表示


ところで、マイコンの開発ではデバッグツールがない場合でも、何らかの表示手段が必要で、通常はUSBシリアルでマイコンからの情報をPCに表示させるようにする。通常はターゲットのマイコンのUART端子にUSB-UARTインタフェイスを接続して、これをPCに接続し、PC上のターミナルソフトを使って表示させる場合が多い。
PICOの場合はもともとUSBインターフェイスを備えているのでこれを使えばよいのだが、この情報をあまり見かけないのは不思議だ。
これは上に書いたように、CMakeLists.txtでpico_stdio_usbをターゲットに登録し、下記のようにmain()でstdio_usb_init()を実行すれば、printfでの出力が可能になる。
UARTにprintfで出力するだけのプロジェクトは以下のとおり。

プロジェクトホルダ:USB_Serial
Cソースファイル:USB_Serial.c

/////////////////////////////USB_Serial.cここから
#include <stdio.h>
#include "pico/stdlib.h"

int main() {
stdio_usb_init();
while (true) {
printf("Hello via USB CDC!\n");
sleep_ms(1000);
}
/////////////////////////////ここまで


################CMakeLists.txtここから
cmake_minimum_required(VERSION 3.13)

# Set the path to the SDK
set(PICO_SDK_PATH "C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk")

# Import the SDK
include(${PICO_SDK_PATH}/external/pico_sdk_import.cmake)

project(USB_Serial C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

pico_sdk_init()

add_executable(USB_Serial
USB_Serial.c
)

#pico_generate_pio_header(USB_Serial ${CMAKE_CURRENT_LIST_DIR}/i2s_out.pio)

target_link_libraries(USB_Serial pico_stdlib pico_stdio_usb)
pico_add_extra_outputs(USB_Serial)
################ここまで


つまり、次の2つをプロジェクトに盛り込めば、printfでUART出力ができる。すなわち、
①CMakeLists.txtでtarget_link_librariesにpico_stdio_usbを追加する
②main()でstdio_usb_init();(またはstdio_init_all();)を実行

ところで、先ほどのbmp280_i2cのbmp280_i2c.cを見ても、stdio_usb_init();が書かれていない。どういうことだろうか?
このコードには、stdio_usb_init();の代りにstdio_init_all();が記述されている。
stdio_init_all()には利用可能な標準出力バックエンド(USBやUART)などをすべて初期化する関数で、これにはstdio_usb_init()が含まれているので、間接的にstdio_usb_init()が実行されるということだそうだ。


そういうわけで、CMakeLists.txtの書式と、シリアルモニタの使い方がわかったのでPICO公式の開発もやりやすくなりました(^-^)

 

| | | コメント (0)

2025年4月 1日 (火)

中華製温調はんだごて(5)

Imgp4116
写真1.新たに購入したはんだごて(黒)と、2020年に購入し、改造して使用中のはんだごて JCD908S(赤)


【20250404追加情報】

読者の方より情報提供がありました。現在aliexpressのJCD Official Storeで販売中のJCD-908Sは、温調が正常に動作する良品ということです。

情報提供ありがとうございました(^-^)


アリエクで販売している格安温調はんだごての続報。
結論としては、この製品はおすすめできません!

前回の記事「中華製温調はんだごて(4)」で、新製品のレビューをしたところ、旧品のJCD908Sを購入したという人から情報提供で、購入したはんだごては無改造で正常に機能しているとのことだったので、私も旧品と思われるはんだごてを新たに購入してみた。デザインは旧品のJCD908Sとよく似ており、後述するように基板もよく似ているが、よく見ると本体のボタンの後ろ側に型式番号が入っていない。

過去記事
中華製温調はんだごて
中華製温調はんだごて(2)
中華製温調はんだごて(3)
中華製温調はんだごて(4)


今回は報告のあったとおり、温調が効かない不具合は解消されて、すぐに使えるであろうことを期待してコンセントに挿した。はたして!?

まず設定を最低の180度に設定して電源を入れてみた。ところが手でべったり触って暖かいな、と感じられるほどにしか温まらない。
そこで最高設定の480度にしてみると、なんとか、はんだが溶け始めるくらいまで温まった。
どうやら温調は機能しているものの、実際の温度は設定値から200~300度くらい低いような感じだ。

中身を確かめるべく分解して、基板を観察。

20250401kiban 
写真1.今回購入品の基板


Pcb0_20250401165201
写真2.2020年購入品JCD908Sの基板


写真1の今回購入品と写真2の2020年購入品の基板を比べると、まったく同じではないがかなり類似した構成だ。
同等のフィードバック制御を行っていると仮定すると、写真中央付近の”1R00”(1Ω)からのフィードバックで温度制御していると推測され、これまでの経緯から、ここでの検出電圧が大きければコテの温度を高く(ヒーター抵抗値が上がる→電流が下がる→検出電圧が下がる)、検出電圧が低ければコテの温度を低く(ヒーター抵抗値が下がる→電流が上がる→検出電圧が上がる)制御するようになっている。

今回の場合は温度が大幅に低いため、温度を上げる方向、すなわち検出電圧を高くする方向(1Ωの抵抗を高く変更する)で検証を行った。
1R00の捺印がある1オーム抵抗を、部品箱にあった2.2オームに変更してみた(写真3)。

20250401r_change
写真3.捺印”1R00”の1Ω抵抗を外して、代りに2.2Ωを装着する

この状態で組み立てて、熱電対温度計を用いて、設定温度に対する実測温度を測定した。測定結果を図1に示す。


Graph
図1.測定結果

設定温度350度程度まで、やや誤差がおおきいものの、設定に応じて実測温度も上昇しているが、それ以上の設定温度では、ほぼ385度で飽和してしまい、それ以上は上がらなかった。
つまり設定温度350度以下であれば温調はんだごてとして機能するが、それ以上は、こて先温度は上がらないという結果だ。

このはんだごては、上下2つのボタンを同時押しすることで補正(設定値に対する温度のオフセット)ができるようになっているが、補正値を付加しても最高温度は385度以上にはならなかった。


どうやらこのタイプの温調はんだごては類似品やソフトが違うものなどが入り乱れて流通していて、特定の製品を狙って買うことは難しく、従って無改造で正常動作するか、改造すれば使えるレベルか、それとも改造によってもまともに使えるようにならないか、のうちのどれかであって、どれを引くかは運次第のような状況だ(^-^;

従って、残念ながらこのシリーズのはんだごては全面的におすすめできない、というのがこれまでの結論になろうかと思う(^-^;


| | | コメント (3)

超シンプルAMトランスミッタ


Sch1
図1.超シンプルAMトランスミッタ


3月に行われた手作りアンプの会の「三土会」で、SさんがAMトランスミッタを発表されて、おもしろそうだったのでぼくもやってみようと思った。Sさんの回路は500kHzのセラミック振動子をクラップ発振回路で発振させ3逓倍したものをキャリアとし、DBM(ダブルバランスドミキサ)μPC1037でAM変調をかけて、出力バッファを経て送信するという、とても本格的なもの。

ぼくとしては当初トランジスタ1石のシンプルな発振回路にAM変調をかけて、簡単に実験して動作確認すればいいか……と思っていた。よくある回路は次の図2に示すような感じのもの。これはネットで見つけた、電子ブロックに付いてきたという回路。

Photo_20250401101501
図2.電子ブロックのAMワイヤレスマイク


とてもシンプルで、これなら手持ちの部品ですぐに作れそうだ(^-^)
しかし、これをこのまま作って、動きましたね、おもしろかったですね、ではおもしろくない。

なにかおもしろいやり方はないかな……と思っていたら、まくら様(眠ってると知恵をくれる神様)の啓示で図1のような回路が天から降ってきた。

74HCU04と水晶を使ったよくある発振回路の電源に音声信号を重畳すれば、発振波にAM変調がかかる。
電源に音声信号を重畳するには、単に直流電源に音声信号を直列に入れてやれば良いのではないか?
74HCU04の動作範囲は2V~6Vなので、電源として4Vを中心として、±2Vの音声入力を重畳することができるだろう。
ただし、これをやるには音声信号がDC出力(コンデンサでDCカットしていない直結状態)で、なおかつ振幅が4Vp-p程度欲しい。
ちょうどSSDACを使ったSDプレーヤーが直結出力で、出力レベルが最大2Vrms程度なので、簡単に実験することができそうだ(^-^)
もし直結出力でない信号を入れたい場合は、トランスを使えばできそうだが、今回は検証していない。
入力にトランスを使って2次側を電源と直列にすれば実現できる(後述)。

原理的には図1の回路で動作可能だが、74HCU04は6個のインバータが入っているので、残り5個の入力を処理しなければいけない。
そこで実際には残りのインバータの入力処理の意味も含めて図3の回路を作ってみた。

Sch2
図3.AMトランスミッタ回路
U1B~U1Fは余ったので接続しただけであり、図1の回路にして残りをGNDに入力処理しても同じように動作する。


この回路でBT1はリチウムポリマ電池で、消費電流は約5mA、アンテナは60センチほどのビニール線だ。
この回路で送信し、ラジオで受信した様子は次の通り。

動画1.送信、受信再生の様子
入力はSDプレーヤー、使用曲は、LA INDIAの"En Nueva York"

このとおり音声変調がかかり、送信できている。参考のため100kHz正弦波での変調波形を図4に示す。


Tek0030
図4.変調波形
1MHzの搬送波の上半分に100kHzの正弦波が重畳してAM変調になっている。


この回路では変調波形は上半分になってしまうが、上の動画で示したように音声はちゃんと送れている。
また、搬送波は方形波なので、奇数次の高調波が出まくっている。実用的には出力はDCカットしてLPFをつける。

さて以上は最終的な回路だが、じつはここまで多少の紆余曲折があった。
まず、手持ちの部品にAM放送帯の水晶がなかったので、4MHzの水晶を使って4分周して1MHzとして実験した(図5)。

Sch3_20250401131601
図5.4MHzの水晶を使って4分周して1MHzの搬送波を得る回路


原理的にはまったくこれでOKであるし、動作も問題なかったが、とにかく超シンプルに作りたかったので、やはり分周回路は省きたいところだ。

AMラジオ周波数帯の水晶なんかはどこにでもあるだろうと思って、ネットで探したがどこにもない(^-^;
さすがにdigikeyにはあったが、なんと1MHzの水晶1個で1700円位している。送料を入れたら4000円近い。お遊びに使うにはちと高すぎる。
そこで秋葉原へ水晶を探す旅に出た。いまとなっては、心当たりは日米商事くらいか……たしか大量の水晶発振子を見た記憶がある。
はたして、日米商事の水晶の部品棚を端から端まで探したが、ついぞAM周波数帯の水晶は出てこなかった……
ダメ元で千石とラジオデパートも巡ったが、やはりなかった。一昔前なら鈴商か、国際ラジオか、最後の砦の小沢電気があったのに……orz

というわけで、秋葉旅もむなしく途方に暮れて帰ってきて、念のためヤフオクを探していたら、かなり古めの巨大な1MHz水晶が950円即決で出ていた。送料は180円。うーむ、水晶というと100円かせいぜい200円くらいでほしいところだが……
ちょっと保留にして、念のためメルカリを探したらなんと、5個346円(送料込み)で出品されていたので嬉々として購入した\(^o^)/

図5の試作回路に対して、水晶をメルカリの1MHzのものに差し替えたが発振しない……
負荷容量を50pF位までの範囲であれこれ変えたり、出力側に抵抗を入れてみたりと、いろいろ試したがうんともすんとも発振しない。
これはひょっとして不良品か……となかば落胆しながらもなお試行錯誤をしていたら、もとの回路で電源電圧を2Vまで下げると1MHzの発振を開始した。そうすると条件次第で発振させられることがわかったので、さらに試行錯誤を続けた結果、出力側の負荷容量を1000pFにすると安定して発振開始することがわかった。負荷容量が1000pFというのはあまり聞いたことがない異常な数値だが、本当に水晶なのだろうか。じつはセラミック発振子だったりして……?
現物の写真を写真1に示す。

Imgp4112
写真1.YTK(?)の捺印が入った1MHz水晶

念のため購入した5個すべてに対して動作確認を行ったが、やはり出力側負荷容量1000pFとすると、安定して発振した。
このあたりは追求したいところだが、仕様が謎なので、とりあえず良しとする。


そういうわけで、とりあえずは超簡単AMトランスミッタが構成できました。
ネットで探してみると、タイマーIC555を使ったものが出てきますが、今回の方式はみつからなかったので、なかなかユニークなのではないかと思います(^-^)


【追記】
1MHzのセラミック振動子(写真2)がAliから届いたので、図3の回路の水晶の代わりに装着したらまったく問題なく動作しました。動作状態は水晶発振子を使った場合と同等です。

Imgp4113
写真2.セラミック振動子


【20250402追記】
トランスを使って入力する方法を、以下のとおり検証した。
図3の超シンプル回路で音声をAM送信するには、音源がDC構成の出力になっていることが条件だったが、トランスを使って入力することで非DCの音源(コンデンサでDCカットされたもの)も入力できる。

今回検証したのは部品箱に入っていたST-52、ST-72(いずれもドライバートランス)、ピエゾ用ドライブトランスの3種類。
ピエゾ用ドライブトランスというのは、あまりなじみがない部品だが、これは防犯ブザーなどでピエゾスピーカーを大音量で鳴らすために使われるトランスで、1次巻線と2次巻線が絶縁されていないオートトランスのような構成の3端子のトランスだ。写真を写真3に示す。

Transes 
写真3.今回使ったトランス
左から、ピエゾ用ドライブトランス、ST-72、ST-52。

ピエゾ用ドライブトランスは図6に示すような構造になっている。あまり販売しているのを見ないし、正式名称もよくわからないが、aliexpressで販売されていた

Piezo_trans
図6.ピエゾ用ドライブトランスの構造

今回検証したトランスの実測データは表1に示すとおり。


表1.実測データ
Trans

いずれも1次側の巻線抵抗が低めなため、音源のドライブ能力が要求される。とくにピエゾ用ドライブトランスは12Ωしかないので要注意だ。

入力にこれらのトランスを使用する場合の回路図を図7、図8に示す。


St_trans
図7.入力にST-XXトランスを使用した回路


Piezotrans
図8.入力にピエゾ用ドライブトランスを使用した回路


図7または図8の回路を使うことで、DCのソースも非DCのソースも使うことができる。
この回路では74HCU04の稼働電圧範囲2V~6Vをいっぱいに使ってAM変調をかけたいので、入力信号レベルをこれにあわせて4Vp-pとしたいところだが、入力でトランスによって昇圧できるのもメリットになる。ピエゾ用トランスでは7倍の巻線比があるのでお得な感じだが、入力側の巻線抵抗が12Ωしかないので音源側のドライブ能力が要求される。


【20250407追記 アンテナ追加】
以上の実験では、アンテナは60センチ程度のビニル線をつないだだけであり、ノイズなしで受信できる距離は高々1m程度だった。
アンテナの工夫だけでもう少し放射効率を上げられないか検討したところ、バーアンテナとバリコンで同調式のアンテナを組むことで放射効率が上がり、3-5m程度まで飛距離が伸びた。
【注意】電波法では無許可で出せる電波の範囲が決められていて、1MHzでは3mの距離における電界強度を補正した値が500μV/mより低いことと定められています。実験は自己責任でお願いします。

今回実験した1MHzでは、波長は約300mであり、アンテナを検討する場合、1/2λダイポールで150m、1/4λホイップなら75m必要なので、60センチのビニル線ではまったくデタラメに近い。そこで、ローディングコイルを入れて、1~2m程度の小型のアンテナが作れないかと考えていたが、それならばAMラジオ用のバーアンテナとバリコンで共振回路にしてこれをアンテナにすれば良いんじゃね!?と思い、実際にやってみた。アンテナはLC直列共振回路と等価と見なせるので、図9の構成にした。実装写真を写真4に示す。

Antenna_20250419183901
図9.バーアンテナコイルとバリコンによるアンテナ


Antenna_jissou
写真4.バーアンテナコイルとバリコンによるアンテナ実装の様子
白い円盤はバリコンのツマミ。


この状態でラジオをチューニングして少し離れた場所に置き、もっとも受信状態がよくなるようにアンテナのバリコンを調整する。
この結果、思いのほか飛距離が伸びて、60センチのビニル線ではまったく届かなかった隣室まで電波が飛ぶようになった(^-^)
なお、ビニル線アンテナでは消費電流は5mAほどだったが、このアンテナで同調させると消費電流は7~8mA程度に増加する。


【20250416追記 受信波形観測】
話が前後するようだが、通常のAM変調波形は図10のようになる。

Am_waveform
図10.AM変調の波形


ところが今回の超シンプルトランスミッタではすでに図4で示したとおり、変調波形が上半分になる。この場合、復調するとどんな波形になるのだろうか?
AM変調波の場合、通常はダイオードで包絡線検波を行う。簡単にいうと片側だけを通すように整流してエンベロープを復調波として得るというやり方だ。図10の波形であれば、ダイオードの向きによってプラス側が出てくるかマイナス側が出てくるかの違いがあるが、いずれにしても復調波が得られる。

それでは今回の片側だけの変調波形(図4)の場合はどうなるのだろうか?
ダイオードがA→Kの向きならエンベロープで復調波形が得られそうだが、逆の場合は?
下側が平坦なので復調波形は得られない?いや、それは違う気がする……

今回のトランスミッタ回路で1kHzの正弦波を送信して、実際にゲルマラジオを組んで音を聴いてみると、ダイオードがどちらの向きでも同じように聞こえた。回路を図11、図12に示す。

Rcv_ka_20250419183901
図11.ゲルマラジオ① ダイオード向きがK-A


Rcv_ak_20250419183901
図12.ゲルマラジオ② ダイオード向きがA-K

試聴は1MΩに並列にセラミックイヤホンをつないで行った。
それでは波形はどうなっているのだろうか?1MΩの両端をオシロで観測した波形を図13、図14に示す。


Ka_1mohm
図13.ダイオード向きがK-Aの場合の出力波形


Ak_1mohm
図14.ダイオード向きがA-K場合の出力波形


このようにダイオードの向きがどちらであっても復調波形が得られている。
ただし、送受信機間の距離が10センチ程度であったため、直流電界も含めて受信しているようだ。両図とも、1のマークが付いたカーソルラインが0Vなので、図13(ダイオードK-A向き)はマイナス、図14(ダイオードA-K向き)はプラスのオフセットが発生していることがわかる。直流電界は距離とともに急激に減衰し影響は小さくなる。


以上のように、今回のような片側変調でも、通常の復調回路で復調できることがわかりました(^-^)


| | | コメント (0)

« 2025年3月 | トップページ | 2025年5月 »