日々の記録

ほどよく書いてきます。

鉄の膨張

2024年05月22日 23時16分52秒 | その他雑記

鉄鋼、特に高炭素の鋼にはちょっと面白い特性がある。

焼入れ焼戻しをした鋼がゆっくりと膨張してくるのである。

具体的な鋼材を上げると、SUJ2やSK、SKSやSKDなどで、焼入れした状態で残留オーステナイトが存在する場合にこの膨張が生じる。

オーステナイトは面心立法(FCC)なので、密度が高い。対して焼入れしたマルテンサイトやフェライトパーライトは体心立法(BCC)なのでやや密度が低い。

材料を焼入れするとオーステナイトからマルテンサイトに変態するが、炭素量が多いとマルテンサイト変態終了温度が常温以下になるので、水焼入れなどではマルテンサイト変態が完了せず、オーステナイト相のまま残留するものがいる。

この残留オーステナイトは密度がやや高いのだが、常温では不安定なので、段々とマルテンサイトに分解していく。このときに密度低下が生じるため、体積ば膨張する。

硬い材料としては、物差しや直角定規など摩擦に耐えて長期間の耐久性がほしいものに工具鋼などが使われるが、この残留オーステナイトをうまく処理しないと寸法安定性が悪く、長期の精度が担保できないという問題がある。

先人はこれを解決する方法を考えており、常温以下まで冷やすことで残留オーステナイトをマルテンサイト変態させる、サブゼロ処理というものを考えた。

 

高炭素の鋼の熱処理で特に高精度が要求されるものについては、サブゼロ処理を入れるなどして寸法安定性を担保されたし。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MathJax

2024年04月20日 01時08分52秒 | プログラム

MathJaxというものがある。TeXで数式をキレイに書いてくれるものである。

MathJaxを読み込んで終わりではあまり面白くないので、tex形式で入力した式を書いてくれるグッズを作ってみた。ChatGPTで。

仕事でちょっとほしかったのだが、悩んでいてそうだ、こういうのこそChatGPTだとおもって作ってもらったらあっさりできた。

 

 

〜〜〜以下HTMLコード〜〜〜〜

<!DOCTYPE html>
<html>
<head>
    <title>MathJax TeX Test Page</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>
<body>
    <textarea id="math" rows="4" cols="50"></textarea>
   


    <button onclick="renderMath()">Render</button>

    <script>
        function renderMath() {
            var math = document.getElementById('math').value;
            var output = document.getElementById('output');
            output.innerHTML = '';
            MathJax.texReset();
            var options = MathJax.getMetricsFor(output);
            options.display = true;
            MathJax.tex2chtmlPromise(math, options).then(function (node) {
                output.appendChild(node);
                MathJax.startup.document.clear();
                MathJax.startup.document.updateDocument();
            });
        }
    </script>
</body>
</html>

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

超硬合金

2024年04月20日 00時59分51秒 | その他雑記

超高合金というものがある。一般にはタングステンカーバイドの焼結体を指す。

コバルトをバインダー(粒子を接着させる接着剤)としたものが一般的で、通常はこれらを超高とよび、現代の切削を支えている。

コバルトレスと言っているものはニッケルでつないでいるものもある。

 

さて、合金といっているが、実際には炭化物であるため、合金というにはやや違和感がある。タングステンカーバイドはそのカーバイドの状態がとても硬く安定な状態であるため、温度が上がっても鉄鋼のように焼戻しされることもない。これが加工のツールとしてとても良い特性を持っている。

良いことばかりじゃなくて、加工が大変なので塊からの製造ではなく、粉末冶金をつかっての製造になる。タングステンカーバイドの粒子とコバルトを混ぜて、プレスして整形し、焼結する。そのごダイヤモンド砥石で仕上げて出来上がり。

 

この合金ができるまでは、ハイスと呼ばれる高速度鋼が一般的だったと思う。コバルトハイスなどなど。これらはタングステン、ニオブ、バナジウム、コバルト、モリブデンなど炭化物を作って固くなる元素を添加した鋼材で、材料内部にカーバイドを晶出するためにその特徴(温度が上がっても軟化しにくい=高速度加工ができる)を持っている。マルテンサイトで硬いものは400℃程度で柔らかくなるのであるが、カーバイドは上にも書いたが安定な硬質物質なので熱に強くなる。

たぶん、上のカーバイドだけ集めて作れないか?というところから超高合金の開発が始まって現在はタングステン・カーバイドがその殆どを締めているのだろうなと思っている。

 

温度が上がっても材料が耐えるので、潤滑レス(クーラントレス)での切削なども可能になる。むしろハイスの時代には発熱が問題だったが、高速度で加工することで、加工場所の鉄鋼温度が400℃、500℃、600℃、などと上がっていくと鉄鋼の強度がかなり低下するので、むしろ加工しやすくなるメリットが出てくる。切り屑が青かったりするのは加工場所で一瞬でブルーになるまでの温度が発生している状態の証左である。

 

眠くなってきた

 

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

鉄・鋼

2024年04月09日 23時09分50秒 | その他雑記

現在種々の材料が鉄鋼として登録されているが、だんだん収斂していくのではないかなと思う。

アルミの鋳物、だとえばダイカスト合金はADC12という材料が日本を席巻してる。他にも合金の規定はあるものの、ADC12の流通量が多くなってくると、値段が下がり、新規の設計もADC12で対応するようになり、だんだん選択肢がADC12のみになってきているようにも思う。

鉄鋼においての類似の経験は、鋼にクロムを添加したクロム鋼SCr、更にモリブデンを添加したクロムモリブデン鋼SCMを比べた時、SCM材料のほうが添加元素多いのに、安価であり、それが流通量の違いということを知った。

そうなると、よっぽどモリブデンの高騰が生じない限りクロム鋼の出番がなくなってしまって、クロムモリブデン鋼が席巻してくるであろうと思っている。

 

ふと設計する側になると結構少なそうで・・・

・低炭素鋼(SS400やSPCなど用途、厚さで選択肢あり)
・炭素鋼(S45Cはずぶ焼入れしにくいので注意、S55Cくらいがちょうどよい)
・工具鋼
・合金鋼(SCM4xx、浸炭ならSCM415, SCM420くらい、全体焼入れならSCM435やSCM440)
・工具鋼(SK85からSK105、SKD11、SKD61、SKS類、SUJ2)
・鋳物(FC250からFCD)
・ステンレス(多岐にわたるが、SUS304, SUS316L, SUS410、SUS420、SUS430、SUS436、SUS444、SUS631、SUS310S)

あれ、全然収斂してきているように思えないな。

 

 

教科書の書き直しに過ぎないが、鉄鋼と言われるもののうち、鉄は純鉄に近いもの、鋼は炭素を入れて強くしたものと思っている。入れる炭素量は多くても1%くらい。鉄というには0.02%よりは低くあってほしい(オールフェライト組織になる)。

ポイント:炭素は1%未満の添加量で強度に影響する重要な元素

 

炭素に鉄鋼を入れるとパーライト組織になって強くなるが、それ以上に効果があるのが焼き入れて生じるマルテンサイト組織でコレが硬い。そのため、熱処理と組み合わせることで炭素鋼はもっと活躍の場が広がってくる。ここで、炭素量という軸と、熱処理という軸の2軸で語られることが多くなってくる。

ポイント:鋼は組成のみならず、熱処理でもその特性が大きく変化する

 

炭素量の話にもどって、炭素量0.77%未満の炭素鋼を亜共析鋼、0.77%以上を過共析鋼という。
JISでは炭素鋼というと、炭素量0.65%くらいまでなのだが、0.75以上の炭素は工具鋼と名前を変更して呼んでいるが、中身は炭素鋼である。昔はSK1からSK7まであったが、わかりにくいので、現在は炭素量で書かれていて、SK85なら炭素量0.85%の工具鋼とわかる。
炭素量の低い炭素鋼としてはS15Cなどもあるが、見たことのある炭素鋼で最も低炭素だったのはS20Cである。よく目にするのはS45CやS55Cである。SK85なども社内ではよく見る。SK105も稀に見るがSK140は見たことはない。

ポイント:硬ければ優れるとも限らない。硬いと靭性が低下するので、固くて脆い、という背反を忘れない。

 

さて、炭素鋼は焼入れで強くなる(=固くなる)が、ある程度より深いところに焼入れができないことが発覚してくる。重いモノは焼入れしにくいという観点で「質量効果」などといったりするが、実際には表面からの距離だと思うので、「冷却速度依存性」という理解が正しい。質量効果なんてなんだよって思った最初は。

より深いところまで焼入れができるようにするには、ゆっくりな冷却速度でもマルテンサイト変態を起こすようにする必要がある。このための添加元素があり、クロム、ニッケル、モリブデンなどがある。ニッケルは高いので、多くの場合はクロム、モリブデンに頼る場合が多い。

ポイント:焼入れ性を良くするにはクロム1%、モリブデン0.2%などを添加し、値段度外視の場合にはニッケルも2%など添加する。
困ったときのクロモリ鋼!1%クロム、0.15-0.3%モリブデンが良いところ。ニッケルが入ると更に焼入れ性がいいので、ある程度の塊でも固く、プリハードン鋼といった形で売られているものもある。

 

炭素鋼にクロムなどを添加したもはSCr420やSCM420などといった合金になるが、工具鋼に添加すると違った名前になってややこしい。
過共析鋼は炭化物を吐き出すのだが、モリブデン炭化物、タングステン炭化物、バナジウム炭化物、クロム炭化物など各種炭化物を作って固くする鋼材もあり、SKSやSKT、SKDなどがこれに該当する。ダイス鋼とかいったりするのかな。SKD61などはよく見る。SKD11もよく見る。SKSは時々聞く。

ポイント:添加元素は炭素濃度でメカニズムが違うので、注意する。SCM435知ってるぜーって感じでSKD61を見ると理解できない。

 

組成のグラデーションを炭素で生じることで、表面はこんがり、中はふっくらみたいなことも可能で、浸炭焼入れがコレに相当。内部までカチカチになると都合が悪い材料の場合は浸炭をしたりする。表層が固くあってほしい歯車などでも浸炭焼入れする場合もある。ただ、浸炭を待ってられないからと、高周波焼入れをする場合もある。

ポイント:炭素量も加熱方法も一筋縄ではいかず、先人の知恵が光る。

 

 

その他特殊添加物:

・鉛:絶滅危惧種または新規生産が止まっているレッドリスト入りの材料。鉛を分散するこで切り屑が短く分断され装置や工具に絡みにくい、鉛が滑ってくれて切削性がよいなどの特徴から、快削鋼と言われる。現在はBiなどで代用したり、硫黄添加で対応したりする。

・硫黄:マンガンと化合物を作り硫化マンガンMnSを材料中に吐き出し、これが切り屑をプチプチ切れやすくし、切削性が良くなる材料。通常0.03%や0.045%未満で管理される硫黄が0.1〜0.3%程も含まれる。エッチングなしの組織を見た瞬間にMnSが見えるので、「あ、硫黄添加の快削鋼」とわかる。成分からも明らかに違和感を感じるが、切削加工の目的あり。

・バナジウム:低炭素鋼に添加するとフェライト強化になるので、熱処理しなくても強度UPにつながる。添加量は0.05%未満くらい。炭素が多い材料に添加すると炭化バナジウムを作って固くなる。

 

 

 

 

次に、ステンレス。ここも奥が深い。

ステンレスは錆びにくい鉄鋼で、錆にくさはクロムが担っている。クロムは表面で酸化膜を作ったときに不動態を作り、それ以上の酸化を防ぐ。不動態膜は数nm程度で目視で金属色が変化するような膜ではないため、目視では錆びていないように見える。

身の回りのステンレスには、磁石にくっつくステンレスと、磁石にくっつかないステンレスがある。

磁石にくっつくものは、フェライト系とマルテンサイト系に大別され、特殊事例では析出硬化のSUS63x、二相ステンレス(フェライト+オーステナイト)などがある。
磁石にくっつかないステンレスは、オーステナイト系ステンレス。
★SUS3xx : オーステナイト系ステンレスで基本的に磁石にくっつかない。例外SUS301、SUS304の一部にくっつくものがある。ニッケルを含有するためやや高い。18-8ステンレスはSUS304である。モリブデンを3%程添加したSUS316は耐食性が良いのでよく使われる。応力腐食割れするので、注意。
★SUS4xx:フェライト系、マルテンサイト系ステンレス。磁石にくっつく。低炭素のものはフェライト系。基本的にニッケルを含まないため、安価。自動車のマフラーなどはSUS436やSUS444などフェライト系ステンレスで作られる場合が多い。個人的な欠点:鋳造で組織が大きくなりすぎるので鋳造品に不向き。応力腐食割れしないので良い場合もある。
SUS444はフェライト系なのに、SUS440はマルテンサイトなど、番号の不連続性が強いので、「下2桁は住所」と思って諦める。
★SUS63x:析出硬化型ステンレスという特殊ジャンル。アルミ、銅などが出たらコレに該当する可能性あり。
★その他特殊系:デュプレックスといったり二相といったり、フェライトの弱点、オーステナイトの弱点を補った材料もある。ロレックスのステンレスはSUS904というデュプレックス。

ベアリング用のステンレスはSUS440系一択。

SUS301やSUS304などニッケルを8%程度しかふくまないオーステナイト系ステンレスは加工によってマルテンサイト変態を生じるため、加工により磁石にくっつくように鳴る場合がある。ただ、このマルテンサイトが強度向上につながるため、バネ用ステンレスとしては有用な特性でもある。

知っておきたいスレンレス:SUS301 ( & SUS301CSP)、SUS304, SUS316L、SUS430(フェライト)、SUS420(マルテン)、SUS440、SUS444、SUS436、SUS630、SUS631、SUS201(ニッケル節約してMn増量)

 

ステンレスにチタン、ニオブをちょっとだけ添加しているケースがあるが、コレは炭素キラーと個人的に呼んでいて、クロムと炭素が化合物を作らないように、炭素を先に消費する元素として添加し、鋭敏化といった現象を回避するのが目的になっている。規格に炭素量の5倍から0.2%未満、みたいな書き方は基本的に炭素キラー。溶接する部品やマフラー部品で多い。腐食して穴が開かないようにね。

 

 

