スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

基板製作処 elecrow

本日2回目の記事!(。-`ω-)

よさげな基板製作屋さん見つけました~
elecrowってとこです。もしかしたら僕が知らなかっただけかも?

基盤の色を無料で選べることがポイントだったらしいんですけど、今セールしてて2層の10*10cm緑色限定が13ドル!!
送料込みで25ドルくらいで買えます。fusionPCBより安い!
てことで、試しにこの前のを改良したものを発注してみました。届くの楽しみ~
改良点は抵抗値やコンデンサの容量書き込んだり、秋月のジャイロ乗っけたり。
衝撃の事実でEAGLEに文字書き込むの今まで線引いてやってたけど、T押したら文字入力できた…なぜ気づかなかったし。。
01252.png


部品表も作りましたが、オリエンタルモーターさんに無償提供して頂けたら8000円弱で作れそうな感じです。
そして今年の新作これでいいかな感。

スポンサーサイト

壁の有無を判定する1

こんにちは!
前回までで好きな距離を任意の速度で進めるようになりました。
具体的には

・任意の速度でモーターを回せる
・MTU割り込みを設定できる

という前提を獲得しています。

そしてついにタイトルが変わりました!
今回からは姿勢制御や迷路探索の基本となる、壁の有無を判定できるという前提を獲得しに向かいます。

そのために知らなければいけないことは、

・壁からの距離はどうやって認識しているのか →LEDとPTの話
・得た情報をマイコンはどう認識しているのか →AD変換の話
・得た情報をどう使うか →壁関連のプログラムの話

となります。
この構成で話を進めるつもりですが、前回までのように必要が出たらその度に寄り道していこうと思います~

では、壁からの距離をどう認識するかの話
これにはLEDとフォトトランジスタ(PT)を使うのが一般的かと思います。
これの原理等は昨年の夏くらいに講義をしました。部室のUSBに“電子回路”というWordファイルがありますのでその資料を見てもらえればと思います。簡単に説明すると、ノイズを軽減するようにLEDをパルス発光させる。LEDから出た光が壁に反射し、壁から反射してきた光量に応じてPTを通る電流が変わり、マイコンに来る電圧が変わる。(うーむ分かりづらいか)
つまり、壁からの距離を電圧の大小という形に替えて、マイコンで認識するということです。

次に壁からの距離を変換して得た、電圧の大小をマイコンはどうやって認識するかという話。
これには、マイコンの機能の1つであるAD変換というものを行います。
AD変換はアナログ・ディジタル変換のこと。つまりアナログの情報をディジタルの情報に変換するということです。
例えばSH7125のAD変換について見てみると、こんな説明が書いてあります。
01251.png

分解能 10bitというところに注目してください。
AD変換で言う分解能とは、どれくらいの細かさでアナログ情報を表現できるかということです。
2^10は1024なので、SH7125では0~1024の値でアナログ情報である電圧が表現されるということになります。

では具体例として、720という値は何Vに相当するか考えてみましょう。
これを求めるためにはアナログ電源電圧が何Vになっているかという情報が必要となります。秋月で買うマイコンボードだとマイコンのVCC(電源電圧を示す)という端子に5Vを繋いだ瞬間AVCC(アナログ電源電圧)も同じ電圧の5Vに設定されるようになっています。しかし、AVCCをVCCと違う値にするということもできますので、頭の片隅に置いてもらえればと思います。
さて、AVCCの値で何が決まるかという話に戻ります。
例えばAVCCが5Vのとき、AD変換の最高値は5Vということになります。先ほどの分解能10bitの例では、1024が5Vに相当するということです。
ですので、720という値は 1024:5=720:x で x=3.5 くらいと分かり、720は3.5Vくらいを指しているということになります。

このようにAD変換を行うことでマイコンに電圧が何V来ているかということが分かり、それを使って壁からの距離を判定しているということになります。
このことから分解能が高いとアナログ情報をより正確にディジタル情報にできるということが分かるかと思います。

それでは、AD変換で得た数値を使ってどのように壁の有無を判断するか考えましょう。
壁があるってことは、壁がないときよりも光の跳ね返りが大きいので、得られる数値が大きくなることが想像できるかと思います。これを利用して、ある値よりも大きな値を得た時、壁があると判断します。
ここで言う、ある値が部室などでよく耳にしたであろう 閾値(しきいち) です。
閾値以下の値:壁なし 閾値以上の値:壁有 となる重要な値のため、勘で決めたりせず実際に値をPCに出力して決める必要があります。

まとめ
LEDとPTで壁からの距離を電圧に変換する。
マイコンでその電圧を読み取って数値にする。(プログラムは次週)
閾値を決めることで壁の有無を判断する。

って感じです。
次週はLEDをパルス発光させる話と、AD変換を行うためのプログラムについて見ていきましょう!
ではでは( ..)φ

180mm進もう7

今晩は!
今日はいよいよ180mm進もうのラスト~

今日までの記事でできるようになることをまとめておきます。

・MTUを使った割り込み
モーターの速度を自由に変えられる←今日で完成

たったのこれだけ。
しかし、これができるだけで旋回や加減速、スラロームなど基本動作もできるようになるのです!
では、180mm進めるようになりましょう。

まず、前回の記事で1ms毎に割り込みを発生させ、
モーターに送るPWMの周期に設定したTGRAにを決めていくとしました。

例えば速度2000[mm/s]で走りたいときに、いきなり2000[mm/s]に応じたTGRAを設定したらステッピングモーターは回転を始めるでしょうか?マウスの大会見たことある人は直感的に何か無理そうって思うかな。答えはモーターは回転しません。

これはなぜかを説明していきます。
原因は脱調です。
脱調とは何かしらの要因でステッピングモーターが止まることです。代表的な例として、
1、パルス周期の急激な変化についてこれない
2、過負荷(タイヤの回転速度に対して機体重過ぎなど)でトルクが足りなくなる
があります。

さっきの例では1で無理です。
脱調が起こるので、早い速度を出すためには脱調をしない加速度で加速するということになります。
で、加速度と速度から、1ms毎にTGRAを決定します。

自分のプログラム書こうかとも思ったんだけど、こっからは人によって違ってくるんだよな~
ということで僕が2年前に使っていたプログラムの簡易版を例に挙げます。(改良の余地がたくさんあります)

登場する変数の説明
distance:距離
tar_speed:目標速度
speed:現在の速度
accel:現在の加速度
cha_speed:0で減速、1で速度キープ、2で加速

登場する定数の説明
min_speed:最低速度
dt:単位時間

登場する関数の説明
go180():180mm進む関数
calc_TGRA():1ms毎にTGRAを計算する関数

具体的なプログラムは
01171_2014011723373945b.png

て感じ。なんかFC2はインテンドがうまくできないので写真で失礼。
Mice諸君、書いてある文を頑張って読み解くんだ!

最後のTGRAを求める式ですが、例えば単位時間は0.001[s]で2000[mm/s]で進もうと思ったら0.001[s]で2[mm]進まないといけないことになります。つまり2[mm]ぴったり進むパルス数を1[ms]中に送ります。それで実は、これは進もうの1の問題に出してるようにすぐ計算できます。

2[mm]進むには
2/(1パルスでタイヤが動く距離):送るべきパルス数
で求めたパルス数をモータドライバに送ればOKです。

ここで、1パルスでタイヤが動く距離ってのは具体的にはモータドライバのモードに依存していて、例えば128パルスで1回転するとかをこちら側が決めているので、自分のマウスのタイヤの直径を測って、
タイヤの直径/(モーターが1回転するパルス数)
で求めることができます。

次に送るべきパルス数が分かったのでこれをTGRAに変換します。
これはカウンターの速度に依存します。進もうの6でやったので怖くないよ!

欲しい情報はカウンターがどんな値で単位時間となるか、です。
例えば単位時間が1[ms]のとき、TCNT(カウンター)が3250カウント:1[ms]となるなら
PWMの周期を司るTGR~(例ではTGRA)を650に設定すれば1[ms]で5回パルスが送れるということです。

この2文が大事なのでこれが何を言ってるかよく分からない人はPWMの記事を読み直して欲しいです><

以上から、
(単位時間となるTCNTの値) / (送るべきパルス数) 
がTGRAの値(PWMの周期)となります。

そしてこれらを整理すると、dt=0.001のとき
TGRA=(単位時間となるTCNTの値) / (送るべきパルス数)
=(単位時間となるTCNTの値) / (speed*0.001/(1パルスでタイヤが動く距離))
={(単位時間となるTCNTの値)*(1パルスでタイヤが動く距離)*1000} / speed
で、求めることができるというわけです。

以上で、好きな速度を出すプログラムができました。
これで、好きな速度になるように走れる&進んだ距離もわかるという状態になります!

ここまで読んで、tmp_TGRAとやらの求め方はわかったが、なんでTGRAに直接代入しないんだよって疑問がわいたでしょうか。ここまで書いて気づきました、tmp_TGRA要らない…wなんでtmpって置いたんだろう。。言い訳するとステッピングモーター時代のプログラムを見て記事を書いたので、昔使っていたTGRAを増減させるという制御方法のためにtmp_TGRAを用意してしまいました。そして今年使ったDCモーターではtmpが正か負かで正転逆転コントロールしてたのでtmpの登場に何の疑問も持たなかった。前回の記事を修正してお詫び申し上げます><前回の記事で1[ms]毎にTGRAを読み込むとか言いましたが、
「1[ms]毎にTGRA(PWM周期)を計算して代入していく」が正しいやり方でしたね…
今までの記事でtmp_TGRAってなってるのはMTU20.TGRAとかに脳内変換してもらえると助かりますw
制御はspeedを増減させて行うことにしましょう。

さて、とりあえずこれでモーターは好きに動かせるかな。
もう好きな速度でモーターが動くってのを前提にしちゃうよ('◇')ゞ
一番厄介なのが終わったのでこの先の記事はスイスイ項目が変わっていく予定です~

ではでは(*´ω`)

180mm進もう6

追記:重大な間違いがありました。赤は追記です。

今晩は!
寒い寒い寒い(ノД`)
早いものでこのシリーズも6回目になりました。「この説明要るな~、あ、そしたらこの説明もいるな~」ってやってたら180進もうの終わりが全く見えなくなりましたw

とりあえず前に進んで行こう(*´ω`)
まずは先週の課題から
SH7125でPWMを使うときの手順5でPWMモードを選ぶときに、PWMモード1に設定してみましょう。
PWMモードの選択は
MTU→TMDR(タイマモードレジスタ)→MD[3:0]
で設定します。自分で発見できたかな?
MD[3:0]ってのはMDには{0,1,2,3}の4bit分が割り当てられてるよってことで、10進法だと0~15までの16通りがあります。その中で設定禁止の項目があるので(下図参照)実質12通りから選択します。
01111.png

図からPWMモード1はMD1だけが1なので、
0*2^3+0*2^2+1*2^1+0*2^0=2
(こう書くと逆にわかりづらいか…)
なのでチャンネル0を使うとすれば、

MTU20.TMDR.BIT.MD=2;

が正解となります。
今回の問題に限らずルネサス製のマイコンで設定の文言は"○○○.○○○.BIT.○○○=○;"って形が大半です。
問題の解答は以上です。
----------------


今週は、PWMの割り込みの話とカウンター(TCNT)の速度の話です。
進もうの3で単位時間dtを0.001[s]に設定して、理想速度になるようにPWMの周期を設定すると理想速度の積分から進んだ距離が分かるよって感じの話をしました。
では実際に単位時間をそれにするのはどうするのってのが今回の話です。

まず正確に0.001秒を作らないといけません。これにはご存知の割り込みを使います。で、SH7125にはCMT割り込みとかMTU割り込みとかがあるのですが、気を付けないといけないのは例えば割り込み関数の中に処理がずらずらあるとしてその関数の最後にPWMの周期やDutyを変えるような処理を書いてしまうと、正確に0.001秒で速度を変えるという前提が怪しくなってしまいます。なのでお勧めは、PWMの周期とDutyだけを変える割り込み関数を新しく作ることです。

ということで割り込み関数を作っていきます。
今回は例としてMTU2のチャンネル1で割り込み関数を作るとしましょう。
新しく割り込み関数を作るときに大事になるのは、割り込み発生タイミングの設定と割り込み関数の設定です。

割り込みタイミングの設定はPWMの時に述べたカウンター(TCNT)とTGRBのコンペアマッチを使って設定します。他にもTCNTのフローやTGRAのコンペアマッチなど、MTUのチャンネルごとに割り込みの条件として使える要因がいくつかあるので、色々な設定ができます。例ではカウンターがアップしていって、TGRBとコンペアマッチしたら割り込み発生って感じのイメージで作ります。

ここでカウンター(TCNT)の進む速度の話。
カウンターはカウントスタートの処理と同時に自動的に数が上がる(もしくは下がる)のですが
進む速度が分からなければタイミング設定ができません。正確な時間は水晶発振子からマイコンに送られてくるクロックを使います。しかしそのクロックはとても早いので、例えば10秒ごとに割り込みをさせたいと思ったときにマイコンに来ているクロックを使おうとすると、250000000カウント必要->TGRAの上限である65535をオーバーしてしまうなどの事態が発生します。そこで出てくるのがプリスケーラーです。これは、マイコンに4クロック来たらTCNTは1カウントとするなど、マイコンのクロック何回分でTCNTを1カウントとしますか?という設定です。

では実際に割り込み発生タイミングの設定と割り込み関数の設定をしていきましょう。

STB.CR4.BIT._MTU2 = 0; //MTUスタンバイ解除
MTU2.TSTR.BYTE = 0; //カウンタ動作停止
まずは前回説明理由から上の2文を宣言
本当はレジスタから説明したいのですが、時間がかかって進まなくなってしまうので、天下り的にこの宣言が必要この宣言が必要、と、必要な文を教えていく感じにします。(といいつつ前回もそうだったかも^^;)

まずTGRBコンペアマッチによる割り込みを許可
MTU21.TIER.BIT.TGIEB = 1; //TGRBコンペアマッチによる割り込みを許可
予想できるかもしれませんが最後のTGIEBをTGIEAに変えるとTGRAとのコンペアマッチで割り込み可能になります。ちなみに前回は先頭が全部MTU20でしたが、今回はチャンネル1を使うので先頭はMTU21です。

次に割り込みの優先度を設定。
INTC.IPRD.BIT._MTU21G = 0xf; //割り込み優先度を高めに設定
これはどの割り込みよりも優先して実行してほしいので、0~15ある優先度でMAXのf(16進法で15)を選択しました。

次にプリスケーラーの設定。
MTU21.TCR.BIT.TPSC = 1; // プリスケーラ φ/4 {(φ=25MHz):0.04us }
データシートを見るとφというのが所々で登場します。
これは何かというとマイコンに来ているクロックの周波数です。Miceの皆さんが秋月で買うSH7125のマイコンボードには12.5Mhzの水晶発振子がついています。これがマイコン内の回路によって25Mhzのクロックとなり、使われます。原理は僕もよく分からないですがとりあえずφ=25Mhzです!(誤魔化した)
そして今回はTPSC=1を選択しましたがこの設定によって下表のようにφ/4でカウンターが進むということになります。これは、言い換えればマイコンでの4クロックがTCNT1カウントということです。
01112.png

