課題プログラム実行例とヒント
1.位置決め制御(ステップ入力)の例 実行ファイル例positioning.MOT
実行結果例
160msec程度で目標位置に達し,270msecには目標位置に停止している。
Time:時刻[msec]
PWMvalue:その時刻におけるPWM値
Position:その時刻におけるモータ角度
Velocity:その時刻におけるモータ角速度(5msec前のモータ角度と現在の角度との差)
以下の設定でpositioning.MOTを実行
position feedback gain kp=
10
velocity feedback gain kd= 40
integral feedback gain ki= 0
Time(msec) |
PWMvalue |
position |
velocity |
0 |
0 |
0 |
0 |
10 |
1000 |
0 |
0 |
20 |
1000 |
15 |
10 |
30 |
1000 |
45 |
16 |
40 |
1000 |
87 |
22 |
50 |
1000 |
134 |
24 |
60 |
1000 |
188 |
27 |
70 |
1000 |
246 |
30 |
80 |
1000 |
307 |
31 |
90 |
1000 |
369 |
31 |
100 |
1000 |
434 |
32 |
110 |
1000 |
500 |
33 |
120 |
1000 |
567 |
33 |
130 |
290 |
635 |
34 |
140 |
-340 |
702 |
33 |
150 |
-740 |
762 |
28 |
160 |
-750 |
803 |
18 |
170 |
-540 |
822 |
8 |
180 |
-360 |
828 |
2 |
190 |
-240 |
828 |
-1 |
200 |
-60 |
822 |
-4 |
210 |
10 |
815 |
-4 |
220 |
90 |
807 |
-4 |
230 |
50 |
803 |
-2 |
240 |
40 |
800 |
-1 |
250 |
60 |
798 |
-1 |
260 |
-30 |
799 |
1 |
270 |
0 |
800 |
0 |
280 |
0 |
800 |
0 |
290 |
0 |
800 |
0 |
300 |
0 |
800 |
0 |
310 |
0 |
800 |
0 |
320 |
0 |
800 |
0 |
330 |
0 |
800 |
0 |
340 |
0 |
800 |
0 |
350 |
0 |
800 |
0 |
360 |
0 |
800 |
0 |
370 |
0 |
800 |
0 |
380 |
0 |
800 |
0 |
390 |
0 |
800 |
0 |
400 |
0 |
800 |
0 |
410 |
0 |
800 |
0 |
420 |
0 |
800 |
0 |
430 |
0 |
800 |
0 |
440 |
0 |
800 |
0 |
450 |
0 |
800 |
0 |
460 |
0 |
800 |
0 |
470 |
0 |
800 |
0 |
480 |
0 |
800 |
0 |
490 |
0 |
800 |
0 |
500 |
0 |
800 |
0 |
510 |
0 |
800 |
0 |
520 |
0 |
800 |
0 |
530 |
0 |
800 |
0 |
540 |
0 |
800 |
0 |
550 |
0 |
800 |
0 |
560 |
0 |
800 |
0 |
570 |
0 |
800 |
0 |
580 |
0 |
800 |
0 |
590 |
0 |
800 |
0 |
600 |
0 |
800 |
0 |
610 |
0 |
800 |
0 |
620 |
0 |
800 |
0 |
630 |
0 |
800 |
0 |
640 |
0 |
800 |
0 |
650 |
0 |
800 |
0 |
660 |
0 |
800 |
0 |
670 |
0 |
800 |
0 |
680 |
0 |
800 |
0 |
690 |
0 |
800 |
0 |
700 |
0 |
800 |
0 |
710 |
0 |
800 |
0 |
720 |
0 |
800 |
0 |
730 |
0 |
800 |
0 |
740 |
0 |
800 |
0 |
750 |
0 |
800 |
0 |
760 |
0 |
800 |
0 |
770 |
0 |
800 |
0 |
780 |
0 |
800 |
0 |
790 |
0 |
800 |
0 |
800 |
0 |
800 |
0 |
810 |
0 |
800 |
0 |
820 |
0 |
800 |
0 |
830 |
0 |
800 |
0 |
840 |
0 |
800 |
0 |
850 |
0 |
800 |
0 |
860 |
0 |
800 |
0 |
870 |
0 |
800 |
0 |
880 |
0 |
800 |
0 |
890 |
0 |
800 |
0 |
900 |
0 |
800 |
0 |
910 |
0 |
800 |
0 |
920 |
0 |
800 |
0 |
930 |
0 |
800 |
0 |
940 |
0 |
800 |
0 |
950 |
0 |
800 |
0 |
960 |
0 |
800 |
0 |
970 |
0 |
800 |
0 |
980 |
0 |
800 |
0 |
990 |
0 |
800 |
0 |
1000 |
0 |
800 |
0 |
位置決め制御(ステップ入力)の例 |
ヒント
位置決め制御(ステップ入力)の枠組み(未完成) |
/********************************************************** /**********不足している関数をここに取り込む**********/ #define PWM_MAX 1000 volatile int
x;
/*割り込み時位置*/ void
setConstants(void) void
setReference(void) void
controlMotor(void) main() void interrupt_cfunc()
/*割り込みルーチン この関数名は固定*/
/* ここにpwmvalueを作るコードを書く */
driveMotor(pwmvalue); /*モータ指令値出力*/ |
2.プログラム制御(ランプ応答)の例 実行ファイル例velocity.MOT
実行結果例
起動直後に増加中の目標値に遅れるが,170msecほどで追いつき,その後は目標値の変化に追従している。
Time:時刻[msec]
PWMvalue:その時刻におけるPWM値
Reference:その時刻における目標値
Position:その時刻におけるモータ角度
Velocity:その時刻におけるモータ角速度(5msec前のモータ角度と現在の角度との差)
以下の設定でvelocity.MOTを実行
position feedback gain kp=
10
velocity feedback gain kd= 40
integral feedback gain ki= 3
Time(msec) |
PWMvalue |
Reference |
Position |
Velocity |
0 |
0 |
0 |
0 |
0 |
10 |
422 |
40 |
0 |
0 |
20 |
662 |
80 |
5 |
4 |
30 |
844 |
120 |
18 |
8 |
40 |
890 |
160 |
42 |
13 |
50 |
842 |
200 |
76 |
18 |
60 |
755 |
240 |
118 |
22 |
70 |
692 |
280 |
165 |
24 |
80 |
644 |
320 |
214 |
25 |
90 |
567 |
360 |
265 |
26 |
100 |
451 |
400 |
319 |
27 |
110 |
364 |
440 |
373 |
27 |
120 |
255 |
480 |
428 |
27 |
130 |
96 |
520 |
483 |
28 |
140 |
-35 |
560 |
538 |
28 |
150 |
-25 |
600 |
590 |
25 |
160 |
-84 |
640 |
640 |
24 |
170 |
-107 |
680 |
686 |
23 |
180 |
-2 |
720 |
727 |
20 |
190 |
-8 |
760 |
767 |
20 |
200 |
48 |
800 |
805 |
19 |
210 |
66 |
840 |
843 |
19 |
220 |
95 |
880 |
880 |
19 |
230 |
116 |
920 |
918 |
19 |
240 |
139 |
960 |
956 |
19 |
250 |
102 |
1000 |
996 |
20 |
260 |
166 |
1040 |
1034 |
19 |
270 |
131 |
1080 |
1074 |
20 |
280 |
146 |
1120 |
1113 |
20 |
290 |
140 |
1160 |
1154 |
20 |
300 |
95 |
1200 |
1195 |
21 |
310 |
138 |
1240 |
1235 |
20 |
320 |
92 |
1280 |
1276 |
21 |
330 |
124 |
1320 |
1317 |
20 |
340 |
65 |
1360 |
1359 |
21 |
350 |
55 |
1400 |
1400 |
21 |
360 |
85 |
1440 |
1441 |
20 |
370 |
73 |
1480 |
1482 |
20 |
380 |
21 |
1520 |
1523 |
21 |
390 |
59 |
1560 |
1563 |
20 |
400 |
57 |
1600 |
1603 |
20 |
410 |
55 |
1640 |
1643 |
20 |
420 |
103 |
1680 |
1682 |
19 |
430 |
61 |
1720 |
1722 |
20 |
440 |
110 |
1760 |
1761 |
19 |
450 |
69 |
1800 |
1801 |
20 |
460 |
79 |
1840 |
1840 |
20 |
470 |
90 |
1880 |
1879 |
20 |
480 |
141 |
1920 |
1918 |
19 |
490 |
103 |
1960 |
1958 |
20 |
500 |
104 |
2000 |
1998 |
20 |
510 |
106 |
2040 |
2038 |
20 |
520 |
107 |
2080 |
2078 |
20 |
530 |
109 |
2120 |
2118 |
20 |
540 |
99 |
2160 |
2159 |
20 |
550 |
100 |
2200 |
2199 |
20 |
560 |
101 |
2240 |
2239 |
20 |
570 |
91 |
2280 |
2280 |
20 |
580 |
91 |
2320 |
2320 |
20 |
590 |
91 |
2360 |
2360 |
20 |
600 |
91 |
2400 |
2400 |
20 |
610 |
80 |
2440 |
2441 |
20 |
620 |
79 |
2480 |
2481 |
20 |
630 |
79 |
2520 |
2521 |
20 |
640 |
78 |
2560 |
2561 |
20 |
650 |
66 |
2600 |
2602 |
20 |
660 |
76 |
2640 |
2641 |
20 |
670 |
75 |
2680 |
2681 |
20 |
680 |
74 |
2720 |
2721 |
20 |
690 |
73 |
2760 |
2761 |
20 |
700 |
73 |
2800 |
2801 |
20 |
710 |
72 |
2840 |
2841 |
20 |
720 |
71 |
2880 |
2881 |
20 |
730 |
81 |
2920 |
2920 |
20 |
740 |
132 |
2960 |
2959 |
19 |
750 |
42 |
3000 |
3000 |
21 |
760 |
93 |
3040 |
3039 |
20 |
770 |
93 |
3080 |
3079 |
20 |
780 |
94 |
3120 |
3119 |
20 |
790 |
95 |
3160 |
3159 |
20 |
800 |
96 |
3200 |
3199 |
20 |
810 |
96 |
3240 |
3239 |
20 |
820 |
97 |
3280 |
3279 |
20 |
830 |
48 |
3320 |
3320 |
21 |
840 |
88 |
3360 |
3360 |
20 |
850 |
88 |
3400 |
3400 |
20 |
860 |
88 |
3440 |
3440 |
20 |
870 |
37 |
3480 |
3481 |
21 |
880 |
37 |
3520 |
3521 |
21 |
890 |
76 |
3560 |
3561 |
20 |
900 |
75 |
3600 |
3601 |
20 |
910 |
125 |
3640 |
3640 |
19 |
920 |
85 |
3680 |
3680 |
20 |
930 |
85 |
3720 |
3720 |
20 |
940 |
85 |
3760 |
3760 |
20 |
950 |
85 |
3800 |
3800 |
20 |
960 |
135 |
3840 |
3839 |
19 |
970 |
96 |
3880 |
3879 |
20 |
980 |
46 |
3920 |
3920 |
21 |
990 |
86 |
3960 |
3960 |
20 |
1000 |
86 |
4000 |
4000 |
20 |
プログラム制御(ランプ応答)の例 |
ヒント
位置決め制御(ランプ入力)の枠組み(未完成) |
/********************************************************** /**********不足している関数をここに取り込む**********/ #define PWM_MAX 1000 volatile int
x;
/*割り込み時位置*/ void
setConstants(void) void
setDelta(void) void
controlMotor(void) main() void interrupt_cfunc()
/*割り込みルーチン この関数名は固定*/
/* ここにpwmvalueを作るコードを書く */
driveMotor(pwmvalue); /*モータ指令値出力*/ |