teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

全スケッチを記載

2020/10/02 04:35

投稿

ISO130
ISO130

スコア8

title CHANGED
File without changes
body CHANGED
@@ -23,9 +23,127 @@
23
23
 
24
24
  ```arduino
25
25
 
26
+ #include <SPI.h>
27
+ #include <MsTimer2.h>
28
+ #include <stdio.h>
29
+ #include <SoftwareSerial.h>
30
+ #include <Wire.h>
26
- L6470は設定が重要とのことより、以下の設定にしています(1つのモータ設定のみ記述。他のモータも同一設定)
31
+ #include <DFRobot_QMC5883.h>
32
+ #include <A4988.h>
27
33
 
34
+ //RunMotor PIN-difinitions
35
+ #define PIN_SPI_MOSI 51
36
+ #define PIN_SPI_MISO 50
37
+ #define PIN_SPI_SCK 52
38
+ #define PIN_SPI_SS 53
39
+ #define PIN_BUSY 44
40
+ #define PIN_BUSY2 46
41
+ #define PIN_BUSY3 45
42
+ #define PIN_BUSY4 47
43
+
44
+ //Joystick difinitions
45
+ const int analogInPinUD = A0; // UDアナログ入力ピン(定数)
46
+ const int analogInPinLR = A1; // LRアナログ入力ピン(定数)
47
+ int UD = 0; // Up-DownのAD値(変数)
48
+ int LR = 0; // Left-RightのAD値(変数)
49
+
50
+ //MODE switch difinitions
51
+ const int DIN_PIN_run_auto = 2;
52
+ const int DIN_PIN_beforeLift = 3;
53
+ const int DIN_PIN_AfterLift = 22;
54
+ const int DIN_PIN_run_manual = 4;
55
+
56
+ //LinearActuator difinitions
57
+ #define PIN_LinearA_1 10
58
+ #define PIN_LinearA_2 11
59
+
60
+ //LiftMotor difinitions
61
+ const int MOTOR_STEPS = 400;
62
+ const int DIR = 8;
63
+ const int STEP = 9;
64
+ float rpm = 135; //0.88sm/sec 140以上は微脱調
65
+ int microsteps = 1;
66
+ #define MOTOR_ACCEL 400
67
+ #define MOTOR_DECEL 400
68
+ A4988 stepper(MOTOR_STEPS, DIR, STEP);
69
+
70
+
71
+ void setup(){
72
+ Serial.begin(115200);
73
+ // MODE switch setting
74
+ pinMode( DIN_PIN_run_auto, INPUT_PULLUP );
75
+ pinMode( DIN_PIN_beforeLift, INPUT_PULLUP );
76
+ pinMode( DIN_PIN_AfterLift, INPUT_PULLUP );
77
+ pinMode( DIN_PIN_run_manual, INPUT_PULLUP );
78
+ // RunMotor setting
79
+ pinMode( PIN_SPI_MOSI, OUTPUT);
80
+ pinMode( PIN_SPI_MISO, INPUT);
81
+ pinMode( PIN_SPI_SCK, OUTPUT);
82
+ pinMode( PIN_SPI_SS, OUTPUT);
83
+ pinMode( PIN_BUSY, INPUT_PULLUP);
84
+ pinMode( PIN_BUSY2, INPUT_PULLUP);
85
+ pinMode( PIN_BUSY3, INPUT_PULLUP);
86
+ pinMode( PIN_BUSY4, INPUT_PULLUP);
87
+ SPI.begin();
88
+ SPI.setDataMode(SPI_MODE3);
89
+ SPI.setBitOrder(MSBFIRST);
90
+ digitalWrite(PIN_SPI_SS, HIGH);
91
+ // LinearActuator setting
92
+ pinMode( PIN_LinearA_1, OUTPUT);
93
+ pinMode( PIN_LinearA_2, OUTPUT);
94
+
95
+ // Serial setting
96
+ // EspSerial2.begin(9600);
97
+
98
+ // RunMotor setting
99
+ L6470_resetdevice(); //1台目のL6470リセット
100
+ L6470_resetdevice2(); //2台目のL6470リセット
101
+ L6470_resetdevice3(); //3台目のL6470リセット
102
+ L6470_resetdevice4(); //4台目のL6470リセット
103
+ L6470_setup(); //1台目のL6470を設定
104
+ L6470_setup2(); //2台目のL6470を設定
105
+ L6470_setup3(); //3台目のL6470を設定
106
+ L6470_setup4(); //4台目のL6470を設定
107
+ L6470_getstatus(); //1台目のフラグ解放
108
+ L6470_getstatus2();//2台目のフラグ解放
109
+ L6470_getstatus3();//3台目のフラグ解放
110
+ L6470_getstatus4();//4台目のフラグ解放
111
+
112
+ MsTimer2::set(25, fulash);//シリアルモニター用のタイマー割り込み
113
+ MsTimer2::start();
114
+
115
+ }
116
+
117
+ void loop(){
118
+
119
+ int runspeed = 10000;
120
+ L6470_run(0,runspeed);
121
+ L6470_run2(0,runspeed);
122
+ L6470_run3(1,runspeed);
123
+ L6470_run4(1,runspeed);
124
+ delay(5000);
125
+ L6470_softstop();//回転停止、保持トルクあり
126
+ L6470_softstop2();//回転停止、保持トルクあり
127
+ L6470_softstop3();//回転停止、保持トルクあり
128
+ L6470_softstop4();//回転停止、保持トルクあり
129
+ delay(2000);
130
+ Serial.println("run");
131
+ }
132
+
28
133
  void L6470_setup(){
134
+ /////////SM-42BYG011-25 setting
135
+ //L6470_setparam_acc(0x005); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
136
+ //L6470_setparam_dec(0x005); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
137
+ //L6470_setparam_maxspeed(0x25); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
138
+ //L6470_setparam_minspeed(0x02); //[R, WS]最小速度default 0x000 (1+12bit) (0.238*val[step/s])
139
+ //L6470_setparam_fsspd(0x027); //[R, WR]μステップからフルステップへの切替点速度default 0x027 (10bit) (15.25*val+7.63[step/s])
140
+ //L6470_setparam_kvalhold(0x50); //[R, WR]停止時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
141
+ //L6470_setparam_kvalrun(0xFF); //[R, WR]定速回転時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
142
+ //L6470_setparam_kvalacc(0xFF); //[R, WR]加速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
143
+ //L6470_setparam_kvaldec(0xFF); //[R, WR]減速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
144
+ //L6470_setparam_stepmood(0x01); //ステップモードdefault 0x07 (1+3+1+3bit)
145
+
146
+ /////////42SHD4404-24 setting
29
147
  L6470_setparam_acc(0x005); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
30
148
  L6470_setparam_dec(0x005); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
31
149
  L6470_setparam_maxspeed(0x25); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
@@ -38,16 +156,81 @@
38
156
  L6470_setparam_stepmood(0x01); //ステップモードdefault 0x07 (1+3+1+3bit)
39
157
  }
40
158
 
159
+ void L6470_setup2(){
160
+ L6470_setparam_acc2(0x005); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
161
+ L6470_setparam_dec2(0x005); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
162
+ L6470_setparam_maxspeed2(0x25); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
163
+ L6470_setparam_minspeed2(0x02); //[R, WS]最小速度default 0x000 (1+12bit) (0.238*val[step/s])
164
+ L6470_setparam_fsspd2(0x027); //[R, WR]μステップからフルステップへの切替点速度default 0x027 (10bit) (15.25*val+7.63[step/s])
165
+ L6470_setparam_kvalhold2(0x50); //[R, WR]停止時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
166
+ L6470_setparam_kvalrun2(0xFF); //[R, WR]定速回転時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
167
+ L6470_setparam_kvalacc2(0xFF); //[R, WR]加速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
168
+ L6470_setparam_kvaldec2(0xFF); //[R, WR]減速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
169
+ L6470_setparam_stepmood2(0x01); //ステップモードdefault 0x07 (1+3+1+3bit)
170
+ }
41
171
 
42
- 動作は以下のようにしています
172
+ void L6470_setup3(){
173
+ L6470_setparam_acc3(0x005); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
174
+ L6470_setparam_dec3(0x005); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
175
+ L6470_setparam_maxspeed3(0x25); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
176
+ L6470_setparam_minspeed3(0x02); //[R, WS]最小速度default 0x000 (1+12bit) (0.238*val[step/s])
177
+ L6470_setparam_fsspd3(0x027); //[R, WR]μステップからフルステップへの切替点速度default 0x027 (10bit) (15.25*val+7.63[step/s])
178
+ L6470_setparam_kvalhold3(0x50); //[R, WR]停止時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
179
+ L6470_setparam_kvalrun3(0xFF); //[R, WR]定速回転時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
180
+ L6470_setparam_kvalacc3(0xFF); //[R, WR]加速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
181
+ L6470_setparam_kvaldec3(0xFF); //[R, WR]減速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
182
+ L6470_setparam_stepmood3(0x01); //ステップモードdefault 0x07 (1+3+1+3bit)
183
+ }
43
184
 
44
- void loop(){
185
+ void L6470_setup4(){
186
+ L6470_setparam_acc4(0x005); //[R, WS] 加速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
187
+ L6470_setparam_dec4(0x005); //[R, WS] 減速度default 0x08A (12bit) (14.55*val+14.55[step/s^2])
188
+ L6470_setparam_maxspeed4(0x25); //[R, WR]最大速度default 0x041 (10bit) (15.25*val+15.25[step/s])
189
+ L6470_setparam_minspeed4(0x02); //[R, WS]最小速度default 0x000 (1+12bit) (0.238*val[step/s])
190
+ L6470_setparam_fsspd4(0x027); //[R, WR]μステップからフルステップへの切替点速度default 0x027 (10bit) (15.25*val+7.63[step/s])
191
+ L6470_setparam_kvalhold4(0x50); //[R, WR]停止時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
192
+ L6470_setparam_kvalrun4(0xFF); //[R, WR]定速回転時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
193
+ L6470_setparam_kvalacc4(0xFF); //[R, WR]加速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
194
+ L6470_setparam_kvaldec4(0xFF); //[R, WR]減速時励磁電圧default 0x29 (8bit) (Vs[V]*val/256)
195
+ L6470_setparam_stepmood4(0x01); //ステップモードdefault 0x07 (1+3+1+3bit)
196
+ }
45
197
 
198
+
199
+ void fulash(){
200
+ //long a=L6470_getparam_abspos();
201
+ //long b=L6470_getparam_speed();
202
+ //long c=L6470_getparam_abspos2();
203
+ //long d=L6470_getparam_speed2();
204
+ //long e=L6470_getparam_abspos3();
205
+ //long f=L6470_getparam_speed3();
206
+ //long g=L6470_getparam_abspos4();
207
+ //long h=L6470_getparam_speed4();
46
- int runspeed = 10000;
208
+ //char str[15];
209
+ //snprintf(str,sizeof(str),"1pos=0x%6.6X ",a);
210
+ //Serial.print(str);
211
+ //snprintf(str,sizeof(str),"1spd=0x%5.5X ",b);
212
+ //Serial.print(str);
213
+ //snprintf(str,sizeof(str),"2pos=0x%6.6X ",c);
214
+ //Serial.print(str);
215
+ //snprintf(str,sizeof(str),"2spd=0x%5.5X ",d);
216
+ //Serial.println(str);
217
+ //snprintf(str,sizeof(str),"3pos=0x%6.6X ",e);
218
+ //Serial.print(str);
219
+ //snprintf(str,sizeof(str),"3spd=0x%5.5X ",f);
220
+ //Serial.println(str);
221
+ //snprintf(str,sizeof(str),"3pos=0x%6.6X ",g);
222
+ //Serial.print(str);
223
+ //snprintf(str,sizeof(str),"3spd=0x%5.5X ",h);
224
+ //Serial.println(str);
47
- L6470_run(0,runspeed);//motorNo1
225
+ /* Serial.print("0x");
226
+ Serial.print( L6470_getparam_abspos(),HEX);
227
+ Serial.print(" 0x");
228
+ Serial.print( L6470_getparam_speed(),HEX);
229
+ Serial.print(" 0x");
48
- L6470_run2(0,runspeed);//motorNo2
230
+ Serial.print( L6470_getparam_abspos2(),HEX);
231
+ Serial.print(" 0x");
49
- L6470_run3(1,runspeed);//motorNo3
232
+ Serial.println( L6470_getparam_speed2(),HEX);
50
- L6470_run4(1,runspeed);//motorNo4
233
+ */
51
234
  }
52
235
 
53
236
  ```

1

使用電池の種類を記述しました

2020/10/02 04:35

投稿

ISO130
ISO130

スコア8

title CHANGED
File without changes
body CHANGED
@@ -71,4 +71,5 @@
71
71
 
72
72
  ### 補足情報(FW/ツールのバージョンなど)
73
73
 
74
- ドライバへの印加電圧は14Vです。
74
+ ドライバへの印加電圧は14Vです。
75
+ [電池](https://www.amazon.co.jp/gp/product/B07VFD6797/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&psc=1)を使って駆動しています