aktualisiert...
This commit is contained in:
parent
2d5e99e587
commit
368b2fb2e4
|
|
@ -7,20 +7,22 @@ from tsapython import tinySA
|
|||
import datetime
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import progressbar
|
||||
|
||||
ser = serial.Serial("/dev/ttyACM2", 115200)
|
||||
|
||||
ser = serial.Serial("/dev/ttyACM0", 115200)
|
||||
|
||||
max_x = 250
|
||||
max_y = 200
|
||||
max_z = 150
|
||||
|
||||
min_z = 50
|
||||
min_z = 48
|
||||
z_search = 100
|
||||
|
||||
|
||||
prboffs_x = 40
|
||||
prboffs_y = 40
|
||||
prboffs_z = 10
|
||||
prboffs_x = -10.0
|
||||
prboffs_y = 25.0
|
||||
prboffs_z = 0.0
|
||||
|
||||
|
||||
feedrate = 5000
|
||||
|
|
@ -57,22 +59,26 @@ def convert_data_to_arrays(start, stop, pts, data):
|
|||
return freq_arr, data_arr
|
||||
|
||||
|
||||
def writeCSV(freq_array, data, csv_filename):
|
||||
def writeCSV(freq_array, data, csv_filename, args):
|
||||
try:
|
||||
with open(csv_filename, "w", newline="") as csvfile:
|
||||
writer = csv.writer(csvfile, delimiter=";")
|
||||
writer = csv.writer(csvfile, delimiter=";", quoting=csv.QUOTE_MINIMAL)
|
||||
writer.writerow(
|
||||
f'# Nearfield Scan {now.strftime("%Y-%m-%d %H:%M")}, {desc}'
|
||||
[f'# Nearfield Scan {now.strftime("%Y-%m-%d %H:%M")}, {args.desc}']
|
||||
)
|
||||
row = []
|
||||
row.append("# ;;")
|
||||
row.append("x")
|
||||
row.append("y")
|
||||
for elem in freq_array:
|
||||
row.append(str(elem))
|
||||
writer.writerow(row)
|
||||
|
||||
for key in data:
|
||||
row = []
|
||||
row.append(key, data[key])
|
||||
row.append(key[0])
|
||||
row.append(key[1])
|
||||
for i in range(len(data[key])):
|
||||
row.append(data[key][i])
|
||||
writer.writerow(row)
|
||||
except IOError:
|
||||
print("I/O error")
|
||||
|
|
@ -109,8 +115,8 @@ def main():
|
|||
parser.add_argument(
|
||||
"--rbw",
|
||||
help="RBW in kHz",
|
||||
default=auto,
|
||||
choices=[200, 1, 3, 10, 30, 100, 300, 600, 850],
|
||||
default="auto",
|
||||
choices=["200", "1", "3", "10", "30", "100", "300", "600", "850"],
|
||||
)
|
||||
|
||||
parser.add_argument("--xstart", type=int, default=0, help="x start in mm")
|
||||
|
|
@ -120,14 +126,22 @@ def main():
|
|||
parser.add_argument("--ystart", type=int, default=0, help="y start in mm")
|
||||
|
||||
parser.add_argument("--yend", type=int, default=200, help="y end in mm")
|
||||
parser.add_argument("--xstep", type=int, default=10, help="x step in mm")
|
||||
parser.add_argument("--xpts", type=int, default=10, help="number of x points")
|
||||
|
||||
parser.add_argument("--ystep", type=int, default=10, help="y step in mm")
|
||||
parser.add_argument("--ypts", type=int, default=10, help="y number of y points")
|
||||
|
||||
parser.add_argument("--desc", type=str, default="", help="EUT Description")
|
||||
|
||||
parser.add_argument("--out", "-o", type=str, default="nearfieldscan", help="outfile Name")
|
||||
parser.add_argument("--home", "-H", action="store_true", help="home printer")
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.home:
|
||||
initXYZ()
|
||||
|
||||
progress=0
|
||||
b = progressbar.ProgressBar(maxval=args.xpts*args.ypts)
|
||||
b.start()
|
||||
|
||||
# scan surface
|
||||
ser.write(str.encode(f"G1 Z{min_z}\r\n"))
|
||||
input("Attach Probe and press Enter to continue...")
|
||||
|
|
@ -137,7 +151,7 @@ def main():
|
|||
tsa = tinySA()
|
||||
|
||||
# set the return message preferences
|
||||
tsa.set_verbose(True) # detailed messages
|
||||
tsa.set_verbose(False) # detailed messages
|
||||
tsa.set_error_byte_return(True) # get explicit b'ERROR' if error thrown
|
||||
|
||||
# attempt to autoconnect
|
||||
|
|
@ -155,34 +169,45 @@ def main():
|
|||
|
||||
datadict = {}
|
||||
|
||||
for y in range(args.ystart, args.yend, args.ystep):
|
||||
if y >= max_y - args.ystep:
|
||||
ser.write(str.encode(f"G1 Z{z_search} F{feedrate}\r\n"))
|
||||
|
||||
for y in np.linspace(args.ystart, args.yend, args.ypts,endpoint=True):
|
||||
if y >= max_y:
|
||||
break
|
||||
else:
|
||||
ser.write(str.encode(f"G1 X{args.xstart} Y{y} F{feedrate}\r\n"))
|
||||
ser.write(str.encode(f"G1 X{args.xstart+prboffs_x} Y{y+prboffs_y} F{feedrate}\r\n"))
|
||||
time.sleep(2)
|
||||
|
||||
for x in range(args.xstart, args.xend, args.xstep):
|
||||
if x >= max_x - args.xstep:
|
||||
for x in np.linspace(args.xstart, args.xend, args.xpts, endpoint=True):
|
||||
if x >= max_x:
|
||||
break
|
||||
else:
|
||||
|
||||
ser.write(str.encode(f"G1 X{x} Z{z_search} F{feedrate}\r\n"))
|
||||
ser.write(str.encode(f"G1 X{x+prboffs_x} Z{z_search} F{feedrate}\r\n"))
|
||||
time.sleep(1)
|
||||
ser.write(str.encode(f"G1 Z{min_z} F{feedrate}\r\n"))
|
||||
ser.write(str.encode("M18 \r\n")) # disable steppers
|
||||
time.sleep(2)
|
||||
tsa.resume() # scan
|
||||
data_bytes = tsa.scan(args.fstart, args.fstop, args.pts, 2)
|
||||
tsa.wait()
|
||||
tsa.wait
|
||||
time.sleep(2)
|
||||
ser.write(str.encode("M17 X Y Z\r\n")) # enable steppers
|
||||
ser.write(str.encode(f"G1 Z{z_search} F{feedrate}\r\n"))
|
||||
|
||||
freq_arr, data_arr = convert_data_to_arrays(
|
||||
start, stop, pts, data_bytes
|
||||
args.fstart, args.fstop, args.pts, data_bytes
|
||||
)
|
||||
datadict[f"{str(x)};{str(y)}"] = data_arr
|
||||
datadict[(x, y)] = data_arr
|
||||
time.sleep(1)
|
||||
writeCSV(freq_arr, datadict, "test.csv")
|
||||
progress+=1
|
||||
b.update(progress + 1)
|
||||
b.finish()
|
||||
writeCSV(
|
||||
freq_arr,
|
||||
datadict,
|
||||
f'{now.strftime("%Y-%m-%d_%H%M")}_{args.out}.csv',
|
||||
args,
|
||||
)
|
||||
tsa.resume() # resume so screen isn't still frozen
|
||||
tsa.disconnect()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue