質問編集履歴
4
プログラムの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,11 +41,41 @@
|
|
41
41
|
8 日立GTO (西武6000系)
|
42
42
|
9 東洋IGBT (東京メトロ16000系)
|
43
43
|
10日立IGBT (JRE231系1000番台)
|
44
|
+
11東洋GTO (京急600形)
|
45
|
+
12オリジナルIGBT「オクターブ」
|
46
|
+
13オリジナルIGBT「ランダム変調」
|
47
|
+
14オリジナルGTO 「多変調」
|
48
|
+
15オリジナルGTO「大きな木」
|
44
49
|
*/
|
50
|
+
boolean pulseMode, ModeBuffer;
|
51
|
+
volatile double Kfrq, KfrqT, Vout, Vout_To, Hz, HzS, hzss, Discom, HzTo;
|
52
|
+
volatile int pulse, PulseBuffer;
|
53
|
+
float stepper, StepBuffer;
|
54
|
+
int analog;
|
55
|
+
double Vout_U, Vout_V, Vout_W;
|
56
|
+
volatile uint16_t U, V, W, Top, Top2;
|
57
|
+
volatile int32_t SynU, SynV, SynW;
|
58
|
+
int RANDOMT;
|
59
|
+
bool H, SendTrigger;
|
60
|
+
const volatile uint8_t U_table[] PROGMEM = {/*sinU相*/};
|
61
|
+
const volatile uint8_t V_table[] PROGMEM = {/*sinV相*/};
|
62
|
+
const volatile uint8_t W_table[] PROGMEM = {/*sinW相*/};
|
63
|
+
|
64
|
+
const volatile bool sqU_table[] PROGMEM = {/*矩形U相*/};
|
65
|
+
const volatile bool sqV_table[] PROGMEM = {/*矩形V相*/};
|
66
|
+
const volatile bool sqW_table[] PROGMEM = {/*矩形W相*/}
|
67
|
+
|
68
|
+
const volatile uint8_t Mu_table[] PROGMEM = {/*広域3パルス比較波U相*/};
|
69
|
+
const volatile uint8_t Mv_table[] PROGMEM = {/*広域3パルス比較波V相*/};
|
70
|
+
const volatile uint8_t Mw_table[] PROGMEM = {/*広域3パルス比較波W相*/};
|
45
71
|
opereator_type sin_operator, SinBuffer;
|
46
72
|
opereator_type sin_operator_adder;
|
47
73
|
volatile char soundwave;
|
48
74
|
|
75
|
+
const byte XPulse_table_U[2][28][114] PROGMEM = {/*同期モードテーブルU相*/};
|
76
|
+
const byte XPulse_table_W[2][28][114] PROGMEM = {/*同期モードテーブルV相*/};
|
77
|
+
const byte XPulse_table_V[2][28][114] PROGMEM = {/*同期モードテーブルW相*/};
|
78
|
+
|
49
79
|
#define Ut pgm_read_byte_near(&sqU_table[(sin_operator/Shift)])
|
50
80
|
#define Vt pgm_read_byte_near(&sqV_table[(sin_operator/Shift)])
|
51
81
|
#define Wt pgm_read_byte_near(&sqW_table[(sin_operator/Shift)])
|
@@ -57,13 +87,13 @@
|
|
57
87
|
//省略
|
58
88
|
}
|
59
89
|
void setKfrq(uint8_t SoundType) {
|
60
|
-
|
90
|
+
//省略
|
61
91
|
}
|
62
92
|
void setType() {
|
63
93
|
Type += 1;
|
64
94
|
Type = Type % 17;
|
65
95
|
}
|
66
|
-
void Sp_Up(void) {
|
96
|
+
void Sp_Up(void) {//周波数あげる
|
67
97
|
macroMODE = 0;
|
68
98
|
if (Vout < Vout_To) {
|
69
99
|
Vout += 0.001;
|
@@ -77,7 +107,7 @@
|
|
77
107
|
nutral_mode = false;
|
78
108
|
}
|
79
109
|
}
|
80
|
-
void Sp_Dn(void) {
|
110
|
+
void Sp_Dn(void) {//周波数下げ下げマン
|
81
111
|
macroMODE = 1;
|
82
112
|
if (Vout < Vout_To) {
|
83
113
|
Vout += 0.001;
|
@@ -92,7 +122,7 @@
|
|
92
122
|
nutral_mode = false;
|
93
123
|
}
|
94
124
|
}
|
95
|
-
void SerialSendToMain(uint8_t SenderNum, uint8_t SendContent) {
|
125
|
+
void SerialSendToMain(uint8_t SenderNum, uint8_t SendContent) {//デバッグ用
|
96
126
|
if (!SendTrigger) {
|
97
127
|
Serial.flush();
|
98
128
|
Serial.write(SenderNum);
|
@@ -111,13 +141,13 @@
|
|
111
141
|
sin_operator += (opereator_type)(sin_operator_adder);
|
112
142
|
sin_operator &= (tableLegth * Shift) - 1;
|
113
143
|
}
|
114
|
-
ISR(TIMER4_COMPA_vect) {
|
144
|
+
ISR(TIMER4_COMPA_vect) {//速度制御
|
115
145
|
Hz += HzS * 10;
|
116
146
|
}
|
117
|
-
ISR(TIMER3_COMPA_vect) {
|
147
|
+
ISR(TIMER3_COMPA_vect) {//1パルス
|
118
148
|
PORTL = (Ut * 8) | (Vt * 16) | (Wt * 32);
|
119
149
|
}
|
120
|
-
ISR(TIMER5_CAPT_vect) {
|
150
|
+
ISR(TIMER5_CAPT_vect) {//マルチパルス
|
121
151
|
sin_operator += (opereator_type)(sin_operator_adder);
|
122
152
|
sin_operator &= (tableLegth * Shift) - 1;
|
123
153
|
stepper = sin_operator / sin_operator_adder;
|
@@ -131,7 +161,7 @@
|
|
131
161
|
OCR5C = (SynW < Top && SynW > 0) * SynW + (SynW > Top) * Top;
|
132
162
|
TCCR5A = 0b10101000;
|
133
163
|
}
|
134
|
-
ISR(TIMER5_OVF_vect) {
|
164
|
+
ISR(TIMER5_OVF_vect) {//マルチパルス
|
135
165
|
sin_operator += (opereator_type)(sin_operator_adder);
|
136
166
|
sin_operator &= (tableLegth * Shift) - 1;
|
137
167
|
stepper = sin_operator / sin_operator_adder;
|
@@ -232,7 +262,6 @@
|
|
232
262
|
TCCR4B = 0b00011001;
|
233
263
|
TIMSK4 = 0b00000010;
|
234
264
|
OCR4A = (8000000 / 1000) - 1;//速度制御
|
235
|
-
|
236
265
|
analog = analogRead(A0);
|
237
266
|
//analog = 1023;
|
238
267
|
HzTo = analog / 4;
|
@@ -269,6 +298,9 @@
|
|
269
298
|
}
|
270
299
|
return 0;
|
271
300
|
}
|
301
|
+
|
302
|
+
|
303
|
+
|
272
304
|
```
|
273
305
|
|
274
306
|
### 試したこと
|
3
説明不足の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -277,5 +277,5 @@
|
|
277
277
|
|
278
278
|
### 補足
|
279
279
|
|
280
|
-
特殊なPWMを出すため、TIMER2,TIMER3,TIMER4のレジスタを編集しています。
|
280
|
+
特殊なPWMを出すため、TIMER2,TIMER3,TIMER4,TIMER5のレジスタを編集しています。
|
281
281
|
波形テーブルの宣言と、モーター音指定プログラムは省略しています。
|
2
プログラムの問題の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,6 +41,7 @@
|
|
41
41
|
8 日立GTO (西武6000系)
|
42
42
|
9 東洋IGBT (東京メトロ16000系)
|
43
43
|
10日立IGBT (JRE231系1000番台)
|
44
|
+
*/
|
44
45
|
opereator_type sin_operator, SinBuffer;
|
45
46
|
opereator_type sin_operator_adder;
|
46
47
|
volatile char soundwave;
|
1
文法の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
-
ArduinoMegaで
|
2
|
+
ArduinoMegaでVVVFインバーターを作って、電車のモーター音を再現しています。
|
3
3
|
### 発生している問題・エラーメッセージ
|
4
4
|
|
5
5
|
```
|
6
|
-
|
6
|
+
analogRead()がずっと0を返しています。
|
7
7
|
```
|
8
8
|
|
9
9
|
### 該当のソースコード
|
@@ -274,6 +274,7 @@
|
|
274
274
|
|
275
275
|
新たにanalogRead()を読み取るだけのプログラムを作り、試したら正常に動作したため、ピンが壊れているということはなさそうです。また、ピンを変えても結果は同じで、ずっと0を返します。
|
276
276
|
|
277
|
-
### 補足
|
277
|
+
### 補足
|
278
278
|
|
279
|
-
特殊なPWMを出すため、TIMER2,TIMER3,TIMER4のレジスタを
|
279
|
+
特殊なPWMを出すため、TIMER2,TIMER3,TIMER4のレジスタを編集しています。
|
280
|
+
波形テーブルの宣言と、モーター音指定プログラムは省略しています。
|