先回のATtiny3217はちっぷが小さいので
ブレッドボードにマイコン仕立てて使いやすいように準備した。
でも3217はなんかよくわからんことになったのでしばし保留...として
次のマイコンはATtiny1614。
こちらはチップがでかい。4x9mmほどあって3217の2倍サイズ。
でもって足つきSOPでもってピンが減ったからブレッドボードに
準備するほどでもなくなった。
でもって作ったモータ制御検討マイコンボードがこちら。
ボードと言っちゃったけど基板物はなく
部品のリードで接続組んだ空中配線。
これは回路初心者にはお勧めできないです。
悪い見本です。。。
とりあえず回路に仕立てるのは早いですが
配線の組み換えは面倒なので
回路変更が頻繁にある場合は不向きです。
リードが3次元で交差してるので
取り扱いも十分注意が必要です。
変に上から押すといろんなとこがショートします。。。
回路は、
先日の赤外線リモコンでLチカ の回路 に、振動モータを分解して
取り外したコアレスコイルを2個、Vf:2VのオレンジLED
で中性点負荷付けたのを2組。
コイル駆動はドライバレス。
必要に応じてPWMで負荷制限。
スケッチは定期点滅マイコン動作中確認LED(青) と、
コイル駆動のタイミングを各々独立で動かすので
TSS 【Time Sharing System】の仕組みを入れて
制御からdelay()関数を削除したものに変更です。
リアルタイム的に動作が必要な制御では
基本的にLoop()のなかではdelay()は使わない。
とりあえずはレジスタ使うとか割込み使うとか手間掛けて
負荷の小さい処理にはせず、ESPマイコンでやってる方法まんまを
移植してみた。
後々、ATtinyでは処理が重くて変えないといけない...かも。
ESPマイコンでよくやるTSSはこんな感じです。
unsigned long ms10,ms500;
char LED_sw;
setUP() {
}
void loop() {
if (millis() > ms10){
10m毎に行う処理
赤外線通信でコイルSW周期切り替え
ms10+=10;
}
if (millis() > ms500){
500m毎に行う処理 たとえば 1sec周期Lチカ
if(LED_sw == 1) {digitalWrite(LED_pin, HIGH); LED_sw = 0;}
else {digitalWrite(LEO_pin, LOW); LED_sw = 1;}
ms500+=500;
}
}
ちょっとしたことでメモリー消費が増えるの目立つ。
16kBしかないのは要注意、、、
これまでM5の4MBとかで使い慣れてたから気を付けないと。
メモリーM5の1/200以下だな。。。
Lチカと赤外線通信(受信)だけでもう17%メモリ消費・・・
送信が入ってたら35%だった。
送信、しばし使わないので抜いてみたら17%まで減った。
演算もちょっと余計なことしてる。
けど、、、ひとにやさしい。
ESPマイコンではなんの問題もなく使えてたけど
処理能力、メモリがとても小さいATtinyでは
いずれ厳しくなるかも。
動作テストの様子です。
マイクロロボ作ろう!
— しん (@shinichi_nin) 2023年6月28日
次はハーフインチサイズで♪ 進捗その4
自作 ブラシレス
マイクロモータ検討
#振動モータ のコアレスコイル、
利用できそう... ってことで #赤外線リモコン 操作でテスト
ポート直駆動でも
いい感じの動きです♪
#ATtiny1614 #Arguino #PWM pic.twitter.com/VDWdyVNXTt