无线控制蠕动泵
m24h2024/03/22原创 极客DIY IP:上海
中文摘要
蠕动泵
ESP32-C3

一直想做点小玩意 今天在路上忽然想到这个 很久以前买了两个便宜(才10块钱)的12V卡默尔蠕动泵 一直没有用处(其实现在也是)但还是装起来吧 也许什么时候养鱼用得到

手上正好有个同样吃灰的ESP32-C3 以及一个厂商送错货不带电荷泵的OLED 它也需要12V电压

蠕动泵动力是普通12V 5W马达 用手上多余的A4950驱动 打算回去看看 能不能加上码盘测速 如果不能就只能控制PWM/电流参数了 另外一个可能性是通过监测马达电流变化得到转速 但是目前还没有研究 暂保留可能性

OLED I2C需要2路IO 编码器旋钮需要3路(按钮同时做boot下载键) 马达控制每通道需要4路(正反转和电流PWM控制和测速)可是ESP32-C3刨去USB接口 最多只剩下13(?我已经数糊涂了)路 所以可能需要用74595扩展一下输出IO 它本身需要3路IO 于是只需要10路 还可以扩展出工作状态灯和告警端口

除了前面板OLED和旋钮控制 还提供USB CDC 一个telnet端口 以及网页服务 来控制和获取状态

可以立即/计划性的起停 控制正反转流速 还剩一个输入口 也许还可以加上液体检测和预抽功能 

没有特别要求性能的功能 应该用micropython就能实现

为了安全 盒子内应该不设置高压电源转换 使用外部提供的12-15V安全电压 考虑到WiFi耗电大 应该内置一个能提供1A电流以上的开关DC/DC 正好手上也有多余的SY8291ABC

嗯 感觉所有元件都有 不用新买 可谓道法自然

----------

回家想想 觉得还是麻烦了 去掉基本用不到的反转功能 直接PWM方式控制电机 用AO3400驱动 这样 不用74595扩展IO了 

[修改于 8个月4天前 - 2024/03/23 03:01:04]

来自:综合交流区 / 极客DIY
14
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
m24h 作者
8个月4天前 修改于 8个月4天前 IP:上海
930444

主要东西堆一块 估计用个100X60X80的盒子可以放下

fotor_1711129892514.jpg

OLED是GME64128-01 0.96寸 驱动是SH1107 低压部分 2.4-3.5V 高压部分7-16V

IM1=1时候 使用I2C方式 D0=SCL D1=SDA DC为0使用0x3C地址 (DC为1则是0x3D)

RES和CS应该都是低电平有效

VCOMH对地接4.7uF IREF对地推荐接750kOhm

IMG_20240323_022551.jpg

电源可以用12V 2A的以前可能某老路由器的 电路设计时应串上一个二极管防止反接

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
8个月3天前 IP:上海
930454

现在开发板都倒逼模组了么 感觉开发板更便宜 而且便宜得也有道理 

考虑到此次电路简单 而且空间非常充裕 (我下单了一个大的防水盒子 打算加工作为外壳)我打算珍藏起模组给更加紧凑的用途 

优惠券一领就两张 于是顺手又买了个ESP32-S2开发板

Screenshot_2024-03-23-16-18-33-611_com.taobao.litetao-edit.jpg

我买的防水盒还是透明盒盖的 这次要暴露内部的杂乱了 但是可以避免开显示的窗口 增加防水能力

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
8个月3天前 IP:江苏
930464

直接刷tasmota 固件就可以。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
8个月1天前 修改于 7个月25天前 IP:上海
930506

先设计了马达的PWM驱动和光电转速检测线路 有可能装上LED以显示是否工作

sch.png pcb.png 3D.png

实际做出来发现 马达后出轴实在太短了 码盘还是不好装 。。。可能会想办法延长一下 

fotor_1711370289592.jpg

---------3.31-------

今天把元件焊上去了 发现自己糊涂了 没有给12V设计滤波电容 这可能让12V马达供电的电源线上出现浪涌电压而损坏电路 所以直接在电路上补救 上了个4.7uF/25V的电容(开源上传时会直接上修改后的版本)

需要注意的是 卡默尔的电机 标红点为正极 但我两块板 有一块是电机正负极反接的 这样到时候 会安排成左边通道逆时针蠕动 右边通道顺时针蠕动 方便安排管线 比如都从下方取液 分别向左外 右外输送

fotor_1711894859492.jpg

码盘通过焊接方法上去了 空间也够了

具体方法是用(可能是氯化锌)酸性助焊剂让马达后轴上锡 一滴就足够了 实际上很小的一滴 停留一段时间后 直接烙铁上锡 然后用洗板水洗干净 防止残留助焊剂导致腐蚀

而码盘中间打过铜铆钉 也上锡 而铆钉可以很好地传热 还垫高了一个高度 对好位置后 在背面用烙铁就很容易把码盘焊上去

IMG_20240331_222748.jpg

后来想了下 如果有合适的薄铜片或者不锈钢片 剪出样子也可以焊上去当码盘用 还可以折弯得到合适的空间

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
7个月25天前 修改于 7个月23天前 IP:上海
930705

显示部分

sch.png pcb.png 3D.png

嗯  C1 C2 都应该是16V的 也需要到时候改改

------------4.2-------

元件焊上 反折OLED过去 用导热硅胶粘好

IMG_20240402_213912.jpg

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
7个月24天前 IP:广东
930715

撸主,你的电机调速区间大吗?是否需要在比较低的转速范围,比较精确地控制转速?

这种粗糙的转速传感器我曾经试过,由于角分辨力极低,闭环后在低速区间的控制很差,转速忽大忽小的。改成几百线的后低速控制就很好了。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
大仙
7个月24天前 IP:广东
930718
引用量子隧道发表于6楼的内容
撸主,你的电机调速区间大吗?是否需要在比较低的转速范围,比较精确地控制转速?这种粗糙的转速传感器我曾...

这种电机调速精度一般,你肯定不能和那种无刷,步进比的,成本低就只能这样了。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
7个月24天前 修改于 7个月24天前 IP:上海
930722
引用量子隧道发表于6楼的内容
撸主,你的电机调速区间大吗?是否需要在比较低的转速范围,比较精确地控制转速?这种粗糙的转速传感器我曾...

其实我觉得对这种应用 转速稳定性不是很重要 关键是计数量 你想想 远比手动去滴 甚至比那种玻璃四氟之类的阀好控制多了 更别提那些压胶管的东西 说实在的 至少比大多数没有控制的好 实际上 原本我打算如果码盘装不上 就只能靠计时方式控制 和大多数实用蠕动泵一样

而且精度也比想的高 转一圈 计数实际可以有4次 一次计数 蠕动距离仅仅是电机轴周长的1/4 对一般应用足够了


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
7个月23天前 修改于 7个月17天前 IP:上海
930768

连接图  .... 感觉确实令人头疼 如果用模块 同时把OLED和旋转开关放一块电路板上 能省一半线吧

好想搭个漂亮的棚 但我觉得做不到 因为安装是立体的 而且有装盒的问题 除非有双画鼻烟壶的手

不得不说 这个开发板确实良心 不光便宜 而且还比普通模组省出3根GPIO口 但我还是尽量没有去用

话说这个绘图风格我第一次 感觉不错

sch.png

------2024.4.8----

接好线

fotor_1712574333777.jpg

我想吐槽的是 这个DC/DC老早之前买的 为个24V电源提供12V风扇用 但是它调压变位器选择太不合理 对应的分压电阻只是1k左右 变位器却是10k的 结果虽然电位器是多圈的 但是有用的范围仅仅在一圈内 而且输出不稳定 所以直接算了个阻值 用固定电阻代替了

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
7个月17天前 修改于 7个月17天前 IP:上海
931028

盒子早就准备好了 也开好了孔 

fotor_1712577547558.jpg

需要注意的是 这个盒盖看起来是可转位的 其实不是 有榫卯结构限制了它的方向 而盒盖某处是有些图标的 需要避开 所以开孔位置也有些讲究

为了尽量防水 在安装电机面板的时候 对接口处预涂了导热硅胶(如果正规的做法 应该是用橡胶垫片 但是太麻烦了) 安装电机时候 也涂了硅胶 (都不等干就安装好) 这里得安利一下天目导热硅胶 除了导热好 干得也快 要去除也容易 

IMG_20240408_200543.jpg

编码器旋钮安装处也用了硅胶防水 而后面电源插口 有配套的防水橡胶 就不用多事了

简化了电源保护 没有用保险丝和稳压二极管 只用了个1N5822防止电压反接 也没有引出个USB口 因为可以用webrepl开发 实在不行 开发时打开盒盖往里面插根USB线也不难

装起来是这样的 目前用胶带固定的东西 等OLED能点亮 电机能控制 最终都会用硅胶固定 浓浓的DIY风

fotor_1712576979274.jpg

嗯 显示工作状态的发光二极管还没弄上 也等差不多完工了再说 

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
7个月16天前 修改于 7个月6天前 IP:上海
931069

尝试计算一下电机运行情况 有刷电机太复杂 不考虑火花放电和线圈切换 假设其模型是R+L+U串行 U是某转速下反电动势是不变量 V是供电电压

$\dot I=(V-U-IR)/L$

I应该是$a+be^{ct}$形式

$ \dot I=bce^{ct}=(V-U-R(a+be^{ct}))/L$

所以 V-U-Ra=0 -> a=(V-U)/R

----路上又发现 从这里开始推导有问题 少了个L 只能再来!!! 不好意思 下面是更正过的---

且 -Rb/L=bc -> c=-R/L

设边界条件 $I_{t=0}=I_0$ 则$a+b=I_0 -> b=I_0-(V-U)/R$

令$I_m=(V-U)/R$是PWM导通时候最大电流 而PWM关断时忽略续流二极管压降 $I_m=-U/R$

最终 $I=I_m+(I_0-I_m)e^{-R/L*t} $

当PWM关断时 由式子可知电流会负 但是续流的是二极管 这不可能 最多到电流为0 这时候不再有电流给电机提供力矩 有个断流时间

我测过电机 L=6mH R=12Ohm 供电12伏 电机号称空载3200RPM 实际观测 在上蠕动管带空气时候 远小于这个转速 只有1/10左右 估计U=1.2伏 假设从电流$I_0=(V-U)/R=0.9A$开始下降 且$I_m=-U/R=-0.1A$ 画出$I=-0.1+e^{-2000t}$图像 可见0.001秒后 续流结束

Screenshot_2024-04-09-21-55-26-342_us.mathlab.android.calc.free-edit.jpg

如果更低转速下 比如最大负载转速的1/10 U=0.12伏 $I=-0.01+e^{-2000t}$ 电流持续时间更长了

Screenshot_2024-04-09-21-59-05-874_us.mathlab.android.calc.free-edit.jpg

干脆连PWM导通图像(电流从0开始)$I=0.9-0.9e^{-2000t}$也画了 可见差不多也0.002秒就接近最终电流了

Screenshot_2024-04-09-22-00-53-515_us.mathlab.android.calc.free-edit.jpg

如果PWM周期小于0.001秒 这时候线圈续流蓄能是起作用的 我唯一担心的是 当电刷切换线圈时候 旧线圈的能量不仅在铁心中储存 还有不少通过火花放电的形式释放掉 哎 先忽略掉吧

由电流在PWM导通关断时候连续 互为起始条件

$I_{0off}=(V-U)/R+(I_{0on}-(V-U)/R)e^{-R/L*t_{on}} $

$I_{0on}=-U/R+(I_{0off}+U/R)e^{-R/L*t_{off}} $

得$I_{0off}=(V-U)/R+(-U/R+(I_{0off}+U/R)e^{-R/L*t_{off}} -(V-U)/R)e^{-R/L*t_{on}} $

$I_{0off}(1-e^{-R/L*T})=(V-U)/R+U/R*e^{-R/L*T}-V/R*e^{-R/L*t_{on}} $

$I_{0off}R(1-e^{-R/L*T})=U*(e^{-R/L*T}-1)+V*(1-e^{-R/L*t_{on}})$

$U=V*(1-e^{-R/L*t_{on}})/(1-e^{-R/L*T})-I_{0off}R$

反电动势应该于转速正比 一般情况 也假设电流与转速正比(假设负载力矩和转速正比)再设全导通时候转速为 $\omega_m$

于是 转速 $\omega=\omega_m*(1-e^{-R/L*t_{on}})/(1-e^{-R/L*T})$

这当然是非线性的 有趣的是 推到最后 居然只与R有关但愿我路上推导没出错😪" src="/default/XXXXXXXXXXXXXg">

联系实际画图 我发现 线性度在一般情况下其实蛮高的 而且PWM频率越高 电机线圈电阻越小 电感越大 线性度越高 下面是1kHz和5kHz下 转速和导通比例的关系

Screenshot_2024-04-09-22-08-19-811_us.mathlab.android.calc.free-edit.jpg

Screenshot_2024-04-09-22-10-38-622_us.mathlab.android.calc.free-edit.jpg

之比例所以做以上推导 是想确定个PWM频率 因为MCU直驱AO3400 频率不可能太高 否则驱动不到位会让AO3400过热

而且网上有经验说 PWM频率太高 转速反而上不去 我这里理想模型没有出现这种情况 但我想实际情况难说 想办法评估到一个较好用又不太高的频率好了

现在看来 可能频率最好在1kHz以上 毛估一下 AO3400栅极充电需要7nC 5mA充电需要1.4us 放电当它一样 总需要3us

按最大电流1A 供电12伏 1kHz时候 0.3%耗损率 约36mW 3kHz接近0.1w 对它封装是可以接受的值 就试试3kHz吧

--------4.19-------

刚测试了PWM频率和转速

rpm-pwm.png

果然当频率够高 PWM占空比和转速的关系 就越发线性了

但是频率越高 启动越难 网上说的"PWM频率太高 转速反而上不去" 在低速时是有道理的 考虑到频率高时候 近乎是恒电流驱动 力矩也恒定 如果不先克服摩擦力 就转不起来 我之前的分析简化了 只考虑速度的阻力 没有考虑摩擦力 尤其是蠕动泵本身的摩擦力就大

说实在的 100Hz 和 1kHz 有可以听闻 令人不快的音频声 而10kHz没有声音  10Hz的声音与蠕动泵本身声音混杂不易听闻 最后的算法我还在考虑中 

现在最恼火的还是Micropython 就这样几天 我已经提过一次bug 两次feature要求了 ... 用起来有很多细节与之前认为的不一样 比如在esp32不支持硬中断 奇怪的GC报告 感觉项目中充满了无可奈何的补丁 不情愿使用的显然不理想不通用的实现方法 很令人不爽 


引用
评论(2)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
6个月16天前 IP:上海
931899

抱歉项目进展实在缓慢 实在是最近气温不太合适 春末夏初的气味也不太合适(我大概是嗅觉动物 能感觉到早上到晚上的气味变化) 这些都让人不太想呆在室内

今天动手时不知道碰到哪里 还把芯片烧坏了 虽然已经买了个新的芯片 到货了打算换上去 但我也忽然觉得C3似乎不太合适了 想改用S2 这无疑也是令人痛苦的 因为C3的IO数量刚刚够 S2的有种浪费的感觉

fotor_1715260754895.jpg

但是S2有2M PSRAM 而C3经常因为内存问题崩溃 或者在蓝牙和WIFI上出莫名其妙的表现 GC虽然报告内存足够 但是我怀疑它实际上与底层冲突而不自知 毕竟C3的实际框架是RISCV 与其他的Xtensa的框架有很多区别 虽然IDF已经尽量在同构了 但是Micropython用的IDF版本并不高

而且最近C3开发板价格上涨 S2开发板我已经有两块了

如此会失去了blufi配网 和蓝牙遥控的功能(我原本是打算利用bluefruit App提供的pad的)可惜了

犹豫两天再决定

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
amo
6个月16天前 IP:广东
931902

时间和生命很宝贵,而元器件很便宜

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h作者
6个月13天前 修改于 6个月13天前 IP:上海
931970

框架已经从C3迁移到S2 多出的PSRAM 使我感觉十分舒畅 代码可以写得更严谨了 甚至嵌入一段简单的汇编编译器都没问题

但是 一上手 明显就感觉 运行没有原来的C3流畅了 为了证明这不是错觉 今天把到来的芯片焊上 C3满血复活后 马上进行了对比测试 测试代码有加减乘除 还有字符串操作和网络应用中常见的pack unpack操作 测试结果真的惊呆我了

同样代码 在无运行应用的主板上(即不运行任何东西 直接进入REPL C3运行需要4.87秒 而S2居然需要 。。。。31.4秒 6倍啊 同样是160MHz的MCU Xtensa比RISCV差这么多吗

而且在修补兼容性问题时候还发现 基本C3处处可以按byte访问 S2有些地方只能以Word访问

找到网上另外的评测 C3基本也比S2快一倍 在我这对比更剧烈的原因 可能是还有字符串操作和对字节串的pack/unpack

benchmark.png

但是从功能上说 除了蓝牙没有 S2在外设上面比C3强很多 S2还有个杀手锏 8MHz主频的协处理器(其实是两个) 我把高性能要求的IO处理 比如数字滤波等转到协处理器上处理 甚至编了个汇编编译的程序 还发现手册上指令码的错误 给厂家去信了 让S2专心处理网络功能就够了

以上性能的差距 确实是我之前没有考虑过的 我原本认为即便有高下 对比总不至于差别超过50%吧 幼稚了

为了防止再乱碰弄烧了 我已经把活动的东西 包括显示屏和开发板 DC/DC 都用硅胶固定了起来 

fotor_1715533187567.jpg

引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
m24h
进士 学者 机友
文章
52
回复
893
学术分
1
2020/01/22注册,9时38分前活动

个人开源项目: XXXXXXXXXXXXXX

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:上海
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}