CH32マイコンの環境構築からHello worldまで
概要
中国製マイコンの一つであるCH32マイコンに入門してみました。CH32マイコンの最初の一歩として評価ボードを用いてシリアルでHello worldするまでのメモを残します。筆者の環境では特に躓く工程が無く、ファーストインプレッションとしては扱いやすいマイコンという感じです。
はじめに
様々な部品屋からSTM32マイコンを始めとした各種マイコンの在庫が消えたり値段が跳ね上がったりと、マイコンを扱うホビイストにとって厳しい状況が続いています。そんな状況下において安価でそこそこの性能を有する中国製マイコンに白羽の矢が立つのはある意味自然な流れではないでしょうか。
そんな中国製マイコンの一つにCH32シリーズがあります。このシリーズにはArmコアを積んだCH32FシリーズとRISC-Vコアを積んだCH32Vシリーズがあり、型番が瓜二つのSTM32マイコンと比べてクロック周波数が高いことや何しろ安価であることが魅力的なマイコンになっています。
そこで、今回はCH32Vシリーズの現状で一番強いCH32V307の評価ボードを入手して入門することにしました。CH32V307には何とUSB HS PHYが搭載しており、少しレベルの高い電子工作ができる気がしています。
評価ボードの入手と下準備
CH32V307の評価ボードには幾つか種類があり、今回は下の写真に示すような外部にWCH-Linkを取り付けるタイプを選びました。理由はNucleoライクな評価ボードと比べて安価であったことと、WCH-Linkが別個で入手できると自作基板に組み込んだ時に使い勝手が良いと考えたためです。

Hello worldをする分には特にはんだ付け等の準備は不要ですが、オンボードLEDを用いてLチカする場合やUSBコネクタを利用する場合は簡単なはんだ付けが必要になります。これは、Nucleoボードと異なりオンボードLEDはマイコンの特定のピンに接続されていないためピンヘッダ等が必要になり、またUSB-CコネクタのCCピンのプルダウン抵抗がデフォルトで付いていないためです。回路図はgithubにて公開されています。


ピンヘッダとチップ抵抗を取り付けたら評価ボードの下準備は完了です。
環境構築
CH32マイコンにはMounRiver Studioと呼ばれるEclipseベースの開発環境が用意されています。特に会員登録等せずにインストールすることができます。STM32をSystem Workbench for STM32(SW4STM32)で開発したことがある方なら操作感が近いのですぐに慣れると思います。
テストプログラムの実行
MounRiver Studioを開き、File→New→MounRiver Projectを選択します。

するとマイコンを選ぶ画面が出てくるので、評価ボードに搭載されているCH32V307VCT6を選びます。また、プロジェクト名を適当な名前に設定します。ここではHello worldにしています。

Finishを押すとプロジェクトが作成されます。作成したプロジェクトのUserフォルダにmain.cが配置されています。

特にプログラムを改変せずにBuildします。Project→Build Projectを選択します。

PCにWCH-Linkを、WCH-Linkに評価ボードをそれぞれ接続します。筆者の環境ではPCにWCH-Linkを接続する際にUSB3.0の端子に接続するとうまく認識しないことがあったため、USB2.0の端子に接続することをお勧めします。接続後に評価ボードの左下のUSBコネクタ付近にあるPWR LEDが点灯したら準備は完了です。Run→Runを選択すると評価ボード上のマイコンにプログラムが書き込まれます。

TeraTerm等のターミナルソフトでWCH-Linkのシリアルポートを開き、評価ボード右上にあるRESETボタンを押すと文字列が表示されます。ボーレートはmain.cの記述から察せる通り115200です。

サンプルプログラムの動作確認ができたので、プログラムの簡単な改変に移ります。main.cのmain関数を以下のように書き換えます。
int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Delay_Init(); USART_Printf_Init(115200); while(1) { Delay_Ms(1000); printf("Hello, world!\r\n"); } }
Delay_Ms関数で1秒間待ち、文字列Hello, world!を送りつけるプログラムになっています。先と同様の手順でBuildし、マイコンに書き込んで1秒毎にHello, world!が表示されたら成功です。

まとめ
本稿ではCH32マイコンによりHello worldするまでの簡単な流れについて示しました。開発環境の構築は想像していたよりもずっと簡単で、STM32を触ったことがある人なら似た感触で開発できると思います。ただしライブラリなどの情報が少ないため、しばらくは手探り状態で開発することになりそうです。今後は簡単な処理はRP2040、少し込み入った処理はCH32、CH32でもキツい場合はSTM32のようなマイコンの使い分けをしようと考えています。
秋月お楽しみ袋2023
はじめに
今年も秋月電子通商(秋葉原店)の初売りで懲りずにお楽しみ袋を買ってしまいました。例により店前には袋を吟味している人がたくさん居ましたが、私はトラッキング電源の部品も購入したかったので吟味せずフィーリングで選びました。

大物
袋を見てまず目に入るのがこのソーラーモジュールでしょう。他の袋にも同様のモジュールが入っていた気がします。新品だと1枚900円するみたいです。



小物
小物の方も見ていきます。まず袋入りの抵抗、謎のDCモータ、フォトリフレクタ、高周波アンプが出てきました。







その他
何故かいつも入っているアナログチューナーや謎基板、謎プラスチックパーツなども入っていました。一体どこからアナログチューナーが湧いているのでしょうか。

感想
例年と比べて使えそうな部品が多く入っていました。今年は特に吟味せず選びましたが、恐らく当たりのお楽しみ袋でした。時間を見つけてこれらの部品で遊べればと思います。
USB-DACを作ってみた
概要
USB-DACを作ってみたので紹介します。筆者の住環境ではヘッドホンでの使用がメインになり、結果としてヘッドホンで使う分にはオーバースペックな物になりましたが、ちゃんと普段使いできる物に仕上がりました。
※筆者はオーディオのオの字も知らないような人間なので、用語や回路設計に関して間違っている箇所があるかもしれません。あらかじめご了承ください。
はじめに
今年に入ったあたりから『定本 トランジスタ回路の設計』などを読みながらアナログ回路(低周波回路)の勉強を少しずつ進めていました。一通り読み終えた後で何かを作ろうと思い、作例として幾つか取り上げられていたオーディオアンプの作成を決めました。当初は凝った回路ではなく、オペアンプにSEPPを接続しただけのシンプルな回路にする予定だったのですが、研究室に置いてあるトランジスタ技術のバックナンバーを隙を見つけては読み漁っている内にどんどん回路が肥大化していきました…
回路設計
今回作成したUSB-DACは主に電源回路とDA変換回路、そしてアンプ回路の3つから構成されています。それぞれ順に紹介します。
電源回路
今回は出力にクソデカカップリングコンデンサを用意するのが面倒だったので両電源で構成するDCアンプとしました。また、両電源は単電源のスイッチング電源に対してレールスプリッタ回路を用いて生成しました。
レールスプリッタは抵抗分圧で半々にした電圧をオペアンプ+SEPPで出力する方式としました。SEPPの各トランジスタにはざっくり電源電圧の半分の電圧が常に印加され、損失が気になるので2パラで構成しています。念には念をということで過電流保護回路も付けています。(Q2,3,6,7)また、出力に大きめの容量のコンデンサを付けていますが、これは正直不要であったかもしれません。このおかげで位相補償が若干複雑になっています。
スイッチング電源を使用する上でノイズの影響が気になるので、シリーズレギュレータ回路により安定化しています。シリーズレギュレータを組むにも様々な回路方式があると思いますが、今回は前述の『定本 トランジスタ回路の設計』にて紹介されているローノイズ電源回路を参考にしました。この回路を両電源で使用する場合、4558系のような出力が反転するオペアンプでは負電源の方で上手く動かないことがあり、これを避けるために適当なダイオードを入れてあげる必要があります。(回路図中のD9,10)
最後に、RCによる遅延回路により電源投入から遅れさせて出力リレーを駆動する回路も入れました。電源が24 Vなのでゲートが破壊されないよう、いい感じに分圧しました。ただ、この構成だと電源OFF時の保護ができないので改善する必要があります。

DA変換回路
DA変換部ではUSBからI2Sへの変換にアリエクで購入したCombo384を使用し、吐き出されるI2S信号をADuM1200を用いて絶縁し、PCM5102Aを用いてDA変換しています。念のため各電源入力部にはフィルタを入れていますが、フィルタの周波数特性的に有効に作用しているかどうかは不明です。
DACの電源は秋月で手に入る低雑音のシリーズレギュレータADP151AUJZ-3.3を使用しました。本稿で紹介しているUSB-DACの後にも一般的なシリーズレギュレータを用いて同様の構成で数台DACを作成しましたが、電源由来と思われるノイズが出力に混入してしまいます。どうやらADP151AUJZ-3.3がキーポイントになってそうです。

