トピック関連記事
48時間以内の記事は New Mark で表示されます
疑似抵抗ー1
TRさん,猛牛ロックさん,おはようございます。

TRさん,

>>>adc[(++num)&31] = adconv();

>駄目だと分かりました。
>32にしないと駄目!

ですが,32にしてしまうと,0〜31が全部0になると思います。
  
また,32以上64未満の場合は,,

   31 & 32 →→  0
   32 & 32 →→ 32
   33 & 32 →→ 30
   34 & 32 →→ 30

みたいに全部30になり,思った結果にはならないと思います。

num に 最初に1がが入るの,++num のためかな,思ってました。

num++ だと,思った結果になるような気がしてますが,

この辺,ちょっと,私自身あいまいなところです。

次のようにすれば,混乱しないかなと思います。

while (1){
 if(num==32){num=0;}
 adc[num] = adconv();
 num++;
}


それから,

>サンプリングを一定間隔で、とっていている中、VRが変わると、急遽、UP/DOWNをし、
>それが終わると、また、サンプリングをする という流れでしょ!?

この辺もよく分からないところなのですが,

No1671のプログラムでは,

 1回 adc 変換の結果を読む。
  ↓
 読んだ結果を過去の一つと入れ替えて配列に保存する。
  ↓
 今までに保存した合計を出して平均する。
  ↓
 アップdダウンの処理をする
 
これを繰り返すという考え方の処理です。


TRさんが書いてくださった

while (1) {
 static unsigned int adc[64] = {0};
 static char num = 0;
 unsigned int target = 0;

 for (char i = 0; i < 64; i++)adc[i] = adconv();→ 配列がadc[0]〜にしたつもり
 for (char i = 0; i < 64; i++)target += adc[i];

 target1 = target / 511.5;

 if (target1 > AD5220_val) {
   AD5220_up();
 } else if (target1 < AD5220_val) {
AD5220_down(); //down関数呼び出し
}
 __delay_ms(1);
}

の処理では,

 64回測定し,それを配列に保存する。
  ↓
 64回の合計を出し平均する。
  ↓
 アップダウンの処理をする。

みたいな流れになると思います。

64回ごとに新しい平均値を使って計算してますので,

もしかして,そのために,なめらかな変化にならないのかな,

という気もしてます。

確かめてないのですが,No1671 のように,

過去のデータに付け加える形で計算した方がなめらかかもしれないと思いました。

後で,比較してみようと思います。


>for文に来た時、継続条件式をすべて実施した後、やっと、for文を抜けることができるのでしょうか????

これは,そうだと思います。たしか,break 文を入れることで

強制的にも抜けることができたように思います。



=====追伸です。====
エクセルで添付の写真のように,
いくつか入力すると設定値を計算
できるもの作りました。
よかったら,使ってみてください。
シートには保護かけてあります。
解除は,1234 が暗証番号です。
PR2が256以上になるとエラーになるように
してあります。
http://mabo52.sakura.ne.jp/files/PWM-calc.xlsx

mabo 2019/06/27(Thu) 10:56 No.1728
Re: 疑似抵抗ー1
maboさんこんにちは。
今日は仕事です。
>この辺もよく分からないところなのですが,

no1728にある__delay_ms(1);
これが、サンプリング間隔です。
__delay_ms(1)でサンプリングをとりつつ、upとdownにも対応していますので、
テスターの動きがスムースでわないと思いました。


サンプリング回数を当初4から増やした理由は、電圧を拾いきれない感じで、電圧の幅が狭かったからです。平均なので、そうなると思いました。


後、エクセルは、帰宅後に
見させて頂きます。
TR   2019/06/27(Thu) 11:35 No.1729
Re: 疑似抵抗ー1
maboさんこんにちは。
サンプリングはとらないと駄目という話でした。

理由は
PWM基本周波数により、信号が送られて来るからだそうです。

no1728にある__delay_ms(1);
これが、サンプリング間隔です。
__delay_ms(1)でサンプリングを

今は、マッハのPWM基本周波数を250ヘルツから実験するつもりなので250usにしています。
無論、実験なのでスタートはマッハの基本周波数を100ヘルツから様子を見ます。
TR   2019/06/27(Thu) 12:57 No.1730
Re: 疑似抵抗ー1
maboさんこんにちは。
>読んだ結果を過去の一つと入れ替えて配列に保存する。


no1671は
while (1) {
static unsigned int adc[32] = {0};
static char num = 0;
unsigned int target = 0;
adc[(++num)&31] = adconv(); // アナログ値の変換関数呼び出しと配列によりAD変換値を平準化
for (char i = 0; i < 32; i++)target += adc[i];
target = target >> 8;
if (target > AD5220_val) {
AD5220_up();
} else if (target < AD5220_val) {
AD5220_down(); //U/Ddown関数呼び出し
}
}
}

ですよ。
この場合、whileの中で2集目は、配列やAD値は、全て初期化されますよ。

でmaboの下記プログラムはエラーを起こしました。
すみませんが、話の筋は素晴らしいので、成功したら、全て教えて下さい。

  記
while (1){
 if(num==32){num=0;}
 adc[num] = adconv();
 num++;
}
TR   2019/06/27(Thu) 15:14 No.1731
Re: 疑似抵抗ー1
TRさんへ


> PIC初心者です。
>
> プログラムでよく、__delay_ms(500);このように書きますが、
> 実際とはずれている感じがします。
> 実感と同じ時間にするには、どういった計算をするのでしょうか?
> お願いします。

某サイトでこの質問を見て、私は下記の回答をしました。

> PICが何クロックで動作しているのかを
> #define _XTAL_FREQ 32000000
> のように設定して、コンパイラはその周波数から、delayの相当する時間分、何もしない命令を算出します。
>
> ※実際に動く速度はCONFIG等で設定した速度です。その速度と_XTAL_FREQの値が違っているとおかしくなります。大抵の場合、○倍(1/○倍)時間がおかしくなります。
>
> もう一つは、delay命令を実行中に割り込みが入ると、割り込みの時間分、遅くなることになります。
> また、内蔵オシレータは性能が悪いので、時間を算出するような用途だと結構ずれていくと思います。
> まぁ、このあたりは、大抵、ちょっとの時間のずれですから、分単位でみないとわからないでしょう。

そしてその後、ここを訪問して、下記の書き込みを見て、質問者がTRさんだったのをすぐに気づきました。

> プログラムでよく、__delay_ms(500);このように書きますが、
> 実際とはずれている感じがします。
> 実感と同じ時間にするには、どういった計算をするのでしょうか?
> お願いします。

当然、ここでの事でしょうから、上の方からTRさんの書き込み(プログラムをチェックしていきました)
※まず、実周波数と#define _XTAL_FREQ XXXXXがおかしいのだろうと思ったわけです。
で、データシートをみて、どの部分を弄れば周波数が決まるのかをチェックして、プログラムと1つずつ突き合わせました。

そして、おかしい部分を発見したので、下記の回答を追加しました。

> OSCCON = 0b0111001; //クロック周波数を16MHzに設定
>
> これがおかしいです

普通、これを見れば、自分の記載している部分をチェックするでしょう?
こんなに明確に場所を示しているんですよ?

それに対して、最後のコメントに

> もう少し初心者にも丁寧な説明をお願いします。
> 丁寧な説明によりストレスが少なくなります。

と返信して、その質問は終わりました。

意味が判らなければ、更に聞けばいい事です。
今まで返信していた大抵の人は間違えた箇所を教えてあげれば自分で気づいて直していました。

ちょっとTRさん、甘え過ぎですよ。
いつまでも初心者とか言っていますけど、PICで言えば、TRさんが始めたので私も始めたように記憶しています。
(それ自体は記憶が定かではありませんけど、初めてPICを秋月で注文したのが2015.11.3です。)

会社でもたまにマイコンを使っていますけど、全てAVRで、PICはドットマトリクスで正月の挨拶のやつをやって以来、多分、使っていません。


話がそれましたけど、プログラムは自分で責任をもって改変すべきです。
TRさんがアップしたプログラムを私がチェックする責任があると考えているのでしょうか?
また、丁寧に教える義務があると考えているのでしょうか?
一体何様のつもりなのでしょう??

> maboさん、いつも丁寧な説明に感謝します。
> maboさんとのコミュニケーションにはストレスがありません!!!!
> 気が合いますね!!!

これをみて、下劣な人だと、と感じました。
まるで私が丁寧な説明をしていない、という書きぶりですよね。

元々、私がこの類の心配が無い、Arduinoを薦めていたのを忘れているのでしょうか?
CONFIGやレジスタの使い方も決して初めてではありません。
データシートをみるのはPICでは必須です。