ステンレスの窒化は鉄鋼の窒化と全然違うとかもあるので、収斂しつつあるとおもったが、結構多岐にわたりそうなので、アルミとはちょっと違う世界かもと思った。

コメント (4)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

データロガーGL220

2024年03月12日 00時02分25秒 | 電子工作

グラフテックのデータロガーGL220をヤフオクで買った。

10chの絶縁入力が可能で内部メモリー、USBメモリーにデータを記録できるので便利である。仕事で使っているが個人でも欲しいと思っていてつい買ってしまった。

ADCMTの7352Aというデュアルチャンネルの測定装置を見逃して落札できなかったので、まあいいかとおもっての落札。読み取り桁数ではやはりベンチトップテスターがいいなと。

 

GL220は電圧測定、熱電対による温度測定が可能であるが、電流測定はできないので電流測定についてはシャント抵抗経由での測定になる。

各チャンネル、16bitの分解能でそこそこ良い感じっぽい。

 

また何かを測定したら結果を載せようと思う。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ISO594/1 ルアーフィッティング

2024年02月20日 00時58分23秒 | AVR

メモではあるが、注射器の接続部分に使われていたISO594/1の規格を参照している。現在ISO594は廃止された規格だが、多分現在のISO80369に引き継がれている、、に違いない。ISO80369は形状違いで注射用、麻酔用などが別れているが、未確認です。

ISO594/1では0.06のテーパーの直径約4mmの形状が使われているようです。

 

 

 

 

 

とりあえず、寸法のメモ。テーパー6/100で作っておけば入りそう。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

断熱材料の性能

2024年01月03日 10時24分03秒 | その他雑記

ちょっと仕事で小さなヒーターを作っているのだが、断熱の部分をどうしようかと思っていた。
小さな管状ヒーターだが、200Wの電力で600℃までは到達するようにしてある。
もちろん保持する部分などがあるので、周辺はせいぜい50℃くらいにしておきたいところ。40℃くらいがいいけど。
ただ、断熱といっても熱伝導率を小さくするだけなので、熱くしたくない側をうまく冷却しないといけない。

断熱材も詰め込むと断熱材の熱伝導率が大きくなるし詰めないとまた熱伝導も悪そうで難しいな。

断熱材の熱伝導率がどの程度なのかわからなかったので、一旦プロトタイプを作って実験したところ、結構な熱伝導があったので、強制送風が必要だとの結論。

さて、どの程度の送風をしたらいいものか。熱電対いくつか差し込んで熱輸送の量を把握しておこうか、などと思いつつ正月休みが終わる。

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

あけましておめでとうございます

2024年01月03日 10時11分37秒 | その他雑記

新年あけましておめでとうございます。

12/29あたりから子供が調子悪くて吐きまくる、12/31から私が吐きまくる、1/1から妻がと家族が全員ノロに感染したのかな、といった年末年始で寝正月でした。

年始は能登半島の地震、航空機事故と災難が続いていますが、災害情報はリアルタイムで良いものがあったりするようです。

震源マップ
https://www.hinet.bosai.go.jp/hypomap/?ft=1&LANG=ja

強振モニタ
http://www.kmoni.bosai.go.jp/

 

コメント (3)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

JJYの信号を作る

2023年11月16日 00時28分59秒 | その他雑記

部屋の奥、電波時計の電波が届かないところの電波時計に電波を届けたい。

JJYリピータというものもあるが、高いので、安くしたい。

という人向けに面白いものがある。

https://shogo82148.github.io/web-jjy/

 

JJYの信号は、関東では40kHzの信号が出ているのだが、この周波数の電波を出すグッズはなかなか無い。

しかし、1/3の周波数の13.33kHzならばオーディオ回路から出力することができる。そして、オーディオ回路の帯域が仮に20kHzしかなくとも、正弦波出力をクリップさせて歪が生じたら高調波として40kHz成分が得られる。

という発想でスマホでもPCでもオーディオジャックがあったらなんとか電波時計に電波を与えることができるのだが、イヤホンなどでは放射する電磁場が弱すぎるので、スピーカーのボイスコイルぽいものを作ってのほうが受信感度が良くなる。

 

スマホもPCも今やNTPで結構良い精度で標準時と同期しているので、それが出す電波もまたそれなりの精度を持っており、申し分無い精度が出ている。

 

ふと思ったのだが、ニセJJY電波として電波時計に狂った時間を設定することも可能なはず。そうなると、電波時計には電波受信済みのマークが表示されるが表示される時間はトンチンカンといったことができる。アリバイ工作に使えるのでは無いだろうか。ほら、電波受信マークが表示されてる時計と一緒に写真とってますよね、がダウトになる。

 

ちなみに、こちらではイヤホンジャックから端子台に変換するグッズとポリエステル線を巻いたものを使ってます。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

インフルエンザ感染でひどい目にあった

2023年10月18日 23時04分27秒 | その他雑記

10/16朝、熱があって頭、背中腰が痛い。怪しいぞとなって、会社を休んで病院に行き、コロナとインフルエンザの検査を実施。

インフルエンザA型当選で確定。タミフルを処方してもらって、すぐに楽になるぞーと思ったがしかし、ここからが長かった。

10/16 11:45タミフル飲用してそのまま昼寝っぽく夕方までウトウト
10/16 夕方、体温が下がって無くてタミフル効いてないんじゃね?みたいな印象。苦しい。
10/16 夜から17朝、熱が下がらない、38℃まで下がったとおもったら夜中39℃超えてぐええええ。一時間ごと起きるくらいの勢いて起きて大変だった。
10/17 朝、熱が下がり始めていい感じとおもったら、また熱が上がる。
10/17の夜から18の朝は良く寝れて眠さは比較的マシになるも体が重い、首が痛い、何故か古傷が痛い。
10/18 朝から平熱に近い体温だったが、倦怠感がひどい。しかし午後、急速に体が楽になり始める。

 

久しぶりに病気で苦しい思いをした。

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メガネレンチの溶接品

2023年10月18日 12時37分52秒 | その他雑記

メガネレンチに延長パイプをくっつけて溶接した工具を使っていて溶接部から破損したという相談があった。

・そもそも工具にパイプを継ぎ足しての使い方はメーカーが禁止している。

ということで、終わりなのだが、コレだけだと味気ないので解説していく。

調べると工具はS53C(炭素0.53%の炭素鋼)でできており、表面にニッケルクロムめっきがされている。
バイプの材質は不明、溶接に使った溶接棒も不明だが、きっと鉄鋼用のものだろう。

工具の材料S53Cの観点から見ると、冷えた鋼に溶接すると一瞬で温度が上がるところまではいいのだが、周辺に熱がすぐに伝達するため、溶融部やその周辺は相当な速度で冷却され、焼入れされた状態になる。焼入れしたままだとかなり固く、もろくなるのでポキンと行きやすいので、要注意である。
どうしても溶接したい場合は、予めバーナーで加熱しておくと溶接直後からの冷却がゆっくりになり焼入れ状態に成りにくくなるという手法もあります。

常温のまま溶接できる条件としては「焼入れして余り固くならない」が類似の条件になるでしょうか。

 

めっきについては、ニッケルとクロムなら余り問題にはならないと思いますが、溶融金属の中に均質に溶けるわけではないので、変な金属間化合物を作ったりして脆化しなければいいようにも思いますが、気持ち悪いのでめっきは剥がしてから溶接したほうがいいかもしれません。

 

溶接直後は一見くっついたように見える状態でも、内部の歪がおおきかったり、硬すぎて脆かったりもあるでしょうから、最後に全体を焼入れ焼戻しして全体の硬さを調整するなどが必要かもしれません。

 

そもそも、工具を溶接したりして伸ばしちゃダメだよって話だけどね。

探していたらパイプ延長を前提としたかのようなメガネレンチがあった。
https://www.monotaro.com/p/1899/9968/
https://www.monotaro.com/p/1900/0738/

 

そして、思ったのは、工具の場合破壊するときどのように破壊するかまではメーカーが考えているように思う。
過去にKTCのメガネレンチを壊した経験からすると(おい!)、工具は曲がる。あるところでぐにゃっと。決してポキンとは折れない。
メガネレンチが仮にポキンと折れるとする。折れるまでには、弾性エネルギーで結構なエネルギーが溜まっているはずなので、ポキンといくと破片が溜まった弾性エネルギーを得てすごい勢いで跳んでいくかもしれない。とても危ない。なので、絶対的な硬さ、強度よりは塑性変形するだけの材料の伸び(ねばり)を維持した熱処理をしているはずだ。

特に工具はネジの頭の大きさがわかれば必要なトルクが分かって、そうなると必然的に工具の長さ、働く応力なども決まってくるだろうから、極端に大きな安全率を持っておくようなことはしないように思う。

 

調べていて面白かったのは、打撃レンチというもの。二面幅40mmとかのネジになるととんでもない長さのレンチが必要になるので叩いて締め付けるのを前提にした工具が存在している。二面幅30mm以上くらいのサイズからありそうです。。

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メモ S8100Bを使った温度計

2023年09月17日 00時00分53秒 | Arduino

S-8100Bというセイコーエプソンの温度計がある。出力インピーダンスが高いので出力を1MΩでプルアップせよとあるが、オープンコレクタ出力なのだろうか。1MΩでプルアップしないと直接マイコン端子に接続ではうまく温度測定できなかった。

小数点表示はおいといて、ダイナミック点灯で表示できるところまではいった。

校正してないが、28.7℃ほどの気温のようだ。あつい。

ノイズが大きいのかADCの読み取り値が大きく変動するので、平均化をガッツリしてみた。15000回ほど・・・
150回のADC変換で0.99倍しながらADCの値を加算するので、150x100=15000回平均値となる。

 

Arduinoで作ったProMicroのコードをメモがてら載せておく。
======以下コード======

//使うデジタルピンの番号を入れておく。
//DDRx, PINx, PORTxレジスタで操作したかったが、ピン足りなかった

uint8_t Channels[]={2,3,4,5,6,7,8}; //ドットは別で定義しておこう
//        /-a-/
//       f   b
//      /-g-/0
//     e   c
//    /-d-/ .
//Channels 23456789
//7segment abcdefg.
//       0 11111100
//       1 01100000
//       2 11011010
//       3 11110010
//       4 01100110
//       5 10110110
//       6 10111110
//       7 11100100
//       8 11111110
//       9 11110110


//7セグの配列を入れてある
uint8_t SegmentArray[10][7]=
    {
        {1,1,1,1,1,1,0},
        {0,1,1,0,0,0,0},
        {1,1,0,1,1,0,1},
        {1,1,1,1,0,0,1},
        {0,1,1,0,0,1,1},
        {1,0,1,1,0,1,1},
        {1,0,1,1,1,1,1},
        {1,1,1,0,0,1,0},
        {1,1,1,1,1,1,1},
        {1,1,1,1,0,1,1},
    };

// 0を表示したい場合、次のように値を入れるのがいいだろう
// for(i=0,i<8,i++){
//   digitalWrite(Channels[i],Segment[0][i]);
// }

long ADCValue;
long LN2;
long tempVal;
uint8_t A;
uint8_t B;
uint8_t C;

void ShowNone(){
  //7セグLED消灯
  for(uint8_t i=0;i<sizeof(Channels);i++){
    digitalWrite(Channels[i],0);
  }  
}
void ShowNum(uint8_t X) {
  if(X>9){
    ShowNone();
  }
  else{
    //7セグLEDに数字を表示する
    for(uint8_t i=0;i<sizeof(Channels);i++){
      digitalWrite(Channels[i],SegmentArray[X][i]);
    }  
  }
}


void setup() {
  // put your setup code here, to run once:
  // Serial port setting
  Serial.begin(9600);

  //pinMode Setting for a to g LEDs
  for(unsigned char i=0;i<sizeof(Channels);i++){
    pinMode(Channels[i],OUTPUT);
  }

  //Digit Position
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(16,OUTPUT);

  // 7セグLEDの点灯テスト
  for(unsigned char i=0;i<sizeof(Channels);i++){
    digitalWrite(Channels[i],HIGH);
    delay(100);
    Serial.println(Channels[i]);
    digitalWrite(Channels[i],LOW);
  }

  //0から9までの数字表示の確認をする
  for(uint8_t j=0;j<10;j++){
    ShowNum(j);
    delay(100);
  }
  ShowNone();
  
  ADCValue=0;
  for(int i=0;i<15000;i++){
    ADCValue += analogRead(A0);
  }
}

void loop() { 
  // put your main code here, to run repeatedly:
  //ADCで電圧を読んでくる
  // 1V-5Vを0-99%に割り付けた値をXとする(100%表示はしない)
  // Xを10で割った商Aが10の位、余りBが1の位になる。
  // Aを表示,Bを表示,ブランク表示を繰り返す。

  LN2 = map(ADCValue,3363900,5861400,800,-200);  //1-5Vを0-99に割付
  A = LN2 / 100;  //10の位
  tempVal = LN2 % 100;  //1の位
  B = tempVal /10;
  C = tempVal % 10;

  //シリアル通信で計算している中身を送信
//  Serial.print(millis());
  Serial.print("ADC Value:");
  Serial.print(ADCValue);
  Serial.print(",AR:");
  Serial.println(analogRead(A0));
//  Serial.print(",ABC:");
//  Serial.print(A);
//  Serial.print(",");
//  Serial.print(B);
//  Serial.print(",");
//  Serial.println(C);

  digitalWrite(9,HIGH);
  digitalWrite(10,HIGH);  
  digitalWrite(16,HIGH);  
  if(A>0){
    ShowNum(A); //100の位を表示
  }
  else{
    ShowNone();
  }
  digitalWrite(9,LOW);

  ADCValue=ADCValue-ADCValue/100;

  //delayの代わりにADC変換する
  for(uint8_t i=0;i<50;i++){
    ADCValue += analogRead(A0);
  }
  digitalWrite(9,HIGH);

  ShowNum(B); //10の位を表示
  digitalWrite(10,LOW);  //点灯
  
  //delayの代わりにADC変換する
  for(uint8_t i=0;i<50;i++){
    ADCValue += analogRead(A0);
  }
  digitalWrite(10,HIGH);  

  ShowNum(C);
  digitalWrite(16,LOW);
  //delayの代わりにADC変換する
  for(uint8_t i=0;i<50;i++){
    ADCValue += analogRead(A0);
  }
  digitalWrite(16,HIGH);
}

 

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

