From 368b2fb2e42a10febafd200a730af844f9365874 Mon Sep 17 00:00:00 2001 From: chrissy Date: Mon, 18 May 2026 18:14:21 +0200 Subject: [PATCH] aktualisiert... --- emi_scanner.py | 79 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 27 deletions(-) diff --git a/emi_scanner.py b/emi_scanner.py index 8d0cbfd..78f9d20 100644 --- a/emi_scanner.py +++ b/emi_scanner.py @@ -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()