アンプ回路
アンプ回路はトランスリニアバイアスによる疑似A級アンプとしました。トランスリニア原理についてはトランジスタ技術2004年10月号、トランスリニアバイアスによるアンプはトランジスタ技術2019年5月号や2019年10月号に大変参考になる記事があり、実際にこれらの記事を参考にしながら作成しました。また、今月発売されたトランジスタ技術2023年1月号にもトランスリニア原理に関する記述があり、参考になると思います。
アンプ部の基板を左右で使いまわしたかったので、オペアンプの出力までをDA変換基板上に実装し、残りを別基板で実装しています。オペアンプによるNFBの配線が長くなり正直良くない設計なので、今後作る機会があれば改善したいところです。

組み立て
当初はいい感じの見た目のアルミケースを使用する予定でしたが、予算が厳しくなったので安価なアルミケースになりました。ケース下部にアンプ部以外の基板を、ケース上部にアンプ部の基板を配置しました。
I2S信号を引き回しているフラットケーブルが長いまま放置しているためか、サンプルレートを上げると正常に動作しなくなります。そのうち直そうと思いながらも特に困ることはなく、半年以上経って今に至ります。(このUSB-DACは4月に作成しています)


使用感
完成したUSB-DACの写真です。動作確認ではDA変換部のオペアンプにNJM4580DDを使用していましたが、本番用として気まぐれで用意していたMUSES8920Dに交換したら音質が良い意味で大幅に変化しました。本機を製作する前まではオペアンプで音質が変化することについて懐疑的だったので、この現象には正直ショックを受けました。前者のオペアンプがBJT入力であるのに対し後者のオペアンプはFET入力なので、オペアンプ直前にあるフィルタ回路の出力インピーダンスの影響を受けるのでしょうか。BJT入力のMUSES8820あたりとも交換して比較すれば良いかもしれません。


まとめ
本稿ではUSB-DACの製作について説明しました。初めての製作だったので回路設計や基板設計にガバガバな部分が多々ありましたが、最終的には満足するものに仕上がりました。今後作る機会があるとすれば小型化やガバガバな部分の解消が主なポイントとなるでしょう。
小型PicoProbe基板を作った
2023年3月19日追記: 回路図にオリジナルのpicoprobeと相違があり、プログラムの修正が必要な回路となっています。詳細は回路設計の項で説明します。
概要
PicoProbeの小型基板を作成したので簡単に紹介します。
はじめに
RP2040を使った回路の入門をするために、小型のPicoProbeを作ることにしました。PicoProbeとはSTM32で言うところのST-Linkみたいなやつで、RP2040をSWDでいい感じにするやつです。
回路設計
RP2040周辺の回路は公式のハードウェアデザインを見ながら作りました。PicoProbeのピン配置などは公式のスタートアップガイドなどを参照しながら適宜設定しました。最終的に、回路図は以下のようになりました。フラッシュメモリ以外は秋月で手に入るはずです。

2023年3月19日追記: オリジナルのpicoprobeではGPIO4, 5のUART1を用いて通信するようになっていますが、本回路ではGPIO0, 1のUART0を使うものになっています。picoprobeのpicoprobe_config.h内にて定義されているPICOPROBE_UART_TX, PICOPROBE_UART_RXおよびPICOPROBE_UART_INTERFACEをそれぞれ0, 1, uart0に書き換えてからビルドする必要があります。本稿を参考にされる場合は気をつけてください。
組み立て
回路図を基にチャチャっと基板を設計して組み立てました。回路設計時にPicoProbe側RP2040の書き込み用に引き出したSWD関連の配線が基板設計時に邪魔になったので削除してあります。

パスコンなどは全て裏面に配置しました。1608MサイズのMLCCではスペースが狭めなので1005Mサイズが良いと思います。

中華ST-Linkとの大きさの比較も行いました。電圧を固定化すれば中華ST-Linkよりも小さくできそうな感じでした。

