2024年8月16日金曜日

オーディオの電源検討

■前提

BLE→I2S→パワーアンプ→スピーカという構成でオーディオ環境を構築しようとしている。 BLEで繋ぐと、PCでもスマホでもワイアレスで簡単に運用できて便利。

  • 機器構成
    • BLE→I2S
      • M5ATOM Lite
    • I2S→アナログ
      • PCM5102A
    • アナログのパワーアンプ
      • 自作の386アンプ or ぺるけさんのTourer Part5
  • 各機器の電圧と消費電力
    • M5ATOM Lite
      • 5V or 3.3V
      • 80mA-125mAくらい
    • PCM5102A
      • 3.3V or 1.8V※デジタル部のみ
      • 10mAくらい
    • パワーアンプ
      • 12V
      • 数百mAくらい
  • 希望スペックというか制約条件
    • それぞれ必要な電圧が違うので、電圧変換が必要。
    • 主電源は12V1系統にしたい。(秋月ACアダプタ)
    • コンバータや3端子レギュレータはなるべく減らしつつ、省エネにしたい。
現在、バラック構成で複数系統の電源を繋いだ状態ではいい感じの音で鳴らせている。
これを、ひとまとまりのシステムとしてまとめたい。
そのために、電源をなんとかしたい。




■検証1:レギュレータ1発
NJM722333で単純に降圧し、ATOM LITEとPCM5102を繋いでみた。
12V->3.3Vでは電位差が大きすぎて、ヒートシンクをつけても手で触れないくらい熱くなる。
電流を計ってみると80mAくらい。
(12-3.3)*0.08=0.696≒0.7Wの消費。

■検証2:スイッチング電源
熱対策で、DC-DCコンバータを仕込んでみる。
12VからDC-DCで5Vを作ってそのままATOM LITEに入力し、さらに5V->3Vを722333で賄ってDACを動かすようにする。



NJM2460かMC34063を使えば、僅か8点で12Vから5Vが作れる。
ブレッドボードで上記の回路を組んで、定数と種類を変えてうまく動くか試験してみる。
しかし、ATOM LITEを動かせるくらいの電力を賄おうとすると、正しいパーツを選定しないといけない。

具体的には、C1の容量、L1のインダクタンスと種類が重要。
最初、有り合わせでC1に103=0.001uFを使っていたが、周波数が足りないようでどのL1と合わせても、無負荷では5Vになるが、マイコンを動かすだけの電力を作れなかった。
C1を先人の回路に合わせて470pFにしたうえで、L1も値と種類を変えて試してみたが、マイクロインダクタでは十分な電力が取れなかった。
マイコンどころか、100Ωの抵抗を繋ぐだけで電圧降下してしまう。約50mAの負荷にも耐えられないということ。

スイッチング周波数を計算すると、だいたい470pFでは40kHzで、0.001uFだと半分の20kHzになるようだ。

左の3つはNG,右の3つはOKで、特に一番端の220uFが安定した。
どうも、十分なコアを持つ巻き線型でないとスイッチング電源には不向きのよう。
今回は検証していないが、ダイオードも高速かつ低閾電圧のものを選ぶ必要がある。逆起電力への耐圧も必要。

奥深い。

ーーーー
2024/8/18追記
スイッチング電源はうまく動いたものの、どうしてもノイズが乗ってしまうし、ATOM LITEの起動時のコンデンサの電荷の溜まり具合などの影響か、マイコンの起動がうまく動く時と動かない時があって安定しない。
また、7805で12V→5Vを作ってから他のLDO、AP7375で3.3Vを作るようにし、ATOM LITEは5Vで動かすようにすると、意外と大したことない発熱で済んだ。

7805側は、(12-5)=7Vで80mA、0.56Wの消費電力。小さいヒートシンクか、アルミケースに接触させれば十分放熱できた。
AP7375は、(5-3.3V)=1.7Vで20mA程度のため、34mW。SOT-23でも基板と配線だけで十分放熱できていた。
2段階で降圧することで、1段目のLDOの電位差が1.7V, 136mW減少する。数字で見ると大したことないが、いざ手元で作ってみると馬鹿にならない違いだった。
事前にあれこれ希望スペックを出して考えていたが、机上の空論よりまずやってみることが大事かも。

上記より、スイッチング電源は諦めて、LDOのみの構成とすることにした。

セラコン、マイクロインダクタ、3.3V LDOは表面実装にしたので表面はほとんど部品無し。
細かいので最初は手間取ったが、慣れればリード部品よりも早く実装できるくらい。
7805は実装面積を減らすため、基板裏面に配置し、そのままアルミケースに接触させるつもり。

ーーーー
2024/08/26追記
今回の方式、単電源をそのまま使う386アンプではうまくいくが、ぺるけさんのTourer Part5ではうまくいかない。12Vを内部で疑似的に±6Vにして中点をGNDとしているので、そのままだとBLE DACのGNDとパワーアンプのGNDが異なってしまうため。
これを解消するため、7805の代わりに、12V→5Vの絶縁型コンバータを購入予定。
小さい巻き数2:1のトランスに12V方形波を突っ込めば何とかなりそうな気はするが、500円で買えるのでわざわざ組むより買うことに。

2024年5月29日水曜日

格安3Dプリンタをレーザー加工機に作り変える(③ソフトウェア)

 grblとbCNCを導入する。

■grbl
とりあえず、手持ちのArduino Unoにgrblを入れてみる。
githubの公式に行って、ソース一式をダウンロードし、Arduino IDEにライブラリ追加する。
そして、アップローダのスケッチを選択して流し込み。
Arduinoに慣れていたら難しいことは何もない。
本家か、「自作CNCマシン・レーザーカッターについて」をよく読めば大丈夫なはず。
https://github.com/grbl/grbl/wiki/Compiling-Grbl
https://cnc-selfbuild.blogspot.com/2016/12/grbl11_14.html

バージョンだが、0.9jか1.1がよさそう。
CNCシールドの基板改造が必要になるかもしれないが、なるべく新しいものということで1.1で進めることにする。

■bCNC
pythonに慣れている人ならすぐに導入できる。
pip3でbCNCをインストールして、あとは「python3 -m bCNC」とするだけ。

■接続テスト
ここまでうまくいったら、Arduinoをパソコンに繋いでbCNCを起動する。
grbl 1.1ならbauを115700にする。

これで、H/Wが揃えばパソコンからGコードを送り込み、自由に制御することができるはず。
Gコードの作成などは、後で考える。
以上。

2024年5月28日火曜日

格安3Dプリンタをレーザー加工機に作り変える(②可動部分の用意、実験)

■解体
レーザー加工機を作るために、格安3DプリンタLabists X1を改造する。


元の制御基板と、エクストルーダー周りを取り除いて、X,Y,Z 3軸のステッピングモーターおよびリミットスイッチの配線だけにする。
リミットスイッチはマイナス側のみで、プラス側には存在しない。また付け足してもいいかも。


エクストルーダーを取った後のハウジングはこんな感じ。
金具部分に加熱・押出装置が、反対側のガワにはファンが付いていた。


■ステッピングモーターの動作試験
ステッピングモーターを試しに動かしてみる。

ステッピングモーターの型番を調べてみると、24BYJ48という機種の12V版で、4ピンのもの。バイポーラ型というらしい。
2系統の電磁石を、決まったパターンで励磁→待機→励磁→待機・・・とさせることで、モーターが正確に回転する。

■ステッピングモーターの1-2相励磁制御
1-2相励磁という制御を行うことで、45度ずつの回転を実現する。
簡単に図示すると、こんな感じ。
左と上の電磁石を8パターンで順番に切り替えていくことで、中心の永久磁石を正確な角度で順番に回転させることができる。

