双轴单镜激光束转向模块的制作

电子说

1.2w人已加入

描述

第1步:收集非3D打印件

激光组件由以下部件组成:

4个微型电磁阀

一个1/2英寸的镜子

四个M3螺丝

我使用的特殊螺线管在eBay上以每个1.45美元的价格购买。圆形镜子在HobbyLobby的工艺品过道中被发现 - 一包25美元,花费不到3美元。你也可以在eBay上找到镜子。

你还需要一个廉价的激光笔,再次来自eBay。紫激光以及黑暗中发光的黑胶片是这个项目的绝佳组合!

不需要一套伸出援手,但对于握住和定位它们非常有用。激光笔。可以用一个大的活页夹来按住电源按钮。

你需要一个Arduino(我使用的是Arduino Nano)和一种驱动电磁阀的方法。正如VajkF在评论中所述,您可以使用预制的H桥,例如基于L298或L9110的H桥。这些在eBay上很容易买到几块钱,也可以用来驱动电机和机器人项目。

由于我没有H桥,我用分立元件建造了自己的驱动器:/p》

四个NPN双极晶体管(我使用的是MPS3704)

四个电阻(我使用的是1.2k欧姆电阻)

四个二极管(我使用的是1N4004) )

9V电池和电池连接器

电子元件来自我的实验室,所以我没有确切的成本,但除非你已经有部件或可以清除它们,使用预制H桥可能更具成本效益。尽管如此,我将提供构建您自己的原理图。

步骤2:3D打印镜像转向模块

激光转向模块由两个3D打印部件组成:一个用于安装四个电磁阀的底座和一个用于镜子的铰接平台。

我已将两个STL文件附加到3D打印,以及FreeCAD文件,以防您需要修改设计。所有内容都在GPLv3下,因此您可以自由地制作和分享您的改进!

第3步:组装激光模块

使用热胶将四个电磁阀固定在下部。

使用热胶将镜子固定在上部件的中央。

将金属活塞插入螺线管中,然后将上部件放在支柱上(但不要将其拧紧)。轻轻旋转顶部件并使用小螺丝刀将每个活塞提升到位。圆盘的唇部应滑入活塞的凹槽中。小心,因为3D打印的铰链非常脆弱。有了耐心,可能还有一些失败的尝试,你应该能够放置所有四个活塞而不会扭曲或对铰链施加压力。

一旦所有活塞定位,部分插入M3螺钉,但在拧紧之前,轻轻向下推动每个活塞,确保镜子自由倾斜。如果它不能自由移动或卡住,可能需要拆下顶板,撬开一个或多个螺线管松开并以略微向外的角度重新安装(在它和中央支柱之间放置垫片可能有助于此) 。

步骤4:打印激光指示器套圈

激光指针套环适合激光指示器的头部。然后,您可以使用一组帮助手抓住项圈并让您将激光精确定位在工作台上。

步骤5:组装驱动电路

3D打印

驱动电路如图所示。如前所述,我的版本是由分立组件构建的,但您也可以使用现成的H桥。如果你选择建立自己的,你将需要建立这个电路的四个副本,四个螺线管各一个。

每个电路将连接到一个Arduino引脚,两个用于控制左右电磁阀,两个用于上下电磁阀。这些将需要连接到支持PWM的引脚,如下所示:

引脚9:向上电磁阀

引脚3:向下电磁阀

引脚11 :左电磁阀

引脚10:右电磁阀

单个9V电池可用于驱动所有四个电磁阀驱动电路,或者您可以使用台式电源。 Arduino将使用USB电源,不应连接到9V电池的正极。但是,电池的负极用作接地参考,应连接到Arduino上的GND引脚以及晶体管上的发射极引脚。

步骤6:上传示例代码

示例代码已更新,具有以下功能:

调整PWM频率,使机制为在低速时几乎保持沉默。运动测试1中的嗡嗡声完全消失了!

根据Schimpf的论文添加电压方程,以“线性化”螺线管的非线性响应。

我还根据此博客的代码包含了Lorenz Attractor的实现。

结果的保真度还有很多不足之处,但我还在努力! :)

后续步骤说明了代码中使用的一些技术。

步骤7:调低音量

在我的运动测试1中,您可以听到响亮的嗡嗡声,特别是在上下移动过程中。事实证明,这是由Arduino的默认PWM斩波频率在可听范围内引起的。线圈电压的快速切换将导致它们以该频率振动,使它们变成微小的扬声器。

为了解决这个问题,我增加了代码中的PWM频率:

#define PWM_FREQ_31372Hz 0x01 // Sets the PWM frequency to 31372.55 Hz

#define PWM_FREQ_3921Hz 0x02 // Sets the PWM frequency to 3921.16 Hz