使用感
VSCode上で普通に使えました。USB以外で書き込めるようになると色々夢が広がって良いですね。
まとめ
本稿では小型PicoProbe基板について紹介しました。RP2040を使った初めての工作として取り組み易いので、これからRP2040に入門する方におすすめです。
光造形3Dプリンタを導入した
概要
光造形式の3Dプリンタを導入したので簡単に使用感などを紹介します。
はじめに
FDM方式の3Dプリンタでは精度が足りず、安物のCNCフライスで加工するには小さすぎる部品を作るために光造形方式の3Dプリンタを導入することにしました。FDM機を導入した4年ほど前の光造形方式の3Dプリンタと比べ、現在は性能が高く安価な機種が増えたので導入しやすくなりました。フリーのスライサがあってスタンドアロンで動くのも良いですね。(以前はPCにずっと接続して3DプリンタのLCDをサブディスプレイ化して出力、みたいなゴリ押し機種があったような気がします)
使用感
購入した3Dプリンタは日本人ユーザが多く見られるELEGOO Mars 2です。クーポンがあったのでAmazonで購入しました。開封画像や本体の画像については他の方が多数載せているようなので省きます。
セットアップ
自作キットの3Dプリンタと違い組み立てが不要なのでセットアップはすぐに終わりました。z軸の調整はマニュアルに書かれている紙を挟む方法だとプラットフォームから出力物が剥がれやすかったので、レジンタンクをセットした状態でプラットフォームを固定してz=0としました。この方法によりz軸の調整不足による出力物の脱落は大きく減りました。しかし照射時間の試行錯誤はある程度必要のようで、出力途中に出力物が脱落しないようなパラメータを求めるのに多少の労力を要しました。
出力結果
まずはテストデータの出力結果です。FDM方式では難しいような細かい文字も綺麗に出力されました。テスト時の洗浄が不十分だったので溝に付着した余分なレジンが固まってしまいました。手で洗浄するのに限界を感じたので安価な超音波洗浄機を別途購入しました。

次にプリント基板用のステンシルを出力しました。1608M程度の穴なら余裕で出力できたので、これは使えそうです。穴などの寸法も問題なさそうです。


まとめ
光造形3Dプリンタを導入し出力結果について簡単にご紹介しました。出力物については予想よりも精度が良好で、本稿で紹介できなかったロボットパーツについては0.1 mmまで測定できるディジタルノギスで誤差が0になるなど、箱から出したばかりの機械とは思えないような精度が出ました。ただ、レジンの臭気と洗浄液の廃液処理については課題があるので、光造形機のこれからの発展に期待したいところです。
簡易カーブトレーサーの作成
概要
トランジスタやダイオードの静特性の測定ができる簡易的な半導体カーブトレーサーを作成してみました。簡易的なものなのでガチガチの測定はできませんが、趣味でちょこっと特性を知りたくなったときに便利なものに仕上がりました。
はじめに
みなさんの部品箱の中に得体の知れない半導体って眠ってたりしませんか?私の場合、秋月のお楽しみ袋に入っていた謎のダイオードやAliexpressで購入した怪しいトランジスタなどがそこそこ眠っています。これらの部品の特性を測定するには電源を用意して回路を組んで測定して…と中々手間がかかってしまいます。特にトランジスタの特性を測定するには電圧源と電流源を用意しなければならないので大変です。そこで、トランジスタやダイオードの特性を自動でいい感じに測定できる簡易カーブトレーサーを自作しようと思いました。
設計製作
仕様
本稿で作成する簡易カーブトレーサーの仕様は次のようになっています。トランジスタ用に回路を設計しますが、エミッタ・コレクタ間にダイオードを接続すればダイオードの特性も測定することができます。
: 0 V〜5 V(NPN)、0 V〜-5 V(PNP)
: 0 mA〜5 mA(NPN)、0 mA〜-5 mA(PNP)
: 0 mA〜約500 mA(NPN)、0 mA〜約-500 mA(PNP)
回路設計
マイコンを含むメイン回路です。マイコンをはじめとした半導体が不足しているので、STM32F303K8の(ほぼ)全てのピンを使い過不足ないようにしました。

NPN側の測定回路です。オペアンプで定電流回路と定電圧回路を構成するだけの簡単な回路となっています。微小電圧および微小電流を扱うのでオフセット電圧が小さい、いい感じのオペアンプを使います。本稿ではADA4522を採用しました。

PNP側の測定回路もNPN側と同様の回路になっています。