■回路
ドライバにはTA8428Kを2つ利用。マイコンはRP2040。
動画で実際に使っているのは市販のPi Picoではなく、東京バードさんの自作基板の記事を参考にガーバーデータを頂き基板を発注して作ったブレークアウト基板。
実体配線図。ICはピン互換の別ICを流用。
本当はVSYSではなく外部電源を使わないとダメ。
また、今回のモーターには12Vが必要。

励磁させるときは、モータードライバの前転/逆転(入力:H/L, L/H)を使う。
励磁無しのときは、今回は入力をL/Lとして、電磁石の両端をハイインピーダンスにした。
もしかすると、入力をH/Hとして電磁石の両端を直結させるブレーキモードのほうが、瞬時に磁場が消えてより高速な動作ができるかもしれない。
今度試してみよう。

■励磁時間を変えての実験結果
励磁してから次のパターンに移るまでの待機時間を変えて、実験してみた。
モーターの音が変わるのが面白い。

350us: "鳴き"は聞こえるが一切動かない。
400us: 下降するが、上昇できない。
500us: 上昇させる秒数が増えると時々回りそこないが発生する。
600us: 500usと同様。
700us: ここまで待たせると安定動作した。

ちなみに、待機秒数と周波数、ドレミの関係はこんな感じ。
us Hz kHz 近い音階
350 0.002857143 2.857142857 ファ6~#ファ6
400 0.0025 2.5 #レ7
500 0.002 2 シ6~ド7
600 0.001666667 1.666666667 #ソ6
700 0.001428571 1.428571429 ファ6~#ファ6
待ち時間が半分になると周波数が2倍になり、音階もオクターブ上がる。

Z軸のモーターに対し5Vを印加したので700usが限界だったが、X,Y軸や12V印加なら全く違う結果になるのだろう。
消費電力とトルク、速度はトレードオフになりそう。


実際にはCNCシールドを使うが、まずはうまく動かせそうなことが確認できてよかった。
以上、続きは大陸から部品が届いてから。

格安3Dプリンタをレーザー加工機に作り変える(①検討、買い物)

■参考リンク
CNCを自作したければ、このサイトを見れば必要な情報はだいたい手に入る。

あとはAliexpressとAmazon、秋月、千石、マルツに加え、近所のホームセンターでモノを集めて、知恵と工夫があれば何とかなるはず。

■背景
電子工作で、今まではリード線やDIPの部品ばかり扱っていたが、最近は表面実装にも手を出している。
蛇の目基板だけでなく生基板を使うこともあり、カッターで銅を削って回路を書いているのだが、細かい回路を正確に書くのが難しくて困っている。
特に、SOPやSOTのICを配置しようとすると、1mm以下の精度で配線しないといけない部分も出てきて、手作業での限界を感じている。
回路が仕上がってからはPCBを外注すればいいが、プロトタイプの間はお金も時間も勿体ないので、できればその場で加工したい。

■検討:基板の作り方
感光基板や、生基板に塗料を塗ってレーザーで塗料を落としてエッチングするという方法もあるようだが、どうせなら銅を焼き切ってそのまま回路を作れないかと考えていた。
薬品や塩化銅の廃液処理が面倒なので。

Youtubeやネットを見て回って色々調査したところ、青色~紫外線の5W程度のレーザーなら、銅も焼き切ることができるようだ。
金属ごとに光の吸収率が全く違うらしい。
CO2レーザーやファイバーレーザーのような、赤系の波長では銅に跳ね返されてしまうらしい。

光の吸収率は、以下リンク中央あたりにわかりやすい図がある。さすがキーエンス。
今回は銅と455nmの組み合わせなので、だいたい吸収率は40%くらい。
5Wレーザーなら2Wで溶断できると考えればいい?のだろうか。

■検討:ハードウェア
・レーザー
Aliexpressを見ていると、5W青色レーザーが6千円くらいでヒット。非常にコスパがよい。

強力なレーザーは失明の危険性があるので、防護メガネも一緒に購入。

・可動部分
昔使っていた、Labists X1という3Dプリンタのガワを流用。
AnkerMake M5Cが来てから一度も動かしておらず、今後も使うことは無いので有効活用する。
1万円台と激安だが肝心の成形が安定せず、調整→失敗の繰り返しで時間とフィラメントが大量に必要だった。
3Dプリンターの勉強にはなったが、何かを作って利用するには不向き。

Youtubeのアカウントは残っているけど、公式Webサイトは無くなっている。
潰れたのかどこかと合併してしまったよう。

・CNC
Arduino向けのCNCシールドというものが安くて事例も多いようなので、これを使う。
V3, V3.51, V4の3つが主に出回っていて、数字が大きいほど新しいソフトウェアが使える。
例えばV3.51以降はマイクロステッピングが有効、等。

この基板はそこら中でクローンされているようで、AmazonやAliexpress、楽天などでも数百円~2千円程度で見つかる。
今回は、V4にArduino NanoクローンもセットになっているものをAliexpressで調達。

■検討:ソフトウェア
grbl+bCNCを利用する。
grblとは、CNCシールドを前提としたArduino向けのCNC向けファームウェアのことらしい。
bCNCをPCで動かすことで、grblを導入したArduinoとシリアル接続し、Gコードを解釈して実際にマシンを制御できるようになるようだ。

CNCシールド、grbl、bCNCのバージョンあわせが必要なよう。
これは実際にCNCシールドが届いてから考える。

次回に続く。


2024年4月21日日曜日

QMC5883Lは不安定?

ーーーーーー
2024/05/08追記:やはり原因はQMC5883Lだった。他は全て同じコードで、I2Cで地磁気を読む部分のみセンサおよびコードをLSM9DS1に置き換えると、少なくとも12時間連続動作させても問題ないことを確認。安物、コピーでもよい用途と、ダメな用途があるという学びになった。
ーーーーーー

GPSと方角ベースのナビを作るべくトライし続けているが、地磁気センサとのI2C通信が安定しないので、いつまで経っても先に進まない。
症状としては、起動後すぐは安定した速度で動作しているのだが、10分?60分?以上経過すると、徐々に地磁気センサからのX,Y,Z軸の磁気情報の読取が遅くなるというもの。

最初はプログラムのミスや外付け回路の不良を疑い、プログラムを書き換えたりI2Cのプルアップの値を変えたりして戦ってきたが、どの方法でも解消しない。

そもそもチップが悪いのではと考えて検索したところ、似たような症状の方を発見。
https://shinshu-makers.net/shinshu_makers/2019/10/02/%E3%80%90%E3%83%91%E3%83%AF%E3%83%BC%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC2019%E3%80%91qmc5883l%E4%B8%8D%E8%AA%BF%E3%81%A7lsm9ds1%E3%81%AB%E4%BA%A4%E6%8F%9B%EF%BC%9Cimu%E3%81%A7ok/

やはり格安チップではダメということか?
似たり寄ったりだが、aitendoで買ったHMC5883Lで再トライすることにする。

2024年4月20日土曜日

RP2040でR-2R DACを試してみる

I2Sの勉強をしていたら、R-2RというDACのことを知った。
せっかくなので、試しに作って遊んでみる。

参考文献はこちら→https://www.mech.tohoku-gakuin.ac.jp/rde/contents/course/mechatronics/anadigi.html

上記サイトの上のほうの回路図にあるように、正確な抵抗のセットが2n本と、n個のDOがあれば、n bitのアナログ出力が作れるということ。
今回はDO4つ+R 3つ+2R 5つで、4bitを作ってみる。
Rの値は電源とマイコンの電流入出力能力を超えない範囲で選べばよいが、今回はわかりやすく1kΩと2kΩで作ってみた。

お行儀はよくないがGP18をLOWにしてGND代わりとしている。
GP21-24がDOで、A0で結果を読み取っている。

結果は以下のようになった。
ガタガタしているのは、抵抗のバラつき起因と思われる。
オーディオ用途で拘って作る人々は、チップ抵抗で16bit, 24bitを作って、抵抗器をやすりで削って微調整しているらしい。
一度トライしてみたい。

今回作ったものの精度はともかく、こんな簡単な回路でアナログ出力ができるというのは本当に面白い。


オマケで、結果の取得に使ったThonnyのコード。
汚いけどそのまま貼ります。
整数0~15を2bitの01の0埋め文字列に変換する部分、もっといいやり方がある気がするけど動けばいいやの精神。

import time

LED = machine.Pin(25, machine.Pin.OUT) # GP25をLEDとして出力端子に設定
GND = machine.Pin(18, machine.Pin.OUT)
GND.off()
bits = [
    machine.Pin(24, machine.Pin.OUT)
    ,machine.Pin(23, machine.Pin.OUT)
    ,machine.Pin(22, machine.Pin.OUT)
    ,machine.Pin(21, machine.Pin.OUT)
]
VIN = machine.ADC(0)
conv = 3.3/65535
conv = 1

print("start")
print("----")

def v(order):
    print(order, end="")
    print(": ", end="")
    for i in range(4):
        if order[i] is "0":
            bits[i].off()
        else:
            bits[i].on()
    time.sleep_ms(10)
    print(VIN.read_u16()*conv)

for i in range(2**4):
    t = ("000" + str(bin(i)).replace("0b", ""))[-4:]
    v(t)  

2024年4月13日土曜日

トランジスタ2石とDO 1つでマイコンの電源自己保持

待機中のマイコンの消費電力を極限まで下げるため、トランジスタ2石とDOを1つ使い、電源に自己保持回路を加えることを考えてみる。

何か動作させるときは、モメンタリスイッチなどでワンショットの入力を受け付ける。マイコンが起動すると、電源用のDOをHIGHにして、電源をONにしつづける。
仕事が終わったら、電源用のDOをLOWにして、自己保持を解いて電流を消費しないようにする。

マイコンにもスリープモードがあるのでそちらで十分な時は無駄に部品が増えるだけだが、うまく作ればスリープモード以上の省電力化ができるのでは?

考えた回路がこちら。
2つのスイッチが、マイコンのDO相当。右端の100Ωがマイコンの電源部分。

この回路は、NPNのベース抵抗の反対側にHIGHが印加されると電源ONで、LOWもしくはハイインピーダンスだと電源OFFになる。

シミュレータは以下のサイトを利用。

Import用のテキスト列。
$ 1 0.000005 10.20027730826997 50 5 43 5e-11
r 384 272 384 208 0 1200
s 208 256 272 256 0 1 false
v 144 336 144 160 0 0 40 3.7 0 0 0.5
r 464 160 464 336 0 100
w 320 160 368 160 0
w 208 160 320 160 0
w 144 336 208 336 0
w 400 160 464 160 0
w 384 336 464 336 0
t 352 288 384 288 0 1 -3.161620436472443 0.20923865338699582 100 default
t 384 208 384 160 1 -1 3.370856126826202 -0.32914051091822083 100 default
w 384 336 208 336 0
r 272 288 352 288 0 1200
w 208 160 208 256 0
w 256 192 320 192 0
w 144 160 208 160 0
w 384 336 384 304 0
s 208 288 272 288 0 1 false
w 272 256 272 288 0
w 208 288 208 336 0
o 0 64 0 4099 0.0000762939453125 0.00009765625 0 2 0 3
o 3 64 0 4099 0.0000762939453125 0.00009765625 1 2 3 3
38 0 F1 0 1 101 -1 Resistance