第3回関西 組込みこぞう勉強会 御礼と訂正

241 views
Skip to first unread message

murawski

unread,
Jun 16, 2012, 11:04:26 PM6/16/12
to 組込みこぞうの会
神戸市の村脇です。

皆様、昨日は御指導御鞭撻頂き有難う御座居ました。
御陰様で、簡単な改良で、処理系非依存に書き直す事が出来ました。
改めて御礼申し上げます。

また、「トラ技に付録基板が付く様になったのは、いつからか?」という御質問に対し、

「1990年代から。」

と回答したのは、付録基板と付録CDを混同した事による誤回答でした。正しくは、

「付録基板は、2004年4月号。 付録CDは、1996年9月号。」

だと思います。(尚、調査対象は月刊誌のみで、臨時増刊号等は調べてません。)

P.S.

1996年1月のデザインウェーブ創刊号にCDが付いてますので、弟分の方が兄貴分より先にCDを付録していたみたいです。

村脇順一

unread,
Jun 17, 2012, 1:05:49 PM6/17/12
to 組込みこぞうの会
自己フォローです。

17日のミーティングで頂きました御指摘に従って修正してたら、更なる簡素化もついでにできてしまいました。
動作確認が済みましたので、報告させて頂きます。

最終的に全ソースコードは次の様になりました。(Arduino 1,0,1のスケッチです。)

URL: http://www.felix.or.jp/MPU/Exp/RotEnc/Akidukino-RE01-Sketch.jpg

超簡単なので、他のMPUや言語へのポートも問題無いでしょう。

2012年6月17日 12:04 murawski <j.mur...@gmail.com>:

kaz zanak

unread,
Jun 18, 2012, 10:36:30 AM6/18/12
to kumiko...@googlegroups.com
こんばんは
奥井です。

コード見せて頂きました。
これはロータリーエンコーダが回った(割り込み)時だけrotary_change()が呼ばれてカウント値を変更させるんですね。
Propellerは割り込みがないのでこのコードは使えませんねえ。
変り者CPUなので仕方ありませんが。

2012/06/18 村脇順一 <j.mur...@gmail.com>:

murawski

unread,
Jun 19, 2012, 1:04:23 AM6/19/12
to 組込みこぞうの会
村脇です。
御意見有難う御座居ます。

> これはロータリーエンコーダが回った(割り込み)時だけrotary_change()が呼ばれてカウント値を変更させるんですね。

そうです。A・B相の上下のエッジトリガで割り込みます。
グレイコードが1周する間に4回割り込むので、4逓倍とか云うらしいです。
割り込みピンを2つも使うのが勿体無ければ、2逓倍にするという手もあります。
その時は、旧B相の値を保存しておく必要もなくなるので、もっと簡単になります。
2逓倍を1逓倍に落としても、更に簡単になるという事はないと思います。

> Propellerは割り込みがないのでこのコードは使えませんねえ。

ちょっと言葉足らずで、失礼しました。
これだけ簡単だと、ハードウェアへのポートも容易です。
A・B相のエッジトリガでタイミングパルスを生成したら、XORゲートとD-FF位で出来てしまいます。
割り込みが使えない場合は、カウンタも要るかな?
尤も、μPD4702とかの既製品を用いた方が、簡単・安上がりですから、勧めはしませんが。

当然、H8の様な位相計数モードを持っているMPUにも御勧めしません。

謎は、
「ネット上で公開されているコードは、皆さん揃いも揃って、複雑な処理をして居られるのは何故?」
という点に尽きます。

私の処理にバグがあるのかと心配になります。
しかし、既に1年半以上使用していて、特にオカシイと感じた事はありません。