これまで幾度となく説明しましたし、重要性も説きました。
勿論、調べて値を教えるのは簡単な事です。けれども、TRさん自身がデータシートを見て設定する事が重要なんです。
※さもなければ、信頼できるものを入手して、決して変えない事、という趣旨を話しました。
それを自分で出来ないのならもうやめた方が良いです。

>    記
> OSCCONについて
> 当 初:OSCCON = 0b0111001; //クロック周波数を16MHzに設定
>
> 変更後:OSCCON = 0b01110010; //クロック周波数を16MHzに設定

で、全く直っていませんね。
TRさんは、あなたが私のプログラムを何度改悪して、私のストレスになったかお判りでしょうか?
その度に悪い箇所を指摘するのに、何もストレスが無いと思っているのでしょうか?
指摘しても直してもらえず、また指摘するのもストレスなんですよ。
プログラムは基本的に、他人に直してもらうものでは無いのです。自分で作り上げるものだと思います。

PICが初めてなら私もその値を教えます。
私がマイコン(AVR)を初めてから約6年弱です。PICに手を出してからは3年半。
でもその3年半はTRさんとも重なっていますよね?
いつまで初心者とか、甘ったれているつもりなのでしょうか?
私はその6年弱の間に、マイコンの事を他人に聞いた事は無い???と思います。(記憶の上では)
勿論、判らない事だらけでしたから、データシートやWEB上の役に立ちそうなものを調べまくりました。


3年半は、専門学校でも卒業するような年月です。一体何年で初心者を卒業するつもりですか?
そして、初心者を卒業する気はあるのでしょうか?
※私は「初心者」と言えるのは半年程度だと思っています。「初心者」と「初級」は違います。
 ここでPICを始めた当初、AVRの方は2年半程度でしたけど、「初級の終わりあたり」だと自分で認識していました。

またまた、話が脱線しました。

私が作ったプログラムを改悪されるのも、それが一因でなにかおかしな事になっていくのも私にとってストレスです。
なので、

今後一切、私が作ったプログラムは改変=使わないで下さい。
猛牛ロック   2019/06/27(Thu) 17:45 No.1732
Re: 疑似抵抗ー1
猛牛ロックさんへ

言い合いをする気はありません。

猛牛ロックさんに色々と教えて頂いて感謝しています。
でも、分からないことは分からないんですよ。
今回ご教示頂いたプログラムは、つい最近までうまく動作しなかったのです。
折角、教えて頂いたプログラムなので、内容を理解し、動作したいと思いました。
決して、改悪するつもりはありません。
上手く動作するプログラムにしたいと思っています。
悪くはとらえないで下さい。
TR   2019/06/27(Thu) 18:20 No.1733
Re: 疑似抵抗ー1
maboさんへ

理由はどうであれ、脇で見ていて気分を害されたと思います。
自分は、もうこの場所に来ません。

というのも、誰とも仲良くしたいのですが、
多分、うまくいかないと思うからです。

これまで、色々と教えていただき感謝申し上げます。
本当に残念ですが、失礼します。
TR   2019/06/27(Thu) 18:53 No.1734
Re: 疑似抵抗ー1
TRさんへ

> 猛牛ロックさんへ
>
> 言い合いをする気はありません。

私は言い争いも厭いませんよ。それでいい方向に向くなら。


で、私が

> OSCCON = 0b0111001; //クロック周波数を16MHzに設定
>
> これがおかしいです

と書いた後、ちゃんとデータシートを見て確認したのでしょうか?

> でも、分からないことは分からないんですよ。

と言い訳をしていますけど、そのレスをみて「OSCCONの値に原因があるだろう」と判らない筈はないですよね?
で、添付図のOSCCONのページをみて、それでも判らなかったのですか?

「1111 =16 MHz HF」
とかいてありますよね?
これを見て、

> 変更後:OSCCON = 0b01110010; //クロック周波数を16MHzに設定

とした理由は説明できますか?

私は、何もしていない「教えて君」だと判断しました。
何も確認せずに、努力もせずに、答えだけを聞いたという判断です。

「でも、分からないことは分からないんですよ。」なんていうのはその為の努力をした人が言う言葉です。
見苦しい言い訳は止めてもらいたいです。
そして、本当に見て(努力して)わからなかったのならはっきりと言ってください。

私はTRさんに完成したプログラムを教えるのが目的ではありません。
TRさんがマイコンが使えるように、プログラムが書けるようになるために協力してきたつもりですよ。


<追記します>

質問主がTRさんと気付いて、私がおかしい箇所はどこは調べていって、おかしい箇所を発見して、それを報告した訳ですけど、

あなたは、私が調べる事も、おかしい箇所を発見する事も、さも当然という態度で、その上、
礼の一つも言わずに、「何故丁寧に説明しないんだ」という類の事を言ったのですよ!

私にはその尊大な態度の理由が判りません。
そこまでする義務は負っていませんから。

でも、まだそれだけなら流していました。
(そういったストレスは私にもこれまでにも幾度もありますよ)

で、今朝の投稿(No.1727)です。

> 素人には、丁寧に説明してくれないと何を言っているのかよく分かりません!!
> maboさん、いつも丁寧な説明に感謝します。
> maboさんとのコミュニケーションにはストレスがありません!!!!
> 気が合いますね!!!

これはどう見ても、私への文句が含まれていますよね。
直接言わない、何とも、いやらしい表現だと思います。

そして、極め付けはその後の

>    記
> OSCCONについて
> 当 初:OSCCON = 0b0111001; //クロック周波数を16MHzに設定
>
> 変更後:OSCCON = 0b01110010; //クロック周波数を16MHzに設定

これだけ文句を言いながら自分では何もしていない!!!

と、まぁ、こんな感じで私は捉えたのですが、それについては何か反論はありますか?


「悪くはとらえないで下さい。」と言っていますけど、其れではどう捉えればいいのでしょう?
「理由はどうであれ、」とは?まるでTRさんの方には原因が無いような言い方ですけど?

猛牛ロック   2019/06/27(Thu) 22:58 No.1735
Re: 疑似抵抗ー1
MABOさん、こんな事になってしまい、申し訳ありません。

私の接し方が悪かったのでしょうか?
元々、バイタリティーがあって、どんどん突き進むイメージがある人でした。
でも今とは違って、勝手にどんどん進んでいくイメージでした。目が離せないというか
でも最近は、なんとなく寄生しているようなイメージを持っていました。
自分の両足で立っていないような…

遅かれ早かれ、こうなったような気がします。
このままでは何も成長しないのは目に見えていましたから。

「私のプログラムを一切つかうな」というのは、「1行ずつちゃんと自分で責任をもって書いていかないと身に付かない」、という考えから来ています。
実の所、そんなに怒っている訳ではありません。まぁ、怒ってはいますけど。

このまま居なくなるのでしょうかね?
原因を作った身ですけど、寂しく感じます。


そんな時に、AD5220が来ました。
今更ですけど、テストしましたから報告します。


初期化のシーケンスは一度、一番上までワイパーを上げて、一番下まで下げます。

具体的には、Arduinoのsetupで、
for (byte i = 0; i < 70; i++) {
digitalWrite(ud, HIGH);
digitalWrite(clk, LOW);
digitalWrite(clk, HIGH);
}
for (byte i = 0; i < 128; i++) {
digitalWrite(ud, LOW);
digitalWrite(clk, LOW);
digitalWrite(clk, HIGH);
}
としたらこの後は完動しました。(10回程度確認)


でワイパーは0〜127です。その間はぼちぼち綺麗(多少のゆがみあり)に動きます。添付図

電圧は0V(B側)〜4.96V(A側)でした。何故か、片側はちゃんと付くのに逆は付きません。
逆に繋ぐと0.04V(A側)〜5.0V(B側)となります。(添付図はこっちの接続です)
つまり、A側は抵抗1つ分、存在しているようです。
→128ポジションで、ワイパー1つで1/128動きます。そして、A側には1ワイパー分残ります。
ワイパー抵抗は24Ω程度。(添付図の0の位置でのA-W間抵抗)

猛牛ロック   2019/06/28(Fri) 12:44 No.1736
Re: 疑似抵抗ー1
TRさん,猛牛ロックさん,こんばんは。

猛牛ロックさん,詳しい実験結果のありがとうございます。

>つまり、A側は抵抗1つ分、存在しているようです。

これは,どうんなんでしょうかね。

仕様なのか,それとも,ワイパーの移動に使ってる半導体が,

製造時に不具合起こしたのか,ちょっと?でしょうか。

実際に使用するには,安定して動作するための条件等,いろいろ調べる必要ありですね。

トランジスタかフォットカプラーと秋月の安いロータリーエンコーダーとエンコーダーを使って,

自作のデジタルポテンショメーター作ってみようかな,

なんて思ってます。
mabo   2019/06/29(Sat) 21:38 No.1737
Re: 疑似抵抗ー1
データシートにはその辺の所は書かれていないようです。

ただし、P8右側の説明中、
「VRの公称抵抗(R AB )は、128ポイントの接触点を持ち摺
動端子に接続されています。さらに、B端子の接触点がこれに追加
されます。」

とあります。この説明やその上の図は理解できませんでしたけど、端子A、端子Bには
ちょっとした違いがあるようには読み取れます。
(その上の図38なんて、Ax端子とWx端子が繋がっているので、全く意味が解りません
なので、このデータシート自体、「REV.0」となっているように、信頼性は低いです。)

勿論、私の報告は、私の入手した個体(AD5220BNZ10)1個を調べたものですから、それで、
全て当てはまるかは不明です。

※最初は、初期化で、一番下までワイパーを下げてから、ループ関数で、「1つずつ上まで上げていき、一番上まで行ったら一番下まで下げる、」
の繰り返し、というスケッチで試していました。ここで上がっていたようなスケッチです。(ループ部は一段毎に全てモニタ表示)
で、数回の結果としては、全て、初期化は不十分でした。上に上げていく段階(ループ関数)で、スタート位置はいずれもバラバラで、ゆったりと
フロートしているような感じです。感覚的にはhi-zピンを調べているようなかんじでしょうか
けれども、ある時から正常に動いていました。ある時とは、一度上がって下がるときから同期していました。

で、さっきもう一度試してみたのですけど、必ずしも、前回いったスケッチで初期化がうまくいく、という訳ではありませんでした。
といっても、ループ部の最初の上げ下げで、必ず同期しました。=2回目で同期した、という事です。
同期する瞬間は、ワイパーを下げていく(A→B)ときにその電圧を通りすぎる時に付いていくような感じです。
不思議と、ワイパーを上げる(Aに近づける)時には同期しません。
いずれにしても、ワイパー操作自体はdelayは要りません。
電源と同時投入なら、ピン初期化→1ms程度delay→2往復位ワイパーを↑↓させれば大丈夫だと感じました。

ワイパーAに、1ワイパー分の抵抗が残る、というのは、抵抗値は偶然なのかもしれません。
でも、この個体的には、必ずそうなっています。
Aを5V側にすると、ADC値は
990,997,1006,1014,1014,1014,…
と1014(もしくは1015)でピタっと止まります。下げる方は15,7,0,0,0,…です。(7の部分は7か8です。)
逆にAを0V側にすると、23,15,7,7,7のように、それ以上なりません。B側は1007,1015,1023のように、ぴたっと
最上まで来ます。数値は1ワイパー分の8(7〜9)です。
ワイパーをA側にいっぱいにしてA-W抵抗値を計測すると97.5Ω程度です。
なので、97.5-24.5(ワイパー抵抗)=73Ω
AB間の抵抗値は9.15kΩ程度なので、9150/128=71.5Ωと、ほぼ一致します。
※数値は千円以下のおもちゃテスターなので、正確性には欠けます。

この個体に関しては、やはり前回の添付図のような構成になっていると考えて間違いないと思います。

あと、抵抗値は16ポジションごとに低いものがあります。(添付図右)
(本来、差が8になるはずがそこだけ5になります)


<追記>

テスト中、チョコチョコ変えますけど、下記がテストスケッチです。
おおよそ、これで、おかしい動きを見つけるのが面倒な位、正常に動きます。

※最初はdigitalWriteで、検証していたのですけど、digitalWriteは50クロックほどかかりますから、
 bitSet/bitClear(2クロック?)に変えました。

/*

AD5220 TEST PROGRAM

*/
#define clk 2
#define ud 3
#define ad_pin A0

word ad5220_val;

void clock(word num) {
while (num--) {
bitClear(PORTD, clk);
bitSet(PORTD, clk);
}
}

void ad5220_up() {
bitSet(PORTD, ud);
clock(1);

if (ad5220_val < 127)ad5220_val++;
}

void ad5220_down() {
bitClear(PORTD, ud);
clock(1);
if (ad5220_val > 0)ad5220_val--;
}


void setup() {
Serial.begin(115200);
pinMode(ud, OUTPUT);
pinMode(clk, OUTPUT);
bitSet(PORTD, clk);

bitSet(PORTD, ud);
clock(128);

bitClear(PORTD, ud);
clock(128);

ad5220_val = 0;
}

void loop() {
while (ad5220_val != 127) {
ad5220_up();
delay(5);
word adc = analogRead(ad_pin);
Serial.println(adc);
}
Serial.println("");
delay(2000);
while (ad5220_val != 0) {
ad5220_down();
delay(5);
word adc = analogRead(ad_pin);
Serial.println(adc);
}
Serial.println("");
delay(2000);
}

猛牛ロック   2019/07/01(Mon) 00:53 No.1738
Re: 疑似抵抗ー1
猛牛ロックさん,こんばんは。

AD5220の細かい検証の資料ありがとうございます。

いつもながら,猛牛ロックさんのくださる資料の緻密さにびっくりしてます。

私は,おおざっぱな検証しかしてないので,なんともいえないのですが,

PWMコントローラーのボリュームと,AD5220を入れ替えて,

モーターを回したところ,

抵抗を小さくしていくと,モーターの回転は,順次上がっていくのですが,

ある場所で,上がらないで,むしろ下がるような印象を受けた箇所が何カ所かありました。

>あと、抵抗値は16ポジションごとに低いものがあります。(添付図右)
>(本来、差が8になるはずがそこだけ5になります)

もしかして,これが原因なのかなと思いました。

私の持ってるものは,100kΩのものなので,

もし同じような傾向があるのなら,単純計算の10倍で,30Ω程度でしょうか,低い物が混在してるのでしょうかね,検証の必要はあると思いますが。

この30Ω程度の抵抗が果たして,私か感じた回転数の低下にどの程度関係してるのかは,自信はありませんが・・・・・。


MACHのPIDの検証もやりたいなと思っているのですが,

グレイコードで頭抱えています。

なんとなく理解はできてきたのですが,通常のコードへの変換等,

ビット操作のオンパレードみたいなので,頭いたいです。
mabo   2019/07/01(Mon) 22:42 No.1739
Re: 疑似抵抗ー1
MABOさんのは100kΩだったんですか。
でも、100kΩの方がデータシート的には誤差(の割合)が少なく書いてあります。
添付図では、どちらが50kΩか100kΩかは判りませんけど、10kΩよりはバラつきが少ないのが見て取れます。

私の通常8毎のはずが16ワイパーおきに5になっている、というのは添付図(グラフ)の黄線部分だと思います。
そこだけ-0.3LSB=30%程度、抵抗が低いので、8→5の変化は納得いく数字です。
よく見ると、その半分の所で、+1の9になっています。それはグラフのちょこっと山になっている部分(水色)の
せいだと思います。

まぁ、訳が分からない説明がありながらも、納得できる部分もある感じですね。

MABOさんの言っているのが16パイパー毎の事では無く、抵抗(ワイパー)が0Ωよりの全体的な動きの事でしたら、
多分、電流の流れすぎによる、電圧低下なのではないかと予想します。

猛牛ロック   2019/07/01(Mon) 23:21 No.1740
Re: 疑似抵抗ー1
猛牛ロックさん,こんばんは。

またまた,詳しい資料ありがとうございます。

マニュアルに載っているんですよね。

グラフ見ただけで,毛嫌いして,解釈するのあきらめてました。

>多分、電流の流れすぎによる、電圧低下なのではないかと予想します。

こういうこともあるんですね。

この辺も私の理解の及ばないところかな,なんて思います。

AD5220にを使って,モーターを回したときには,

回転数等,詳しくみてないので,感覚で,回転数がさがった,

と判断してるところもあるので,回転数の表示させて,

後日,みてみようと思います。

今,部材をいろいろあたってます。
mabo   2019/07/03(Wed) 22:57 No.1741
Re: 疑似抵抗ー1
X9C(10kΩ)も一応試したので、載せておきます。

こちらの方は0〜5.0Vまで動きました。(正確にはADCで0〜1023という事です)
ワイパー抵抗は45Ω程度、A-B間の抵抗は9.0kΩでした。

「make before break」は並列になるので、抵抗値が下がるのかと思っていたのですけど
図を描いてみたら、過渡期は両抵抗の間になるのですね。
つまり、理論的には安全性が高くて、良いデバイスと言えると思います。

で、ほぼAD5220と同じもので試したのですけど、1usの間隔では駄目でした。
2usにしたら動きました。
バラつきはAD5220と同じ程度ありました。でも、16ワイパー毎というわけでは無く、何となくばらついています。