ということで割り込み間隔を司るTGRBの設定をします。
MTU21.TGRB = 6250-1; //割り込み間隔[s]/{(1/φ)*プリスケーラー}
6250がどうやって出てきたかというと、目的の割り込み間隔は0.001[s]で
マイコンでの1クロックは1/25000000=4*10^(-8)[s]
今回設定したプリスケーラーからマイコンでの4クロックがMTUカウンターの1カウントなのでカウンターの進む速度は4*4*10^(-8)[s]
ということで設定すべきTGRBは0.001/{4*4*10^(-8)}=6250です。
-1してるのはコンペマッチの瞬間割り込みが発生してカウンターが0になるからです。
あ、ちなみに今回のように0.001秒など短い時間で割り込む分にはプリスケーラーを0(マイコンのクロックとカウンターの速度同じ)に設定しても何とかなります。

カウンターをスタートすれば完了
MTU2.TSTR.BYTE = 1;//カウンタスタート

これで、割り込みは発生します。
では次に割り込み関数を作りましょう。
上の手順で割り込み発生とは、具体的にはTGRBの割り込み許可が出ていて、TGRBコンペアマッチが発生したことによって、intprg.cファイルの210行付近
void INT_MTU2_1_TGIB1(void){/* sleep(); */}
↑この関数が実行されたということです。これを見てお分かりの通り中身が何もありません。ですので、コメントを消して中身を書けばその処理がされるので今回は短い内容ですし書き込んじゃいましょう。例としてMTUの0チャンネルで右モーター、MTU3チャンネルで左モーターを回しているとすると、
void INT_MTU2_1_TGIB1(void){
  MTU21.TSR.BIT.TGFB = 0;
  MTU20.TGRA=round(tmp_rmotor_TGRA);次週詳しく
  MTU20.TGRB=MTU20.TGRA/2;
  MTU23.TGRA=round(tmp_lmotor_TGRA);
  MTU23.TGRB=MTU23.TGRA/2;

  calc_TGRA();
}

正しくは、tmpと置かずに1[ms]ごとにTGRAを計算していくでした。
なので1[ms]毎に割り込むINT_MTU2_1_TGIB1関数内にcalc_TGRA関数を置くことで、PWMの周期であるTGRAを決定することにします。詳しくは180mm進もうの7回目と合わせて見てください。


という感じにすることで、ついにPWMでモーターが回せるようになります。

まず1行目ですがこれは全ての割り込みに必要なフラグクリアってやつです。実はコンペアマッチが発生したときにこのMTU21.TSR.BIT.TGFBが0->1になることで割り込みが発生できたのです。これがないと、もう一度TGRBとコンペアマッチしても1->1で割り込みは発生しません。
round()は進もうシリーズで課題で出した丸め込みのマクロです。各チャンネルでTGRBをTGRA/2としているのはDutyを50%にしていることと同じです。
実は今回モーターのMTUチャンネルを0と3に選んだのには理由があります。バッファ動作という何かがあって、PWMでパルスを送っているときに周期やDutyを変えるのはこのバッファでやると良いです。しかし、まあそんなに大事ってわけでもないので割愛します。ヒントとしてはMTU23.TGRC=round(tmp_lmotor_TGRA);のようにTGRA=でなくTGRC=となります。

さて、大分駆け足で申し訳なかったです。ついてこれましたか;w;
次週はいよいよ0.001毎のTGRAを求めてみます。(上で言うtmp_lmotor_TGRAに当たるところです)
終わりが見えてきたかも?w
ではでは(*^-^*)

発注~

今晩は、久しぶりに普通のブログー。

例のやつ発注できました。
昨日配線終わって、一晩寝て冷静になってから手直しして↓こんな感じ

01061.png

