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

質問編集履歴

7

誤字

2018/06/08 08:21

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -333,5 +333,5 @@
333
333
 
334
334
  ###回路動作
335
335
  ①波形発生器から一定範囲(1M~3MHz)の交流電圧の周波数を掃引、STより出力する
336
- ②モノがその電流を受け取った際、既知のコイルとモノの抵抗、静電容量によって共振回路が生成され、STから出力された周波数を用いて共振点(オシロスコープの波形の最大値)が検出される。
336
+ ②モノがその電流を受け取った際、アナログ素子として回路上に設置したコイルとモノの抵抗、静電容量によって共振回路が生成され、STから出力された周波数を用いて共振点(オシロスコープの波形の最大値)が検出される。
337
337
  ③RX部分から共振点が決まった波形が入力され、12bitのA/D変換を行った後、A/D変換の最大値を求め、Bluetooth通信でPCに送信する。

6

補足

2018/06/08 08:21

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -329,4 +329,9 @@
329
329
  dsPIC周辺
330
330
 
331
331
  ![イメージ説明](1f31ec41ae659b3887fbe3bbb68f5343.jpeg)
332
- STコネクタより波形発生器で生成された交流電圧の周波数を掃引
332
+ STコネクタより波形発生器で生成された交流電圧の周波数を掃引
333
+
334
+ ###回路動作
335
+ ①波形発生器から一定範囲(1M~3MHz)の交流電圧の周波数を掃引、STより出力する
336
+ ②モノがその電流を受け取った際、既知のコイルとモノの抵抗、静電容量によって共振回路が生成され、STから出力された周波数を用いて共振点(オシロスコープの波形の最大値)が検出される。
337
+ ③RX部分から共振点が決まった波形が入力され、12bitのA/D変換を行った後、A/D変換の最大値を求め、Bluetooth通信でPCに送信する。

5

図の挿入

2018/06/08 08:18

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -326,4 +326,7 @@
326
326
  4ピンへの入力回路:TIAによる電流電圧変換、包絡線検波回路による搬送波除去
327
327
 
328
328
  ![イメージ説明](afb2bddf85b8a78a13b2e8f014906b85.jpeg)
329
- dsPIC周辺
329
+ dsPIC周辺
330
+
331
+ ![イメージ説明](1f31ec41ae659b3887fbe3bbb68f5343.jpeg)
332
+ STコネクタより波形発生器で生成された交流電圧の周波数を掃引

4

図の挿入

2018/06/08 08:07

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -323,4 +323,7 @@
323
323
 
324
324
 
325
325
  ![イメージ説明](2242462324494a6f31803f06629f1624.jpeg)
326
- 4ピンへの入力回路:TIAによる電流電圧変換、包絡線検波回路による搬送波除去
326
+ 4ピンへの入力回路:TIAによる電流電圧変換、包絡線検波回路による搬送波除去
327
+
328
+ ![イメージ説明](afb2bddf85b8a78a13b2e8f014906b85.jpeg)
329
+ dsPIC周辺

3

図の挿入

2018/06/08 07:55

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -321,8 +321,6 @@
321
321
 
322
322
  ### 補足情報(FW/ツールのバージョンなど)
323
323
 
324
- MPLAB
325
- dsPIC
326
- c言語
327
324
 
328
- ![dsPIC](59be99fa5161023cf8e12b88a3ed3a56.jpeg)
325
+ ![イメージ説明](2242462324494a6f31803f06629f1624.jpeg)
326
+ 4ピンへの入力回路:TIAによる電流電圧変換、包絡線検波回路による搬送波除去

2

図の挿入

2018/06/08 07:53

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -323,4 +323,6 @@
323
323
 
324
324
  MPLAB
325
325
  dsPIC
326
- c言語
326
+ c言語
327
+
328
+ ![dsPIC](59be99fa5161023cf8e12b88a3ed3a56.jpeg)

1

プログラムの追加

2018/06/08 07:38

投稿

sotooki
sotooki

スコア15

title CHANGED
File without changes
body CHANGED
@@ -13,6 +13,307 @@
13
13
 
14
14
  マイコンの割り込みによる問題が考えられますが、このような現象はあり得ますでしょうか。
15
15
 
16
+ ###ソースコード
17
+
18
+ ```C言語
19
+ #include<p30f3013.h>
20
+ #include<dsp.h>
21
+ #include<uart.h>
22
+ #include<timer.h>
23
+ #include<stdio.h>
24
+ #include<stdlib.h>
25
+ #include<math.h>
26
+ #include<spi.h>
27
+ #include<adc12.h>
28
+ #define UART_RX_TX 0xFBE7
29
+ #define UART_ALTRX_ALTTX 0xFFE7
30
+ #define CLOCK 117964800 //clock=(7.3728*16)=118MHz
31
+ #define Fcy CLOCK/4 //system clock=118/4=30MHz
32
+ #define BAUD 115200 //最大で57600bps
33
+
34
+ /*** dsPIC_config ***/
35
+ _FOSC(CSW_FSCM_OFF & XT_PLL16 )//XT_PLL16 or FRC_PLL8
36
+ _FWDT(WDT_OFF)
37
+ _FBORPOR(MCLR_EN & PBOR_OFF & PWRT_OFF)
38
+ _FGS(CODE_PROT_OFF)
39
+
40
+ /*** ハードウェアピン設定 ***/
41
+ #define Green LATBbits.LATB5
42
+ #define Red LATBbits.LATB4
43
+ #define SPI_CS LATFbits.LATF5
44
+ #define dds_CTRL LATDbits.LATD8
45
+ #define dds_Int LATDbits.LATD9
46
+ #define A2 LATBbits.LATB8
47
+ #define A1 LATBbits.LATB9
48
+ #define A0 LATBbits.LATB7
49
+ #define Triger LATBbits.LATB6
50
+
51
+ /*** 定数定義 ***/
52
+ #define PI 3.141593
53
+
54
+ /*** Grobal変数定義 ***/
55
+ unsigned long SetTime1;
56
+ unsigned long SetTime2;
57
+ unsigned long Fs1;
58
+ unsigned long Fs2;
59
+ unsigned int cmnd;
60
+ unsigned int Data[5];
61
+ unsigned int Data_new;
62
+ unsigned int Data_old;
63
+ unsigned int TopDataV;
64
+ unsigned int TopDataf;
65
+ unsigned int i=0;
66
+ unsigned int n=0;
67
+ unsigned int fmin[100];
68
+ unsigned int Vmin[100];
69
+ unsigned int TX;
70
+ unsigned int RX;
71
+ unsigned int ch=1;
72
+ unsigned int h;
73
+ unsigned int count=0;
74
+ unsigned int flag=0;
75
+ unsigned int ftx=0;
76
+ unsigned int frx=0;
77
+
78
+
79
+ /*** ADコンバータ初期設定パラメータ(符号付固定少数で扱う) ***/
80
+ unsigned int Config1 = ADC_MODULE_ON & ADC_IDLE_CONTINUE & ADC_FORMAT_SIGN_FRACT &
81
+ ADC_CLK_AUTO & ADC_AUTO_SAMPLING_ON & ADC_SAMP_OFF;
82
+ unsigned int Config2 = ADC_VREF_EXT_AVSS & ADC_SCAN_OFF & ADC_SAMPLES_PER_INT_1 &
83
+ ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF;
84
+ unsigned int Config3 = ADC_SAMPLE_TIME_5 & ADC_CONV_CLK_SYSTEM &
85
+ ADC_CONV_CLK_32Tcy;
86
+ unsigned int ConfigPort = ENABLE_AN2_ANA;
87
+ unsigned int ConfigScan = 0x000;
88
+ unsigned int Channel0 = ADC_CH0_POS_SAMPLEA_AN2 & ADC_CH0_NEG_SAMPLEA_NVREF;
89
+
90
+ /*** UARTの初期設定パラメータ ***/
91
+ unsigned int UMODEValue = UART_EN & UART_IDLE_CON & UART_ALTRX_ALTTX &
92
+ UART_DIS_WAKE & UART_DIS_LOOPBACK &
93
+ UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT;
94
+ unsigned int USTAValue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL &
95
+ UART_TX_ENABLE & UART_INT_RX_CHAR &
96
+ UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
97
+ unsigned int ubrg=(Fcy/(16*BAUD))-1;
98
+
99
+ /*** SPI設定パラメータ クロック15MHz(Max20MHz) ***/
100
+ unsigned int SPICONValue = FRAME_ENABLE_OFF & FRAME_SYNC_INPUT &
101
+ ENABLE_SDO_PIN & SPI_MODE16_ON & SPI_SMP_ON & SPI_CKE_ON&
102
+ CLK_POL_ACTIVE_HIGH & MASTER_ENABLE_ON &
103
+ SEC_PRESCAL_1_1 & PRI_PRESCAL_1_1;
104
+ unsigned int SPISTATValue = SPI_ENABLE & SPI_IDLE_CON &
105
+ SPI_RX_OVFLOW_CLR;
106
+
107
+
108
+ /*** delay_ms,delay_usの作成 ***/
109
+ void delay_ms(unsigned int N)
110
+ {
111
+ __delay32((Fcy/1000)*N);
112
+ }
113
+
114
+ void delay_us(unsigned int N)
115
+ {
116
+ __delay32((Fcy/1000000)*N);
117
+ }
118
+
119
+ void delay_ns(unsigned int N)
120
+ {
121
+ __delay32((Fcy/1000000000)*N);
122
+ }
123
+
124
+
125
+ /** DDSの初期設定 **/
126
+ void DDSset(void)
127
+ {
128
+ /* コントロールレジスタ書き込み */
129
+ SPI_CS=0;
130
+ WriteSPI1(0x6F7);
131
+ delay_ns(500);
132
+ SPI_CS=1;
133
+ delay_ns(1000);
134
+ /* 開始周波数設定 */
135
+ SPI_CS=0;
136
+ WriteSPI1(0xC312);//LSB
137
+ delay_ns(500);
138
+ SPI_CS=1;
139
+ delay_ns(1000);
140
+ SPI_CS=0;
141
+ WriteSPI1(0xD008);//MSB
142
+ delay_ns(500);
143
+ SPI_CS=1;
144
+ delay_ns(1000);
145
+ /* 周波数インクリメント設定 */
146
+ SPI_CS=0;
147
+ WriteSPI1(0x20F3);//LSB
148
+ delay_ns(500);
149
+ SPI_CS=1;
150
+ delay_ns(1000);
151
+ SPI_CS=0;
152
+ WriteSPI1(0x3000);//MSB
153
+ delay_ns(500);
154
+ SPI_CS=1;
155
+ delay_ns(1000);
156
+ /* インクリメント数設定 */
157
+ SPI_CS=0;
158
+ WriteSPI1(0x1FA0);
159
+ delay_ns(500);
160
+ SPI_CS=1;
161
+ delay_ns(1000);
162
+ /* インクリメント・インターバル設定 */
163
+ SPI_CS=0;
164
+ WriteSPI1(0x4000);
165
+ delay_ns(500);
166
+ SPI_CS=1;
167
+ delay_ns(1000);
168
+ }
169
+
170
+ /***1point measure***/
171
+ void OnePoint(void)
172
+ {
173
+ Red=0;
174
+ WriteUART1((unsigned int)(0x02));
175
+ while(BusyUART1());
176
+ for(h=1; h<=2; h++)
177
+ {
178
+ WriteUART1((unsigned int)(0x41+((Vmin[h]>>12) & 0x000F)));
179
+ while(BusyUART1());
180
+ WriteUART1((unsigned int)(0x41+((Vmin[h]>>8) & 0x000F)));
181
+ while(BusyUART1());
182
+ WriteUART1((unsigned int)(0x41+((Vmin[h]>>4) & 0x000F)));
183
+ while(BusyUART1());
184
+ WriteUART1((unsigned int)(0x41+((fmin[h]>>8) & 0x000F)));
185
+ while(BusyUART1());
186
+ WriteUART1((unsigned int)(0x41+((fmin[h]>>4) & 0x000F)));
187
+ while(BusyUART1());
188
+ WriteUART1((unsigned int)(0x41+((fmin[h]>>0) & 0x000F)));
189
+ while(BusyUART1());
190
+ }
191
+ WriteUART1((unsigned int)(0x03));
192
+ while(BusyUART1());
193
+ CRLF();
194
+ Red=1;
195
+ }
196
+
197
+ /***復帰改行関数***/
198
+ void CRLF(void)
199
+ {
200
+ WriteUART1((unsigned int)(0x0a));
201
+ while(BusyUART1());
202
+ WriteUART1((unsigned int)(0x0d));
203
+ while(BusyUART1());
204
+ }
205
+
206
+ void dtime (void){delay_ns(1000);}
207
+
208
+ /*** タイマ1 割り込み処理関数 ***/
209
+ void __attribute__((__interrupt__, __shadow__))_T1Interrupt(void)
210
+ {
211
+ IFS0bits.T1IF=0;//割込みフラグクリア
212
+ OnePoint();//1point送信
213
+ }
214
+
215
+ /*** タイマ2 割り込み処理関数 ***/
216
+ void __attribute__((__interrupt__, __shadow__))_T2Interrupt(void)
217
+ {
218
+
219
+ IFS0bits.T2IF=0;//割込みフラグクリア
220
+ dds_CTRL=1;
221
+ delay_ns(200);
222
+ dds_CTRL=0;
223
+ SigIn[0] = ReadADC12(0);// Input to A/D converter ()
224
+ Data_new = SigIn[0]+0x8000;//0~FFFFで与える
225
+ n=n+1;
226
+
227
+ // 最大値検出(トーナメント) //
228
+ if(Data_new > TopDataV)
229
+ {
230
+ TopDataV = Data_new;
231
+ TopDataf = n;
232
+ }
233
+
234
+ /*** 掃引終了判定* **/
235
+ if(n>=4000)
236
+ {
237
+ Green=1;
238
+ count=count+1;
239
+ Vmin[count]=TopDataV;
240
+ fmin[count]=TopDataf;
241
+ TopDataV=0;
242
+ TopDataf=0;
243
+
244
+ dds_Int=1;
245
+ delay_ns(200);
246
+ n=0;
247
+ dds_Int=0;
248
+
249
+ }
250
+ }
251
+
252
+ /*** メイン関数 ***/
253
+ void main(void)
254
+ {
255
+ /// UART初期設定
256
+ OpenUART1(UMODEValue,USTAValue,ubrg);
257
+ IPC2bits.U1TXIP=5;
258
+ IPC2bits.U1RXIP=6;
259
+
260
+ /// PORT初期設定
261
+ ADPCFG=0xFFFF;//アナログなし
262
+ TRISB=0x0007;//0,1,2入力用,他出力用
263
+ TRISF=0x0000;//RF(2,3,6)SPI出力用
264
+ TRISD=0x0000;//RD8-SPI出力,RD9-INT0入力用
265
+ TRISC=0x1000;//UARTRX用(RC13=High)
266
+ PORTB=0xFFFF;//all LED off
267
+ PORTF=0xFFFF;//RF3=High
268
+ PORTD=0xFFFF;//RD8=High
269
+
270
+ /// Open SPI クロック 30MHz/1=30MHz(33ns)
271
+ OpenSPI1(SPICONValue,SPISTATValue);
272
+ INTCON1bits.NSTDIS=1;//多重割り込み禁止
273
+ SPI_CS=1;
274
+ dds_CTRL=1;
275
+
276
+ /** DDSの初期設定 **/
277
+ DDSset();
278
+ dds_Int=0;
279
+ CloseSPI1();
280
+
281
+ /// ADC初期設定
282
+ OpenADC12(Config1,Config2,Config3,ConfigPort,ConfigScan);
283
+ SetChanADC12(Channel0);
284
+
285
+ ///DDS tart
286
+ //タイマ2設定,OPEN
287
+ Fs2=240000;//Tscan=0.2s_20000,Tscan=0.05s_80000
288
+ SetTime2 = ((Fcy/Fs2)+1);
289
+ OpenTimer2(T2_ON & T2_GATE_OFF & T2_PS_1_1 & T2_SOURCE_INT , SetTime2);
290
+ ConfigIntTimer2(T2_INT_PRIOR_3 & T2_INT_ON);
291
+
292
+ while(1)
293
+ {
294
+ while(!DataRdyUART1());
295
+ cmnd = ReadUART1();
296
+ ///受信コマンドの処理
297
+ switch(cmnd)
298
+ {
299
+ case'1':
300
+
301
+ ///1point measure
302
+ OnePoint();
303
+ break;
304
+
305
+ case'2':
306
+
307
+ break;
308
+
309
+ default : break;
310
+ }
311
+
312
+ }
313
+
314
+ }
315
+ ```
316
+
16
317
  ### 試したこと
17
318
 
18
319
  最大値を求めるアルゴリズムを変更してみました。