本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:カウンタボードについて教えてください。)

カウンタボードと角度計測プログラムの違いとメリット

2023/09/07 07:24

このQ&Aのポイント
  • カウンタボードとは、エンコーダで角度計測をする際に使用される装置です。カウンタボードを介する方法とプログラムで計測する方法にはいくつかの違いがあります。
  • カウンタボードから出力される信号は、エンコーダの回転角度に対応して変化します。一方、プログラムで計測する場合、デジタル入力ピンの状態を読み取り、それに基づいて角度を計算します。
  • カウンタボードを使用すると、特定の状態の信号の変化に応じて角度を自動的に計算することができます。そのため、プログラムの記述や計算式の管理が簡単になります。カウンタボードの使用は、角度計測の正確性や安定性を向上させるメリットもあります。
※ 以下は、質問の原文です

カウンタボードについて教えてください。

2021/04/03 12:54

エンコーダで角度計測をするのに、カウンタボードを介するのと、カウンタボードを使わずに下記のようなプログラムで角度を計測するのとでは、何が違うのでしょうか?カウンタボードから出力される信号は何なのでしょうか?カウンタボードを使うと下記のようなプログラムは必要ないのでしょうか?カウンタボードの簡単な原理なメリットについて教えてください。よろしくお願いします。

byte value = B00000000;
float degree = 0.00;

void setup() {
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(3, INPUT);
}

void loop() {
value = (value<<2)+(digitalRead(2)<<1)+digitalRead(3);
value = value &B00001111;
if(value==B00000001||value==B00000111||value==B00001110||value==B00001000)
{
degree = degree+3.75;
}
else if(value==B00000010||value==B00001011||value==B00001101||value==B00000100)
{
degree = degree-3.75;
}
if(degree>180)
{
degree = degree-360;
}
else if(degree<=-180)
{
degree = degree+360;
}
Serial.print("degree: ");
Serial.println(degree);
}

質問者が選んだベストアンサー

ベストアンサー
2021/04/03 13:40
回答No.3

 ハードウェアのカウンタを使うなら割込みは要らないのか、週刊誌の技術解説記事的に理解するならそういうことですが、プログラムを書く当事者ならば、なぜ割込みが欲しかという要求はプログラマの側にあるはずです。俺は何が何でもエンコーダのA相B相の立ち上がり立下りをプログラムで拾うんだという人にはハードウェアカウンタは要らず、ポーリングでやってのけるという人には割込みすら要りません。処理速度が苦しいから少しだけ時間を稼ぎたいと言う人は4ビットだけのハードウェアカウンタを持ってそのオーバーフローで割り込ませてプログラムのカウンタでbit4以上を実現する人もいるし、角度が物理的に読めるカウンタを持ってポーリングで読みに行こうと言う人もいるし、カウンタの出力にハードウェアのコンパレータとレジスタを持って設定した角度になったら割り込ませたいという人もいるでしょう。やり方はプログラマの頭の中にあるので、ハードウェアのカウンタを持つことは選択肢の増にすぎません。

お礼

2021/04/03 14:52

詳しく教えて頂き本当にありがとうございました。とても勉強になりました。

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (3件中 1~3件目)

2021/04/03 13:13
回答No.2

書き忘れました。

【誤】1秒1回転のロータリーエンコーダのA相、B相それぞれの立ち上がりと立ち下がりをプログラムで見張るには694μS毎の処理が必要です。

【正】1秒1回転のロータリーエンコーダのA相、B相それぞれの立ち上がりと立ち下がりを【1度ステップで】プログラムで見張るには694μS毎の処理が必要です。

 すみません。

2021/04/03 13:11
回答No.1

 処理速度です。1秒1回転のロータリーエンコーダのA相、B相それぞれの立ち上がりと立ち下がりをプログラムで見張るには694μS毎の処理が必要です。694μSのイベントを見張るとは、最低でもこの2倍以上の頻度でポートを監視する必要があるので、非力なCPUには負担になります。特にその結果から台形制御を計算しようなどというと、最低でもエンコーダ監視専用CPUを独立させるか、普通はハードウェアのカウンタを使うことになります。プログラムでこれができるのはよほど低速な回転か、または角度の要求が粗い場合です。エンコーダ専用みたいなICもあるし、クロック入力とUP/DOWN入力があるカウンタなら使えます。ラジコンのサーボモーターのようにポテンショメーターで角度を測るのは電気的に常時できますが、ロリータエンコーダで角度を測るには起動時に実際に原点まで移動してカウンタをリセットする必要があり、用途によってはこれが容認できない場合もあります。

お礼

2021/04/03 13:27

教えて頂き大変ありがとうございます。一点だけ確認したいのですが、つまりカウンタボードを使うと、エンコーダのために外部割り込みを使う必要が無いという理解でよろしいでしょうか?

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。