aktualisiert...
This commit is contained in:
parent
2d5e99e587
commit
368b2fb2e4
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue