2019年7月20日土曜日

ATTINY85(Digispark)との格闘Ⅲ(妙なパルス)

***2020年4月4日 追記***
恥ずかしながら
この異常は、マーティーの全面的なポカミスであることが判明(-_-;)
ATTiny85さんごめんなさいm(_ _)m
詳しくは、一番最後に追記しています。
***************

ATTINY85に振り回されています。
余っているし、もうちょっとで動きそうなのでなんとかしたいのです。

スケッチは、どうみても間違ってると思えないので
ATTINY85の挙動に異常があると思い調査したら、
とても妙な挙動に遭遇しました(T_T)
前回(格闘Ⅱ)のPULL-UP問題といい
このチップは、未完成なのではと思ってしまいます。

CO2レーザーカッターのZ軸を可動するため
A4988で小型ステッピングモーターを正反転する単純なテスト回路です。
左側の直挿ボードタイプのDigisparkで動いたスケッチが
ATTINY85単体チップに変えたら動かないのです。(T_T)
スケッチは、ちゃんと書き込まれているのです。
電流も上の動いた時と同等の0.2A/2phase程なのに
回転せず、静止状態(静止トルクはある)なのです。
格闘Ⅱで判明したINPUTのPULL-UPは、施しています。
どうも変なので
モーターの6.2Vは、印加せずに、ATTINY85の波形を見てみることに

PB1でA4988のSTEP Pluseを出している部分のスケッチ
ボタンを押した時、4.5msec周期のパルスを出し続けるものです。
*****
pinMode(1, OUTPUT);       // STEP

void move() {
  digitalWrite(1, HIGH);
  delayMicroseconds(2250);
  digitalWrite(1, LOW);
  delayMicroseconds(2250);
}
*****

オシロ(10:1 入力10MΩ)で波形を見ると
何と立ち下がりがとてもなまっています。
周期は、HIGH/LOWで4.7msec(ほぼ計算通り)
スケッチは、正しく動作していたのです。
A4988を外してもこの波形なのです。
立上りは、いいので、ATTINY85の出力トーテムポールの
下側ドライブが動作していない感じです。
PB1に6.8KΩのPULL-DOWN抵抗を入れると
HIGHレベルが、0.2V辺りまでしか上がらなくなります(T_T)
ATTINY85かA4988のどちらかが死んでいるかもと、
・ATTINY85を交換しても変化なし
・A4988を交換しても変化なし

直挿ボードタイプDigisparkのPB1には、
LEDとR5(1KΩ)が付いていて、正常動作しています。
(この回路図が正しければ)
上の波形は、ATTINY85単体なので、このLEDとR5は、付けてないのです。
抵抗を大きめにして
PB1~GND間に6.8KΩ+LED
・・・レベルは低いけど、立下がりが少し良化したぞ!
抵抗を大きくしてみる。
33KΩ+LED・・・いい感じに良くなっています^^;
まあ、良化方向ですが、HIGHの方もドライブ能力低すぎです(T_T)
更に
100KΩ+LED・・・おっ!更に良化してきた!
ならば、
470KΩ+LED・・・いい感じです。
LEDをシリコンDIODEに
470KΩ+DIODE・・・ほぼ良くなりました!
最初の回路のPB1(STEP)に680KΩ+DIODEを追加して
無事、動くようになりました!
ATTINY85?!?!なかなか、取扱の厄介なチップです(T_T)
バグを残した未完成なチップと言わざるを得ないようです。
それとも。。。マーティーが手にしたのは紛い物だったのかも?

CO2レーザーのZ軸可動化のステッピングモーター制御回路を
ATTINY85(Digispark)でやったばっかしに
まさか、格闘Ⅰ~格闘Ⅲとほぼ1週間潰れるハメになるとは...(T_T)

***2020年4月4日 追記***
マーティーのポカミスの説明であります。

~~~誤~~~
#define Step 1 // PB1 for Step Pluse
#define KEY_Detect 1 // ADC ch1 = PB2 = pin7
を定義して

analogRead(KEY_Detect)・・・でch1 Analog入力
digitalWrite(Step, HIGH)、digitalWrite(Step, LOW)で方形波作ってました。

これでは、PB1をINPUTモードでHIGH/LOW繰り返すことになり
内部プルアップをする/しないを繰り返してたと思われます。
~~~~~~~

で、正解は、たったこれだけ(-_-;)
「1」⇒「A1」にするだけなのであります。
~~~正~~~
#define KEY_Detect A1 // ADC ch1
~~~~~~~

Analogチャンネルを指定するのに”A”の付け忘れであります(-_-;)
直挿ボードタイプのDigisparkでギリギリで動作してたのでしょう。
間違いに気づかずに泥沼対策になってたわけです。

で、波形はといいますと
ATTINY85の出力は、こんなにシャキットなりました\(^o^)/
実は、これはYY氏よりご指摘いただきました。
誠にありがとうございますm(_ _)m

昔のを見返すと、
小型工作機CNC2418 その52(CandleをJoystick操作)」の時
SparkFun Pro Microだったのですが、
しっかり”A”をつけて指定してたんですがね~
まあ、ちょっと、いい訳であります(-_-;)
~~~
const int xAxis = A0;         // joystick X axis
const int yAxis = A1;         // joystick Y axis
const int zAxis = A2;         // joystick Z axis
~~~

***追記ここまで***

0 件のコメント: