057 { 058 int i; 059 timecounter=0; 060 pwmvalue=0;x=0;v=0; 061 requestdisplaydata=1; 062 tick=1; 063 for (i=0; i<rbuffsize; i++) { 064 ringbuffer[i]=

Similar documents
スライド 1

スライド 1

スライド 1

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

スライド 1

前回の内容 マイクロコンピュータにおけるプログラミング PC上で作成 コンパイル マイコンに転送 実行 プログラムを用いて外部の装置を動作させる LED turnonled turnoffled LCD printf プログラムを用いて外部の装置の状態を読み取る プッシュスイッチ getpushsw

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

Microsoft PowerPoint - RL78G14_動画マニュアル_タイマRD.ppt [互換モード]

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

PowerPoint Presentation

EV3_APIの解説.pptx


スライド 1

スライド 1

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

DVIOUT

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

// USB_CNC_Machine リモート PIO 端末プログラムのメイン関数およびユーザアプリ部 // 編集作成 by Takehiko Inoue /*********** メイン関数 ***************************/ #pragma code

TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : 活用アイデア部門アプリケーション開発部門 作品のタイトル : Toppers_JSP と Scicos_lab / (Scilab でも可 ) による 組込みメカトロニクス制御シミュレーション 作成者 : 塩出武 ( シオデタ

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

数値計算で学ぶ物理学 4 放物運動と惑星運動 地上のように下向きに重力がはたらいているような場においては 物体を投げると放物運動をする 一方 中心星のまわりの重力場中では 惑星は 円 だ円 放物線または双曲線を描きながら運動する ここでは 放物運動と惑星運動を 運動方程式を導出したうえで 数値シミュ

PowerPoint プレゼンテーション

Microsoft Word - Training10_プリプロセッサ.docx

Taro-リストⅢ(公開版).jtd

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Microsoft PowerPoint - 4.pptx

GR-SAKURA-SAのサンプルソフト説明

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

正転時とは反対に回転する これが逆転である 図 2(d) の様に 4 つのスイッチ全てが OFF の場合 DC モータには電流が流れず 停止する ただし 元々 DC モータが回転していた場合は 惰性でしばらく回転を続ける 図 2(e) の様に SW2 と SW4 を ON SW1 と SW3 を O

Taro-数値計算の基礎Ⅱ(公開版)

Microsoft Word - 中間試験 その1_解答例.doc

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

Microsoft Word - VBA基礎(3).docx

cp-7. 配列

sinfI2005_VBA.doc

1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

組込みシステムにおける UMLモデルカタログの実践研究

Microsoft Word - マイコンを用いた信号# doc

Microsoft PowerPoint - kougi7.ppt

81 /******************************************************************************/ 82 /* スレーブアドレスの設定 */ 83 /*****************************************

Microsoft PowerPoint - C_Programming(3).pptx

Prog1_10th

MS-ExcelVBA 基礎 (Visual Basic for Application)

スライド 1

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

Taro-リストⅠ(公開版).jtd

Microsoft PowerPoint - 11.pptx

memo

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

まず,13 行目の HardwareTimer Timer(1); は,HardwareTimer というクラスを利用するという宣言である. この宣言によって Timer というインスタンスが生成される.Timer(1) の 1 は,OpenCM に 4 個用意されているタイマのうち,1 番のタイマ

Microsoft PowerPoint - 14Chap17.ppt

kiso2-09.key

ギリシャ文字の読み方を教えてください

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog07.ppt

物体の自由落下の跳ね返りの高さ 要約 物体の自由落下に対する物体の跳ね返りの高さを測定した 自由落下させる始点を高くするにつれ 跳ね返りの高さはただ単に始点の高さに比例するわけではなく 跳ね返る直前の速度に比例することがわかった

比例・反比例 例題編 問題・解答

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

<4D F736F F D B4389F D985F F4B89DB91E88250>

スライド 1

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

memo

CoIDE 用 STM32F4_UART2 の説明 V /03/30 STM32F4 Discovery の非同期シリアル通信ポート UART2 の送受信を行うプログラムです Free の開発ツール CoIDE で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000

Microsoft Word - 実験テキスト2005.doc

プログラム言語及び演習Ⅲ

Taro-再帰関数Ⅲ(公開版).jtd

/* モジュールストップ解除 */ SYSTEM.MSTPCRA.BIT.MSTPA24 = 0; /* MSTPA24(S12ADA 制御部 ) クロック供給開始 */ SYSTEM.MSTPCRA.BIT.MSTPA17 = 0; /* MSTPA17(S12ADA0) クロック供給開始 */

切片 ( 定数項 ) ダミー 以下の単回帰モデルを考えよう これは賃金と就業年数の関係を分析している : ( 賃金関数 ) ここで Y i = α + β X i + u i, i =1,, n, u i ~ i.i.d. N(0, σ 2 ) Y i : 賃金の対数値, X i : 就業年数. (

12.2 電気回路網に関するキルヒホッフの法則による解法 2 多元連立 1 次方程式の工学的応用についての例を 2 つ示す.1 つはブリッジ T 型回路, もう 1 つはホーイストンブリッジ回路である. 示された回路図と与えられた回路定数からキルヒホッフの法則を使って多元連立 1 次方程式を導出する

1 1 TA, ,9 1. ( 2. TM TM GUI TM 1. P7-13 TM Notepad, Meadow, ( P109 ). 2. (shisaku01/sys test)

スライド 1

PowerPoint プレゼンテーション

Microsoft PowerPoint - 6.PID制御.pptx

木村の物理小ネタ 単振動と単振動の力学的エネルギー 1. 弾性力と単振動 弾性力も単振動も力は F = -Kx の形で表されるが, x = 0 の位置は, 弾性力の場合, 弾性体の自然状態の位置 単振動の場合, 振動する物体に働く力のつり合

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

s と Z(s) の関係 2019 年 3 月 22 日目次へ戻る s が虚軸を含む複素平面右半面の値の時 X(s) も虚軸を含む複素平面右半面の値でなけれ ばなりません その訳を探ります 本章では 受動回路をインピーダンス Z(s) にしていま す リアクタンス回路の駆動点リアクタンス X(s)

Copyright c 2009 by Masaki Yagi

第2回

Microsoft PowerPoint - timer_pwm2.pptx

Microsoft PowerPoint - 10.ppt [互換モード]

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Taro-スタック(公開版).jtd

スライド 1

問題1 以下に示すプログラムは、次の処理をするプログラムである

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

2006年10月5日(木)実施

スライド 1

tri_s_tg12864_vcp の説明 2014/02/05 飛石伝ひ CPU 基板 の LCD TG12864 の表示プログラムです 漢字表示 (JIS208) を行うことができます USB の VCP ( 仮想 COM ポート ) を使用して非同期シリアル通信により 表示試験を行うことができ

Microsoft Word - 4_構造特性係数の設定方法に関する検討.doc

DCモータの制御

第2回講義:まとめ

DVIOUT

Transcription:

制御工学 I 前期中間試験問題 June2005 担当小坂 次のプログラムは,H8 モータ実験装置で位置フィードバック + 速度フィードバックを使って, モータ軸をある角度だけ回転させて止めようとするプログラムである 後の問いに答えなさい 001 /********************************************************** 002 プログラムの説明 003 位置フィードバックと速度フィードバックを使ったモータ制御 by Kosaka 13Feb2005 004 **********************************************************/ 005 #include "h8-01.h" 006 #include "motorsys.h" 007 008 #define PWM_MAX 00 009 #define RBUFFSIZE 16 /*0x=16*/ 0 #define RBUFFMASK 0xf /*0x0f=15*/ 011 012 volatile int x; /* 割り込み時位置 */ 013 volatile int v; /* 位置差分 ( 速度 )*/ 014 volatile int pwmvalue; /* モータ PWM 指令値 */ 015 volatile int requestdisplaydata; /* 表示要求 0: 表示要求なし 1: あり */ 016 volatile int timecounter; /* 制御開始時刻からの時間 [msec]*/ 017 int tick; /* 表示を msec ごとにするための変数 */ 018 int ringbuffer[rbuffsize]; /* 速度測定のための割り込み時位置の履歴 */ 019 int currentpointer; /* リングバッファで現時点を指すポインタ */ 020 int previouspointer; /* リングバッファで 周期前を指すポインタ */ 021 022 int theposition; /* モータを停止する位置 */ 023 /*( ロータリエンコーダのカウンタ値 )*/ 024 int kpro_8; /* 位置フィードバック係数 8 倍値 */ 025 int kvel_8; /* 速度フィードバック係数 8 倍値 */ 026 027 /* ほかに必要なグローバル変数があったらこの位置に追加すること */ 028 029 void setdefaultconstants(void) 030 /* ここではあらかじめ決めておかなければならない値を規定値に設定する */ 031 { 032 theposition=500; 033 kpro_8=80; 034 kvel_8=32; 035 SCI1_printf("\n"); 036 SCI1_printf("the Position that motor should stop =%5d\n",thePosition); 037 SCI1_printf("Proportional Feedback Coefficient (*8) =%5d\n",kpro_8); 038 SCI1_printf("Velocity Feedback Coefficient (*8) =%5d\n",kvel_8); 039 /* ほかに必要な設定があったらこの位置に追加すること */ 040 } 041 042 void setconstants(void) 043 /* ここではあらかじめ決めておかなければならない値を設定する */ 044 { 045 SCI1_printf("\n"); 046 SCI1_printf("the Position that motor will stop =%5d\n",thePosition); 047 SCI1_printf("Proportional Feedback Coefficient (*8) =%5d\n",kpro_8); 048 SCI1_printf("Velocity Feedback Coefficient (*8) =%5d\n",kvel_8); 049 theposition=getintsci1("input theposition (-500..500)--> "); 050 kpro_8= getintsci1("input Prop F. C. *8 ( 0..0)--> "); 051 kvel_8= getintsci1("input Velc F. C. *8 ( 0..0)--> "); 052 /* ほかに必要な設定があったらこの位置に追加すること */ 053 } 054 055 void initvariable(void) 056 /* ここで変数を初期化する */ 1/5

057 { 058 int i; 059 timecounter=0; 060 pwmvalue=0;x=0;v=0; 061 requestdisplaydata=1; 062 tick=1; 063 for (i=0; i<rbuffsize; i++) { 064 ringbuffer[i]=0; 065 } 066 currentpointer=; 067 previouspointer=0; 068 /* ほかに必要な設定があったらこの位置に追加すること */ 069 } 070 071 void controlmotor(void) 072 /* モータ駆動を行い, シリアル通信で駆動状況を表示する */ 073 { 074 SCI1_printf("\n"); 075 SCI1_printf("the Position that motor should stop =%5d\n",thePosition); 076 SCI1_printf("Proportional Feedback Coefficient (*8) =%5d\n",kpro_8); 077 SCI1_printf("Velocity Feedback Coefficient (*8) =%5d\n",kvel_8); 078 initvariable(); 079 clearphasecounter(); /* counter(ituch2) クリア */ 080 SCI1_printf("Time(msec), PWMvalue, Position, Velocity(per5[ms])\n"); 081 E_INT(); /* CPU 割り込み許可 */ 082 starttimer1(); /* 割り込みカウンタスタート */ 083 do { 084 if (requestdisplaydata) { 085 SCI1_printf("%3d,%4d,%4d,%3d\n",timecounter,pwmvalue,x,v); 086 requestdisplaydata=0; /* 表示要求の解除 */ 087 } 088 } while(timecounter<=00); 089 stoptimer1(); /* 割り込タイマストップ */ 090 D_INT(); /* 割り込み禁止 */ 091 drivemotor(0); 092 } 093 094 main() 095 { 096 int key=-1; 097 initsci1(); /*SCI1 初期化 */ 098 initphasecounter(); /*Rotaryencoder counter ITUch2 初期化 */ 099 init_pwm3(pwm_max); /*PWM の初期設定 */ 0 inittimer1int(500); /* 500μsec ごとの割り込み関数起動を設定 */ 1 setdefaultconstants(); 2 while (1) { 3 SCI1_printf("\n\n*** "); 4 SCI1_printf("Motor Driving with step response"); 5 SCI1_printf(" ***\n"); 6 SCI1_printf("1 set constants\n"); 7 SCI1_printf("2 execute!!\n"); 8 do {key=getcharsci1();} while(key<'1' '2'<key); 9 if (key=='1') setconstants(); /*PWM 値と駆動時間の設定 */ 1 else if (key=='2') controlmotor(); /* モータ制御動作実行 */ 111 } 112 } 113 114 void interrupt_cfunc() /* 割り込みルーチンこの関数名は固定 */ 115 { 116 long int value; 117 x=getphasecounter(); /* 位相カウンタ ( ロータリエンコーダ ) の読み出し */ 2/5

118 ringbuffer[currentpointer]=x; 119 v=x-ringbuffer[previouspointer];/* 位置の 5ms 間の増分 ( 速度に対応 ) を求める */ 120 121 /* モータへの PWM 指令値の送出 */ 122 /* この位置で pwmvalue の値を決める */ 123 /*pwmvalue の値を決めるのに考慮するものは, 現時刻の変位 x と速度 v とする */ 124 value=((long)kpro_8*(long)(theposition-x)-(long)kvel_8*(long)v)>>3; 125 if (PWM_MAX<value) pwmvalue=pwm_max; 126 else if (value<-pwm_max) pwmvalue=-pwm_max; 127 else pwmvalue=value; 128 drivemotor(pwmvalue); /* モータ指令値出力 */ 129 130 currentpointer=(currentpointer+1)&rbuffmask; 131 previouspointer=(previouspointer+1)&rbuffmask; 132 tick++; 133 if (tick==20) { 134 timecounter+=; /*500μsec の割り込み周期なので 20 周期で msec*/ 135 requestdisplaydata=1;/* 表示要求 */ 136 tick=0; 137 } 138 } 1. このプログラムで PWM 周期は何 ms に設定されているか 2. このプログラムで割り込み周期は何秒か また,1 秒間に, 何回割り込み関数が起動していると考えられるか 3.085 行ではロータリエンコーダのカウント値などの表示を行なっているが, 表示の周期は何秒か 4.085 行によるロータリエンコーダのカウント値などの 1 行分の表示では, 何バイトのデータが送信されているか ただし改行には 2 バイトが必要である またこの 1 行分データの送信にかかる時間は,38400baud の通信速度 (3840byte/sec) で,CPU が通信に専念しているとすると, 何秒ほどになると推定されるか 通信時間以外は時間はかからないと仮定しなさい 5. もし,main() 中の割り込み周期の設定部分 (0 行 ) を inittimer1int(200); /* 200μsec ごとの割り込み関数起動を設定 */ と変更し, さらに割り込み関数中の tick に関する if 文 (133 行 ) if (tick==20) { を if (tick==0) { と変更したら, ロータリエンコーダのカウント値などの表示の周期は何秒になるか 6. タイマ割り込み関数内で次の作業を行うと, 変数の値はどのように変化するか説明しなさいただし, 変数 myvar はグローバルの int 型変数で初期値は 0 とする 解答では要点をはずさず, 採点者に自分は理解できていることを示しなさい myvar=(myvar+1)&15; 7. タイマ割り込み関数内で次の作業を行うと, 変数の値はどのように変化するか説明しなさい ただし, 変数 myvar はグローバルの int 型変数で初期値は 0 とする 解答では要点をはずさず, 採点者に自分は理解できていることを示しなさい myvar=(myvar+1)&127; 3/5

8. タイマ割り込み関数内で次の作業を行うと, 変数の値はどのように変化するか説明しなさい ただし, 変数 myvar はグローバルの int 型変数で初期値は 0 とする 解答では要点をはずさず, 採点者に自分は理解できていることを示しなさい myvar=(myvar+1)&99; 9. タイマ割り込み関数内で v=x-ringbuffer[previouspointer]; を使って,5msec 間のカウンタ値の増分を求めているが,20msec 間のカウンタ値の増分を求めるように変更したい どの行をどのように変更すればよいか答えなさい ただし, 割り込み周期を変更せずに, 次のような変更を行う (a)#define を 2 行変更 (b) 関数 void initvariable(void) を 1 箇所変更 (c) このままでは速度表示にうそが表示されてしまうので, 関数 void controlmotor(void) 内でもう一箇所変更. モータの位置決め制御で次の問いに答えなさい ただし, x は角度の現在位置で, モータへの指令値 y は M y M ( 0 M ) で 0 y の時モータは正回転, y 0 の時は逆回転し, 絶対値が大きいほどモータへの供給電圧を上げることに対応することとする k は正の定数である また各式はある時刻のモータ軸の角度と指令値の関係を示すものとする また関数 clip( x, A), (0 A) は次式の関数とする A A clip( x, A) x A A A x A 制御則は次の 8 種類を考えることとし, 時刻 0 において初期角度は x l, 目標値 ( 目標角度 ) は x l, (0 l) の時, 次の 8 つの制御則で起動すると, それぞれどのような動作となるか すべての制御則が正しい制御を保証しているわけではない M l M l 1) y 2) y M l M ) l l ), M ) l 3) y 4) y M ) l l ), M ) l 5) y 6) y l ), M ) l M ) l 7) y clip( l ), M ) 8) y clip( M ) 11. 位置フィードバック係数 kp と速度フィードバック係数 kv の役割を次の中から選びなさい ただしモータ指令値制御規則は次のようになっているものとする y clip( k p ( l ) kv x, M ) x は速度を表す (1) 位置フィードバック係数 kp (2) 速度フィードバック係数 kv (a) 速度の絶対値を大きくする役割 (b) 目標値に向けて動くように指令を与える役割 (c) 速度の絶対値を小さくする役割 (d) 速度を絶えず負に保つ役割 (e) 目標値が正なら正方向に,, 負なら負方向に動くように指令を与える役割 (f) 速度を常に正に保つ役割 4/5

1 0.0625ms 制御工学 I 前期中間試験 制御工学 I 前期中間試験解答用紙 (4J )( ) 2 0.0005s 2000 回 / 秒 3 0.01s 4 19 バイト 0.00495s 5 0.02s 6. myvar は 0 から始まり,1,2,3,...,15 まで増加し, 再び 0 に戻る この動作を繰り返す 7. myvar は 0 から始まり,1,2,3,...,127 まで増加し, 再び 0 に戻る この動作を繰り返す 8. myvar は 0 から始まり,1,2,3 まで増加し, 再び 0 に戻る この動作を繰り返す 9. #define RBUFFSIZE 64 #define RBUFFMASK 0x3f currentpointer=40 per20ms (1) 目標値に向けて全力で進む 目標値を行き過ぎたら全力で戻る 再び目標値を行き過ぎたら全力で戻る という動作を繰り返し, 振動を続ける (2) 目標値に向けて全力で進む 目標値を行き過ぎたら, 指令値は0になり惰性でそのまま同方向に回転し, そのうち目標値から離れたところで止まる 逆向きに加速し, そのまま全力で目標値と反対方向に離れていく 止まらない (3) (4) 目標値に向けて最初は全力で進む 目標値に近づくにつれて, 指令値は弱まり, 目標値を過ぎると指令値は0になり惰性でそのまま同方向に回転し, そのうち目標値から離れて止まる (3) と同じ (5) (4) と同じ (6) (7) 目標値に向けて最初は全力で進む 目標値に近づくにつれて, 指令値は弱まり, 目標値を過ぎると逆向きに動く 指令値は目標値からの距離に比例しているので, 目標値の直近で停止 (3) と同じ (8) 11 (1) b (2) c 5/5