#define PWM_FREQ_980Hz 0x03 // Sets the PWM frequency to 980.39 Hz

void setPWMTimerFrequencies(uint8_t frequency) {

TCCR1B = (TCCR1B & 0b11111000) | frequency; // Set timer1 (pins 9 & 10) frequency

TCCR2B = (TCCR2B & 0b11111000) | frequency; // Set timer2 (pins 3 & 11) frequency

}

设置Arduino PWM频率是使电磁阀或电机静音的有用技巧。尝试不同的频率选择,看看哪一个给你最好的结果。虽然它涉及一些更高级的编程,但是关于定时器如何工作的良好资源就在这里。

步骤8:调整电压以减少失真

我的初始运动测试显示螺线管的响应有明显的失真。在Motion Test 3(左图)中,本来应该是圆形螺旋而是变成了带有锯齿状边缘的矩形网。

解决这个问题需要一点点数学,但我能够找到一个网上有令人惊叹的论文,帮助我很好地理解了这个问题,足以用软件来解决它。

接下来我将逐步完成调整系统并改善结果痕迹的外观!/p》

步骤9:完善软件,使用数学

3D打印

3D打印

调整系统的秘密结果是是东华盛顿大学Paul H. Schimpf撰写的一篇名为“电磁力的详细解释”的优秀论文(链接)。特别是,等式17给出了各种术语的螺线管力。

以下术语很容易测量:

R - 我的螺线管的电阻

li》

l - 螺线管的长度

x - 活塞在螺线管中的位移

V - 螺线管两端的电压

我也知道电磁阀产生的力必须平衡双轴镜上3D打印弹簧的力。春天的力量受胡克定律的支配,其定义如下:

F = -kx

虽然我不知道它的价值k,我至少知道我从Schimpf论文中得到的方程式17的力必须等于胡克定律的力。

alpha(α)的值是一个棘手的问题。虽然方程式13和14显示了如何从螺线管(A)的面积,匝数(N)和磁导率值(μ)计算这些值,但我不想拆开螺线管来计算匝数,我也不知道我的螺线管的核心材料。

步骤10:廉价的组件测试仪节省了一天!

3D打印

3D打印

然而,事实证明,等式15和16给了我所需要的东西。我有一个便宜的M328组件测试仪,我从eBay以10美元的价格购买。它能够用它来测量我的螺线管的电感,我发现通过推动不同深度的电枢给我不同的感应值。

用电枢完全插入测量它给了我的价值L(0)。

我的螺线管的长度是14毫米,所以我测量了电枢在五个位置的电感,这给了我L(x)的各种值:

L(0.0)= 19.8 mH

L(3.5)= 17.7 mH

L(7.0)= 11.1 mH

L(10.5)= 9.3 mH

L(14)= 9.1 mH

然后我使用电子表格绘制我的值与公式15和16的值,对于μr的特定选择,然后改变我的选择,直到我发现了很好的比赛。这发生在μr为2.9时,如图所示。

步骤11:找到弹簧常数K,解决问题

3D打印

唯一剩下的未知数是K,弹簧常数。我通过在我的双轴组件中的一个螺线管上施加9V并测量镜子被拉下的距离来测量这一点。通过这些值,我能够求解K的方程,我发现它大约是10.41。

我现在有了计算螺线管在沿着冲程的不同位置的拉力所需的值。通过将F(x)设置为等于霍克定律的弹簧力,我可以求解所需的电压V.

图表显示了将螺线管移动到任何所需位置所需的电压x。

在右侧,电压为零且位置为3 mm时,这对应于3D打印铰链完全松弛时螺线管的中性静止点。向左移动图表对应于将电枢拉入螺线管以抵抗3D打印铰链的拉动 - 这最初需要更多电压,但随着电枢深入螺线管,拉力增加并且所需的驱动电压逐渐减小。/p》

这种关系绝对是非线性的,但是根据Schimpf论文中的公式,我可以编写我的Arduino代码来输出正确的电压,因此光束偏转是线性的:

float positionToVoltage(float x) {

// Restoring force exerted by hinges (Hooke‘s Law) at desired x.

const float spring_F = -spring_K * (x - spring_X0);

// Voltage such that the pulling force of the solenoid matches the

// restoring force of the hinges

return sqrt(-2*R*R*(-spring_F)*solenoid_len/(a*L_0*exp(-a*x/solenoid_len)));

}

这导致比我原始运动测试中的圆形螺旋更圆。完成任务!

步骤12:关于使用离散组件的驱动电路的问题与解答

为什么我不能直接连接电磁阀到Arduino?

这是Arduino在不受损害的情况下可以提供多少电流的问题。每个引脚大约40mA。知道Arduino工作在5V,我们可以使用欧姆定律计算负载所需的最小电阻(在这种情况下,螺线管)。将5伏特除以0.040安培得到125欧姆。如果负载具有更大的阻力,我们可以将其直接连接到Arduino,否则我们不能。小螺线管通常具有50欧姆的电阻,因此我们无法直接从Arduino驱动它。如果我们这样做,它会拉出100mA,这显然是太多了。

为什么你使用9V作为螺线管,而使用5V作为Arduino?

Arduino以5V运行,但这对于电磁阀来说有点太少了。使用晶体管可以为螺线管选择一个电压,该电压与Arduino使用的5V无关。

我如何知道晶体管是否适合这个项目?

与Arduino一样,主要要求是流过螺线管的电流不超过晶体管的最大额定值(特别是集电极电流)。我们可以通过测量螺线管的电阻然后将电源电压除以它来轻松计算最坏情况。在电磁阀的9V供电电流和50欧姆的螺线管电阻的情况下,最坏的情况使我们处于180mA。例如,MPS3704的额定最大集电极电流为600 mA,这为我们提供了大约3的余量。

如何确定Arduino输出和电阻之间的最小电阻值晶体管的基极?

Arduino的输出将通过限流电阻连接双极晶体管的基极。由于Arduino工作在5V,我们可以再次使用欧姆定律来计算将电流限制在40mA以下所需的电阻。即,将5伏特除以0.04安培,以获得至少125欧姆的值。较高的电阻值会降低电流,从而为我们提供更大的安全裕度。

该电阻是否有最大值,我不应该超过?

《事实证明,是的。晶体管具有所谓的电流增益。例如,如果增益为100,则意味着如果我们将1mA放入基极,则高达100mA将流过晶体管控制的负载。如果我们将1.8mA放入基极,那么高达180mA的电流将流过负载。由于我们之前计算过,在9V时,180mA电流流过螺线管,然后1.8mA的基极电流是“最佳点”,而且我们的电磁阀不会完全打开。

我们知道Arduino输出5V并且我们想要1.8mA的电流流动,所以我们使用欧姆定律(R = V/I)来计算电阻(R = V/I)。 5V除以1.8mA时,电阻为2777欧姆。因此,考虑到我们所做的假设,我们预计阻力必须介于125和2777之间 - 选择1000欧姆之类的东西可以给我们提供相当好的安全余量。

步骤13:分析目前的问题和可能的解决方案

目前的原型显示出潜力,但仍存在一些问题:

Motion沿X和Y轴看起来并不垂直。

当镜子改变方向时会跳跃。

分辨率非常低,并且有明显的阶梯模式。

在较高的运动速度下,激光的路径会因振动和振铃而失真。

问题1)可能是由3D打印柔性铰链的设计引起的它们沿着一个轴传递运动到垂直轴。

问题2)是由于驱动活塞和镜子平台之间的耦合松弛,这导致镜子猛拉并跳过X和Y轴。这种突然的运动导致了一个黑暗的X形间隙,激光点正在进行更快速的不受控制的移动。

问题3)的发生是因为默认的Arduino PWM只有255级,而且由于电压曲线的形状而浪费了相当多的水平。这可以通过使用timer1来显着改善,timer1是16位并且能够达到65536个唯一值。

问题4)因为镜子和螺线管的滑动电枢(活塞)构成重要移动质量的数量。

由于问题1)和2)与机械设计有关,一种可能性是移除金属活塞并用直接固定在其上的小型稀土磁铁替换它们。倾斜板。螺线管将是一个开放的线圈,可以在不进行物理接触的情况下吸引或排斥磁铁。这将导致更平稳的运动并消除抽搐的可能性,同时减少总质量。

减少质量是问题4)的主要解决方案,但任何剩余的问题可以通过实施动作直接针对软件在软件中控制配置文件以受控方式加速和减速镜子。这已经在3D打印机固件中广泛完成,类似的方法也可以在这里工作。以下是与运动控制相关的一些资源,因为它适用于3D打印机:

“运动控制配置文件的数学”,Chuck Lewin

“Jerk Controlled Motion Explained “,

我怀疑添加一个梯形运动控制配置文件可以让镜子以更高的速度被驱动,而不会出现振铃或振动现象。

第14步:未来的工作和可能的应用

虽然为这些问题制定解决方案需要做大量的工作,但我希望在这样的应用中,源光束控制模块可以成为基于电流计的项目的经济实惠的替代方案:

为DJ和VJ提供廉价的激光表演。

用于复古街机游戏的机电矢量显示,例如Vectrex。

DIY树脂型SLA 3D打印机,在RepRap机芯的精神下,可以打印自己的激光转向模块。

相机的数字平移或光学防抖。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分