今回は拡張性を持たせたかったので、5VとGNDの何にも使ってない穴がたくさんあります。マイコンボードの足から被膜線飛ばして繋げれば色々できるよ~って感じにするためです。

プリント基板の配線の腕は…
相変わらず下手くそですが前よりかはうまくなった気がします。
ところで線の太さですが、ネットで拾った情報によると
0.010"(0.254mm) 0.3 Amps
0.015"(0.381mm) 0.4 Amps
0.020"(0.5mm)   0.7 Amps
0.025"(0.635mm) 1.0 Amps
0.050"(1.27mm)  2.0 Amps
0.100"(2.54mm)  4.0 Amps
0.150"(3.81mm)  6.0 Amps
に収まっていれば良いらしいです。
案外細くても良いんだなってのが印象です。

就活の方は、いよいよ今週ES持って行く企業があります!
今日も説明会行ってきましたが、就活生の質問もえぐさを増してきてて雰囲気がすごかったです。
家族内で院に行っても良いよって感じになったので、少し気が楽になりました。もちろん手を抜くつもりはないですけど。情報工学系の強みは学部と院の有利不利なしに2回就活できることかも。
今日はゆっくり眠れそう(。-ω-)zzz

180mm進もう5

明けまして、おめでとうございます!
本年も健康に気を付けて頑張って参りましょう(*´ω`)

前回はPWMの用語の説明をしました。
今回はPWMの設定についてみていきます。

12281_20131229031619fcc.png

PWMの設定は上の図の流れで行うことで発動します。
上の図を少し補足(付けたし?)すると

0、MTU2を使う準備をする
1、カウンターの速さを決める
2、カウンタクリアのタイミングを決める
3、TGRA,TGRB,TGRC,…,とコンペアマッチしたとき何をするか決める
4、周期とDutyを決める
5、複数あるPWMモードのうち、どのPWMモードを使うか決める
6、カウントスタートする

となります。
では、0~6まで順に見ていきましょう。
ここでは例としてSH7125のPWMモード1をTIOC0A端子(PE0と同じ端子)からPWM出力をしてみます。

ちなみに、どうしてTIOC0AとPE0とか同じ端子なのに呼び方が変わるの?
という疑問が湧くと思いますが、機能ごとに違う呼び方があるためです。
例えば端子1つに対してPE0としか呼べない場合、PE0、PE2、PE4はPWM出力できるけどその他のPEはPWM使えないと言ったように、データシートがややこしくなるのが容易に想像できます。最初は混乱すると思いますが1つの端子に2つ以上の呼び方があったら呼び名の数だけ機能があるんだなーくらいに思ってください。秋月のSH7125のマイコンボードの説明書だと端子1つにあたかも1つしか呼び方がないようで混乱を招きますが、マイコンの端子一本に機能が1つとは限りませんので要注意。

-------------------------------
では気を取り直して、
0、MTU2を使う準備をする
1~6の手順でPWMモードを使う準備はできますが、実際に使うときは、あらかじめ端子の状態が変わるようにしていないといけません。そのために、まずは(PE0・TIOC0A)端子をTIOC0Aとして使うよという宣言が必要です。デフォルトは「PE0として使用」になってますのでPEとして使うときは下の2文を宣言しなくても大丈夫です。

PFC.PECRL1.BIT.PE0MD = 1;
PFC.PEIORL.BIT.B0 = 1;

この2文が(PE0・TIOC0A)端子をTIOC0Aとして使うよという宣言になります。
次にこの2文

STB.CR4.BIT._MTU2 = 0; //MTUスタンバイ解除
MTU2.TSTR.BYTE = 0; //カウンタ動作停止

上の文はMTUを使うよという宣言です。これがないとMTUに従属しているPWMモードは発動ができません。
補足としてそれらの関係図
01041.png
ちなみにMTU2の2は何かというとマイコンが進化した証です。
SHより新しいシリーズのRXでは、MTU3になってます(^p^)
コメントでカウンタ動作停止と書いてある文について、PWMの周期やDutyよりさらに根本の設定はカウンタを止めて行う必要があるのでこの文が必要です

これで0は終わりです。
0は誰かに教えてもらわないとマイコンはじめたての人は大難関ですね~

1、カウンターの速さを決める
カウンターの速さを決めましょう。今回の例ではMTU2のチャンネル0を使うので
MTU20.TCR.BIT.TPSC = 2; // プリスケーラ MPφ (MPφ=25MHz):0.04us(次週詳しく)
となります。
ここでちょっとレジスタ関係の説明。
レジスタとは設定が保存される場所です。
当然ですがC言語で書いた英数字がそのままマイコンに送られているわけではなく、コンパイラで機械語にされて送られます。例えば上のような文を書いたときには結果的にMTU20.TCR.BIT.TPSCに割り当てられているメモリが0か1になるわけです。そしてマイコン上ではそのメモリが0か1かを読み取って処理を行っているということです。(これ書いててマイコンさん改めて偉大だと思った)

で、結果的にはそうなのですが、ユーザーが分かりやすいように、C言語での設定がしやすいように機能ごとにまとめられていたり、'.'を使った法則があるという感じです。

MTU20.TCR.BIT.TPSC = 2;この文だけ見ると気持ち悪いですが、
MTU2の0チャンネルだからMTU20で、タイマコントロールレジスタの設定だからTCRでその中のTCNTの速度を決めるのはTPSCだからTCR.BIT.TPSCね、と、慣れてくるとこの法則があることがとても親切でありがたいものだと気づくはずです!w
それで、=2;ってところで速さを選んでいます。今回はTCNTは0.04[us]毎に自動的に1カウント上がります。

2、カウンタクリアのタイミングを決める
とりあえずこの図にあるようにTGRAでカウンタクリア、TGRBで出力って感じにしてみましょう。
01042.png

MTU20.TCR.BIT.CCLR = 1; // TGRAコンペアマッチでTCNTクリア
データシートの表からTGRAとコンペアマッチするとTCNTがクリアとなる設定(=1)を選びました。
この設定はつまりPWMの周期になるということが分かってくれると嬉しいかも ^^) _旦~~

3、TGRA,TGRB,TGRC,…,とコンペアマッチしたとき何をするか決める
さっきの図の動作になるようにTGRBとコンペアマッチしたときは出力するようにしましょう。
ということで
01043.png
から
01044.png
と順にみていくと、
IOBを2にしたときにTGRBのコンペアマッチで1出力(端子を5Vにする)になることが分かります。
従って、
MTU20.TIORH.BIT.IOA = 1; // 初期状態:0 コンペアマッチ:0
MTU20.TIORH.BIT.IOB = 2; // 初期状態:0 コンペアマッチ:1
となります。

4、周期とDutyを決める
これは180mm進もうの2で話したように1[ms]毎に周期とDutyを変えることになるので、とりあえずは適当な値
に設定しました。
MTU20.TGRA = 6200; //周期(今は適当)
MTU20.TGRB = 99; //Duty(今は適当)

5、複数あるPWMモードのうち、どのPWMモードを使うか決める
今回はPWMモード1なのでPWMモード1に設定したい!->宿題

6、カウントスタートする
MTU2.TSTR.BYTE = 1; //カウンタ動作開始

-------------------------------

以上0~6の手順を踏むとPWMが使えます~
ようやく具体的なところには入れてよかった。
今週の問題は5,のPWMモード1に設定することです
次週はPWM用の割り込みの話と、カウンターの速度の話をするよ~

それと、どうやるかも分からないキット案はただいま配線中まで来ました。
就活しろと言われたら何も反論できない…
01045.png

ではではまた次週~(*^-^*)
時計
カテゴリ
最新記事
12月14日開始
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。