On 6月18日, 午後11:36, kaz zanak <caskaz...@gmail.com> wrote:
> こんばんは
> 奥井です。
>
> コード見せて頂きました。
> これはロータリーエンコーダが回った(割り込み)時だけrotary_change()が呼ばれてカウント値を変更させるんですね。
> Propellerは割り込みがないのでこのコードは使えませんねえ。
> 変り者CPUなので仕方ありませんが。
>
> 2012/06/18 村脇順一 <j.muraw...@gmail.com>:
>
>
>
>
>
>
>
> > 自己フォローです。
>
> > 17日のミーティングで頂きました御指摘に従って修正してたら、更なる簡素化もついでにできてしまいました。
> > 動作確認が済みましたので、報告させて頂きます。
>
> > 最終的に全ソースコードは次の様になりました。(Arduino 1,0,1のスケッチです。)
>
> > URL:http://www.felix.or.jp/MPU/Exp/RotEnc/Akidukino-RE01-Sketch.jpg
>
> > 超簡単なので、他のMPUや言語へのポートも問題無いでしょう。
>
> > 2012年6月17日 12:04 murawski <j.muraw...@gmail.com>:

kaz zanak

unread,
Jun 19, 2012, 2:30:14 AM6/19/12
to kumiko...@googlegroups.com
こんにちは
安価なロータリーエンコーダ処理にXORゲートやD-FFのハードつけるなら少しぐらい複雑でもソフト処理を選ぶと思います。(そんなにメモリ使うわけでもないし)
僕はエンコーダ処理はA相B相のテーブル使ってソフトで処理してます。
ネット上に見られるのは大抵割り込みを使ってません。
素人判断ですが割り込みはエンコーダ処理よりもっと重要なことで使い安価なロータリーエンコーダを使った入力機能はチャタリングも含めてソフト処理でいこうということではないでしょうか?
高回転のモータの回転数制御などは多分ハード処理でソフト処理の出番はないでしょうし。


2012/06/19 murawski <j.mur...@gmail.com>:

村脇順一

unread,
Jun 19, 2012, 10:57:47 AM6/19/12
to kumiko...@googlegroups.com
村脇です。
御意見有難う御座居ます。

> 安価なロータリーエンコーダ

確かに安いものは¥200位からありますが、高いものは、その何十倍もします。
価格帯が広いので、「安価」と十派一絡げにするのは、如何なものでしょうか?
1回転30パルス超になると、そう極端に安いものはありません。

> XORゲートやD-FFのハードつけるなら少しぐらい複雑でもソフト処理を選ぶと思います。

とか

> チャタリングも含めてソフト処理でいこう

という考えがある事は元より承知してます。
ロータリーエンコーダに付けるプルアップ抵抗をどうするかで流儀が分かれるみたいです。
MPU内蔵のプルアップ抵抗を使うといった人には、御指摘の流儀が多い様です。
一方、ロータリーエンコーダを基板に付けてしまう人や、FPGA/CPLD等を搭載している人等は、
プルアップ抵抗やチャタリング処理等をハード的に済ます流儀が多い様です。
4490等の専用LSIが勝手にやってくれますので、何も考えずに済みます。
VHDLやVerilogならロータリエンコーダのIPコアを呼ぶだけですし。

> ネット上に見られるのは大抵割り込みを使ってません。

私とは全然異なる頁を見て居られるのかな?
ぐぐって引用元を辿って行くと、次の様な感じに見えます。

エッジトリガ割込み : 田中浩樹さん、a5403さん、里杏さん
タイマー割り込み  : ELMさん、InHisTimeさん
ポーリング・割込無 : 写真で見る工作室、橋本商会
位相計数モード   ; テクロボさん
ハードウェア処理  : 沼津高専、FPGAの部屋

使えるMPUが限定される位相計数モードと、ハードウェア処理を除外すれば、割り込みを使う人がネット上では大半だと感じます。

トラ技・DWM誌・DDT誌は、ハードウェア処理が多い様です。(雑誌の性質上、当然でしょうけど。)

> そんなにメモリ使うわけでもないし

