2026年9月20日日曜日

オシレータIC Si5351A をSTM32G030で動かす →AIには困難 →基板不良 →XTAL原因

100MHz超のパルスオシレータが必要になったのでなんかないかなと探したら、秋月電子で売ってるSi5351Aというのが便利そう.

↓この写真の紫のやつが中華通販のSi5351Aであって、秋月のものとは異なる.上の基板は自作のSTM32G030F6P6の基板だ.同CPUはTSSOP20で小さな用途には便利で多用している.お値段も中華通販で最安@¥90ぐらいかな.
↓Si5351Aはclock generatorという位置づけのようで、3ch入っていてまぁ便利ってかんじ~ I2Cで制御される
↓紫基板の回路図はこれみたいよ.Adafruitsがオリジナルみたいよ.(クリックで拡大)
↓STM32G030周辺回路.UART1とI2C2をアサインしとるかんじ~

AIでチャラッとcodingして、最初はSi5351Aを取り付けずにUARTだけを動かす.
だが動かない.
原因は、Si5351Aの初期化関数でhang-upしてたのが原因だった.I2Cって軽くhand shakeしているのでなにも繋がってないと停まってしまう.

Si5351Aの回路構成は簡単には「PLL→分周」だけと言える.だがAIに何度頼んでも100kHzの発振すらできない.

AIがてこずる理由は、Si5351Aのレジスタ構造が複雑だから.これって本当にプロが設計したものなのかなと疑いたくなるレベル.
どういうことかというと、
1)8bitレジスタが鬼のように多い(アドレス空間が256 BYTESもある)
2)DIV[19:0]のような分周設定レジスタが多くあるが、8bit busなので3つのアドレスに分裂しDIV[19:0]={DIV[19:16]DIV[15:8]DIV[7:0]}形式になってしまっている.まぁこれはI2Cだから仕方ないかも
3)DIV[19:16]と他のレジスタbitがひとつのアドレスで混ざっている (最凶)
4)レジスタ値と実際の分周比に謎の補正が必要 (分周比=レジスタ値ー512)
5)分周比に0~2048のような範囲制限がある (AIが間違える原因)
6)分周比=偶数制限がある?
7)AIの言い訳によると、モードによってなにか制限があるらしい (AIが間違える原因)

あとこれは性能面なんだけど、
Si5351Aは分数の分周比を設定できる. (分周比=a+b/c)
分数分周は整数分周よりも細かな周波数設定をできるので便利なんだが、分数にするとPLLにノイズが増える.PLLにノイズが増えるとジッタが増える.とりあえず分数分周は避けておく.

というわけで、本件はヤバすぎるのでここまでで一旦おしまい.githubでも徘徊してヒントを探すわ.

ーーーー
翌日.
えげつない事実が発覚した.基板不良を含んでいる.
写真左のようにジッタが多い.ジッタというかどこか死んでるレベル.
ところが、Si5351A~XTALの付近を指で触ったり押したりするとジッタが消える.(写真右)
基板不良だ.これは失禁レベルでおぞましい・・・・

続報をお楽しみに....

ーーーー
まず疑うのはハンダ不良ということで、、、
 1)虫眼鏡で観察 →なんともいえない
 2)ヒートガンで炙る  →変化なし
 3)手ハンダやりなおし(Si5351+XTAL)  →変化なし
というわけでハンダ不良説は行き詰まり.

次にレジスタをいじってみる.
Si5351はレジスタで「XTALのキャパシタを10,8,6pFから選択できる」ようになっている.
これでジッタの出方が変わる.
XTAL付近を指で触ったらジッタが治ったことと符号する.
XTALが死にかかっているのではないだろうか?
邪推であるが20pFなら安定して発振するような独特なXTALなのかもしれない.

↓originalのXTAL発振子を撤去し、25MHzの発振器を取り付け、Si5351のXA端子に0.01uFを介して注入する.ジッタが治った.発振周波数がレジスタ操作と異なる問題も治ったっぽい.
「これだから発振子は嫌いなんだ」というのがわたしのスタンスだ.
CPUに発振子は使わないで発振器を使うようにしている.

ただしSi5351Aはclock発生ICなので、ジッタ性能が不明瞭な発振器を源発振にしたら用途本来の意義に反するので発振子を使うのが正解であるという事情は承知するところだ.

ハナシは逸れるが、MEMS発振器というのがある.MEMS発振器は水晶でなくシリコン音叉で発振する物だそうだが、安定性信頼性がXTALよりも良いと訴求している.XTALにはなんとなく不良があるものなのだろう.ppmのレアケースかもしれぬがの.

