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

質問編集履歴

4

プログラムの修正

2021/07/17 12:35

投稿

VVVF_IR
VVVF_IR

スコア1

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

説明不足の修正

2021/07/17 12:35

投稿

VVVF_IR
VVVF_IR

スコア1

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

プログラムの問題の修正

2021/07/17 12:12

投稿

VVVF_IR
VVVF_IR

スコア1

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

文法の修正

2021/07/17 11:57

投稿

VVVF_IR
VVVF_IR

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,9 @@
1
1
  ### 前提・実現したいこと
2
- ArduinoMegaで3相インバーターを作って、電車のモーター音を再現しています。
2
+ ArduinoMegaでVVVFインバーターを作って、電車のモーター音を再現しています。
3
3
  ### 発生している問題・エラーメッセージ
4
4
 
5
5
  ```
6
- 780行目のanalogRead()がずっと0を返しています。
6
+ analogRead()がずっと0を返しています。
7
7
  ```
8
8
 
9
9
  ### 該当のソースコード
@@ -274,6 +274,7 @@
274
274
 
275
275
  新たにanalogRead()を読み取るだけのプログラムを作り、試したら正常に動作したため、ピンが壊れているということはなさそうです。また、ピンを変えても結果は同じで、ずっと0を返します。
276
276
 
277
- ### 補足情報(FW/ツールのバージョンなど)
277
+ ### 補足
278
278
 
279
- 特殊なPWMを出すため、TIMER2,TIMER3,TIMER4のレジスタをいじっています。
279
+ 特殊なPWMを出すため、TIMER2,TIMER3,TIMER4のレジスタを編集しています。
280
+ 波形テーブルの宣言と、モーター音指定プログラムは省略しています。