- 2024-07-15
-
回复了主题帖:
(已结束)1个掉了按键焊盘的瑞萨RA8D1板卡,能修的网友来拿
大概率能修好。最近在研究trustzone,这个刚好支持,可以分享下相关的学习笔记。
- 2024-04-15
-
加入了学习《[DEMO] 基于Thread的 [观赏鱼自动无线喂食系统]》,观看 喂食视频2
-
加入了学习《[DEMO] 基于Thread的 [观赏鱼自动无线喂食系统]》,观看 喂食视频1
- 2024-01-22
-
回复了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】作品提交 - 无线模块化高精度滴定系统
之前怕视频长度有限制,作品没描述好, 特上传了完整点的视频。
[localvideo]137667c9c6f28aa5fd2095639f0bb6df[/localvideo]
- 2024-01-20
-
回复了主题帖:
# 【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 步进电机S曲线加速测...
后面又用了MCPWM做了测试, 发现MCPWM下电机都感觉不出位移,声音也更小。 分析波形发现是RMT的话会出现些许抖动,而MCPWM抖动控制做的非常好。
经过更多测试是MCPWM用的是MCPWM timer, 只要用这个timer中断控制就能生成很好的波形了。
- 2024-01-18
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】作品提交 - 无线模块化高精度滴定系统
无线模块化高精度滴定系统
作者:allenliu
一、作品简介
微量柱塞泵是一种用步进电机和丝杠带动活塞来实现液体或气体的输送功能的一种高精度长寿命泵。
该系统采用了1mL容量的泵, 也就是一个行程能够输送1mL的液体, 可以实现最低0.5uL的流量控制精度, 也就是相当于可以控制一次泵出1/100滴水。可以用于微流体的控制, 实现血液生化分析等。
传统的柱塞泵控制系统一般采用RS485,需要额外的USB转RS485硬件和电缆连接,而且如果隔离不好还有烧毁PC的USB,主板的风险。由于采用RS485,导致只能通过PC来控制。
无线滴定系统省却了通讯电缆,由于连接到服务器端,可以通过PC或者手机等来控制微量泵,不仅节省成本,再物理上也更加安全。
系统功能包括:
1. 用手机自带的WIFI扫描器扫描设备二维码就可1秒左右入网, 期间要更换网络只要再次扫描即可,无需按键重置设备,无需用户安装额外App。
2. 泵支持A口吸液,A口出液,B口吸液,B口出液等操作
3. 流量最小分辨率为7.8125nL, 即为0.0078125毫升
4. 使用树莓派作为服务器, 可连接多台滴定泵
5. 可通过PC, 手机等控制泵
6. 使用MQTTv5协议,支持二次开发
7. 只需使用一路工业/医疗标准的24v供电
二、系统框图(图文结合)
从框图可以看出, 该泵包括一个步进电机(M)连接一个活塞和缸体, 活塞连接一个三通阀门。
三通阀门供电为12或者24v,通过一个电磁控制驱动芯片来驱动, 该芯片集成了输入保护, 续流二极管等功能,能够很好的节省元件数量, 减少体积和成本。
步进电机有TMC2209的驱动模块控制, 实现电机的静音控制。
由于是开环步进电机驱动,这里需要一个光电对射开关(ITR)来实现位置的检测,这里不用TMC2209里的无限位检测功能原因是怕长期对丝杠有损坏, 还有就是在一些特殊情况下需要泵送很高的压力的情况下会检测失败。
系统通过ESP32-C6来提供控制功能, 通过检测(ITR),控制阀门方向和驱动TMC2209来实现泵的控制。由于电磁阀是12v/24v供电的, 考虑到工业和医疗一般为24V供电,这里也使用24v电源, 通过DCDC来降压到3.3v。
三、各部分功能说明(图文结合)
硬件设计
原理图:
主控采用ESP32C6, 原设计计划采用ESP32C6+RP2040的方式, ESP32C6用于通讯,RP2040用于电机控制, 不过画图过程中发现外壳的空间不足以放下RP2040。
步进电机驱动器采用TMC2209, 所有的控制引脚都连接到主控,可以编程方式控制细分和运行模式, 还能用串口驱动。
设备需要确定丝杠滑块状态,可以通过对射光耦或者TMC2209的电流来判断,本着寿命和噪声的考虑选了前者的方案。
U2是用于控制电磁阀的, 作为一个一体化驱动, 外观和普通的sot23的管没什么区别,可以节省空间和成本, 相对于光耦方案。
供电采用LGS5148 buck芯片,该芯片VIN高达48v,SOT-23-6的封装非常小巧,关键是该封装有很多PIN2PIN的替代。
电源模块的原理图:
PCB设计
考虑到想要做通用模块,以后diy也能用的,设计的时候就考虑到很多方案,尤其是排版上也画了很多样式。
PCB的效果图1:
这种可以采用插件或者贴片的方式,焊接的时候用电烙铁就可以了, 为了分板方便又画了方便分板的图, 不过发现JLC免费的不给做这种方式的。
还有用这种分立方式, 直接用PCB做引脚, 省掉了插件, 采用双面对称结构,安装在板边的时候可以更加灵活:
对应的焊盘:
画完焊盘后发现这种结构的缺点就是焊盘占用空间大。
而且这种焊盘怕之后嘉立创审核麻烦。
还有设计了一种就是采用双面方式的, 这种就做成模块画PCB的时候直接用。
就在准备提交制板的时候发现居然有卖成品的模块的, 体积也小:
免费的PCB券就省一张了, 于是就先用这个成品替代了。
外壳采用的是一个接线的公模,找了1周试过多款外壳发现这个居然完美匹配:
根据外壳画了PCB: 由于体积限制和天线的信号考虑,把ESP32C6 MINI放背面, 漂空中的是对射光耦,活塞的位置检测, PCB和外壳通过光耦固定螺丝拧到电机上:
焊接组装调试
经过“漫长”的等待, PCB回来了:
郁闷的是焊了2次天电流都不对,一度以为供电电路有问题, 零时洞洞板飞线试了下,一次点亮:
这次干脆不用焊锡膏, 之间焊锡怼上去, 焊上一次搞定。
尴尬的事情来了, 算错外壳高度了, 导致步进电机高出外壳2MM, 而电源模块高出了1MM。后来想半天想到可以把步进电机不焊接针 电源模块之间锉刀锉平一点, 不过感觉一个引脚有点松, 就给开盖了, 还好用的软硅胶, 打开发现引脚锡断了, 这种引脚用的贴片的, 干脆都去掉, 之间贴着焊盘焊接。
安装完后的效果(对射光耦和电磁阀还未焊接):
中间3P是用于USB调试的, D-,D+,GND, 接上电源插上USB杜邦线就能调试了。
服务器系统搭建
安装EMQX MQTT
EMQX是个功能很强大的MQTT服务器。支持由于EMQX不在apt默认库里, 需要导入相应的源。
树莓派上运行:
curl -s https://assets.emqx.com/scripts/install-emqx-deb.sh| sudo bash
sudo apt-get install emqx
sudo systemctl start emqx
安装完后就可以用http://pi-iot:18083访问emqx后台了。
开启COAP
在“Access Control”->Authentication->Create…->Password Based开启密码认证功能, 添加用于设备的用户名和密码。
在扩展网关那启用COAP插件:
测试MQTT功能
在树莓派终端启动MQTT订阅:
mqttx sub -t +/# -u aa -i user1 -P 123 -v
获取token:
coap-client -m post -e "" "coap://192.168.1.47/mqtt/connection?clientid=user1&password=123"
使用获取的token发布消息:
coap-client -m post -e "abc2132123" "coap://192.168.1.47/ps/aabbcc?clientid=a&token=3696240490"
软件设计
模块设计
由于对速度有要求,软件采用原生IDF开发,安装IDF文档说明安装好开发环境。
为了方便代码管理, 把用到的模块封装成了几个库:
File: 负责spiffs的读写
Wifi:主要是网络的配置功能
void my_wifi_init();
void my_wifi_connect();
void my_wifi_run_dpp(); /* 运行easyconnect 服务, 用户通过用手机自带的WIFI设置扫描生成的二维码就能快速入网了,测试了下速度大概在1秒左右就能配置好了 */
void my_wifi_register_event(my_wifi_event_handler handle);
mDNS: 主机名查询,网络发现等
coap:用于连接MQTT服务器
mqtt:lwip版本的用tcp方式连接MQTT服务器
void my_mqtt_init();
void my_mqtt_register_event(my_mqtt_event_handler handler);
void my_mqtt_start();
void my_mqtt_stop();
void my_mqtt_run();
stepper:步进电机驱动库
void my_stepper_init();
void my_stepper_drop(int32_t nl); // 滴定给定的液体, 单位为纳升
Easy Connect(DPP) 使用的时候需要配置要监听的通道, 在入网后WIFI就会切换到路由器指定通道通讯了, 为了让DPP继续工作,代码中做了处理让其自动切换到同一通道。
四、作品源码
见附件压缩包
五、作品功能演示视频
见下方视频效果
[localvideo]16833b6da66b89ced65ab4062ee724ae[/localvideo]
六、项目总结
由于比较晚收到板子, 项目有点赶,再加上对系统复杂度的错误估计, 导致了没有时间完善所有的功能,花在该项目的时间上超过了上百小时。
不过在项目中学到了很多知识,包括电机控制, ESP32从无到有等。也能在交流群中学到新的东西。
【DigiKey“智造万物,快乐不停”创意大赛】物料开箱 基于OpenThread的多路滴定控制器
https://bbs.eeworld.com.cn/thread-1262539-1-1.html
【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 系统架构:
https://bbs.eeworld.com.cn/thread-1267962-1-1.html
【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 1 树莓派4B上搭建MQTT
https://bbs.eeworld.com.cn/thread-1264545-1-1.html
【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 步进电机S曲线加速测
https://bbs.eeworld.com.cn/thread-1268069-1-1.html
七、视频效果
考虑到手头没有细的针头,加上太小视频看不出效果,录制的时候使用了4微升, 8微升和40微升进行展示。
用的MQTT的命令格式为:
[步进量] [推挤/抽吸] [推挤抽吸方向]
通过这三个参数可以实现左侧吸液,左侧出液,右侧吸液,右侧出液这4种功能。 这些操作在实际的应用中是很常见的。
生化(血液)检测就是通过这个实现移液滴定等功能。
[localvideo]1b1a521ef5a7877c6b6112050f090912[/localvideo]
- 2024-01-17
-
回复了主题帖:
EEWorld 社区 2023年度人物颁奖
个人信息确认无误。
没想到还有我。
- 2023-12-26
-
发表了主题帖:
# 【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 步进电机S曲线加速测...
本帖最后由 allenliu 于 2023-12-26 00:42 编辑
# ESP32C6 RMT驱动步进电机实现S曲线加减速度
柱塞泵使用步进电机驱动, 由于采用丝杠驱动柱塞, 如果不采用加速的方式容易对丝杠造成损坏, 还有就是会容易损害柱塞泵里的泛塞封。由于ESP都采用了FreeRTOS, 试过用阻塞方式(while)来驱动电机发现效果不理想, 会有很大的glich(输出波形抖动, 造成电机的抖动)。也试过用FreeRTOS的软timer, 发现也有明显的抖动。
研究下发现可以用RMT(就是用于发送/接收红外的模块)来驱动电机。
看了下乐鑫官方的历程也跑了下发下效果不够好,就自己实现了S曲线的功能。
RMT模块描述如下:
要做的是填充高低电平的时间, 然后通过配置的时钟把信号发送出去。
首先要做的就是创建一个rmt的编码器:
~~~c
rmt_encoder_t motor_encoder = {
.del = del_step_motor_encoder,
.encode = encode_step_motor_sample,
.reset = reset_step_motor_encoder,
};
~~~
相关代码实现:
~~~c
esp_err_t del_step_motor_encoder(rmt_encoder_t *encoder)
{
return rmt_del_encoder(copy_encoder);
}
esp_err_t reset_step_motor_encoder(rmt_encoder_t *encoder)
{
ESP_LOGI(TAG, "reset_step_motor_encoder");
rmt_encoder_reset(copy_encoder);
return ESP_OK;
}
size_t IRAM_ATTR encode_step_motor_sample(rmt_encoder_t *encoder, rmt_channel_handle_t tx_channel, const void *primary_data, size_t data_size, rmt_encode_state_t *ret_state)
{
return copy_encoder->encode(copy_encoder, tx_channel, primary_data, data_size, ret_state);
}
~~~
然后初始化rmt:
~~~c
ESP_LOGI(TAG, "Initialize EN + DIR GPIO");
gpio_config_t en_dir_gpio_config = {
.mode = GPIO_MODE_OUTPUT,
.intr_type = GPIO_INTR_DISABLE,
.pin_bit_mask = 1ULL
- 2023-12-25
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 系统架构
# 系统架构
## 微量柱塞泵结构
微量柱塞泵是一种用步进电机和丝杠带动活塞来实现液体或气体的输送功能的一种高精度长寿命泵。
该系统采用了1mL容量的泵, 也就是一个行程能够输送1mL的液体, 可以实现最低0.5uL的流量控制精度, 也就是相当于可以控制一次泵出1/100滴水。可以用于微流体的控制, 实现血液分析等。
## 系统框图
从框图可以看出, 该泵包括一个步进电机(M)连接一个活塞和缸体, 活塞连接一个三通阀门。
三通阀门供电为12或者24v,通过一个电磁控制驱动芯片来驱动, 该芯片集成了输入保护, 续流二极管等功能,能够很好的节省元件数量, 减少体积和成本。
步进电机有TMC2209的驱动模块控制, 实现电机的静音控制。
由于是开环步进电机驱动,这里需要一个光电对射开关(ITR)来实现位置的检测,这里不用TMC2209里的无限位检测功能原因是怕长期对丝杠有损坏, 还有就是在一些特殊情况下需要泵送很高的压力的情况下会检测失败。
系统通过ESP32-C6来提供控制功能, 通过检测(ITR),控制阀门方向和驱动TMC2209来实现泵的控制。由于电磁阀是12v/24v供电的, 考虑到工业和医疗一般为24V供电,这里也使用24v电源, 通过DCDC来降压到3.3v。
关于DCDC这里有个插曲就是之前不知道有那种体积小,输入电压高的模块卖, 导致前期花了好长时间画了DCDC板。后来发现用K7803-500模块就行。
ESP32—C6同时提供了WIFI6(记得是乐鑫的第一款WIFI6芯片), 802.15.4和BLE功能, 该芯片的框图如下:
图中边界路由"Thread Border Router"是用于把Thread协议(基于802.15.4)的6LowPAN数据转为IPv6,并且提供了IPv4的互联功能,通过该模块就能实现通过Wifi等控制Thread设备了。
边界路由由ESP32-S3+ESP32-H2(或ESP32-C6)构成, ESP32-S3用于提供WIFI连接和运行otbr服务, ESP32-H2或ESP32-C6提供了IEEE802.14.5的功能, 可用于Thread的通讯。之所以不采用单片的ESP32-C6方案是为了最大化的提高系统响应(ESP32-C6中只有一个TX+RX).
有了边界路由就能把Thread网络连接到WIFI上了,树莓派运行了MQTT服务,Thread通过MQTT来和各个设备交互,实现设备的控制。
用树莓派而不直接连接到云端的原因是要考虑到网络的问题,用云端的话如果断网了那设备都停摆了。
家里给鱼缸定时换水就是用WIFI控制的,之前就遇到过网络断后鱼缸水都快流光了。
还有个使用树莓派的原因是很多MQTT提供商都没提供COAP转MQTT的功能,而Thread面向低功耗,没有TCP的能力,用MQTT-SN的话不仅也要MQTT提供商的支持,还会额外增加MCU的代码体积。
有了树莓派, 就可以用手机来控制Thread设备了。
- 2023-11-24
-
回复了主题帖:
【阿尔达 H-30T 高温休眠版恒温电烙铁 评测】
秦天qintian0303 发表于 2023-11-24 11:35
调到280度的时候化锡时间再30s左右,这时间有点多啊,白光焊台比着快很多啊
白光的焊嘴小, 加热头是一体的, 比热容和热阻也小, 化锡速度比大多数的高频烙铁还快。
不过焊嘴价格就高多了, 而919一个也就5块不到。
-
发表了主题帖:
【DigiKey“智造万物,快乐不停”创意大赛】无线滴定系统 - 1 树莓派4B上搭建MQTT
# 滴定系统 - 2 搭建MQTT
滴定系统中, 设备通过MQTT服务器来接收控制命令, 返回自身状态信息。 MQTT安装与树莓派4B中。
该章节内容包括nanomq broker(一个轻量级的MQTT broker)的安装, 简单的消息发布订阅测试, 最后包括性能的测试。
## 安装nanomq broker
通过sh脚本把emqx的数据库加到本地包并安装:
```bash
curl -s https://assets.emqx.com/scripts/install-nanomq-deb.sh | sudo bash
sudo apt install nanomq
```
让树莓派启动的时候自动启动nanomq:
```bash
crontab -e
```
在文本离添加:
@REBOOT nanomq start
crontab的内容:
## 安装mqttx客户端
```bash
curl -LO https://www.emqx.com/en/downloads/MQTTX/v1.9.6/mqttx-cli-linux-arm64
sudo install ./mqttx-cli-linux-arm64 /usr/local/bin/mqttx
```
## 测试消息发布
控制台1发布消息
```bash
mqttx pub -t topic 1 abc
```
控制台2订阅消息
```bash
mqttx sub -t topic1
```
## 性能测试
```bash
mqttx bench pub -t abcutehoatueha -m a12234h
```
可以看到在树莓派4B中1秒是可以发布1000条消息的(在1000个连接的情况下)。
CPU的占用情况:
在高负荷情况下树莓派的CPU只跑到40%左右。
-
发表了主题帖:
【阿尔达 H-30T 高温休眠版恒温电烙铁 评测】
本以为没入选, 突然联系都差点忘了这事。 确认地址后没2天就收到了:
打开包装发现这个帽子, 不知道是掉了还是配件, 这个帽子可以安装在小旋钮上, 不过安装上后有点档温度标签。
到手先拆为敬, 就是标准的9xx电烙铁, 方便换焊嘴, 配的就是常用的斜焊嘴。
测试了下对地电阻, 在1欧左右, 包括表笔电阻, 地线通过弹簧和烙铁金属连接一起:
插入插座发现控制器一直响,转成gif没声音, 时间大概有50-60分贝左右的报警声。 难道加热还响? 丝毫没意识到可能是地线问题, 换了个插座发现居然不响了。 连夜测试了下插座, 拆开86面板发现有地线, 不过浮地。 拆开电表箱找到对应地线, 发现都连地排了, 最后发现是地排端子是居然分三段独立的, 然后后面2段居然都是浮地的, 赶紧弄了个铜线连一起。 这个发现对我来说是最大收货了。
这里有点不好的地方就是插座插上后, LED在一面, 旋钮又在另外一面, 然后插上后盒子是侧立的, 尴尬。
看别人评测说这个线比较短, 个人觉得听合适的, 然后个人喜欢这种控制器靠近插座的,这样就不用找地方放这控制器了。
这个控制器比较轻, 个人猜测这个控制器是通过可控硅来控温的。
来化个HP 1200W的电源, 这个之前拆过, 加了电中温焊锡, 烙铁放上去轻松融化:
用快克303D做了下对比, 试了下无铅焊锡的效果, 这个板焊锡表面氧化了,大点焊盘要10s左右,温度开的300度出头, 下图是303D的效果。
然后是H-30T的效果, 温度接近400度, 基本7s化锡, 可以看出这个和温度关系最大。
来焊个大铜皮, 用的还是中温焊锡, 300度出头, 和用过的其它焊台也差不多,不过肯定是比 30多的黄花强了, 用了一段时间也没怎么氧化。 9xx烙铁有个好处就是金属外壳没那么烫, 而一体烙铁头由于加热头和金属管热阻更低, 更容易烫伤人。
总结
优点:
1. 便携性和省空间上面比焊台好。
2. 焊嘴通用, 更换价格低,高温拆焊的时候也不用心疼烙铁头(在用的303D一个头50大洋)。
3. 温度能调很高。
4. 高温的时候焊嘴比起便宜的电烙铁没那么容易氧化。
5. 接地不良声音报警功能很实用。
6. 温度休眠功能。
缺点:
1. 调到280度的时候化锡时间再30s左右, 调到300多度的时候化锡时间显著减少, 速度还是比白光, 高频电烙铁等差些。
2. 没有LED显示设定和当前温度, 对于焊接要求很高的情况(器件不耐高温)不能很好的控制焊接质量。
3. 少了开关, 这样每次用完都得插拔插头,用不带开关的插座的时候不大方便。