質問編集履歴

7

誤字

2018/06/08 08:21

投稿

sotooki
sotooki

スコア15

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

6

補足

2018/06/08 08:21

投稿

sotooki
sotooki

スコア15

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

5

図の挿入

2018/06/08 08:18

投稿

sotooki
sotooki

スコア15

test CHANGED
File without changes
test CHANGED
@@ -655,3 +655,9 @@
655
655
  ![イメージ説明](afb2bddf85b8a78a13b2e8f014906b85.jpeg)
656
656
 
657
657
  dsPIC周辺
658
+
659
+
660
+
661
+ ![イメージ説明](1f31ec41ae659b3887fbe3bbb68f5343.jpeg)
662
+
663
+ STコネクタより波形発生器で生成された交流電圧の周波数を掃引

4

図の挿入

2018/06/08 08:07

投稿

sotooki
sotooki

スコア15

test CHANGED
File without changes
test CHANGED
@@ -649,3 +649,9 @@
649
649
  ![イメージ説明](2242462324494a6f31803f06629f1624.jpeg)
650
650
 
651
651
  4ピンへの入力回路:TIAによる電流電圧変換、包絡線検波回路による搬送波除去
652
+
653
+
654
+
655
+ ![イメージ説明](afb2bddf85b8a78a13b2e8f014906b85.jpeg)
656
+
657
+ dsPIC周辺

3

図の挿入

2018/06/08 07:55

投稿

sotooki
sotooki

スコア15

test CHANGED
File without changes
test CHANGED
@@ -644,12 +644,8 @@
644
644
 
645
645
 
646
646
 
647
- MPLAB
647
+
648
-
649
- dsPIC
648
+
650
-
651
- c言語
652
-
653
-
654
-
655
- ![dsPIC](59be99fa5161023cf8e12b88a3ed3a56.jpeg)
649
+ ![イメージ説明](2242462324494a6f31803f06629f1624.jpeg)
650
+
651
+ 4ピンへの入力回路:TIAによる電流電圧変換、包絡線検波回路による搬送波除去

2

図の挿入

2018/06/08 07:53

投稿

sotooki
sotooki

スコア15

test CHANGED
File without changes
test CHANGED
@@ -649,3 +649,7 @@
649
649
  dsPIC
650
650
 
651
651
  c言語
652
+
653
+
654
+
655
+ ![dsPIC](59be99fa5161023cf8e12b88a3ed3a56.jpeg)

1

プログラムの追加

2018/06/08 07:38

投稿

sotooki
sotooki

スコア15

test CHANGED
File without changes
test CHANGED
@@ -28,6 +28,608 @@
28
28
 
29
29
 
30
30
 
31
+ ###ソースコード
32
+
33
+
34
+
35
+ ```C言語
36
+
37
+ #include<p30f3013.h>
38
+
39
+ #include<dsp.h>
40
+
41
+ #include<uart.h>
42
+
43
+ #include<timer.h>
44
+
45
+ #include<stdio.h>
46
+
47
+ #include<stdlib.h>
48
+
49
+ #include<math.h>
50
+
51
+ #include<spi.h>
52
+
53
+ #include<adc12.h>
54
+
55
+ #define UART_RX_TX 0xFBE7
56
+
57
+ #define UART_ALTRX_ALTTX 0xFFE7
58
+
59
+ #define CLOCK 117964800 //clock=(7.3728*16)=118MHz
60
+
61
+ #define Fcy CLOCK/4 //system clock=118/4=30MHz
62
+
63
+ #define BAUD 115200 //最大で57600bps
64
+
65
+
66
+
67
+ /*** dsPIC_config ***/
68
+
69
+ _FOSC(CSW_FSCM_OFF & XT_PLL16 )//XT_PLL16 or FRC_PLL8
70
+
71
+ _FWDT(WDT_OFF)
72
+
73
+ _FBORPOR(MCLR_EN & PBOR_OFF & PWRT_OFF)
74
+
75
+ _FGS(CODE_PROT_OFF)
76
+
77
+
78
+
79
+ /*** ハードウェアピン設定 ***/
80
+
81
+ #define Green LATBbits.LATB5
82
+
83
+ #define Red LATBbits.LATB4
84
+
85
+ #define SPI_CS LATFbits.LATF5
86
+
87
+ #define dds_CTRL LATDbits.LATD8
88
+
89
+ #define dds_Int LATDbits.LATD9
90
+
91
+ #define A2 LATBbits.LATB8
92
+
93
+ #define A1 LATBbits.LATB9
94
+
95
+ #define A0 LATBbits.LATB7
96
+
97
+ #define Triger LATBbits.LATB6
98
+
99
+
100
+
101
+ /*** 定数定義 ***/
102
+
103
+ #define PI 3.141593
104
+
105
+
106
+
107
+ /*** Grobal変数定義 ***/
108
+
109
+ unsigned long SetTime1;
110
+
111
+ unsigned long SetTime2;
112
+
113
+ unsigned long Fs1;
114
+
115
+ unsigned long Fs2;
116
+
117
+ unsigned int cmnd;
118
+
119
+ unsigned int Data[5];
120
+
121
+ unsigned int Data_new;
122
+
123
+ unsigned int Data_old;
124
+
125
+ unsigned int TopDataV;
126
+
127
+ unsigned int TopDataf;
128
+
129
+ unsigned int i=0;
130
+
131
+ unsigned int n=0;
132
+
133
+ unsigned int fmin[100];
134
+
135
+ unsigned int Vmin[100];
136
+
137
+ unsigned int TX;
138
+
139
+ unsigned int RX;
140
+
141
+ unsigned int ch=1;
142
+
143
+ unsigned int h;
144
+
145
+ unsigned int count=0;
146
+
147
+ unsigned int flag=0;
148
+
149
+ unsigned int ftx=0;
150
+
151
+ unsigned int frx=0;
152
+
153
+
154
+
155
+
156
+
157
+ /*** ADコンバータ初期設定パラメータ(符号付固定少数で扱う) ***/
158
+
159
+ unsigned int Config1 = ADC_MODULE_ON & ADC_IDLE_CONTINUE & ADC_FORMAT_SIGN_FRACT &
160
+
161
+ ADC_CLK_AUTO & ADC_AUTO_SAMPLING_ON & ADC_SAMP_OFF;
162
+
163
+ unsigned int Config2 = ADC_VREF_EXT_AVSS & ADC_SCAN_OFF & ADC_SAMPLES_PER_INT_1 &
164
+
165
+ ADC_ALT_BUF_OFF & ADC_ALT_INPUT_OFF;
166
+
167
+ unsigned int Config3 = ADC_SAMPLE_TIME_5 & ADC_CONV_CLK_SYSTEM &
168
+
169
+ ADC_CONV_CLK_32Tcy;
170
+
171
+ unsigned int ConfigPort = ENABLE_AN2_ANA;
172
+
173
+ unsigned int ConfigScan = 0x000;
174
+
175
+ unsigned int Channel0 = ADC_CH0_POS_SAMPLEA_AN2 & ADC_CH0_NEG_SAMPLEA_NVREF;
176
+
177
+
178
+
179
+ /*** UARTの初期設定パラメータ ***/
180
+
181
+ unsigned int UMODEValue = UART_EN & UART_IDLE_CON & UART_ALTRX_ALTTX &
182
+
183
+ UART_DIS_WAKE & UART_DIS_LOOPBACK &
184
+
185
+ UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT;
186
+
187
+ unsigned int USTAValue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL &
188
+
189
+ UART_TX_ENABLE & UART_INT_RX_CHAR &
190
+
191
+ UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
192
+
193
+ unsigned int ubrg=(Fcy/(16*BAUD))-1;
194
+
195
+
196
+
197
+ /*** SPI設定パラメータ クロック15MHz(Max20MHz) ***/
198
+
199
+ unsigned int SPICONValue = FRAME_ENABLE_OFF & FRAME_SYNC_INPUT &
200
+
201
+ ENABLE_SDO_PIN & SPI_MODE16_ON & SPI_SMP_ON & SPI_CKE_ON&
202
+
203
+ CLK_POL_ACTIVE_HIGH & MASTER_ENABLE_ON &
204
+
205
+ SEC_PRESCAL_1_1 & PRI_PRESCAL_1_1;
206
+
207
+ unsigned int SPISTATValue = SPI_ENABLE & SPI_IDLE_CON &
208
+
209
+ SPI_RX_OVFLOW_CLR;
210
+
211
+
212
+
213
+
214
+
215
+ /*** delay_ms,delay_usの作成 ***/
216
+
217
+ void delay_ms(unsigned int N)
218
+
219
+ {
220
+
221
+ __delay32((Fcy/1000)*N);
222
+
223
+ }
224
+
225
+
226
+
227
+ void delay_us(unsigned int N)
228
+
229
+ {
230
+
231
+ __delay32((Fcy/1000000)*N);
232
+
233
+ }
234
+
235
+
236
+
237
+ void delay_ns(unsigned int N)
238
+
239
+ {
240
+
241
+ __delay32((Fcy/1000000000)*N);
242
+
243
+ }
244
+
245
+
246
+
247
+
248
+
249
+ /** DDSの初期設定 **/
250
+
251
+ void DDSset(void)
252
+
253
+ {
254
+
255
+ /* コントロールレジスタ書き込み */
256
+
257
+ SPI_CS=0;
258
+
259
+ WriteSPI1(0x6F7);
260
+
261
+ delay_ns(500);
262
+
263
+ SPI_CS=1;
264
+
265
+ delay_ns(1000);
266
+
267
+ /* 開始周波数設定 */
268
+
269
+ SPI_CS=0;
270
+
271
+ WriteSPI1(0xC312);//LSB
272
+
273
+ delay_ns(500);
274
+
275
+ SPI_CS=1;
276
+
277
+ delay_ns(1000);
278
+
279
+ SPI_CS=0;
280
+
281
+ WriteSPI1(0xD008);//MSB
282
+
283
+ delay_ns(500);
284
+
285
+ SPI_CS=1;
286
+
287
+ delay_ns(1000);
288
+
289
+ /* 周波数インクリメント設定 */
290
+
291
+ SPI_CS=0;
292
+
293
+ WriteSPI1(0x20F3);//LSB
294
+
295
+ delay_ns(500);
296
+
297
+ SPI_CS=1;
298
+
299
+ delay_ns(1000);
300
+
301
+ SPI_CS=0;
302
+
303
+ WriteSPI1(0x3000);//MSB
304
+
305
+ delay_ns(500);
306
+
307
+ SPI_CS=1;
308
+
309
+ delay_ns(1000);
310
+
311
+ /* インクリメント数設定 */
312
+
313
+ SPI_CS=0;
314
+
315
+ WriteSPI1(0x1FA0);
316
+
317
+ delay_ns(500);
318
+
319
+ SPI_CS=1;
320
+
321
+ delay_ns(1000);
322
+
323
+ /* インクリメント・インターバル設定 */
324
+
325
+ SPI_CS=0;
326
+
327
+ WriteSPI1(0x4000);
328
+
329
+ delay_ns(500);
330
+
331
+ SPI_CS=1;
332
+
333
+ delay_ns(1000);
334
+
335
+ }
336
+
337
+
338
+
339
+ /***1point measure***/
340
+
341
+ void OnePoint(void)
342
+
343
+ {
344
+
345
+ Red=0;
346
+
347
+ WriteUART1((unsigned int)(0x02));
348
+
349
+ while(BusyUART1());
350
+
351
+ for(h=1; h<=2; h++)
352
+
353
+ {
354
+
355
+ WriteUART1((unsigned int)(0x41+((Vmin[h]>>12) & 0x000F)));
356
+
357
+ while(BusyUART1());
358
+
359
+ WriteUART1((unsigned int)(0x41+((Vmin[h]>>8) & 0x000F)));
360
+
361
+ while(BusyUART1());
362
+
363
+ WriteUART1((unsigned int)(0x41+((Vmin[h]>>4) & 0x000F)));
364
+
365
+ while(BusyUART1());
366
+
367
+ WriteUART1((unsigned int)(0x41+((fmin[h]>>8) & 0x000F)));
368
+
369
+ while(BusyUART1());
370
+
371
+ WriteUART1((unsigned int)(0x41+((fmin[h]>>4) & 0x000F)));
372
+
373
+ while(BusyUART1());
374
+
375
+ WriteUART1((unsigned int)(0x41+((fmin[h]>>0) & 0x000F)));
376
+
377
+ while(BusyUART1());
378
+
379
+ }
380
+
381
+ WriteUART1((unsigned int)(0x03));
382
+
383
+ while(BusyUART1());
384
+
385
+ CRLF();
386
+
387
+ Red=1;
388
+
389
+ }
390
+
391
+
392
+
393
+ /***復帰改行関数***/
394
+
395
+ void CRLF(void)
396
+
397
+ {
398
+
399
+ WriteUART1((unsigned int)(0x0a));
400
+
401
+ while(BusyUART1());
402
+
403
+ WriteUART1((unsigned int)(0x0d));
404
+
405
+ while(BusyUART1());
406
+
407
+ }
408
+
409
+
410
+
411
+ void dtime (void){delay_ns(1000);}
412
+
413
+
414
+
415
+ /*** タイマ1 割り込み処理関数 ***/
416
+
417
+ void __attribute__((__interrupt__, __shadow__))_T1Interrupt(void)
418
+
419
+ {
420
+
421
+ IFS0bits.T1IF=0;//割込みフラグクリア
422
+
423
+ OnePoint();//1point送信
424
+
425
+ }
426
+
427
+
428
+
429
+ /*** タイマ2 割り込み処理関数 ***/
430
+
431
+ void __attribute__((__interrupt__, __shadow__))_T2Interrupt(void)
432
+
433
+ {
434
+
435
+
436
+
437
+ IFS0bits.T2IF=0;//割込みフラグクリア
438
+
439
+ dds_CTRL=1;
440
+
441
+ delay_ns(200);
442
+
443
+ dds_CTRL=0;
444
+
445
+ SigIn[0] = ReadADC12(0);// Input to A/D converter ()
446
+
447
+ Data_new = SigIn[0]+0x8000;//0~FFFFで与える
448
+
449
+ n=n+1;
450
+
451
+
452
+
453
+ // 最大値検出(トーナメント) //
454
+
455
+ if(Data_new > TopDataV)
456
+
457
+ {
458
+
459
+ TopDataV = Data_new;
460
+
461
+ TopDataf = n;
462
+
463
+ }
464
+
465
+
466
+
467
+ /*** 掃引終了判定* **/
468
+
469
+ if(n>=4000)
470
+
471
+ {
472
+
473
+ Green=1;
474
+
475
+ count=count+1;
476
+
477
+ Vmin[count]=TopDataV;
478
+
479
+ fmin[count]=TopDataf;
480
+
481
+ TopDataV=0;
482
+
483
+ TopDataf=0;
484
+
485
+
486
+
487
+ dds_Int=1;
488
+
489
+ delay_ns(200);
490
+
491
+ n=0;
492
+
493
+ dds_Int=0;
494
+
495
+
496
+
497
+ }
498
+
499
+ }
500
+
501
+
502
+
503
+ /*** メイン関数 ***/
504
+
505
+ void main(void)
506
+
507
+ {
508
+
509
+ /// UART初期設定
510
+
511
+ OpenUART1(UMODEValue,USTAValue,ubrg);
512
+
513
+ IPC2bits.U1TXIP=5;
514
+
515
+ IPC2bits.U1RXIP=6;
516
+
517
+
518
+
519
+ /// PORT初期設定
520
+
521
+ ADPCFG=0xFFFF;//アナログなし
522
+
523
+ TRISB=0x0007;//0,1,2入力用,他出力用
524
+
525
+ TRISF=0x0000;//RF(2,3,6)SPI出力用
526
+
527
+ TRISD=0x0000;//RD8-SPI出力,RD9-INT0入力用
528
+
529
+ TRISC=0x1000;//UARTRX用(RC13=High)
530
+
531
+ PORTB=0xFFFF;//all LED off
532
+
533
+ PORTF=0xFFFF;//RF3=High
534
+
535
+ PORTD=0xFFFF;//RD8=High
536
+
537
+
538
+
539
+ /// Open SPI クロック 30MHz/1=30MHz(33ns)
540
+
541
+ OpenSPI1(SPICONValue,SPISTATValue);
542
+
543
+ INTCON1bits.NSTDIS=1;//多重割り込み禁止
544
+
545
+ SPI_CS=1;
546
+
547
+ dds_CTRL=1;
548
+
549
+
550
+
551
+ /** DDSの初期設定 **/
552
+
553
+ DDSset();
554
+
555
+ dds_Int=0;
556
+
557
+ CloseSPI1();
558
+
559
+
560
+
561
+ /// ADC初期設定
562
+
563
+ OpenADC12(Config1,Config2,Config3,ConfigPort,ConfigScan);
564
+
565
+ SetChanADC12(Channel0);
566
+
567
+
568
+
569
+ ///DDS tart
570
+
571
+ //タイマ2設定,OPEN
572
+
573
+ Fs2=240000;//Tscan=0.2s_20000,Tscan=0.05s_80000
574
+
575
+ SetTime2 = ((Fcy/Fs2)+1);
576
+
577
+ OpenTimer2(T2_ON & T2_GATE_OFF & T2_PS_1_1 & T2_SOURCE_INT , SetTime2);
578
+
579
+ ConfigIntTimer2(T2_INT_PRIOR_3 & T2_INT_ON);
580
+
581
+
582
+
583
+ while(1)
584
+
585
+ {
586
+
587
+ while(!DataRdyUART1());
588
+
589
+ cmnd = ReadUART1();
590
+
591
+ ///受信コマンドの処理
592
+
593
+ switch(cmnd)
594
+
595
+ {
596
+
597
+ case'1':
598
+
599
+
600
+
601
+ ///1point measure
602
+
603
+ OnePoint();
604
+
605
+ break;
606
+
607
+
608
+
609
+ case'2':
610
+
611
+
612
+
613
+ break;
614
+
615
+
616
+
617
+ default : break;
618
+
619
+ }
620
+
621
+
622
+
623
+ }
624
+
625
+
626
+
627
+ }
628
+
629
+ ```
630
+
631
+
632
+
31
633
  ### 試したこと
32
634
 
33
635