68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
from matplotlib import pyplot as plt
|
|
import numpy as np
|
|
|
|
VREFINT_CAL = 24175 # internal calibration value (Vref measured with precise 3.3v reference voltage)
|
|
VREF_CAL = 3.306 # [Volts] rough estimate from the internal calibration data from factory
|
|
|
|
TEMP_30_CAL = 12406
|
|
TEMP_110_CAL = 16472
|
|
|
|
def vrefint_conv_plot(numbers):
|
|
'''
|
|
convert ADC 16bit numbers to tension and evaluate internal reference voltage correction
|
|
then plot the data
|
|
'''
|
|
N_MEAS = len(numbers)
|
|
|
|
Vref_cal = (3.3*VREFINT_CAL)/np.mean(numbers)
|
|
print(f'Calibrated reference voltage: {Vref_cal:.5f} V')
|
|
print(f'Vref interno (calibrato): {(VREFINT_CAL*3.3)/2**16:.3f} V')
|
|
# convert ADC read to voltage
|
|
volts = [i*(Vref_cal/(2**16-1)) for i in numbers]
|
|
mean = np.mean(volts)
|
|
# plot the result (both the single points and the curve connecting them)
|
|
x_coords = range(0,N_MEAS)
|
|
plt.plot(x_coords, volts, linewidth='0.8', color='orange', label='result')
|
|
plt.scatter(x_coords, volts, marker='+', color='orange')
|
|
plt.hlines(mean, 0, N_MEAS, label=f'mean - {mean:.3f}V')
|
|
|
|
plt.legend()
|
|
plt.grid(True)
|
|
plt.show()
|
|
|
|
|
|
def temp_conv_plot(numbers):
|
|
'''
|
|
convert ADC 16bit numbers to temperature and plot the data
|
|
'''
|
|
slope = ((110-30)/(TEMP_110_CAL-TEMP_30_CAL))*1000
|
|
N_MEAS = len(numbers)
|
|
|
|
temps = [i*(VREF_CAL/2**16)*slope for i in numbers]
|
|
mean = np.mean(temps)
|
|
# plot the result (both the single points and the curve connecting them)
|
|
x_coords = range(0,N_MEAS)
|
|
plt.plot(x_coords, temps, linewidth='0.8', color='orange', label='result')
|
|
plt.scatter(x_coords, temps, marker='+', color='orange')
|
|
plt.hlines(mean, 0, N_MEAS, label=f'mean - {mean:.3f}℃')
|
|
|
|
plt.legend()
|
|
plt.grid(True)
|
|
plt.show()
|
|
|
|
|
|
def generic_plot(numbers, begin, SAMPLE_TIME):
|
|
N_MEAS = len(numbers)
|
|
# convert ADC read to voltage
|
|
volts = [i*(VREF_CAL/(2**16-1)) for i in numbers]
|
|
mean = np.mean(volts)
|
|
# plot the result (both the single points and the curve connecting them)
|
|
x_coords = np.linspace(0, (N_MEAS+1)*SAMPLE_TIME, N_MEAS)
|
|
|
|
plt.plot(x_coords, volts, linewidth='0.8', color='orange', label='result')
|
|
plt.scatter(x_coords, volts, marker='+', color='orange')
|
|
#plt.hlines(mean, 0, N_MEAS*SAMPLE_TIME, label=f'mean - {mean:.3f}V')
|
|
plt.vlines(30*SAMPLE_TIME, min(volts), max(volts)) # trigger point
|
|
plt.legend()
|
|
plt.grid(True)
|
|
plt.show()
|