確かにそうですが、割込無でポーリングした方が、CPU資源の消費量は多いのでは?
エッジトリガが検出できるピンを、余らせたり、LED点灯とかの他のピンで十分な使い方をしている位なら、
有効活用法として、非常に簡単なコードを紹介しましょうというのが、そもそもの話です。

ミーティングの時から何度も述べてますが、ソフトで処理してメモリ食わないのと同様に、ハードで処理しても大したものではありません。
専用のLSIも何種類か出てます。昔、ボールマウス等に内蔵されていた位なので、格安です。
従って、FPGA/CPLDを搭載してればその余白に、基板に余地があればそこに、ハード処理を押し込むのは自然な事です。
処理速度を気にしてアセンブラで組む位なら、ハード処理した方が余程手っ取り早いです。
ロータリーエンコーダ取付基板の余地に納まってしまうでしょうし、コストも安い。
ハード処理とソフト処理のトレードオフが、食わず嫌い無しに読める事は、組込技術者に必要な1つの資質なのでは?

脱線しますが、

「AとB、入力端子が2つあり、その高い方の電圧を、端子Cから出力せよ。」といったら、
MPUのADCでA・B2端子の電圧を測り、DACで高い方と同じ電圧を作ってC端子から出力する者が居ます。
間違ってるとは云いませんが、そんなのOpAmp1発で済む事なのに。
最近は、こういう傾向なんでしょうかね?
ハード処理とソフト処理の間に、無用な隔壁を設けているというか、トレードオフを教える人が居ないというか。


2012年6月19日 15:30 kaz zanak <cask...@gmail.com>:

kaz zanak

unread,
Jun 19, 2012, 11:59:11 PM6/19/12
to kumiko...@googlegroups.com
こんにちは
>1回転30パルス超になると、そう極端に安いものはありません。
これって3000パルスですよね。僕がデジットで200円ぐらいで買ったエンコーダは1回転で24パルス/24クリック付きでした。1回転あたり96カウントで使いました。
簡単な入力デバイスとしてとらえてたので、元々高価なものは考えてなかったので安価と書きました。すみません。

4490というチャタリング除去LSIというものも知りませんでした。これデジットでも買えますか?

>MPUのADCでA・B2端子の電圧を測り、DACで高い方と同じ電圧を作ってC端子から出力する者が居ます。
オペアンプ使いたくないとかADCが余ってるならこれもありだとおもいます。
CPUリソースの浪費なのかもしれませんが不都合なく動けば良いかな。不都合でたら修正すればいいし(これはアマチュアの考え方ですが)
ハード処理とソフト処理のトレードオフも場合によって少し変わるのではと思います。


2012/06/19 村脇順一 <j.mur...@gmail.com>:

murawski

unread,
Jun 21, 2012, 6:08:10 PM6/21/12
to 組込みこぞうの会
村脇です。
御意見有難う御座居ます。 返事が遅くなりまして、申し訳御座居ません

> >1回転30パルス超になると、そう極端に安いものはありません。
> これって3000パルスですよね。

3000パルスなら、さぞ高い事と思います。
30パルス超でも、¥200といった価格では買えません。

> 僕がデジットで200円ぐらいで買ったエンコーダは1回転で24パルス/24クリック付きでした。1回転あたり96カウントで使いました。

私も試作段階では、同様の安物を使ってます。
しかし、製作段階では、もう少しマトモなものを使う予定です。

> 4490というチャタリング除去LSIというものも知りませんでした。これデジットでも買えますか?

ネット上で調べましたが、デジットで買えるかどうかは、判明しませんでした。
しかし、DigiKeyの通販では、今でも買えます。現在も生産されている機種ですので。
私は、複数在庫しているので、近年買った事ありません。

> 不都合でたら修正すればいいし

入力電圧がゆっくりとしか変化せず、且つ、出力遅延が十分許されるなら、MPUでも行けますが、
そうでない場合は不都合だらけです。
入力電圧のアナログ的変化の場合、MPU単体では割込が使えません。

> ハード処理とソフト処理のトレードオフも場合によって少し変わるのではと思います。

それはそうですが、結構こういう事ってあるみたいです。
ウチの近所での話ですが、バッテリー放電器を設計する際、定電流負荷のままでは、バッテリーが死んでしまうので、
定電流の電子負荷と、バッテリーの放電終了電圧に合わせた定電圧の電子負荷を作成し、
MPUでバッテリー電圧を監視して、ソフトで切り替えようとした人が居ます。

電子負荷の定電流モードと定電圧モードは僅かな違いでしかないので、OpAmp一発で自動的に切替えできます。

近年、日本製品が駄目駄目な要因の1つに、こういう超満艦装飾な設計があるのではと疑っています。

日本企業の管理体制では、僅かな満艦装飾には厳しくても、超満艦装飾にはズブズブだったりします。
昔から、乾いた雑巾なら絞るが、桶の底が抜けていても感知しないと云われてますからねぇ。

他にも、昔話ですが、素子レベルでは日本製が速いのに、計算機に組み上げると、アムダールとかに勝てなかった
(日本は無駄なロジックが多い)事からも明らかな様に、最近始まった事ではありません。

On 6月20日, 午後12:59, kaz zanak <caskaz...@gmail.com> wrote:
> こんにちは
> >1回転30パルス超になると、そう極端に安いものはありません。
> これって3000パルスですよね。僕がデジットで200円ぐらいで買ったエンコーダは1回転で24パルス/24クリック付きでした。1回転あたり96カウントで使いました。
> 簡単な入力デバイスとしてとらえてたので、元々高価なものは考えてなかったので安価と書きました。すみません。
>
> 4490というチャタリング除去LSIというものも知りませんでした。これデジットでも買えますか?
>
> >MPUのADCでA・B2端子の電圧を測り、DACで高い方と同じ電圧を作ってC端子から出力する者が居ます。
> オペアンプ使いたくないとかADCが余ってるならこれもありだとおもいます。
> CPUリソースの浪費なのかもしれませんが不都合なく動けば良いかな。不都合でたら修正すればいいし(これはアマチュアの考え方ですが)
> ハード処理とソフト処理のトレードオフも場合によって少し変わるのではと思います。
>
> 2012/06/19 村脇順一 <j.muraw...@gmail.com>:
> > 2012年6月19日 15:30 kaz zanak <caskaz...@gmail.com>:
> >> こんにちは
> >> 安価なロータリーエンコーダ処理にXORゲートやD-FFのハードつけるなら少しぐらい複雑でもソフト処理を選ぶと思います。(そんなにメモリ使うわけでもないし)
> >> 僕はエンコーダ処理はA相B相のテーブル使ってソフトで処理してます。
> >> ネット上に見られるのは大抵割り込みを使ってません。
> >> 素人判断ですが割り込みはエンコーダ処理よりもっと重要なことで使い安価なロータリーエンコーダを使った入力機能はチャタリングも含めてソフト処理でいこうということではないでしょうか?
> >> 高回転のモータの回転数制御などは多分ハード処理でソフト処理の出番はないでしょうし。
>
> >> 2012/06/19 murawski <j.muraw...@gmail.com>:

murawski

unread,
Oct 26, 2012, 1:21:09 AM10/26/12
to kumiko...@googlegroups.com
村脇です。

第3回関西勉強会にて、御出席の方より、「どこかに公表すべし。」との御指示を
戴きました、ロータリ・エンコーダに関する件、昨日発売のエレキジャックNo.23に
掲載しましたので、御報告申し上げます。

本処理方式に関し、先行技術があって当然と思うのですが、何故かネット上では
先行技術文献・記述がまだ発見できてません。御存知な方が居られましたら、
御教示願います。






Reply all
Reply to author
Forward
0 new messages