YAAAP
(另一个 Arduino 艺术项目)
妻子买了一件园林艺术品。等待。没啥事儿。添加了一些磁铁、Arduino 和中提琴!
每个摆的底部都附有一个永久磁铁。电磁铁线圈安装在悬挂磁铁下方。当线圈通电时,摆被排斥。当磁铁接近线圈并经过线圈时,线圈中会感应出一个信号。该信号由微控制器分析,当磁铁通过线圈时,线圈会短暂通电,提供一脚来维持摆动。
支架高 28 英寸,深 15 英寸,钟摆顶部距离地面 54 英寸。如果你在谷歌图片上搜索“花园艺术钟摆”,你会看到几个来源。它重约 30 磅,我认为它是墨西哥制造的。我在底座单元的顶部导轨上添加了 10 个螺钉,以防止摆轴四处游荡(见图)。
每个磁铁长 20 毫米 x 直径 10 毫米,安装在粘在每个摆锤底部的木制支架上(“家用粘胶”)。钻 10 毫米孔并将磁铁压入到位。如果需要,可以粘上。我调整了磁铁的位置,使线圈和磁铁之间的间隙约为 2 到 3 毫米。在亚马逊搜索“10x20mm 磁铁”。速卖通的价格也好不到哪儿去。
我从我的垃圾箱中选择了标有“11.5V 1.95A”的 Atari 电源。空载输出电压为 14.5 伏。我曾期待更好的监管。只有在完成项目后,我才能确定实际的电源需求。每个钟摆在运行时平均每 2 秒需要大约 1 安培的电流持续 5 毫秒。但是,电源必须能够在线圈通电期间提供 1 安培的电流,这在启动期间可能长达 200 毫秒。在开发过程中,我试验了电源电压,发现摆锤可以用 5 伏电源供电,但我没有测试低电压下的启动。电压上限受额定电压为 15 伏的 AMS1117 的限制。
线圈缠绕在一个长 3 英寸、直径 0.5 英寸的软铁芯上,这是一个机器人项目遗留下来的铁轴。我在芯的一端钻了一个孔并攻了一个 6-32 螺钉。我对线圈的设计标准只是基于 12 伏电源将电流限制在 1 安培,这意味着 12 欧姆线圈。我有一个 32 号线的线轴,所以我计算出大约 600 圈就可以了。我在摆锤下方安装了一个木架,线圈安装在木制横梁上(见图)。如果您对设计权衡感兴趣,这里有一个电磁力计算器:https ://www.daycounter.com/Calculators/Magnets/Solenoid-Force-Calculator.phtml
该电路分为3个主要部分;电源、线圈控制和模拟信号处理。电源由一个为线圈提供电流的二极管隔离电容器组成。一个单独的电源由 3 个串联的 1N4001 二极管(~2 伏压降)组成,进入 AMS1117 5.0 伏稳压器,然后进入为模拟信号放大器供电的 MIC3565 3.3 伏稳压器。
每个线圈都由一个 AO3400 MOSFET 控制。这些小巧的 SOT-23 器件额定值为 30V、5.8A 和典型的 25 毫欧姆电阻。当 MOSFET 关闭时,感兴趣的信号在 MOSFET 的漏极处生成,因此漏极电压为 12 伏。一个 47 uF 电容器将电路的数字部分连接到模拟放大器,并将信号转移到地电平。
当磁铁通过线圈时,模拟信号略高于 0.5 伏。然而,在某些瞬态条件下,该信号可能高达 12V(在调试那个过程中烤了几个药丸、运放和 MOSFET!),因此有必要用 1N4148 小信号二极管将信号钳位到地限制信号至 0.7 伏。额外的 1N5819 肖特基二极管钳位负向信号。除了二极管钳位之外,Blue Pill 还控制另一个 MOSFET,该 MOSFET 在控制线圈通电后以及在其他两个线圈关闭的短暂时间内将信号钳位到地。信号经过滤波,使用 MCP6001 轨到轨运算放大器放大 10 倍,然后发送到 Blue Pill 的模数转换器。所有提到的组件都可以从 Ali Express 获得。
第一条示波器迹线显示了电平转换到地之后的信号和放大后的信号。第二幅示波器图片显示了信号(蓝色)和消隐信号(黄色)。请注意,消隐信号将信号钳位到地。第三个示波器捕获显示不同线圈的活动被关闭,这通常会在此信号上产生较大的瞬变,但该事件被短暂的钳位信号(黄色)消隐。
我使用 DipTrace 进行原理图捕获和 PWB 布局。这是一个免费的非商业用途的布局包。文件已附上。如果您不需要修改文件,还附有 Gerber 文件。我使用 JLCPCB.com 作为我的 pwb 供应商。模拟和数字电路彼此分开,数字和模拟地也是如此。跨接导线将 AGND 连接到 DGND。这种“单点接地”概念降低了模拟部分中的数字噪声。
该项目基于基于 STM32F103 的“Blue Pill”。我选择 Blue Pill 是因为,就像我的一些最好的朋友一样,它们既便宜又快捷。从 Ali Express 以不到 1 美元(包括运费)购买 Blue Pill 的日子已经一去不复返了,但它们仍然是 Arduino 战场上成本最低的控制器。开发环境不像 Atmel 产品那样精致,用户群也不像 Atmel 产品那样广泛。然而,在克服了“陷阱”之后,它确实表现可靠。我最初使用 Arduino Uno 制作项目原型,只要钟摆摆动就可以正常工作,但 Uno 在启动时出现问题 - 无法足够快地处理信号。Blue Pill 的运行频率为 72 MHz,12 位模数转换器的转换时间仅为 1 微秒多一点。
此外,定时器架构非常适合该项目的需要。STM32F103 有六个 16 位定时器和六个 16 位预分频器。每个定时器有 4 个“通道”,可以单独设置以产生中断。所以我可以为每个钟摆指定一个计时器。当关闭线圈功率 MOSFET 时,定时器的通道 1 将产生中断。当需要关闭信号消隐 MOSFET 时,通道 2 将产生一个中断。通道 3 将检测钟摆是否停止摆动。第四个定时器生成一个 1 毫秒时基来控制额外的瞬态消隐。
我使用 Dan Drown 板定义库。 在“工具”选项卡中设置以下变量;
“通用 STM32F103C 系列”,上传方法=串行,优化=最小(使用 30% 闪存)。我尝试了使用 41% 闪存的“最快”,但无法检测到足够的加速以证明偏离默认设置是合理的。
将串行转 USB 转换器连接到 TX、RX 和接地端子。注意——将电路板上的+5V 连接到+5 伏USB 串行转换器会将PC 的+5 连接到该电路板电源的+5。也许可以,但不推荐。将跳线“BOOT0”置于“1”位置,按下复位按钮,您就可以下载代码了。调用 IDE 监视器,Serial.print() 语句出现在监视器中。完成后,将 BOOT0 跳线置于“0”位置,系统将在通电后开始运行闪存中的代码。
该软件分为几个主要组件;状态机、信号处理、线圈控制、消隐(钳位)控制、定时器和定时器中断服务程序。
状态机控制处于三种状态之一的每个摆锤的动作;启动、提升和稳定。启动时,摆底部的磁铁已被线圈的软铁芯吸住。在这种“捕获”状态下,钟摆的振动频率比正常情况高得多,通常比正常“摆动”频率快十倍。启动时,定时器通道 3 中断服务例程会生成一个线圈控制信号,该信号接近捕获的摆锤的基频加上随机“抖动”,在某个时刻,它将使摆锤脱离磁铁。当摆从下面的磁铁中解放出来时,会产生一个大信号,表明摆已经逃脱了捕获。当检测到该信号时,状态变为 BOOST 状态,线圈通电,当磁铁从检测线圈后退时产生恒定的脉冲。最后,在提升固定数量的反冲后,钟摆呈现稳定状态,其中线圈功率是所需周期误差的函数减去实际周期,使用仅基于“P”项的 PID 闭环控制算法.
在 STABLE 状态下,监测信号,当检测到急剧上升后急剧下降时,线圈会通电一定时间,该时间经过计算可使摆锤保持在规定的周期内摆动(闭环控制)。每次检测到信号,线圈控制例程都会重新编程摆锤对应的定时器,产生3次中断;定时器通道 1 将关闭线圈控制 MOSFET,并在线圈关闭瞬态期间短暂消隐其他 2 个信号,定时器通道 2 将在预期下一次磁体相遇之前关闭信号消隐,定时器通道 3 将检测到钟摆已经停止摆动。
提供了一个简单的基于终端的信息屏幕。用户可以控制报告哪个钟摆并为该钟摆设置所需的周期(它控制钟摆的位移)。报告会在启动期间根据正在启动的摆锤自动从一个摆锤切换到另一个摆锤。另请注意,仅当检测到报告信号的特定摆锤时,LED 才会闪烁。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !