このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。
DC モータは磁石で覆われたケースの中でコイルが磁界を発生させ、回転力を 生じるものです。 コイルが磁石に接近するとブラシによりコイルの極性が反転し、回転を持続す るようになっています。 これをブラシ付きモータと言うこともあります。 DC モータは安価で高出力ですが、ブラシは摩擦で摩耗するため寿命が比較的短 いです。
DC モータは動力を発生させるため、大きなエネルギーを必要とします。その ため、多くの電流が流れます。 例えばマブチモータの FA130 では電源電圧 1.5V に対して、電流は最大で 1A 流れます。 そのため、マイコンには直接接続できません。 通常はリレーやトランジスタのスイッチング回路を使用します。
トランジスタのスイッチング回路において、大電流を制御するにはベース電流 を多く流す必要があります。 しかし、制御側が流せる電流にも限りがあります。 この場合、一つのトランジスタではhFEが足りないということにな ります。 そのため、トランジスタを二段使い、一段目のエミッタを二段目のベースに接 続するのがダーリントン接続です。 一段目のベースに IB を流すと、一段目のコレクタには hFEIBだけ電流が流れるので、エミッタには (1+hFE)IB の電流が流れます。 これが二段目のベースに流れると、二段目のコレクタにはこの hFE 倍流れます。 したがって、一段目、二段目のコレクタ電流の合計は hFEIB+hFE(1+hFE)IB となり、ダーリントン接続により一つのトランジスタとみなすと hFE'=hFE(2+hFE) と二乗よりも大きな利得が得られます。 これにより小さな電流で大きな電流のスイッチングができるようになります。
モータにはコイルが入っています。 コイルに電流を流すと、コイルは磁界としてエネルギーを蓄えます。 そして、電流を切ると磁界を維持するように電圧が発生します。 これをフライバック電圧と言います。 トランジスタのスイッチング回路を直接接続すると、トランジスタで回路を切 断したとき、トランジスタに大きな逆電圧がかかります。 そのため、トランジスタを保護するため、逆電圧は逃す必要があります。
このフライバック電圧に対して、モータをダイオードで短絡するとダイオード に電流が流れるので、 トランジスタには大きな逆電圧がかからずに済みます。 このモータを短絡するダイオードをフリーホイールダイオードと 呼びます。
また、さらにトランジスタを逆電圧から守るため、コレクタ・エミッタ間やベー ス・エミッタ間にダイオードを入れることもあります。
フリーホイールダイオードを入れると、モータの電源を切ったとき、ダイ オードに電流が流れます。 これはモータが発電機として仕事をしたことになるので、モータの回転エネル ギーが電気エネルギーに変換されたことになります。 つまり、モータは仕事をした分だけ減速します。
但し、モータはフリーホイールダイオードを接続しても瞬時に回転が止まる訳ではあ りません。 つまり、高速でモータの電源を On-Off を繰り返すと、モータは低速で回転す るようになり、与えた電気エネルギーに対応した仕事をすることになります。 モータをマイコンからスイッチング回路で動作させる際、LED の明るさを変え たように duty 比を変えることでモータの速度を変化できます。
図のように 4 つのスイッチを接続するとスイッチの組み合わせにより次のよ うな 4 種類の制御が可能になります。
このモータの制御回路をH ブリッジ回路と言います。
なお、このスイッチの制御において、この図のようにしてしまうと電源をショー トしてしまいます。 この時に流れる電流を貫通電流と呼びます。 制御を行う上で貫通電流が流れないようにすることが重要です。
さて、これをトランジスタでこれを実現するにはどうすればいいでしょうか? 通常のスイッチング回路は電源側に負荷を接続しますが、この回路では電源側 にもスイッチがあるので、原則通りのスイッチング回路では制御できません。
NPN トランジスタのスイッチング回路ではエミッタを直接接地します。 一方、 PNP トランジスタのスイッチング回路を考えると、図のようにエミッ タは電源に接続することになります。 電源側から、 PNP トランジスタのスイッチング回路、負荷、 NPN トランジス タのスイッチング回路、グランドの順に接続することで二つのスイッチで負荷 を挟むことができるようになります。
このとき、 NPN トランジスタと同等の性能の PNP トランジスタを選定する必 要があります。同等の性能である対になるトランジスタのことを コンプリメント と言います。
このコンプリメントを使った H ブリッジ回路は図の通りです。
但し、このままでは PNP トランジスタを On, Off するにはベース側に負荷に 与える電源と同じ電圧が必要になります。 マイコンで制御するにはマイコンの電圧によるスイッチング回路を付加する必要 があります。
なお、大容量の電流をスイッチするための FET は パワーMOS FET と言います。 通常は N 型のパワー MOS FET を使いますが、このようにコンプリメントが必 要なときは P 型を使います。 なお、MOS FET は高性能ですが、静電気に弱いので取扱いに注意する必要があ ります。
トランジスタによる定電流回路はベースの電圧に応じて、コレクタに(つまりエ ミッタにも)一定の電流を流す物でした。 ここで、コレクタを直接電源につなぎ、エミッタ側に負荷を接続すると、ベー スの電圧が高いときはベース・エミッタ間電圧が VBE(≒0.6V)に なるように電流が流れ、ベースの電圧が低いときは電流が流れないようになり ます。 この回路は通常 エミッタフォロワ と呼ばれます。 ベースの電圧とエミッタの電圧の変動幅は同じになるので増幅率は 1 ですが、 高周波特性が良く、出力インピーダンスが低いので、オーディオの回路の出力 段等で良く用いられます。 但し、トランジスタは完全に On にならずにベースの電流に比例してコレクタ の電流は流れる状態になります。 そのため、コレクタ・エミッタ間に発生する電圧降下の分、トランジスタに熱 が発生します。 従って、モータの制御等でこの回路を使う際には特にトランジスタの熱対策が 必要になります。
スイッチング回路では、回路の構成により、信号側の電圧(Vi)と スイッチされる電源側の電圧(Vo)を異なるように設定できます。 バイポーラトランジスタの NPN, PNP と FET の N型, P型の各回路での 制約をまとめると以下のようになります(但し Vi, Vo≥ 0 と仮定します)。
トランジスタ型 | 回路 | Vi(OFF) | Vi(ON) | Vo の制約 |
---|---|---|---|---|
NPN BTr | Vi<0.4V(ベース電流が流れないベース電圧) | Vi> 0.8V, Ii> 20mA (ベース・エミッタが飽和するベース電圧、ベース電流) | 0.2V以上(ベース・エミッタ飽和電圧の最大値) | |
PNP BTr | Vi>Vo-0.4V | Vi<Vo-0.8V, Ii> -20mA | 0.8+0.2V以上(ON 時のベース電圧+ベースエミッタ間飽和電圧) | |
N型 FET | Vi<1.8V(ドレイン電流が流れないゲート・ソース間電圧) | Vi> 4V (ドレイン電流が飽和するゲート・ソース間電圧) | 自由(FET の場合ドレイン・ソース間は抵抗と等価) | |
P型 FET | Vi>Vo-1.8V(ドレイン電流が流れないゲート・ ソース間電圧) | Vi< Vo-4V (ドレイン電流が飽和するゲート・ソース間電圧) | 4V以上(ON 時のゲート・ソース間電圧) |
マイコンで駆動する限り NPN, N型に関しては大した差はありません。 特に大電流が必要な場合、 NPN トランジスタだとコレクタ電流に応じてベー ス電流を多く流す必要が出てきますが、 N型 FET では定められた電圧をかけ ることが全てで、電流はほとんど流れません。 したがって、 N 型 FET の方が望ましいと言えます。 一方、電源側でスイッチングする PNP, P 型に関しては、 Vo の 制約が出てきます。 特に、 P 型 FET では 4V 以上無いと動作できません。 従って、模型のような 1.5V から 3V の電源は P 型 FET で組んだブリッジではコントロールできませ ん。 つまり、模型用のモータなどを駆動する時に、電源側のスイッチングを行うには PNP 型のトランジスタを用いる必要があります。 なお、 PNP 型の入力には Vo の制限がありますが、以下のように、 入力側に NPN のスイッチング回路を入れることで解決できます。
このようにモータを動作させるための回路はスイッチング回路の組み合わせで 構成します。 特に、H ブリッジを組むためには、最低でも 4 つのトランジスタが必要です。 モータをコントロールするためのトランジスタを一つの IC にまとめた物 を モータドライバ と呼びます。 モータドライバにはDC モータ用の H ブリッジもありますが、これとは別にス テッピングモータ用の二組二対の回路の入った物もありますので選定する際は 注意する必要があります。
DCモータ用のモータドライバとして代表的なのが東芝の TA7291 シリーズです。 データシートを参照すると下図のような等価回路が書かれています。 全て NPN のトランジスタによりスイッチングが行われます。 従って、グランド側のスイッチング回路は通常のオープンコレクタのスイッチ ング回路です。 一方、電源側のスイッチング回路はエミッタオープンになっています。 エミッタオープンによりベース電圧 Vref を基準電圧としてモータ に与える電圧をコントロールできます。 しかし、Vs と Vrefの差は常に熱エネルギーに変わっ てしまいます。
以下の回路を組み、モータの特性を調べます。 A,B と C,D にオシロスコープをつなぎます。 スイッチを入り切りして、その時の電圧の変化を調べます。
機材 | 数量 |
---|---|
ブレッドボード | 一式 |
マブチモータ FA-130RA | 1個 |
ダイオード 1N4007 | 1本 |
基板用タクトスイッチ | 1個 |
0.1Ω 5W抵抗 | 1本 |
電源装置 | 1式 |
オシロスコープ | 1式 |
実験 8-1 のスイッチの部分をパワー MOS FET に変更し、マイコンで制御します。 マイコンには演習 7-3 のスイッチにより Duty 比が変わるプログラムを用意し、 PORTD に FET につなぎます。 Duty 比や全体の周期を切替えて、どのようにモータが回り、どのように電圧 が変化するか調べなさい。
機材 | 数量 |
---|---|
ブレッドボード | 一式 |
電池と電池ボックス(4.5V) | 一式 |
ATtiny2313 | 一式 |
マブチモータ FA-130RA | 1個 |
パワー MOS FET 2SK2231 | 1石 |
ダイオード 1N4007 | 2本 |
10kΩ | 1本 |
22kΩ | 1本 |
基板用タクトスイッチ | 1個 |
0.1Ω 5W抵抗 | 1本 |
電源装置 | 1式 |
オシロスコープ | 1式 |
なお、ここで指定している FET の 2SK2231 は廃番予定になっている。 代替品としては以下の仕様のものを選択すること。
前回の例6-5または演習6-2 のプログラムをそのまま使います。
パワー MOS FET は静電気に弱いので取扱いに注意すること
実験 8-2 のスイッチング回路を電源側の PNP トランジスタの構成に変更します。 マイコンの制御は実験 8-2 同様に行います。
電源マークのうち、黒には電源装置を繋ぎます。 モータに 1.5V をかけるには何 V の電源が必要か測定しなさい。
機材 | 数量 |
---|---|
ブレッドボード | 一式 |
電池と電池ボックス(4.5V) | 一式 |
PATtiny2313 | 一式 |
マブチモータ FA-130RA | 1個 |
トランジスタ 2SB1018A | 1石 |
トランジスタ 2SC1815 | 1石 |
ダイオード 1N4007 | 2本 |
100Ω | 1本 |
1kΩ | 3本 |
10kΩ | 1本 |
基板用タクトスイッチ | 1個 |
0.1Ω 5W抵抗 | 1本 |
電源装置 | 1式 |
オシロスコープ | 1式 |
前回の例6-5または演習6-2 のプログラムをそのまま使います。
抵抗値 R の算出方法は次の通りです。 モータの適正負荷時の電流は 500mA です。 スイッチング回路なので、2SB1018A を飽和させるには 1A 以上のコレクタ電 流が望めるようにベース電流を考えます。 2SB1018A の hFE はコレクタ電流が 1A の時、 70 から 240 です。 そのため、ベース電流は最大 1A/70=14.3...mA 必要になります。 ここで、余裕を見てベース電流に 20 mA 流すことにします。 2SB1018A の電源電圧を仮に 3.0V と仮定します。 すると、トランジスタが On になるとき、ベースの電圧は 3.0-0.8Vになりま す。 従って、求める抵抗にかかる電圧は 2.2V、流す電流は 20mA なので、 R=2.2/0.02=110 Ω となります。 E24 系列ではそのままこれでも良いですが、大目に電流を流す分には問題ない ので、 E12(E6) 系列で R=100Ω とします。
図のようにモータドライバ TA7291P を使ってモータの制御を行いなさい。 二つのスイッチを使ってモータの動作を制御しなさい。 なお、 LED は動作確認用です。
機材 | 数量 |
---|---|
ブレッドボード | 一式 |
電池と電池ボックス(4.5V) | 一式 |
PIC 16F628A と 18pin 以上のゼロプレッシャー IC ソケット | 一式 |
マブチモータ FA-130RA | 1個 |
モータドライバ TA7291P | 1個 |
基板用タクトスイッチ | 2個 |
LED | 2本 |
330Ω | 2本 |
10kΩ | 3本 |
0.1Ω 5W抵抗 | 1本 |
3Ω 5W抵抗 | 1本 |
10μF 電解コンデンサ | 2本 |
電源装置 | 1式 |
オシロスコープ | 1式 |
入力スイッチを PD4、 PD5 とし、モータのコントロールは PD0、PD1 で 行うものとします。 接続は回路図の通りとします。
データシートにあるように、入力を切替える際に貫通電流が流れますので、指 示通り切替時に STOP モードに移るようにします。
トランジスタを一定時間 Off にする必要があるので、ここでは割り込みのタ イミングで次のような動作をするとします。
なお、データシートで指定されている一定時間は 100μs です。 ATtiny2313 は DIV8ヒューズビットが on の時(デフォルト値)ではプ リスケーラ無しでも 256μs 間隔で割り込みがかかります。 この場合は、割り込み一 回分だけOff にすれば良いです。
プログラム中、ボタンを読むところが、in work,PIND
とならな
ければならないところ、in work,PORTD
となってました。
;**********
;* 実験8-4 *
;**********
.include <tn2313def.inc>
.cseg
.org 0x0000
rjmp reset
.org OVF0addr
rjmp timer0vec
.org INT_VECTORS_SIZE
reset:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0xff
out ddrb, r16
ldi r16,0x0f
out ddrd, r16
initsleep:
in r16,mcucr
cbr r16, 1<<sm0 | 1<<sm1 ;idlemode
sbr r16, 1<<se ; enable sleep
out mcucr, r16
inittimer0:
ldi r16,0b00000000 ;normal mode
out tccr0a,r16
ldi r16,0b00000101 ; normal mode, prescaler=1024
out tccr0b, r16
ldi r16, 0b00000010 ; enable interruption for overflow
out timsk, r16
sei
main:
sleep
rjmp main
timer0vec:
rcall hbridgecnt
reti
.def prev = r16
.def now = r17
.def work = r18
.equ swmask = 0b00110000
.equ cntmask = 0b00000011
.equ offpattern = 0b11111100
.equ breakon = 0b00000011
.equ seiten = 0b00000001
.equ gyakuten = 0b00000010
hbridgecnt:
in work,PIND ;訂正箇所
mov now,work
andi now,swmask
cp now,prev
brne h1
ret
h1:
in work,PORTD ;訂正箇所
andi work,cntmask
brne setoff
mov prev,now
readkey:
sbrs now,4
rjmp rd4off
rd4on:
sbrs now,5
rjmp rd4on5off
rd4on5on: ;breakon
in work,PORTD
ori work,breakon
out PORTD,work
ret
rd4on5off: ;seiten
in work,PORTD
ori work,seiten
out PORTD,work
ret
rd4off:
sbrs now,5
rjmp rd4off5off
rd4off5on: ;gyakuten
in work,PORTD
ori work,gyakuten
out PORTD,work
ret
rd4off5off: ;off
setoff:
in work,PORTD
andi work,offpattern
out PORTD,work
ret
.exit
R の計算。 R はモータ側のトラブルなどで回路が短絡したときに、 IC を守るための電流 制限抵抗です。 そのため、 Vs が GND に短絡したときに、 IC を流れる電流が最 大定格以下になるようにします。 Pタイプの場合、平均出力電流は 1.0A 以下ですので、Vs=3.0V の 時、 3Ω 以上であれば IC を守れます。 この時、抵抗が消費する電力は 3 W になるので、抵抗の電力は 5W 程度のも のを選ぶ必要があります。
図のように FET とトランジスタなどでH ブリッジを作りなさい。 また、ATtiny2313 のportPIC にはタクトスイッチを二つつなぎます。 そして、一方のスイッチを押すと正転し、もう一方のスイッチを押すと逆転す るようにしなさい。 但し、切替える時と、両方スイッチを押した時はブレーキがかかるようにしな さい。
機材 | 数量 |
---|---|
ブレッドボード | 一式 |
電池と電池ボックス(4.5V) | 一式 |
ATtiny2313 | 一式 |
マブチモータ FA-130RA | 1個 |
パワー MOS FET 2SK2231 | 2石 |
トランジスタ 2SB1018A | 2石 |
トランジスタ 2SC1815 | 2石 |
ダイオード 1N4007 | 4本 |
LED | 4本 |
100Ω | 2本 |
330Ω | 4本 |
1kΩ | 6本 |
10kΩ | 2本 |
22kΩ | 2本 |
基板用タクトスイッチ | 2個 |
0.1Ω 5W抵抗 | 1本 |
電源装置 | 1式 |
オシロスコープ | 1式 |
マイコンでFET などのトランジスタを制御して、正転、逆転の操作を可能にします。 ここで注意しなければならないのは、絶対に貫通電流を流さないようにするこ とです。 トランジスタの性能は同じ品番でも微妙に異なっているのが普通なので、同時 に On や Off の信号を送っても同時に On や Off になる保証はありません。 そのため、切替時は一定時間すべて Off にする必要があります。
入力スイッチを PD4、 PD5 とし、モータのコントロールは PD0 から PD3 で 行うものとします。 接続は回路図の通りとします。
プログラムは実験 8-4 と同様で、出力パターンのみを変えたものになります。
;**********
;* 実験8-5 *
;**********
.include <tn2313def.inc>
.cseg
.org 0x0000
rjmp reset
.org OVF0addr
rjmp timer0vec
.org INT_VECTORS_SIZE
reset:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0xff
out ddrb, r16
ldi r16,0x0f
out ddrd, r16
initsleep:
in r16,mcucr
cbr r16, 1<<sm0 | 1<<sm1 ;idlemode
sbr r16, 1<<se ; enable sleep
out mcucr, r16
inittimer0:
ldi r16,0b00000000 ;normal mode
out tccr0a,r16
ldi r16,0b00000101 ; normal mode, prescaler=1024
out tccr0b, r16
ldi r16, 0b00000010 ; enable interruption for overflow
out timsk, r16
sei
main:
sleep
rjmp main
timer0vec:
rcall hbridgecnt
reti
.def prev = r16
.def now = r17
.def work = r18
.equ swmask = 0b00110000
.equ cntmask = 0b00001111
.equ offpattern = 0b11110000
.equ breakon = 0b00000101
.equ seiten = 0b00000110
.equ gyakuten = 0b00001001
hbridgecnt:
in work,PIND ;訂正箇所
mov now,work
andi now,swmask
cp now,prev
brne h1
ret
h1:
in work,PORTD ;訂正箇所
andi work,cntmask
brne setoff
mov prev,now
readkey:
sbrs now,4
rjmp rd4off
rd4on:
sbrs now,5
rjmp rd4on5off
rd4on5on: ;breakon
in work,PORTD
ori work,breakon
out PORTD,work
ret
rd4on5off: ;seiten
in work,PORTD
ori work,seiten
out PORTD,work
ret
rd4off:
sbrs now,5
rjmp rd4off5off
rd4off5on: ;gyakuten
in work,PORTD
ori work,gyakuten
out PORTD,work
ret
rd4off5off: ;off
setoff:
in work,PORTD
andi work,offpattern
out PORTD,work
ret
.exit
ラジコンなどで使用されるサーボモータはパルスにより角度を制御するモータ です。 サーボモータには電源、グランド、制御信号の三本の線があります。 制御信号は周期 20ms 程度のパルスを使用します。そして、 duty 比で角度を調整しま す。 1.5ms ± 0.5ms で向きが変化します。 duty 比だと 5% から 10% の範囲です。
サーボモータをコントロールするパルスをマイコンで発生します。 そして、サーボモータに接続し、実際に制御を行い、サーボモータの特性を調 べなさい。
機材 | 数量 |
---|---|
ブレッドボード | 一式 |
電池と電池ボックス(4.5V) | 一式 |
ATtiny2313 | 一式 |
基板用タクトスイッチ | 2個 |
10kΩ抵抗 | 2本 |
GWS サーボ S03T/2BB または S03T/2BBMG/F | 1個 |
0.1Ω 5W抵抗 | 1本 |
電源装置 | 1式 |
オシロスコープ | 1式 |
マイコンにスイッチを二個とオシロスコープを繋ぎ、周期20ms のパルスを発生さ せなさい。スイッチと duty 比の関係は次のようになるように、オシロスコー プで確認しなさい。
スイッチ | duty 比 |
---|---|
全部 off または全部 on | 15% |
左が on, 右が off | 10% |
左が off, 右が on | 20% |
例 6-4 2 のプログラムを参考にします。 プリスケーラを使用しない場合、割り込みは 256 μs 間隔で発生します。 従って、周期を 20 ms にするには 20/0.256 = 78.125 となります。 そこで、 duty_period(周期)を 78 にします。
duty_ratio は ATtiny2313 にふたつのボタンをつけて、増減させるようにします。 また、 duty_ratio の値を 7seg LED で表示するようにします。 このため、 PD4, PD5 にはスイッチを繋ぎ、出力は PD0 にします。 main 部分で、duty_ratio の値は、 PORTB を利用して表示させた後、 スイッチの値を読み込み、PD4 と PD5 の値に依り、 duty_ratio を変化させます。 なお duty_ratio の上限値は duty_period にしてますが、 getpat を呼び出 すときに duty_ratio が用意したパターンの数を越えると暴走してしまいます。 そのため、チェックを行っています。
;***********
;* 実験 8-6*
;***********
.include <tn2313def.inc>
.cseg
.org 0x0000
rjmp reset
.org OVF0addr
rjmp timer0vec
.org INT_VECTORS_SIZE
reset:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,0xff
out ddrb, r16
ldi r16,0x0f
out ddrd, r16
initsleep:
in r16,mcucr
cbr r16, 1<<sm0 | 1<<sm1 ;idlemode
sbr r16, 1<<se ; enable sleep
out mcucr, r16
inittimer0:
ldi r16,0b00000000 ;normal mode
out tccr0a,r16
ldi r16,0b00000001 ; normal mode, no prescaler訂正箇所
out tccr0b, r16
ldi r16, 0b00000010 ; enable interruption for overflow
out timsk, r16
ldi duty_period,dutycycle
mov duty_counter,duty_period
ldi duty_ratio,initposition
sei
main:
cpi duty_ratio,countmax
brcc errorout
mov counter,duty_ratio
cbi PORTD,3
rjmp disp
errorout:
sbi PORTD,3
disp:
rcall dispcounter
rcall watchsw
rjmp main
.def pattern = r16
.def counter = r17
.def duty_period = r18
.def duty_counter = r19
.def duty_ratio = r20
.def sw_prev = r21
.def work = r22
.equ dutycycle = 78
.equ initposition = 5
watchsw:
in work,PIND ;訂正箇所
eor work,sw_prev
andi work,swmask
brne w1
ret
w1:
in sw_prev,PIND ;訂正箇所
sbrs sw_prev,4
rjmp rd4clr
rd4set:
sbrs sw_prev,5
rjmp pat10
rjmp pat11
rd4clr:
sbrs sw_prev,5
rjmp pat00
rjmp pat01
pat00:
pat11:
nop
ret
pat01:
subi duty_ratio,1
brcs pat01a
ret
pat01a:
inc duty_ratio
ret
pat10:
inc duty_ratio
cpi duty_ratio,countmax
brcc pat10a
ret
pat10a:
dec duty_ratio
ret
.equ swmask = 0b00110000
timer0vec:
push work
in work,SREG
push work
push sw_prev
rcall duty
pop sw_prev
pop work
out SREG,work
pop work
reti
duty:
inc duty_counter
cpi duty_counter,dutycycle
brcs duty1
clr duty_counter
duty1:
cp duty_counter,duty_ratio
brcs onstate
rjmp offstate
onstate:
sbi PORTD,0
ret
offstate:
cbi PORTD,0
ret
dispcounter: ;counter の値を表示
ldi ZH,high(startdata<<1)
ldi ZL,low(startdata<<1)
add ZL,counter
brcc dispcounter1
inc ZH
dispcounter1:
.equ mask = 0b00001000
cli
in work,portb
andi work,mask
lpm pattern,Z
or work,pattern
out portb,work
sei
ret
inccounter:
inc counter
cpi counter,countmax
breq inccounter1
ret
inccounter1:
clr counter
ret
startdata:
.db 0b01110111, 0b00010100 ;0,1
.db 0b10110011, 0b10110110 ;2,3
.db 0b11010100, 0b11100110 ;4,5
.db 0b11100111, 0b00110100 ;6,7
.db 0b11110111, 0b11110110 ;8,9
.db 0b11110101, 0b11000111 ;A,b
.db 0b01100011, 0b10010111 ;C,d
.db 0b11100011, 0b11100001 ;E,F
enddata:
.equ num_start_adr = startdata <<1
.equ num_end_adr = enddata << 1
.equ countmax = low(num_end_adr - num_start_adr)
.exit
次にサーボに接続します。サーボの配線は次のようになっています。
信号線 | 電源+ | GND | |
---|---|---|---|
JR | 橙 | 赤 | 茶 |
フタバ | 白 | 赤 | 黒 |
信号線をマイコンの出力に繋ぎ、一方、サーボの電源は 0.1Ω 5W の抵抗を 介して 5V の電源装置に繋ぎます。
あるいは、 マイコンと電源を共有する場合は、マイコンの電源ピンのそばに 0.1μF のセラミックコンデンサと、 10μFの電解コンデンサをマイコンの電源とGND の間 につなぎ、モータから出るノイズをカットします。
これでもダメな場合は、サーボとマイコンの電源を分けます。 具体的には、GND は共通にし、サーボの電源+だけ別の電池をつなぎます。
簡単のため、 duty_period を 78 から 80 に変えても良い。
ステッピングモータはパルスを送ることで回転角を制御します。
部品 | 個数 |
---|---|
マブチモータ FA-130 | 1個 |
GWS サーボ S03T/2BB(JR またはフタバ) | 1個 |
モータドライバ TA7291P | 1個 |
パワー MOS FET 2SK2231 | 2石 |
トランジスタ 2SB1018A | 2石 |
トランジスタ 2SC1815 | 2石 |
ダイオード 1N4007 | 4本 |
LED | 4本 |
0.1Ω 5Wセメント抵抗 | 1本 |
3Ω 5Wセメント抵抗 | 1本 |
100Ω | 2本 |
330Ω | 4本 |
1kΩ | 6本 |
10kΩ | 3本 |
22kΩ | 2本 |
0.1μF (積層)セラミックコンデンサ | 1本 |
10μF 電解コンデンサ | 2本 |
基板用タクトスイッチ | 2個 |
3V 分の電池と電池ボックスセット | 1式 |
3pinの電源用の基板コネクタ(千石通商) | 1個 |