日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

<< 過去

電気エネルギーが先に決まるということ

プランク定数でキログラムを定義すると言うことはどういうことかをたびたび書いている。

新しいSIの定義は直感的? 直感的ではない? , プランク定数ってそうだったの?

そもそもプランク定数は光の振動数と光量子のエネルギーを結びつける定数で、直接、質量を定義するものではない。

NHKは「簡単に言うと、1キログラムを原子何個分の重さで表すということです」というけど、

これは、精度良く測定されている他の物理定数を使うと、プランク定数と原子1つの質量を結べることを意味している。

日本の産業技術総合研究所は、アボガドロ定数を精度良く測定することで、プランク定数を求め、

これがプランク定数によるキログラム定義に大きな役目を果たしたのだ。と書いた。


プランク定数を求めるもう1つのアプローチとして、ワットバランス法がある。

こちらもプランク定数によるキログラム定義に大きな役目を果たしたアプローチである。

ワットバランス法というのは、電磁力と分銅をつり合わせる天秤だそう。

この手の装置は従来の定義で電流を定めるために使われていた装置に似ている。

というのも、従来のアンペアの定義は電流の流れる導線の間に働く電磁力の大きさを使って定義されていた。

ワットバランス法のポイントは、ここに流す電流をプランク定数を使って決められることらしい。


ここで使われるのが、ジョセフソン効果を使用した標準電圧と、量子ホール効果を使った標準電気抵抗だそう。

あれ? なんか聞いたことあるなと思って調べると、この2つは現在の電気標準を決める上で重要な役目を果たしているものらしい。

ジョセフソン効果を決めるジョセフソン定数は 2e/hで、量子ホール効果を決めるフォン・クリッツィング定数は h/e2 とのこと。(e:電気素量. h:プランク定数)

ここで気づいたが、新しいSIの定義ではプランク定数と電気素量がそれぞれ定義値になる。

ということは、電気標準に使われる2つの重要な定数が定義値になるということである。

でも、実はすでにこの2つの定数は実務上は定義値らしい。

そこで、1988年に国際度量衡委員会(CIPM)は電圧標準供給における実用上の協定値として、KJ-90=483597.9GHz/V という値を、1990年1月1日より世界中で統一して用いることを勧告しました。この値不確かさをもたない定義値として、量子ホール抵抗標準におけるフォンクチッツィング定数の協定値RK-90 とともに、電気標準体系において今日まで用いられています。

(Calibration (産業技術総合研究所 物理計測標準研究部 量子電気標準グループ))

すなわち、今はアンペアの定義を天秤で決めるということはやらないんですね。この定数を使って標準電圧・標準抵抗を作ればOKと。

今後は名実ともに定義値になる。厳密に KJ=483597.8484[GHz/V]ですね。


すなわち、ワットバランス法でキログラムを決める場合は、まず最初に電圧の単位Vと抵抗の単位Ωが先に決める。

これにより電流と電圧を精密に測定できるようになる。

ワットバランス法で質量を決める方法は次の通りである。

  1. ある磁場Bの中で、長さLの導線に電流Iを流したときの電磁力が質量mの分銅とつりあうと BLI=mg (g:重力加速度) の式が成り立つ
  2. 同じ磁場Bの中で、長さLの導線を速度vで動かしたときの起電力Uを測定すると、 U=BLv の式が成り立つ
  3. 1, 2の式から UI=mgv の関係が成り立つ

重力加速度g、導線を動かす速度vは精密に測定できる。

あとは 導線に流した電流 I と導線を動かしたときに発生した起電力 U を精密に測定すればよいわけだ。


僕が最初にプランク定数でキログラムを決めると聞いたとき「まずエネルギーの単位 Jが決まり、それからkgが導かれる」と書いたけど、

ワットバランス法で質量を決める場合は、まさにそうなってるよね。

電流Iと起電力Uのかけ算って電力(時間あたりの電気エネルギー)ですからね。エネルギーを決めて質量を決めるということだから。

どちらかというと、こちらの方が質量標準のメインになりそうではある。


それにしても電気関係の単位はすでに電磁力の測定ではなく、物理定数と量子デバイスで標準器を作ってやってたとはね。

アンペアの定義が変わることについて、影響はほとんどないと言っていたけど、そりゃそうだ。

実質的には28年前の1990年から先取りしてやっていたわけだから。

取り残されていたのはキログラムばかりという感じもするが、分銅を上回るのは意外と難しかったということなんだろう。


Author : hidemaro
Date : 2018/11/23(Fri) 00:11
電気・数学・物理 | Comment | trackback (0)

解体しきれないプリント板

最近、職場の大掃除をして、古い製品や試作品などの不要品が大量に発生した。

社内のリサイクルセンター(ようはゴミ置き場)に持って行くためには、これを分別しなければならない。

解体して、プラスチック、金属、プリント板を分別している。

実はリサイクルセンターに有償で依頼すると解体をやってくれるらしいんだけど、

一方で大半が自分たちがよく知っている製品なわけで、分解もそう難しくない。


そんなわけで解体をしていたのだが、中には首をかしげるようなものもある。

端子台のついたユニットが捨てられていて、これを解体しようと思った。

まず、プラスチック製のフタを外した。するとプリント板が見えたのだが、

このプリント板、端子台の付いたプラスチック筐体と分離することができない。

変だなぁと思って詳しい人に聞いてみると、どうも端子台のついた筐体にプリント板を手ではんだ付けしてあるらしい。

というわけで、筐体部分まで含めてプリント板として処分することになった。分解できないんだから仕方ない。


リサイクルという点ではあんまり問題はないのかなと。

そもそもプリント板はプラスチックと金属の複合材ですからね。それを前提としてリサイクルが行われる。

当然、先に分離出来ればそれに越したことはないけど、どうせリサイクルプロセスの中で分離されるでしょうしね。

この前処理をどの段階でやっているかはよくわからないけどね。

リサイクルセンターの中でやっているのか、一切合切を引き受けた業者でやっているのか。

プリント板だと言い張れる状態にさえしてしまえば、リサイクルセンターには引き受けてもらえるので。


最近の製品だとプリント板に端子台を取り付けて、これを筐体に取り付けるというやり方をしている。

この方法であれば、プリント板に端子台を差し込む部分は手作業だが、そこからはんだ槽に入れればはんだ付けが完了する。

それを筐体に取り付けるのも、最近はネジを使わずに取り付ける方式が多くなっている。

コツはいるけど、解体もマイナスドライバー1本でガンガン解体していける。

すき間からプリント板が垣間見れるが、それはそういうものということで。


端子台を埋め込んだ筐体を作って、そこにプリント板を手ではんだ付けというのはいかにもめんどくさそうである。

外からの見た目はきれいなんだけど、それが目的だったかはよくわからない。

今の感覚からすればいかにも作りにくそうなんだよね。

もしかすると、当時は端子台関係のはんだ付けはどれもこれも手作業でやっていたのかもしれない。

だから、こんな構造でもあまり問題視はされなかったのかなぁと。


1世代前の製品はネジと放熱用のアルミ板が多くて、それはそれで手を焼くところ。

いかにも大きなアルミ板が見えているところとか、ネジを外さないとプリント板にならないところは頑張って外すけど、

あんまり細かいところはもういいかと妥協している。


Author : hidemaro
Date : 2018/11/21(Wed) 22:53
電気・数学・物理 | Comment | trackback (0)

プランク定数ってそうだったの?

新しいSIの定義が一般のニュースにも出てくるようになってきた。

キログラムの定義がプランク定数に変わるというのはやはり大ニュースである。

新しいSIの定義は直感的? 直感的ではない?

このことについてNHKの番組では「簡単に言うと、1キログラムを原子何個分の重さで表すということです」と説明していた。

え? プランク定数でキログラムを定義するってそういうことなの?


プランク定数は光の振動数と光量子のエネルギーを結びつける定数だ。

時間と長さの定義が既知ならば、エネルギーと質量を結びつけることはできるので、それでキログラムが定義できるのだろうと。

というわけで、僕の理解としては、次の通りだった。

まずエネルギーの単位 Jが決まり、それからkgが導かれるという言い方が多くの人にとって理解しやすいのではないでしょうかね?


そこで気になって調べたところ、NHKの説明はそう間違っていないことがわかった。

リュードベリ定数という原子の光の吸収・放出に関わる係数がある。

このリュードベリ定数は非常に精密に測定されていて、この定数を介してプランク定数と電子の質量を結びつけることができる。

このようにプランク定数は間接的に電子1つの重さを表すことが可能なんだそうだ。


さらにその延長でアボガドロ定数とプランク定数を結びつけることも出来る。

日本の産業技術総合研究所は、アボガドロ定数を精密に求めることでプランク定数を精密に求めた。

これが他の方法(ワットバランス法)で測定したプランク定数とよく一致したそうだ。

複数の研究機関で測定された定数がよく一致していたことは、kgの定義をプランク定数に乗り換える大きな理由になったそうだ。

2017年、産総研を含む各国の国家計量標準機関が測定したプランク定数の値から調整値が決定されました。このとき使用されたデータは8つですが、産総研は実にそのうちの4つの測定に関わっています。そして、このプランク定数の調整値を用いてキログラムを新しく定義することが本日決定されたのです。プランク定数は不変であるため、より信頼性の高い質量の測定が可能になります。

(速報!国際度量衡総会において新定義採択 (産業技術総合研究所))

ちなみに、アボガドロ定数からプランク定数を求めるというアプローチは専ら産総研が主導してやっていたらしい。


そういう視点で、kg以外で定義が変わる単位を見てみると、

  • A : 電子1粒の電気量を決めることで電流を決める
  • K:  分子1つの熱エネルギーを決めることで温度を決める
  • mol: 原子・分子の数で物質量を決める

ということで、いずれも電子・原子・分子1粒を単位にして定義を刷新するってことなんですね。

従来、電流は電磁力を使って、温度は水の三重点温度を使って、molは炭素12の重さを使って、kgに至っては分銅で定義されていた。

これらは現実的な方法ではあったけど、ミクロの世界が見えてくると不都合も出てきたのだろう。

今後はミクロな世界の基本定数が定義値になり、それを積み重ねることで日常生活で使う単位になるということだ。


kgの定義が変わったところで、我々が普段使う測定器の校正は分銅を使ってやるみたいなんですけどね。

mが光速度を使った定義になって長いけど、現在も結局は基準尺であったりブロックゲージというものを使って校正している。

ただ、これらの標準器は本来の定義に基づいて校正されているので、最終的にはつながっている。

特に今回のkgの定義変更は、分銅を永遠に同じ重さに保ち続けられるという点ではとても重要で、

実際に、これまでも国際キログラム原器の重さがわずかに変動するという問題に直面していた。

本当にわずかだから実用上の問題はほとんどなかったけど、今後は心配無用となる。

一方で、これまで分銅では測りにくかったミクロな世界では、新しい定義がどんどん活用されることになる。そこは全く新しい道。


Author : hidemaro
Date : 2018/11/20(Tue) 23:13
電気・数学・物理 | Comment | trackback (0)

なぜこの会社がセミナーに

今日は展示会にでかけていたのだけど、

その展示会のセミナーの登壇者に意外な会社の人がいた。

よく知ってる会社なんだけど、どう考えてもこの分野じゃないよねと。

実際、出展者リストを見てもこの会社はなく、出展者としてセミナーに登壇しているわけではないらしい。


他にもいろいろ気になることがあって、このセミナーを聞きに行った。

セミナーに参加してわかったのは、どうもこのセミナーはとある新しいアーキテクチャについてのもので、

そのアーキテクチャの応用に取り組んでいる人たちを集めて今後の展望について講演してもらったようだ。

確かにそのアーキテクチャの名前を調べてみると出てくる企業・団体の人を集めたことがわかる。

その中には出展者もいたけど、大半は出展者ではなかったので、そういうことなんでしょう。

よく知っている会社というのも、自社の商売への将来的な応用を検討していたようだ。


そういう視点でセミナーの一覧を見てみると、

確かに大半は出展者が自社製品に絡めたセミナーを行っているのだけど、

中にはそういう商売とは無関係に技術動向を紹介したりするセミナーもあった。特に研究機関だよね。

あと、よくよく見てみると、まさにこの分野の会社でも展示は出していないけど、セミナーだけは参加しているという会社もあった。

言われて見ると確かに展示にはいませんでしたね。どこかにはいるものだと思っていたけど。


主催者としてもいろいろ意図はあるんだろうなと。

出展者の商売につなげるのが最大の目的ではあるけど、

そのためのストーリーを作るのに出展者以外にも依頼してセミナーで講演してもらってとしているんだろう。

最初に書いたセミナーなんて、今すぐ出展者の商売になるという感じではなかったけど、種まきとしては意味があるのかなと。

まぁ不思議な気はしたけど、参加してみたらなるほどなという感じでしたね。


Author : hidemaro
Date : 2018/11/14(Wed) 23:42
電気・数学・物理 | Comment | trackback (0)

E6系列が大好き

仕事してると、なんでこんなことにこだわるんだろって話はいくらでもあるんだけど、

その1つがやたらとE6系列の抵抗だけに収めたがるということ。

E24系列ならわかるんだけど、E6系列ってどんな縛りだよ。


抵抗の抵抗値やコンデンサの容量のラインナップは等比級数で決まっていることが普通だ。

その中でもよく使われているのがE系列と呼ばれるもの。

抵抗値の表示方法 (KOA)

抵抗について言えば、よっぽど精密な抵抗を除いてはE24系列のラインナップを持っていることが多い。

E24系列は 10, 11, 12, 13, 15, 16, 18, 20, 22, 24, 27, 30, 33, 36, 39, 43, 47, 51, 56, 62, 68, 75, 82, 91 という数列だ。

これは10から100を24分割した等比数列で、概ね 101/24=1.10倍おきに数字が並んでいる。

すなわち 8.2kΩ の次に大きいのが 9.1kΩ、その先は 10kΩ、11kΩ と続く。

ここにない数字の抵抗は入手性がよくないので、500Ωが欲しい場合でも、そこに近い 510Ω か 470Ω を選ぶことになる。


で、最初に書いたE6系列というのは 10, 15, 22, 33, 47, 68 という数列。

これは10から100を6分割した等比数列で、概ね 101/6=1.46倍 おきで並んでいる。

コンデンサについて言えば、E6系列が標準的なラインナップらしい。

許容差が大きいので、あまり細かくしても仕方ないのが実情なんだろう。

確かに大半の回路はこの数字だけでも設計出来るんだろうと思う。


とはいえ、もっと細かく数字を決めたい場所もある。

そういうところではE24系列の抵抗の出番……とはあまりならない。

実はうちで開発している製品では、E6系列の抵抗を2つ直列にして対応することが多い。

すなわち 約80kΩ が必要な場所では、68kΩ+10kΩのように2つの抵抗を直列にすると。

一般的にはE24系列の中から 82kΩなどを選ぶんじゃないかなぁと思うんだけど。

ここまでE6系列にこだわるのは生産上の都合で、むやみに部品種を増やしたくないという意図なのだろう。

ただし、全く使わないわけではなく、実際に510ΩはE6系列ではないが時々使われているようだ。

とはいえ、E6系列の抵抗に比べるとはるかに使用頻度が低く、職場にも常備していないので困るんだけど。


さて、先日、古い検査装置に改造が必要だという話を書いた。

検査装置も古い

この問題の回避策はいくつかあるのだが、一番簡単な方法が抵抗値を変更するという方法。

変更後の抵抗値が 2.5~2.6kΩ ぐらいの範囲になればよい。

とはいえ、この職場で常備している抵抗は専らE6系列だけで、E6系列にはそんな抵抗値はない。

というわけで、2.2kΩ+330Ωで2.53kΩを作って対応したそうだ。やっぱりそうなるよね。

もっともE24系列でもこの範囲に入る抵抗はないのだけど。

ただ、2.7kΩはギリギリ許容範囲に入ってたはずだから、E24系列を前提にするなら、それでと言ってたかも。


こんな職場ですから、E6系列の組み合わせで欲しい抵抗値を作るのも慣れましたね。

とある試験で1.1kΩが必要なことがあって、E24系列なら1本で済むんだけど、

E6系列の抵抗しか在庫がないので、こういうときは2.2kΩを2本並列にするんですね。

よく使うなら1.1kΩぐらい買えよって話ではあるんだけど、めんどくさいんでしょうね。

E24系列なら普通に入手できるので、大量に使うことがあれば買うんでしょうけど。

実際、750Ωは過去に大量に必要だったときに購入したようだし。


Author : hidemaro
Date : 2018/10/26(Fri) 23:32
電気・数学・物理 | Comment | trackback (0)

無電源で動いていた

新製品が発売されることもあれば、古い製品が生産中止になることもある。

自社製品の生産中止の予告が出ているから見てみると、僕が今の勤務先を知るきっかけになった製品が生産中止になるようだ。

古い製品とは思っていたが、同種の製品全部が近年中に生産中止とのことだ。

なお、知るきっかけになった製品ではあるが、違う事業部門なので、現在の仕事との関係は全くないと言ってよい。


古い製品ではあるが、以後の製品にはない特徴もある。

それが無電源で動くこと。もっとも、無電源がゆえのデメリットも多いのだが。

無電源なので、電源が取れないところでも使えるというメリットはあったようだが、

実際のところ電池駆動なら全く問題なくて、むしろそっちの方が便利で、すでに広く使われている。

というわけで、生産中止になる製品の代替機種としては電池駆動の機器が示されていた。

今さらの話ではあるけど、メーカーとして代替機種を示すならこうなるよね。

もっとも、価格的な問題で他社製品を代替に選ぶ可能性も高いが。


ところが、一部の機器については、代替機種が電池駆動でなく商用電源のものが記載されていた。

代替機種自体はうちの定番製品で競争力も高い。だから、真っ当な後継機とも言えるのだけど。

実態として、電源の取れないところで使われることはあまりないとは思うが、

従来、無電源で使うことを目的で使っていたとすると代替にはならない。


本当に代替がないのか、と自社製品のラインナップを調べたところ、似たような機能をもった電池駆動の製品はあった。

持ち運んで使うのに便利なようにいろいろ工夫されており、実用面では便利そう。

ただ、使い方がかなり違うので、従来の使い方を単純に置き換えられるという点では先の代替機種の方が合っている。

そういう判断で商用電源タイプの製品を代替機種に示したのかな。


昔はいろんな機器が無電源で動いていたんだよね。

今や多くの機器が電気を必要として、たいていマイコンが入ってたりするんだけど。

無電源という1点においては、古い製品にかなうところはないのが現実である。

ただし、その他においては、現在のデジタル技術を駆使した製品は優れたものになっている。

そんなのはいまさらの話だけど。


Author : hidemaro
Date : 2018/10/23(Tue) 22:26
電気・数学・物理 | Comment | trackback (0)

検査装置も古い

今、古い製品の再設計をやっているんだけど、

大きな懸念だったのが、検査装置が流用できるかどうかということ。

製品が古いということは検査装置も古いから。


その検査装置を工場から持ってきてくれたのだが、検査項目に対してコンパクトである。

素直に検査項目を実現しようとすると、いろいろな機器を並べてやらないといけないと思うんだけど、

どうもそういう周辺機器を検査装置の中で模擬しているらしい。

さらにこの検査装置を使う場合、検査工程のほとんどを全自動でやってくれるのだという。

オールインワンで全自動というと、検査装置としては申し分ない気がするが、製品の再設計にとっては不都合だ。


再設計を進めている製品には、現在は使用されていない機能がいくつもある。

本当ならばその機能を削除してもよかったのだが、実際に削除しなかった。

なぜならば、検査装置ではもはや使用していない機能の検査も行っているから。

そこまでした理由は検査装置が古すぎて大きく手を加えることが難しかったから。

このように、できるだけ従来の検査装置を流用することを意図して再設計を進めたのだった。


というわけで、検査装置に試作品を取り付けて、検査を通してみたのだが、途中で止まってしまった。

止まってしまった検査項目を調べると通信系のテストで、確かに通信がなにかおかしいらしい。

通信線の波形観測などを行った結果わかったのは、検査装置の内部で通信相手を模擬しているのだが、通信バスの仕様違反になっているということだった。

再設計時に変更したところではあって、バス仕様に照らして問題ないから変更しても問題ないと考えていたし、

本来想定されている通信相手とは全く問題なく通信できているので、問題になるのは検査装置だけ。

パラメータの微修正でこの問題は解決したのだが、まさかこんなことになってたとはなぁ。


修正後はこの検査をパスするようになったのだが、次の検査項目で止まってしまった。

エラー表示を見ると「○○の電圧レベルがNG」ということがわかった。

確かに再設計後の回路は○○の電圧がおかしいという問題があって、現在調査中なのだが、一方で判定値から外れるほど悪いとも思えなかった。

本当かなぁと思いながら、○○を回路から切り離して、外から電圧を印加したのだが、規定の電圧を印加してもNGのまま。


検査装置の設計資料をいろいろ掘ったところ、検査装置に搭載されているマイコンの資料が見つかった。

マイコンのアセンブラのコードと説明資料があったのだが、この説明資料にはピンポイントで ○○の電圧レベルの検査について書かれていた。

どうも、過去にこの検査でNGになる製品が多発したようで、その対策として判定方式に少し変更を加えたそうだ。

そのときに、この検査の原理なども含めて詳細に書いてくれてあったのだ。

他の検査は詳しい原理を一切書いておらず、アセンブラを解読するしか手がないところだったのだが、不幸中の幸いだった。


その結果わかったのは、この検査装置では○○の電圧レベルを間接的に測定しており、製品の内部回路に依存しているということ。

そして、その回路について、再設計時に手を加えていて、その結果としてNGになってしまったということだ。

設計変更した理由は部品供給性の問題だったようだ。

まさか、この設計変更が検査に影響するなんて、誰も予想していなかった。

検査手順には○○の電圧レベルを直接測定するように書いてあるし、検査装置の説明書にも間接的に測定していることは書かれていない。

もしも、この回路に依存していると知っていたら、設計変更するにしても、検査に影響しないように対策することはできたと思うのだが。


この問題について試作品のマイコンで暫定対策を行ったところ、残る検査はすべてパスした。とりあえず一安心ではある。

この暫定対策は再設計後の製品ではほぼ問題にならないので、これを恒久対策にしてもよいのでは? とも思ったのだが、

将来的に用途が拡張されたりすると問題になりかねないので、チームリーダーはこの対策に慎重である。

一方で、生産技術の担当者は、検査装置に改造を加えることで、この問題を回避することも考えているようだ。

というわけで、この暫定対策は製品には採用されない可能性が高まっている。


本来であれば、検査装置に搭載されているマイコンのプログラムを修正するなどするべきだと思うのだが、

なにぶん古い検査装置なので、マイコンの開発環境などももはや失われてしまっている。

じゃあ、全く新しく作り直すかというと、それはそれで費用も時間も労力もかかる。

幸い、検査でNGになる要因が明らかになったので、ピンポイントでの対策が可能になったので、

検査装置のプログラムに手を加えない範囲の改造でなんとかできるんじゃないかとなっている。

邪道ではあるけど、もともと検査のやり方は邪道だったので仕方ない。


最初に検査NGになったときには、これは迷宮入りかと思ったのだが、

結果的には1日でNG要因を全て洗い出して、それさえ修正すればあとはOKとわかったのはよかった。

とりあえず一安心。


Author : hidemaro
Date : 2018/10/18(Thu) 23:54
電気・数学・物理 | Comment | trackback (0)

ゴミデータが残っちゃう

今日は先週末に発見したバグを修正していた。

マイコンの通信ペリフェラルに関するバグなのだが、意外なバグだったので。


このシステム、送信中に特定の事象が発生した場合は、その時点で送信を停止する仕組みがある。

ただ、この送信を停止する条件というのは、通常あまり考えられないことで、さらに言えばなにもせずとも受信側で破棄されるはず。

だから、この仕組みの必要性はよくわからないのだが、現行品にある仕組みだし、特に害があるわけでもない。

それで実装したのだが、送信中を停止するということにちょっと問題があったわけだ。


どういう問題かというと、次の送信時、最初に1バイトのゴミデータが付いてしまうのだ。

あれ? 送信停止時にFIFOクリアはしたはずなのにと思った。

このマイコンの通信ペリフェラルは送受信用のFIFOを備えており、数バイト分の送受信データを格納することができる。

送信停止した時点で、FIFOに格納された送信予定のデータはクリアしたのに、ゴミデータが1バイト残ってしまったと。

おかしいなぁ、とマイコンのペリフェラルマニュアルをよく見ていたところ理由がわかった。

FIFOとは別にある送信バッファに1バイトだけ送信予定データが残っていて、これだけ消せていなかったのだ。


どんなマイコンの通信ペリフェラルでも1バイト分の送受信バッファは備えているはず。

送信時、送信バッファからデータが転送されると、送信バッファエンプティフラグが立つ。

エンプティフラグで割り込みを発生させたりして、次の送信データを格納する。

前のデータの送信完了までに格納完了できれば、切れ目なく次のデータの送信に移れるわけである。

FIFOを使う場合は、FIFOから送信バッファへの転送を自動でやってくれるが、原理的には同じこと。

こういう仕組みなので送信中はほぼ常に1バイトのデータが格納されているわけだけど、

送信中に送信中断すると、1バイトのデータがバッファに残った状態になる。これが次に送信するときに吐き出されてしまうようだ。


いろいろ調べたところ、このマイコンの通信ペリフェラルでは送受信バッファを単独でクリアする手段はないようだ。

ただ、通信ペリフェラル全体をリセットする機能があるので、これを使えば送受信バッファを含めて全てが初期状態に戻る。

送信を中断するような事象が発生したときは、受信も停止するので、送受信の両方を初期化しても不都合はない。

というわけで、送受信停止を通信ペリフェラルのリセットに置き換えたところ、この問題は解決したのだった。


送信中に送信を中断するというのは、あまりやらないんじゃないかなぁ。普通は送りきるところまではやるだろう。

一方で、同製品のアセンブラ時代の設計を掘ってみると、送信の中断の実現方法が違うんだよね。

この当時は1バイトずつデータを送信バッファに格納してるんだけど、送信バッファへの格納をやめるという方法で送信を中断している。

すなわち、バッファにあるデータを吐き出しきったところで送信中断する仕組みになっていた。

意図してか、意図せずかはよくわからないが、同種の問題は回避出来るようになっていた。

今回も同様の解決法でいけるのでは? と思ったが、FIFOとの兼ね合いを考慮するとなかなか難しいので、全部リセットするという方法で解決した。


それにしても、なぜ送信バッファを単独でリセットする仕組みがないのだろうか?

いろいろ考えてみたのだが、おそらく上書きすることが可能だからだろうな。

すなわち、ゴミデータが送信バッファに入った状態でも、送信データの1バイト目を送信バッファに転送→送信開始とすれば、

ゴミデータを追い出した上で1バイト目のデータから送信できる。

これを 送信開始→1バイト目をバッファに転送 とすると、送信開始の時点で格納されているゴミデータが吐き出されてしまうのだが。

だから、一応は回避策はあると。やや複雑な操作が必要になるケースもあるかもしれないが。


似たような話が受信バッファでもあって、

  1. フレーミングエラーが発生して割り込み発生
  2. エラーはクリアして、受信も停止する
  3. 通信状態を初期状態に戻して、受信を再開する
  4. 受信を再開した途端に、受信割り込みが発生して、受信バッファからゴミデータを取得する

これ、2.の時点で受信バッファを空にし忘れたのが原因なんだよね。ゴミデータが残ったまま受信を再開しちゃったと。

他のシステムの同種の処理を確認してみると、後で受信バッファのダミーリードを追加した痕跡があった。

わりとハマりがちなミスなんだなと思いつつ、同じ方法で解決したが。


Author : hidemaro
Date : 2018/10/10(Wed) 22:13
電気・数学・物理 | Comment | trackback (0)

デバッグは順調なんだけど

おととい試作品を入手して、デバッグして、一通りの機能の動作確認ができたので、今日から結合テストに入った。

大した機能がないので、結合テストというほどか? という感じもあるけど。

形式上はここまでの動作確認とデバッグが単体テスト、それが完了したから結合テストという説明はできる。


ハードウェアに依存しない機能はすでにエミュレータでの単体テストで一通り見た。(cf. エミュレータでの単体テストは好調)

試作品入手後から今までに修正したバグは全てハードウェアに依存する部分の問題だった。

一番多かったのがレジスタの設定ミス。ハードウェア設計終盤でポート割り付けが変わったのが反映されてなかったのもあった。

次に多かったのが正論理と負論理を間違えていたところ。

わりと気づきやすいミスではあって、回路図の理解が間違えていたり、途中で設計変更されたりして発生したようだ。


逆に原因が追いにくかったのが、処理順序のミス。

特定の条件のとき、シリアル通信でフレーミングエラーが起きまくるので、波形を測定したら正しい波形で、

なんでこれでフレーミングエラーになるんだ! と思ったら、受信開始のタイミングが間違えて、通信を途中から取り始めていたとかね。

よく考えれば当たり前のことなんだけど、実機を持って来ないと気づきにくい。

タイミングチャートには正しくかかれているのに、実装が間違えてるとかね。


マイコンがプログラムが書かれないとクロックの発振すら始まらないということで、

ハードウェアの動作確認もマイコンのデバッグをしながらやることになったが、

詳しい測定などはしていないが、ほとんど問題なく動いているように見える。

とはいえ、回路定数に1箇所ミスがあるのは発見しているし、他にも1箇所怪しいところもあるので調査するべきと考えている。

そこはハードウェア評価で早々に解決して欲しいと思っているのだが、どうもハードウェア評価の準備が遅れているようだ。


試作品は届いたが、それを動かすための周辺器具などが遅れているようで、

現時点で全て揃っているのが1つしかなく、これをマイコンのデバッグ用に使っているからというのが1つ。

この試験系を構築したのは主に僕なんですけどね。設計変更前の現行品の挙動を調べるために作ったんだけど。

もう1つの要因が評価計画の作成が遅れているから。担当者の夏休みが9月に集中したのもあるようだが。


というわけで、試作品到着後に評価計画のレビューをやりはじめるという。

本来は試作品が来る前に段取りをしてやるべきだと思うんですけどね。

そのレビューも試験系の妥当性で紛糾するという。

まだ、ハードウェアの評価計画は承認されないままで、開始は遅れそうだ。


ハードウェアの修正をしないとなにも進められないという状況ではないのが幸いだが、

お互い同時進行で進むと思っていたら、マイコンが先行し、ハードウェアの方が遅れることになりそうだ。

ハードウェアの問題を発見する可能性も高くなるが、まぁ仕方ないか。一蓮托生だ。


Author : hidemaro
Date : 2018/09/28(Fri) 23:11
電気・数学・物理 | Comment | trackback (0)

遅くてもROM書き換えできるだけマシ

工場で基板に実装済みのROMを書き換えたいという話が出ている。

以前もあった話で、手順を教えてやってもらったところ、失敗したという経緯がある。

(失敗した基板は製品にできないので捨てられた)


この基板に実装済みのROMを書き換えるのは複数のデバッグ機能を組み合わせて使う都合、いろいろな問題がある。

  1. ROM書き換えに使うデバッグ用ツールの操作が煩雑
  2. ROM書き換えに約30分かかる(その代わり、同時に十数枚の書き換えができる)
  3. 同時に複数枚書き換えても、ベリファイは代表の1枚にしか行われない

1.は工場で失敗した最大の要因だ。開発者にとっても操作がめんどくさくて困っている。(使用頻度はさほど高くないが)

2.はROMデータの転送が遅いんだよね。アーキテクチャ的な問題もあるのだが、デバッグ用機能だったというのもある。

デバッグ機能なので転送速度は求めておらず、他の機能に干渉しないことを重視しているというのもある。

これでも改善した方で、当初は同時に1枚だけしかできず、1枚で約30分ということで本当に割に合わなかったが、

補助器具を用意することで、複数枚同時にROMデータの書き込みができるように改良され、フル実装すれば1枚あたり2分程度でそれなり。

ところが、その代償として、3.に書いたベリファイが不十分という問題が生じた。


次に工場でROM書き換えするときにはこの問題を解決しないとなぁということで、こういう対策をすることになった。

  1. デバッグ用ツールのサブセットとして、ROM書き換え専用ツールを作る
  2. データ転送シーケンスの見直し + ベリファイをターゲットボード上でやらせる
  3. 補助器具を改良して、ライトは一括、リードは個別でできるようにする

1.は工場で失敗したという話を聞いたときに作りかけていたので、これを完成させて使ってもらうことにした。

2.の対策は2つある。

1つはデータ転送に専念させることで高速化しようということ。少し速くなった気もするが、残念ながら、期待したほどの差は出なかった。

転送方式を抜本的に見直せば、高速化できそうなんだけど、そこまで無理しなくていいかなと。

もう1つが全体のおよそ半分を占めるベリファイを、書き込んだROMデータをPCに吸い上げてチェックする方式から、

ターゲットボード上でマイコンにチェックさせる方法に改めた。これだとチェック結果をリードするだけなので、圧倒的に速くなる。

この対策をすることで、3.のベリファイが1枚しかできないという問題も解決できると思っていた(時間だけの問題だと思っていた)のだが、

補助器具の設計にも問題があったので、リードは1枚ずつ個別にできるように改良した。


この改良の結果、ROM書き込みに要する時間は十数分となってほぼ半減した。フル実装すれば1枚あたり1分未満だ。

さらに全部にベリファイができるようになって、信頼性が高まるのかな?

ここでしくじっても、この後の製造検査でROMの検査もするので、大丈夫だと思うけどね。

とはいえ、普段、ROMライターで書き込む時は1つずつベリファイやってるんだから、1枚ずつベリファイするのがあるべき姿なのは言うまでもない。


ところで、マイコンが自身のROMを書き換える場合、書き換え用のプログラムをRAMに置く必要がある。

なので、こういう手順でROMの書き換えを行っている。

  1. メンテナンスモードに切り替える
  2. フラッシュドライバのプログラムデータを転送して、RAM上に展開する
  3. RAM上のフラッシュドライバにジャンプする
  4. ROMのプログラムデータを消す
  5. 書き換え用のプログラムデータを転送して、ROMに書き込む
  6. 書き込み完了後にROMデータのCRCを計算する (★今回追加)
  7. ソフトリセットを行い、ROMから通常通りに起動させる

1~3は書き換え前のマイコンにあるプログラムの機能で、4~7は2.で転送したフラッシュドライバの機能で実現されている。

けっこう複雑な仕組みなのだけど、少なくとも1~3の機能はあらかじめ作り込まれていないと通信経由での書き換えはできない。


仕組みを知っている人にとっては当たり前なのだが、工場の人はこういう背景を知らないので、

なにも書き込まれていないROMにこの方法で書き込めると思ったようだが、そういう風には作っていない。

基板実装後にまっさらのROMに書き込む方法もあるけど、工場で使うことは全く想定されていない。

工場で使うことを想定していないのは、大量生産を考えるとROMライターで書き込む方法にはかなわないという事情もある。

ただ、工場としては、ROMライターで書いて、プリント版に実装して、とやるのは管理上めんどくさいのも確からしい。

だから臨時で、基板実装後にROMを書き換えたいという要望が来たんだけど。

でも、そのために非定常作業が発生するのはどうなんですかね? 僕はそっちの方がめんどくさいと思うんだけど。

こちらは技術的に可能だし、ツールの改良はもともと着手していたので、じゃあ準備しますという話だけど。


Author : hidemaro
Date : 2018/09/19(Wed) 20:47
電気・数学・物理 | Comment | trackback (0)

Tools