マイコンADCの移動平均っぽい計算

2023年09月13日 22時08分28秒 | AVR

時々使っているマイコンのADCは10bitなので1024段階(0-1023)での出力が得られるが、時間応答を犠牲にしてももうちょっと分解能を高くしたいときがある。温度計とか。

ArduinoではAnalogRead(A0)といった関数でA0端子のアナログ値を得られるのでコレを使って書くと、

ADC = r* ADC  + AnalogRead(A0);

という加算をしていくと、ADCの値にはAnalogRead(A0)/(1-r)の値が入るので、コレをつかうことでADCの見かけ上の分解能を増大させることができる、はず。

 

解説:

ADC += AnalogRead(A0);

というコードを書くとADCの値は無限に増大していく。なので、ある程度値を抜いてやると値がある値に収束するであろうことがわかる。

例えば、

ADC = 0.9*ADC+AnalogRead(A0);

と計算をすると、現在の加算値の0.9倍に読み取りの値を加算するので、感覚的に、AnalogRead(A0)の10倍の値に収束する感じがわかる。

で、0.9のところをr(0<r<1)にして見ると、

ADC = r*ADC + AnalogRead(A0);

で、AnalogRead(A0)の値が一定で、ADCが一定にに収束した状態では、左辺と右辺が等しいので、
(1-r)*ADC = AnalogRead(A0)となり、ADC = AnalogRead(A0) / (1-r)となる。

r=0.9の場合が、上の例なので、そのとおりである。

次に、マイコンの演算として浮動小数点演算は重い場合があるので、ビットシフトで除算相当をやるといいのではないだろうかと思うと・・・・

r=3/4, 7/8, 15/16, 31/32といった(2^n-1)/2^nという値にするとビットシフトで計算できて良いのではと思う。

実際には、
ADC = ADC - ADC>>4 + AnalogRead(A0);
とやると、4bitシフトなので、ADC*(1-1/16)+AnalogRead(A0)という演算と等価のはず。

と、ここまで思ったが、四捨五入問題どうなるんだろうか?

16>>4は1なので16で割ってもビットシフトしても同じ値。
24>>4はやはり1ではあるものの、24/16=1.50なので、四捨五入を食らってしまうので値がずれる。

少数第一まで計算するので、例えば4ビットシフトは16で除算、なので16の半分の8を加算してからビットシフトするとちょうど良くなるのでは無いだろうか。

そうすると、ビットシフト量をsとすると、次のような演算をするのが四捨五入にも対応するようだ。きっとsは固定値だからコンパイラがうまく処理してくれるだろう。

ADC = ADC - (ADC + 2^(s-1))>>s + AnalogRead(A0);

これが、読み取り値の、2^s倍の値になっていることにだけ気をつけたらいい。

 

10進数でも全くおなじことが言える。
1025を100で割ったら10.25で四捨五入して整数にすると10
1051を同上で11
除算前に四捨五入相当するとなると、除算する100の半分の値の50を加算しておいてから100で割って切り捨てると同じことになる。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

メモ(7セグLEDの点灯)

2023年09月10日 15時10分43秒 | Arduino

SpartkFun ProMicroで読み取った電圧を表示するプログラムができた。
ポートの8bitのレジスタを直接いじろうかなとも思ったが、Arduinoのプログラムでは各ボードにデジタルピンなどが割り振られているのでdigitalWrite(pinNo, Bool)のほうが移植性が良いらしいとか。

作って思った、表示桁数は必要な分だけ確保するべきであった。

 

uint8_t Channels[]={2,3,4,5,6,7,8}; //デジタル出力ピンの設定。ドットは別で定義しておこう
//        /-a-/
//       f   b
//      /-g-/
//     e   c
//    /-d-/ .
//Channels 23456789
//7segment abcdefg.
//7セグの配列を入れてある
uint8_t SegmentArray[10][7]=
    {
        {1,1,1,1,1,1,0},
        {0,1,1,0,0,0,0},
        {1,1,0,1,1,0,1},
        {1,1,1,1,0,0,1},
        {0,1,1,0,0,1,1},
        {1,0,1,1,0,1,1},
        {1,0,1,1,1,1,1},
        {1,1,1,0,0,1,0},
        {1,1,1,1,1,1,1},
        {1,1,1,1,0,1,1},
    };