AD/DA回路です。コレクタ電流の測定ゲインを2種類用意してダイナミックレンジを確保しつつマイコンのADCポートの保護を行います。DACのマイコン側ラベルがNPNとPNPで分けられていますが、基板設計の都合で変更がありベース電流指令値とエミッタコレクタ間電圧指令値が正しいものとなっています。(修正が面倒だったのでラベルがそのままとなっています)

最後に電源回路です。測定回路で使用するMOSFETを確実にOFFにするために15 V→12 Vの若干降圧する回路と負電圧を生成する回路が必要となります。加えてマイコン周りで5 Vと3.3 Vが必要になります。

組み立て
組み立て後の基板はこのようになりました。ZIFソケットにトランジスタを刺して測定します。調節用のMOSFETとレギュレータは測定条件によっては発熱するのでヒートシンクを取り付けます。

使ってみた
データをCSV形式で出力し、MATLABを使って描画しました。
まずは部品箱にあった怪しい2SA1015(赤線)/2SC1815(黒線)の特性です。ベース電流は0.1 mA刻みとなっています。コレクタ電流が30 mA付近となるポイントで変な段がありますが、これはコレクタ電流ゲインの切り替えに起因するものと考えられます。

次に同じトランジスタを用いて特性を測定しました。コレクタ・エミッタ間電圧は1 V刻みとなっています。温度を一定にする機構がないためかプロットがぐちゃぐちゃになってしまいました。

最後に部品箱にあった謎のダイオードの順方向特性です。綺麗なカーブが得られました。

まとめ
本稿では簡易的なカーブトレーサーについて設計および製作し、測定結果について簡単に紹介しました。ハード的にはまだ課題がある一方で、趣味程度なら使えなくはないものに仕上がったと思っています。本稿での仕様だとツェナーダイオードの測定が厳しいので、また作る機会があれば電圧範囲をもっと拡大したいと思います。
アリエクで絶縁アンプを買ったので特性を簡単に測定した
概要
昨年の独身の日セール時にAliexpressで絶縁アンプを購入したので、使える物か否かを調べるために非常に簡単な測定をしました。(測定方法に関しては詳しい人に怒られそうな方法しか使用していないので参考にしない方が良いかもしれません。)
なお、Aliexpressで購入できる任意の絶縁アンプが本稿のような結果を示す保証はできませんので、購入する際は自己責任でお願いします。
絶縁アンプの外見
購入したものはHCPL-7800です。10個入りで購入価格は約900円でした。
私はこのICについて詳しくないので外見だけでの真贋判定ができません。
ただ、ICにはんだ付けされた形跡が確認できないので少なくとも中古品ではなさそうです。

電気的特性の測定
測定条件
安物のファンクションジェネレータがどこかへ消えたので、マイコンで吐き出した10 kHzと100 kHzのPWM信号を絶縁アンプに入力して応答を調べました。 10 kHzの信号では立ち上がりと立ち下がりの応答を調べ、100 kHzの信号では出力の振幅から帯域が100 kHz程度まであるのかを簡単に見積もりました。
立ち上がり・立ち下がり波形
10 kHzのPWM信号を入力した結果がこちらになります。部品箱から発掘した変換基板をブレボに刺して気合い(指で絶縁アンプを固定した状態)で測定したので、ノイズ多めな点はご容赦ください。

立ち上がりも立ち下がりも見た感じ同様の応答でしたので、若干観測がしやすい立ち下がり波形に注目しました。(今思うと紫色の出力波形を少しずらせば良かった気がしますが、測定方法がアレなので2度目の測定は気が乗りませんでした)

50%の伝搬遅延時間は約4 µsといったところでしょうか。概ねデータシート通りとなっています。
帯域
100 kHzのPWM信号を入力した結果がこちらになります。

振幅のピーク値が10 kHzの時と大差ないので、帯域については問題なさそうです。
生存していた個数について
今回購入した絶縁アンプは10個入りでしたので、全ての個体について同様の方法で特性を測定しました。 その結果、出力信号が全く出ない個体が1つ、オフセットがやたらとデカい個体が1つありました。残りの8個がまともに使えそうな個体ということで、かなりお得感があって個人的には満足する結果となりました。
まとめ
本稿ではアリエクで購入した絶縁アンプの特性を簡単に(というか雑に)測定し、大半の個体が趣味で使う分には問題なさそうなことが分かりました。この絶縁アンプを使ってモータドライバか何かを作りたいです。
