Raspberry Pi3B+を用いて以下のプログラムにより電圧測定をしているのですがサンプリング周波数を25000Hz以上にすることができません。(sampling_rate = )の部分がサンプリング周波数を表していますが数字を例えば100000としても25000Hzになってしまいます。(SPI_SPEED = )の値を変えても駄目でした。回路は以下の写真のように組んでいてSPI通信をしています。使用しているADコンバータはmcp3208です。最低でも100kHz,できれば1MHzで計測したいと思っていますがどうすればよいでしょうか?
Python
1import wiringpi as pi 2import time 3import mcp_adc3208 4import numpy as np 5import openpyxl as excel 6 7SPI_CE = 0 8SPI_SPEED = 5000000 9READ_CH = 0 10VREF = 5.0 11Vi = [] 12i = 0 13adc = mcp_adc3208.mcp3208( SPI_CE, SPI_SPEED, VREF ) 14 15def do_sampling(i): 16 y[i] = time.perf_counter() - time_start 17 18 19sampling_num = 100000 20sampling_rate = 25000 21sampling_interval = 1 / sampling_rate 22 23x = np.arange(0, sampling_num / sampling_rate, sampling_interval) 24y = np.zeros(sampling_num) 25 26count=0 27time_start = time.perf_counter() 28time_next = time_start 29while count < sampling_num : 30 do_sampling(count) 31 time_next += sampling_interval 32 value = adc.get_value( READ_CH ) 33 volt = adc.get_volt( value ) 34 Vi.append(volt) 35 while (time.perf_counter() < time_next): # 次の時間まで待つ。 36 pass 37 count = count + 1 38 39wb=excel.Workbook() 40ws=wb.active 41 42for i in range(1,sampling_num): 43 44 s=y[i] 45 T=Vi[i-1] 46 47 ws.cell(row=i,column=1,value=s) 48 ws.cell(row=i,column=2,value=T) 49 50wb.save("denatsu.xlsx")
モジュールmcp_adc3208は以下の通りです。
Python
1import wiringpi as pi 2import struct 3 4class mcp3208: 5 def __init__( self, ss, speed, vref ): 6 self.ss = ss 7 self.speed = speed 8 self.vref = vref 9 10 pi.wiringPiSPISetup( self.ss, self.speed ) 11 12 def get_value( self, ch ): 13 cmd = 0xc0 | ( ch << 3 ) 14 buffer = cmd << 24 15 buffer = buffer.to_bytes( 4, byteorder='big' ) 16 pi.wiringPiSPIDataRW( self.ss, buffer ) 17 value = ( buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[2] ) >> 13 18 return value 19 20 def get_volt( self, value ): 21 return value * self.vref / float( 4095 )
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。