ーーーー
エピローグ
動いたので、STM32CUBEIDEのproject詰め合わせをupしておくなり

あ、忘れてた.こちらのgithubを参考にさせてもらいました.サンクス

AIにさんざ文句を言ってしまったが、AIのcodeでもちゃんと動いたのかもしれない.

かしこ

11 件のコメント:

  1. >中華通販で最安@¥90ぐらい
    (ソレ、Genuineじゃ無いのでは・・・?
    Digikey だと、@¥363 って出ますね。
    まぁ「動けばいい」用途ならいいのか)
    >Si5351Aはclock generator
    このチップは、「SDR界隈」でも、よく出て来ますね。
    >Si5351Aは分数の分周比を設定できる
    図には無いけど「スワローカウンタ」になってんのかな?
    この形式のPLLはその昔、「カーステレオの設計」で、よく使ってました。
    分周比が、1/N 以外に指定できるので、便利でした。
    >AIがてこずる理由
    まぁ、単純に、
    ・学習不足(そう言う使い方してる人が少ない/居ないってコト)
    なんでしょうが・・・AI回路設計はまだまだかな。

    返信削除
    返信
    1. DIV[19:16]DIV[15:8]DIV[7:0]の面倒なところを、
      人間ならこんな風にきちんとバラすじゃないですか
       DIV1916 = (DIV >> 16) & 0x03;
       DIV1508 = (DIV >> 8) & 0xFF;
       DIV0700 = DIV & 0xFF;

      ところがAIは直打ちで済ますので可読性が悪いのと、
      bitアサインでしくじったりしてゴミcodeなんですなぁ

      AI製なろう小説がダサいようなもんで、もっと頑張ってよ >AI

      削除
    2. 中華激安STM32G030は、
      いまのところちゃんと動いてます

      とはいえ、複雑なことをやらないのでマトモにうごいているように見えるパチモンなのかもしれませんが

      中華パチモンの最強続出品はSTM32F103だったかな
      いちばんよく見かけるやつ
      信じたらサクサク死ねます

      削除
    3. 分数分周は2000年ごろはどこかの特許が生きてた印象なんでしたが、
      いまは誰でも使えるようになってるみたいでよござんす

      削除
    4. https://www.youtube.com/watch?v=OlNo9-ovvBg これと同じものでうかね。プログラムも置かれています。

      削除
    5. あ、それだと思います
      この投稿を読んだらtubeのオススメに出てきましたか?
      謎のリンクで監視されちょるホラー

      削除
  2. >ジッタが治った
    「秋月電子で売ってるSi5351A」から、「水晶発振子」を剥がして使えばいいのでは?
    つか、それなら最初から「秋月のやつ」使えば良いのか・・・(笑)
    つか、中華版に付いてる「謎のFET」って、何の為に付いてんだ?

    返信削除
    返信
    1. まぁ、秋月だと「650円」しますが(笑)
      ・Amazon で、同等品最安値・・・399円
      https://www.amazon.co.jp/dp/B085GGMGGC
      ・AliExpress で、同等品最安値・・・174円
      https://ja.aliexpress.com/item/1005009684339977.html
      ※「初回割引」とかあるので、定価は高いのか?
      1,084円が定価なのかな?

      「安定して使えると思われる」秋月の価格が「安いか高いか」は、微妙なところ。

      削除
    2. 秋月を裏切ってしまって申し訳ありませんっっ

      といいつつAliexpにあと3ケ注文してあるんですよね
      ますます秋月への裏切りだわ

      ちゃんと動くのだろうか?

      削除
    3. >秋月を裏切ってしまって
      まぁ別に、秋月に義理立てする理由も無いし・・・(ヲイヲイ
      私も「Made in JAPAN命」と言うワケでも無いです。
      ※最近は「日本製だから品質がイイ」と言うワケでも無いし。
      AliExpress の中華製でも、「高品質」なのは有りますし(少数派だけど(笑)あと、それなりに「値段」もする。)一概には言えない。
      >中華版に付いてる「謎のFET」
      どうも、「5Vトレラント」用の回路みたいですね。

      削除
    4. >「5Vトレラント」用

      そうそう、ご丁寧にどうもです

      STM32は電源電圧3.3Vでも5Vトレラントがあるので普段はあまり気にしてないんです
      Arduinoはどうなのか知らないけど...

      削除