自动进样器-永生

从那以后,他过着幸福快乐的生活,然后分手。

序言


好像是在2009年,为一个项目购买了水质分析仪一年。 由于应将其用于确保技术设备的运行,因此购买了该设备并附带了自动进样器。



本质上,这是具有四个运动自由度的CNC机械手,用于将样品自动送入分析仪。

他工作了大约10年,提交了3万多个样本,但有一些小麻烦,但是用“小血”克服了。

今年年初,他很累-Z轴垂直运动失败。

也就是说,机械手只是停止“看到”它。 考虑到许多官方维护情况,测量中心从来没有任何小问题(PSU维修,FLASH故障后闪烁)独立解决。 在这里,我已经不得不寻找官员了,结果是...一些功能:

  • 原来,操纵器不仅是旧的,而且是灾难性的旧
  • 他年纪大了,在购买时就停产了
  • 没有文档
  • 所有电子设备必须更换
  • 零件可用,但价格比新零件贵
  • 没有百分百的保证,如果更换了它,它将起作用

我知道的一些功能:

  • 制造商的固件无法与分析仪配合使用(最好进行备份),
  • 显然,引导加载程序也已更改,因为出厂固件“原样”不被接受
  • 没有办法“重新刷新”引导程序,因此以$ 6k的价格购买电子产品是没有用的
  • 我定期维修时,机械师的状况良好
  • 零(霍尔)传感器还活着

因此,有两个选择:

  • 从制造商那里购买新的分析仪,价格为17,000美元,交货时间无法理解
  • 翻新所有电子产品并编写程序

第一部分,硬件


首先,我决定确保机械师在12v的电压下工作(原始电压为37v)。 由于控制装置的动力半控制装置已充分预热,因此决定降低。 因此,驱动程序A4988,CNC铭牌和Arduino NANO被从床头柜中拉出。 所有这一切都被停靠了,被著名的grbl项目闪现,并带有偏见。 获得每个驱动器的最大步进频率,调整步距系数,驱动器电流。

事实证明,XY根本不加热,它们给出了相当合适的速度。 驱动器Z-的电流必须拧到最大,这是因为除以8并在开始向上移动时消耗了体面的电量,因为它拉动了两个电动机驱动器和内啮合件的重量,而驱动器芯片甚至在装有散热器的情况下也加热到了50度。 在最终设计中,我必须在该驱动器前的鼓风机中添加一个冷却器。

最后,改为



原来



Arduino Pro Micro将是一首单独的歌。 在后台是一个面板,带有用于选择操作模式,启动和重置按钮的拨动开关。

现在关于肚。 正如我所说,所有霍尔传感器都幸存下来。 其中,XY仅对不同的触发逻辑感兴趣。 如果在Y处接近磁体时传感器打开OK,则在X处磁体始终与传感器相对,在Zero-X处以及它们之间还有一个软磁性百叶窗,可将传感器与磁体隔离开,而OK闭合。 鉴于这种异质性,有必要了解搜索零点时的去向。 为此,原始设计在工作结束时提供了停车位置。 但是,它根本没有实现:关闭电源后,我不得不用手抓住头部在Z轴上的位置,然后手动将其移到停车位置。

关于Z是主要故事。 在这种情况下,在Z情况下,注射器柱塞驱动器仍然有效,没有零传感器,但有双旋转传感器-几乎是编码器。 还有一个通过斜齿轮和霍尔传感器实现的,用于击穿小瓶的传感器。 这两个旋转传感器都是黄铜齿轮,其齿经过磁化经过霍尔传感器。

为什么我需要一个我不理解的磁性编码器(作为我的私人任务的一部分),因此将其替换为用于柱塞驱动器的零传感器,因为霍尔在床头柜中,那里还有DVD透镜驱动器中的微小钕磁铁。

相反



它变成了



雕刻铁的主要问题是补习班,你自己明白。 我真的不想把东西放在单独的盒子里,结果,所有东西都适合放在这个地方,但是现在,我会做些不同的事情了。

第二部分,软件

CNC铭牌上的测试显示速度不错。 但是! 如果尝试立即向SD提供与该速度相对应的STEP频率,那么除了发出咆哮声之外,您将一无所获。 为了达到适当的运动速度,必须加速步进电机,就像您珍惜齿轮和驱动导轨(井,滚珠丝杠或皮带)然后平稳地使其减速一样。 因为琐碎的代码已经增长了一点。

由于带“代码”的文章进入“机器人”部分几乎是不雅的,例如,驱动Z控件(怪罪)。 向STEP发出频率时,digitalWrite没有时间,您必须直接拉端口。 它可能被延迟,并且延迟,但是代码来自XY控制,并且在那里需要同时进行。

//*****************  Z ************************* void movement_z (unsigned int tz, int spd) { long interval_z; long spd_z = 2000; unsigned long cur_micros; unsigned long prev_micros_z =0; int half_z; byte full_mask = mask_z; int dz = tz - z; z=z+dz; if (dz <0) digitalWrite(pin_dir_z, HIGH); else digitalWrite(pin_dir_z, LOW); dz = abs(dz); half_z = int(dz/2); interval_z = spd; do { if (dz>0){ cur_micros = micros(); if(cur_micros - prev_micros_z > spd_z) { if ( dz>half_z ) {if (spd_z > interval_z) {spd_z = spd_z - 5;} else spd_z = interval_z;} if ( dz<300 ) {if (spd_z < 1000) spd_z = spd_z + 2; else spd_z = 3000;} prev_micros_z = cur_micros; if (dz>0) {PORTB = PORTB | mask_z; dz--;} }} delayMicroseconds(5); PORTB = PORTB & B11110000; } while( dz != 0); } //************************************************************* 

在功能级别集中:

  • 低-来回走,找到一些不知道的东西
  • 中-校准到零,抽出注射器,制作样品样本
  • 托盘上第n个样品瓶旁路的高循环图

该程序首先初始化端口,然后从后面板上的开关读取指定的配置,然后按START(开始)后,计算周线图,直到找到托盘上没有样品瓶的位置。

主序列图如下所示:

 inline void frame_1(){ for (unsigned int i=0; i<6; i++){ // 6 for (unsigned int j=0; j<9; j++){ // 9 for (unsigned int k=1; k < probe+1; k++){ for (unsigned int l=1; l < inj+1; l++){ sound1(); delay(1000); if (inj == 2) {tone(tone_p,5000);delay(200);noTone(tone_p);delay(200);tone(tone_p,5000);delay(200);noTone(tone_p);} if (inj == 1) {tone(tone_p,5000);delay(200);noTone(tone_p);} Serial.print("going to x = ");Serial.print(j+1);Serial.print(" y = ");Serial.print(i+1); Serial.print(" probe = ");Serial.print(k); Serial.print(" inj = ");Serial.println(l); show_xyzp(); movement_z (0,450); movement_xy (prime_x-j*272, prime_y+i*372,500); movement_z(1800,300); if (z>2500) ost(); fill(); while(sensor()); if (inj == 1) {click_mouse(); Serial.println("mouse CLICKED for FLUSH and inj=1");} if (inj == 2 && l==1) {click_mouse(); Serial.println("mouse CLICKED for FLUSH and inj=2");} septa_pos(); while(sensor()); sound2(); inject(); } delay(3000); click_mouse(); Serial.println("mouse CLICKED for INJECT"); find_zero_xy(); movement_xy (3257, 1247,500); movement_z (6000,100); movement_z (0,100); } } } } 

将调试信息输出到Serial的形式的偏见仍然保留在代码中-留待将来改进。 一个已经快要成熟了,其分析注射器的体积是原来的四倍,那么您一开始就必须添加另一种选择。



编译程序的主要问题是,在原始程序中,分析仪为自动进样器提供了去向和操作方法。 所有这些都是通过COM端口和协议进行的,无处可去。 因为我必须下车。

对于那些尚未购买松鼠自动进样器的人,分析仪具有手动模式。 同时,分析仪屏幕上会出现一个深色的“样品准备就绪”按钮,当操作员被刺伤时,他必须用鼠标(分析仪面板上的跟踪器)戳它。 测量完成后,将出现一个黑色的“开始冲洗”按钮,如果操作员有另一个样品,则用鼠标按下该按钮以准备分析仪进行下一个测量。 单击鼠标后,按钮消失,并且保留白色(明亮)字段。 我决定用光电传感器捕捉这种亮度差异。 我检查了暗按钮的外观,并在吸盘中粘贴了一个光敏电阻。 我没有找到黑色的吸盘,当阳光从窗户射出时,我必须用一些东西盖住按钮传感器。



但是您必须单击某些内容? 幸运的是,从2000年初开始,分析仪具有USB端口和足够的未割礼的RedHat瓶,可以自动挂接到该端口。 它用于在Arduino Pro Micro站立的自动进样器的新主板上模拟鼠标。 需要单击分析仪时,它会从NANO收到一个PIN。 写动作太懒了,因为在开始工作之前,必须预先将鼠标放在按钮上。

O HAPPINESS,这让他感到经验丰富,我从其他管理电流,便宜的一分钱光电释放了鼠标部分。 因为在进行实物调试的第二天结束时,当一切都已经正常进行时,我设置了蜂鸣器来传递与原始声音类似的声音,其中一名驾驶员发出了神奇的烟雾,并将12v电源部分与5v逻辑部分相连。 好吧,没什么,用无底床头柜上的萃取物替换它半天不是10万美元的分析仪维修费用。 没错,后来发现,在某个时候购买的新REXANT电源设备(而不是被遗忘的房子)开始产生将近50的电压而不是12v,这造成了不幸的延迟。

第三部分,校准和可靠性测试

在组装和初步调试之后,出现了通过小瓶的实际位置计数位置的问题。 在这个系列中,我不得不制作一个键盘并为其编写一个简单的界面。 没有剩余的端口,但是在最极端的情况下,负责i2c的引脚已存储。 它们可以通过微按钮挂在PCF8574民用扩展器上,微按钮可以向上拉至加号,可用于移动XY,选择步进倍增器以加快处理过程并将XY更改为ZP。 在系列中每次单击后,将显示一个新位置。 由于这项简单的技术,可以快速而准确地获取所有当前坐标和增量。 在校准程序之外,模式选择器开关和用于触发循环图的按钮连接到扩展器的输入。 在视频中,大约在中间,两个按钮和切换开关均可见。

用于进样的注射器并不便宜-每个100美元。 定位错误会导致弯曲的针头和无法旋除的注射器。 因此,插入了一根断裂的注射器,该注射器带有一根粘着的缝纫针,并且将近半天的设备在一张纸上的四个点处脱粒,以便确定所声称的定位故障。 但是他们不在那里,我什至惊讶。 但是,由于在刺刺样本和征募新刺刺之间有足够的时间,所以我用它来寻找零,以防万一。 在视频中,此时刻离视频结尾很近。

结语


通常,它更有可能成功。 从了解绝望到过渡到生产已经过去了两个星期。 自5月底开始运行,每天最多可进行200次测量。 负责采样和测量的同事没有抱怨。

蛋糕的樱桃是原始功能所没有的新功能。 能够同时在XY上移动。 双重固定样品的能力,提高了分析仪在样品中所测物质浓度超低时的灵敏度。 测量后自动停车。

后记


应有兴趣者的要求,提供视频。

Source: https://habr.com/ru/post/zh-CN474564/


All Articles