「make before break」の時間はデータシートでは平均100us、MAXで500usとなっていますけど、
5V側(ワイパー位置99)から1つ下げて観測してみたのですけど、20us後には安定した電圧になっているようです。
理論的にはmakeで並列状態になった時は「ワイパー抵抗45Ω×2の直列」と「抵抗1つ分の90Ω」の並列なので、この部分の合成抵抗は45Ωです。
つまり、添付図下のようになり、電圧値で4.9875V、adc値では1020.4に相当します。
なので、表の2us後の部分で既に並列状態になっていると思います。
(何故かその後、一段階下がってから安定します)
※表中の時間はアバウトです。1,2割は異なっている可能性はあります。

今回はワイパー位置が同じ部分(99→98)しかやりませんでしたから、もしかしたら違う位置だと動作時間(並列時間)が大きく変わるのかもしれません。
でも、データシートの時間100usや500usは、苦情が来ないように、だいぶ大きく見積もっている、という印象です。
また、この程度の時間&変動なら、待ち時間無しにワイパーを動かしても良さそうです。

※不揮発性メモリの方は試していません。CSはLOW(GND接続)固定です。

猛牛ロック   2019/07/07(Sun) 09:22 No.1742
Re: 疑似抵抗ー1
手作りの件ですけど、参考サイトの構成が良いと思います。
低on抵抗のフォトMOSリレーを使う、ってやつです。
FETで構成するのも可能かもしれませんけど、可変抵抗部「以外」の回路も知る必要があると思います。

で、抵抗はX2で付けていって、ワイパー位置の上げ下げでは無く、「不必要な抵抗の短絡」といった感じにすれば、
10個(組み)で1024段階になります。
添付図で、負論理でGPIOに繋いでいますから、そのまま抵抗値として表現出来ます。
抵抗は固定抵抗で賄えない部分は半固定抵抗を使うしかないと思います。
https://www.aliexpress.com/item/32956113030.html


MABOさんの可変抵抗は100kΩと結構大きな値ですから、
参考サイトのTLP3100の方オン抵抗最大50mΩとが高性能ですけど、
TLP241Aあたりでも全然問題無いと思います。(オン抵抗最大150mΩ)
AQV251Gも良さそうだったのですけど、特に薦めるほどでも無かったみたい。

https://www.aliexpress.com/item/32834495736.html
https://www.aliexpress.com/item/33008121998.html

※TLP3100はSMDタイプしか無いようです。

あと、これらはターンオン時間が数msかかります。なので、頻繁にオン/オフしないようにした方が良いです。
つまり、プログラムでまったり動かすようにします。
※オフなら電流が流れないので発熱しない。onでも低on抵抗なので発熱は少ない。でも切り替えのときは多くの発熱をするので、
1msとかで更新すると、殆どの時間が「切り替え状態」になる可能性があります。

猛牛ロック   2019/07/07(Sun) 11:16 No.1743
Re: 疑似抵抗ー1
猛牛ロックさん,こんばんは。

またまた細かい検証の資料ありがとうございます。

ワイパーの移動で,切り替えが追いつかない時間があるというか,これ,もしかして,意図的なのかもですね。

現在の接続を切断してから,隣の接続をする,というのではなくて,隣を接続してから,現在を切断,こんな手順なのでしょうか。

プログラム組むときは,その辺も考慮しないと,

思った結果にならないのでしょうが,私の場合,厳密な処理する訳ではないので,それほど気にならないと思います。

それから,部材のご紹介もありがとうございます。

私も,フォットリレーにしようかなと思ってましたが,

TLP3100 は,値段が高いんですよね。

それに,SMDだと,老眼の目には厳しいかななんてね。(笑)

とりあえず動けばいいかな,なんて思ってるので,

秋月の

http://akizukidenshi.com/catalog/g/gI-08029/

あたり使おうかなと思ってますが,お恥ずかしい話,

ON抵抗について,高いのか低いのか判別がつかないでいます。
mabo   2019/07/08(Mon) 00:13 No.1744
Re: 疑似抵抗ー1
1カ所繋ぐだけの方式なら、特別良いものは要らないと思います。
けれども、低抵抗部(特に抵抗0の位置)はそれなりの電流が流せるものが良いです。
TLP291は最大絶対定格で50mAでした。それで充分かどうかは?です。
最大絶対定格で20mAのAD5220で、最高速近くいったのなら大丈夫なのかもしれません。
また、そこだけ並列にしちゃうのも、手かもしれませんね。

フォトカプラ(出力部がフォトトランジスタ)だと、特性として、オン時に一定の電圧がエミッタ-コレクタ間に
残ると思います。(0.2Vとか0.3Vとか。ダイオードに近い感じだと思います)
で、例えば、10個使って、複数接続する方式だと電圧値として2.5V前後は落ちますから、用途的に合いません。
最高速は出ないという結果になりますし、中間部の計算も出来ません。

フォトMOSリレーなら、オン抵抗で表せるように、無視できるほどの低オン抵抗なら多接続(短絡方式)でも上手く行くと思います。
また、フォトカプラが通常、数十〜数百mA出力に対して、フォトMOSリレーは数百mA〜数Aまで流せます。
ただし、スイッチング時間は圧倒的にフォトカプラの方が早いです。単位がusとmsの違いがあります。

私もフォトカプラ(PC817)なら沢山持っていますけど(ALIで100個で200円程度で売っています)数を並べるのも面倒です。
74HC595も1個5円程度でありますから、作れないわけでは無いと思うのですけど、多くのピンに配線しなくてはならない、という部分で作るのが大変でしょうね。
やはり、分解能を出すならフォトMOSリレーに分があると思います。
16以下の分解能で良いなら、フォトカプラで、といった感じでしょうか。
※分解能16でもhttp://akizukidenshi.com/catalog/g/gI-12192/あたりを4つ使って、4ピンで制御する方が楽です。

MABOさんの場合は、抵抗値が高い可変抵抗ですし、それほど高機能(低オン抵抗)のフォトMOSリレーは必要ないと思います。
猛牛ロック   2019/07/08(Mon) 16:41 No.1745
Re: 疑似抵抗ー1
猛牛ロックさん,こんばんは。

いろいろアドバイスありがあとうございます。

本日,部材を◯月に注文しました。

送料ただいするべく,奮発してしまいました。

これで,しばらくおとなしくするようです。

エンコーダーは安いのにしようと思いましたが,

チャタリング対策等,手間取りそうなので,

マルツのこう光学式にする予定です。

ネットでくぐったのですが,102タイプの抵抗アレイは,

マルツとデジキーあたりしか取り扱いないんですよね。

マルツはもうちょっと検討してから,注文します。


それと,アナログスイッチなるICもあるのですね。

いろいろあさっていて,目にとまりました。

http://akizukidenshi.com/catalog/g/gI-05673/

アナログでも,デジタルでも高速スイッチングが可能,

とマニュアルには記載あります。

それに,低ON抵抗 50Ω とあります。

状況にもよるのでしょうが,これが高いのか,低いのか,

私にはちょっと判断できません。


いろいろあさっていて,

PIDの制御にも興味が向いてきました。

プログラムもそれほど難しくないようなので,

http://akiracing.com/2017/12/19/arduino_drone_pid/

後日,挑戦してみようかなと思います。

手始めに回転数取得のプログラムあれこれやってます。
mabo   2019/07/09(Tue) 23:25 No.1746
Re: 疑似抵抗ー1
良いですねぇ、光学式。私はおもちゃエンコーダばっかりです。
秋月で売ってるLED付きも使いました。

アナログスイッチICは電気はあまり流せませんよ。
20mA程度まで流せますけど、流せば出力電圧は変わります。
この辺りは、マイコンの出力と同じです。
オン抵抗50Ωは9V駆動時の標準値です。
4.5V駆動だと、70Ω標準で、最大100Ωです。
で、100Ωだとしたら20mA流せば100x0.02=2Vも電圧が下降します。
なので、電圧値が重要な場合は電流を流してはいけません。


> 手始めに回転数取得のプログラムあれこれやってます。

単純なオフタイマー(7セグとリレーとロータリーエンコーダを使ったもの)で、よく使いますけど、
○○時○○分まであるので、ロータリーエンコーダといえども加速させないとなかなか目的値まで達しません。
で、早く回した時は+8/クリック位?までさせると思うのですけど、いい塩梅を見つけるのが面白い所かもしれません。
猛牛ロック   2019/07/09(Tue) 23:58 No.1747

処理 記事No 暗証キー

- JoyfulNote v6.02 -
++ Edited by Hamel ++