int ADCValue;
int LN2;
uint8_t A;
uint8_t B;

void ShowNum(uint8_t X) {
  //7セグLEDに数字を表示する
  for(uint8_t i=0;i<sizeof(Channels);i++){
    digitalWrite(Channels[i],SegmentArray[X][i]);
  }  
}
void ShowNone(){
  //7セグLED消灯
  for(uint8_t i=0;i<sizeof(Channels);i++){
    digitalWrite(Channels[i],0);
  }  
}

void setup() {
  // put your setup code here, to run once:
  // Serial port setting
  Serial.begin(9600);
//  delay(3000);
  Serial.println("Hello World!");

  //pinMode Setting for a to g LEDs
  for(unsigned char i=0;i<sizeof(Channels);i++){
    pinMode(Channels[i],OUTPUT);
  }

  //Dot Position
  pinMode(9,OUTPUT);

  // 7セグLEDの点灯テスト
  for(unsigned char i=0;i<sizeof(Channels);i++){
    digitalWrite(Channels[i],HIGH);
    delay(100);
    Serial.println(Channels[i]);
    digitalWrite(Channels[i],LOW);
  }

  //0から9までの数字表示の確認をする
  for(uint8_t j=0;j<10;j++){
    ShowNum(j);
    delay(100);
  }
  ShowNone();
  delay(1000);
}

void loop() { 
  // put your main code here, to run repeatedly:
  //ADCで電圧を読んでくる
  // 1V-5Vを0-99%に割り付けた値をXとする(100%表示はしない)
  // Xを10で割った商Aが10の位、余りBが1の位になる。
  // Aを表示,Bを表示,ブランク表示を繰り返す。

  ADCValue = analogRead(A0);          //電圧読み取り
  LN2 = map(ADCValue,205,1023,0,99);  //1-5Vを0-99に割付
  A = LN2 / 10;  //10の位
  B = LN2 % 10;  //1の位

  //debug zone
  Serial.print(millis());
  Serial.print(",ADC Value:");
  Serial.print(ADCValue);
  Serial.print(",LN2 Level:");
  Serial.print(LN2);
  Serial.print(",AandB:");
  Serial.print(A);
  Serial.print(",");
  Serial.println(B);

  ShowNum(A);
  delay(600);
  ShowNone();
  delay(50);
  ShowNum(B);
  delay(400);
  ShowNone();
  delay(300);
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

故障した電源の修理、という名の改造

2023年09月06日 23時54分40秒 | 電子工作

ニコンの金属顕微鏡などに使われている照明ユニットの電源が故障した。
こういうモノで、ボリュームでハロゲンライトの明るさを調整できるような代物である。

 

中身はスイッチング電源と、DCチョッパによる可変電圧回路で特殊なものではなさそう。
Sanden N12V100Wという記載があったので、サンデンという会社がニコン向けに作った12V100Wの電源なのであろう。

裸にひんむいて通電してみる。ヒューズ問題なし、温度ヒューズも問題なしだが、入力のPFC回路っぽいところでのスイッチングが行われておらず、450V耐圧のコンデンサの電圧は100mV、、、ちゃんと電源は100V供給されているのに。

よく見ると抵抗の一部が焼け焦げているようである。コレが原因かは分からないが、ちょっと修理できないかなといった印象である。はんだ付け箇所も溶融凝固を繰り返したのか酸化膜厚めな感じである。これはもしかしたら根本的な問題なのかもしれないので、抵抗張替えよりもうちょっとマシな修理が必要かもしれない。

 

基板をじーっとみる。じっと見るまでもなく、一時側と二次側の境目は明瞭である。二次側が整流だけにしてはモノが多いのでよく見るとチョッパで降圧欠けているような回路のようである。

AC100V → ヒューズ → フィルタ → ブリッジダイオード → PFC? → 400VDC →トランス → 二次側 → チョッパ降圧回路

という流れのようなので、最後のチョッパ降圧回路だけ残してAC100V→DC12Vの回路だけ置き換えちゃえば良いじゃないか。

高圧側、トランスのはんだ付けを外し、のこぎりで基板を切断する。お前も電気をチョッパしていたが、まさか自分がチョッパされるとは思ってもいなかっただろう。

幸い、手持ちに150Wのスイッチング電源がある。COSELのPJA-150F-12があるので、押し込んでみた。

なんという切り貼り。100W電源で十分なのだが、100Wのものは現在在庫がなく、どこも売ってない。
150W→100Wにするとスイッチング電源の全長が20mm減って良い感じなのだが・・・

一旦詰め込みまくって一旦顕微鏡の照明はちゃんと動くようになった。修理時間2時間。

RSで100Wの電源があるので、あとで購入して置き換えておこう。

最後、ロッカースイッチが2mmほど押し込めなかったのだが、100W電源が届くまで待ってほしい。

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする