aktualisiert...

This commit is contained in:
chrissy 2026-05-18 18:14:21 +02:00
parent 2d5e99e587
commit 368b2fb2e4
1 changed files with 52 additions and 27 deletions

View File

@ -7,20 +7,22 @@ from tsapython import tinySA
import datetime import datetime
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import progressbar
ser = serial.Serial("/dev/ttyACM2", 115200)
ser = serial.Serial("/dev/ttyACM0", 115200)
max_x = 250 max_x = 250
max_y = 200 max_y = 200
max_z = 150 max_z = 150
min_z = 50 min_z = 48
z_search = 100 z_search = 100
prboffs_x = 40 prboffs_x = -10.0
prboffs_y = 40 prboffs_y = 25.0
prboffs_z = 10 prboffs_z = 0.0
feedrate = 5000 feedrate = 5000
@ -57,22 +59,26 @@ def convert_data_to_arrays(start, stop, pts, data):
return freq_arr, data_arr return freq_arr, data_arr
def writeCSV(freq_array, data, csv_filename): def writeCSV(freq_array, data, csv_filename, args):
try: try:
with open(csv_filename, "w", newline="") as csvfile: with open(csv_filename, "w", newline="") as csvfile:
writer = csv.writer(csvfile, delimiter=";") writer = csv.writer(csvfile, delimiter=";", quoting=csv.QUOTE_MINIMAL)
writer.writerow( 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 = []
row.append("# ;;") row.append("x")
row.append("y")
for elem in freq_array: for elem in freq_array:
row.append(str(elem)) row.append(str(elem))
writer.writerow(row) writer.writerow(row)
for key in data: for key in data:
row = [] 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) writer.writerow(row)
except IOError: except IOError:
print("I/O error") print("I/O error")
@ -109,8 +115,8 @@ def main():
parser.add_argument( parser.add_argument(
"--rbw", "--rbw",
help="RBW in kHz", help="RBW in kHz",
default=auto, default="auto",
choices=[200, 1, 3, 10, 30, 100, 300, 600, 850], choices=["200", "1", "3", "10", "30", "100", "300", "600", "850"],
) )
parser.add_argument("--xstart", type=int, default=0, help="x start in mm") 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("--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("--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("--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() args = parser.parse_args()
if args.home:
initXYZ()
progress=0
b = progressbar.ProgressBar(maxval=args.xpts*args.ypts)
b.start()
# scan surface # scan surface
ser.write(str.encode(f"G1 Z{min_z}\r\n")) ser.write(str.encode(f"G1 Z{min_z}\r\n"))
input("Attach Probe and press Enter to continue...") input("Attach Probe and press Enter to continue...")
@ -137,7 +151,7 @@ def main():
tsa = tinySA() tsa = tinySA()
# set the return message preferences # 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 tsa.set_error_byte_return(True) # get explicit b'ERROR' if error thrown
# attempt to autoconnect # attempt to autoconnect
@ -155,34 +169,45 @@ def main():
datadict = {} datadict = {}
for y in range(args.ystart, args.yend, args.ystep): ser.write(str.encode(f"G1 Z{z_search} F{feedrate}\r\n"))
if y >= max_y - args.ystep:
for y in np.linspace(args.ystart, args.yend, args.ypts,endpoint=True):
if y >= max_y:
break break
else: 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) time.sleep(2)
for x in range(args.xstart, args.xend, args.xstep): for x in np.linspace(args.xstart, args.xend, args.xpts, endpoint=True):
if x >= max_x - args.xstep: if x >= max_x:
break break
else: else:
ser.write(str.encode(f"G1 X{x+prboffs_x} Z{z_search} F{feedrate}\r\n"))
ser.write(str.encode(f"G1 X{x} Z{z_search} F{feedrate}\r\n"))
time.sleep(1) time.sleep(1)
ser.write(str.encode(f"G1 Z{min_z} F{feedrate}\r\n")) ser.write(str.encode(f"G1 Z{min_z} F{feedrate}\r\n"))
ser.write(str.encode("M18 \r\n")) # disable steppers ser.write(str.encode("M18 \r\n")) # disable steppers
time.sleep(2)
tsa.resume() # scan tsa.resume() # scan
data_bytes = tsa.scan(args.fstart, args.fstop, args.pts, 2) 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("M17 X Y Z\r\n")) # enable steppers
ser.write(str.encode(f"G1 Z{z_search} F{feedrate}\r\n")) ser.write(str.encode(f"G1 Z{z_search} F{feedrate}\r\n"))
freq_arr, data_arr = convert_data_to_arrays( 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) 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.resume() # resume so screen isn't still frozen
tsa.disconnect() tsa.disconnect()