前回ブラシレスDCモータを回転させた。
今回はとりあえず内蔵基板のエンコーダの値を読み取ってみる。
- ロータリーエンコーダ
- 波形を読み取る
- プログラム
- 測定結果
- 次回
色々調べてもコードが入力できないなぁと思っていたけど、原因が分かったので書いておく。
はてなブログには編集モードが「見たままモード」「はてな記方」「Markdown記法」の3種類があるっぽい。
はじめは「見たままモード」になっており、このモードだと一回記事を書いてしまうと後から変更できない+コードは張れないことが判明した。
基本設定で「はてな記法」にしたのでコードは無事に張れそうなので下記で使用したmaxiamaのコードを保存しておく。
marurunru.hatenablog.com
基本的には難しいことはせずに式を定義してラグランジュの運動方程式のみをmaximaに解いてもらうようなコードのみを書いた。
depends(θp,t); depends(θr,t); /*振子*/ /*重心座標*/ xp:lp*sin(θp)/2; yp:lp*cos(θp)/2; /*重心速度*/ dxp:diff(xp,t); dyp:diff(yp,t); /*エネルギー*/ Kpt:ratsimp((mp*dxp^2)/2+(mp*dyp^2)/2); Up:mp*g*lp*cos(θp); Kpw:(Jp*(diff(θp,t))^2)/2; /*ロータ*/ /*重心座標*/ xr:lr*sin(θp)/2; yr:lr*cos(θp)/2; /*重心速度*/ dxr:diff(xr,t); dyr:diff(yr,t); /*エネルギー*/ Krt:ratsimp((mr*dxr^2)/2+(mr*dyr^2)/2); Ur:mr*g*lr*cos(θp); Krw:(Jr*diff(θp+θr,t)^2)/2; /*sin^2+cos^2=1で式を整理*/ Kpt:mp*lp^2*(diff(θp,t))^2/8; Krt:mr*lr^2*(diff(θp,t))^2/8; /*ラグラシアン*/ L:(expand((Kpt+Kpw+Krt+Krw)-(Up+Ur))); /*損失エネルギー*/ D:(up*diff(θp,t)^2+ur*diff(θr,t)^2)/2; /*ラグランジュの運動方程式*/ tp : ratsimp(expand(diff(diff(L ,diff(θp,t)),t)-diff(L,θp)+diff(D,diff(θp,t))),diff(θp,t,2),diff(θr,t,2),diff(θp,t),diff(θr,t),g); tr : ratsimp(expand(diff(diff(L ,diff(θr,t)),t)-diff(L,θr)+diff(D,diff(θr,t))),diff(θp,t,2),diff(θr,t,2),diff(θp,t),diff(θr,t),g);
maximaで使用している関数で忘れた箇所があれば下記のまとめサイトで確認できる。
ja.wikibooks.org
前回でモデルに必要な式の導出を行った。
今回はラグランジュの運動方程式を計算するためにmaxiamaを使用して式を計算する。
(maximaのコードはどうやってここに挿入したらいいのか分からない。。。)
計算した結果
この式は非線形のため線形化を行う。
...①
...②
次からは慣性ロータを回転させるためのモータのモデルを落とし込んだモデルを作る予定(ブログに入れるための図を作るのに手間取ってるだけ)
コード挿入できたので下記にまとめ直した!