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 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()