搜索
bottom↓
回复: 67

STM32 造轮子之只能 C 编程的伪 PLC

  [复制链接]

出615入1076汤圆

发表于 2020-3-28 04:11:56 | 显示全部楼层 |阅读模式
本帖最后由 dukelec 于 2020-3-28 16:37 编辑

这两天论坛首页好多 PLC 相关,我也凑一个热闹。

我十年前用过台达 PLC,梯形图和语句都用过,然后就不愿意用了。

前年给朋友做一个机器视觉筛料机,本来是他公司的PLC工程师负责的,但是PLC工程师说PLC处理队列不方便(转盘入口传感器检测到进料就要入队,然后等料到多个相机的时候拍照,最后控制NG或OK吹气),后来我就用STM32的控制板了,一开始买的是淘宝上面高仿PLC和伪PLC控制器,我用C编程,发现硬件不稳定,容易跑飞,MCU电源滤波电容要不离的很远、电源和地线很细、电源先到管脚再到电容,甚至电容全部没有焊接!后来用自己的一个板子临时飞线使用的。

最近又有设备需要控制,所以就花了两三天时间,做了一个控制器:

STM32F105RB 64脚,128K flash,64K ram;
每一路输入输出接口附近都有指示灯,另有一个 RGB 状态灯;

16 路 IO 输入,其中 2 路可以配置成模拟输入;
8 路输入一组,每组输入可以选择设置高电平亮灯或低电平亮灯,上拉和下拉也可以配置;
每组输入甚至还可以配置成输出,但只能输出 3.3V,电流也有限;
输入输出都没有隔离,因为电源本身没隔离,IO 隔离意义有限,输入用的是逻辑分析仪的方案;

16 路 IO 输出,其中 4 路支持推挽输出、2 路是继电器输出、2 路可以配置成模拟输出,模拟输出支持 0~12V 或电流;

2 路 RS485 接口,一路是传统 RS485,一路是增强型 CDBUS RS485,最快 13.333Mbps,要整数则是 10Mbps;

有 bootloader,printf 打印调试、命令控制、固件升级共用同一路增强型 RS485;

24V 电源有两个 2P 座字,12V 占一个 2P,还有几个可配置的电源座子方便接线,主电源也可以兼容 36V 和 12V;

很多配置都是通过 0 欧电阻贴不同的位置来选择;

板上的烧录口用的是 1.0mm 间距,分别是 GND DBG_TX SW_CLK SW_IO 3.3V,板上的复位开关没什么用,下一版去掉。

有人需要的话,软硬件全部开放。










项目赶时间,早早画的,继电器输出附近安全距离都没怎么处理。
抽空整理一下,全部软硬件源码等,上传 Github,没有任何保留,bootloader、上位机 IAP 和调试工具(CDBUS 控制器模组 FPGA 的软硬件已经是 100% 开放的了)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出5入85汤圆

发表于 2020-3-28 05:03:24 来自手机 | 显示全部楼层
正面也发个图呀

出615入1076汤圆

 楼主| 发表于 2020-3-28 05:30:20 来自手机 | 显示全部楼层
WHOOK 发表于 2020-3-28 05:03
正面也发个图呀

手機上不好編輯,等睡醒再加資料和圖。

出0入0汤圆

发表于 2020-3-28 07:38:59 | 显示全部楼层
64腿这么多接口

出0入12汤圆

发表于 2020-3-28 08:22:34 | 显示全部楼层
LZ厉害

出0入0汤圆

发表于 2020-3-28 08:24:59 来自手机 | 显示全部楼层
厉害,很需要,收藏学习两相宜。

出0入0汤圆

发表于 2020-3-28 09:00:02 来自手机 | 显示全部楼层
西门子plc用来SCL处理队列,还算好用

出0入0汤圆

发表于 2020-3-28 09:07:47 | 显示全部楼层
楼主发上来造富坛友吧,学习下。

出0入0汤圆

发表于 2020-3-28 09:17:56 | 显示全部楼层
支持楼主,学习一下

出0入0汤圆

发表于 2020-3-28 10:27:37 来自手机 | 显示全部楼层
支持楼主,学习学习

出0入0汤圆

发表于 2020-3-28 10:34:46 | 显示全部楼层
看繁体字能看懂还是费劲

出0入0汤圆

发表于 2020-3-28 11:05:02 | 显示全部楼层
支持楼主,学习!

出0入13汤圆

发表于 2020-3-28 11:16:59 | 显示全部楼层
支持楼主, 期待分享学习

出0入0汤圆

发表于 2020-3-28 11:32:54 | 显示全部楼层
喜闻乐见!感觉很厉害

出0入8汤圆

发表于 2020-3-28 12:03:28 | 显示全部楼层
楼主很强, 哈哈,前排支持, 我还记得你那个485芯片

出0入76汤圆

发表于 2020-3-28 12:15:29 | 显示全部楼层
本帖最后由 foxpro2005 于 2020-3-28 12:24 编辑

这个看起来更像是一个PLC型的STM32开发板,个人觉得做为设备或工业控制,IO隔离还是很有必要的,特别是在一些使用情况复杂的环境中。
不过你是用于相对独立的小型设备,隔不隔离也就无所谓了。
另外做为工控板,非隔离的话,建议还是要把IO的防护做好(比如上下钳位二极管等)。

你这个外壳看起来还不错,是在哪儿买的?

出0入0汤圆

发表于 2020-3-28 12:36:35 | 显示全部楼层
感谢分享,不错,学习 了

出1310入193汤圆

发表于 2020-3-28 12:49:39 | 显示全部楼层
工业现场  隔离少不了  特定型控制产品除外

出0入42汤圆

发表于 2020-3-28 13:05:50 来自手机 | 显示全部楼层
大牛又来了,感谢分享

出30入42汤圆

发表于 2020-3-28 13:08:25 来自手机 | 显示全部楼层
foxpro2005 发表于 2020-3-28 12:15
这个看起来更像是一个PLC型的STM32开发板,个人觉得做为设备或工业控制,IO隔离还是很有必要的,特别是在一 ...

所以楼主自己也说了是伪plc

出0入0汤圆

发表于 2020-3-28 14:06:06 | 显示全部楼层
楼主保重身体。

出5入10汤圆

发表于 2020-3-28 14:38:08 | 显示全部楼层
楼主厉害,大牛一个

出0入0汤圆

发表于 2020-3-28 15:00:13 | 显示全部楼层
支持大牛,学习一下

出615入1076汤圆

 楼主| 发表于 2020-3-28 16:00:28 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-28 16:01 编辑
foxpro2005 发表于 2020-3-28 12:15
这个看起来更像是一个PLC型的STM32开发板,个人觉得做为设备或工业控制,IO隔离还是很有必要的,特别是在一 ...


外壳淘宝:
「工控板 塑料 外壳 125*90*40 板式PLC外壳 透明外壳 125X90X40 盒」
https://item.taobao.com/item.htm?id=546838265648

IO 的防护考虑了很久,之前还有发贴请教:
「3.3V 的 ESD V_BR 是 5~7V,还是危险,怎么解决?」
https://www.amobbs.com/thread-5728392-1-1.html

的确只是小型设备近距离使用。远距离、复杂应用会使用 RS485 总线,分布式控制。

出615入1076汤圆

 楼主| 发表于 2020-3-28 16:08:34 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-28 16:10 编辑
lb0857 发表于 2020-3-28 12:49
工业现场  隔离少不了  特定型控制产品除外


跟带口罩防疫一样,周围人都带口罩,自己不带也不会很危险。。。

只考虑近距离使用,远距离优先选择总线通讯,分布式控制。

这也是为啥 ADC 和 DAC 都做的很阳春,低端场合能凑合凑合用就行。

譬如伺服电机控制,要求高肯定走总线,而不是发脉冲,所以差分 IO 输入输出就没必要,ADC DAC 同理。

而且调研过很多 PLC,大多数只隔离了信号,电源没有隔离,使用的时候各设备共地连接,此时信号隔离意义就不大了。
隔离之后,线比较多,接起来也麻烦很多。

出0入0汤圆

发表于 2020-3-28 17:55:21 | 显示全部楼层
dukelec 发表于 2020-3-28 16:08
跟带口罩防疫一样,周围人都带口罩,自己不带也不会很危险。。。

只考虑近距离使用,远距离优先选择总线 ...

多谢楼主分享!

问一下为什么用F105而不用F103呢?

出0入58汤圆

发表于 2020-3-28 18:04:21 | 显示全部楼层
我之前也买过51的所谓国产PLC回来用C编程实现简单的控制。

出615入1076汤圆

 楼主| 发表于 2020-3-28 18:29:19 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-28 18:54 编辑
TINXPST 发表于 2020-3-28 17:55
多谢楼主分享!

问一下为什么用F105而不用F103呢?


同为 RB LQFP64 官方 stm32cube 显示的报价 103 是 $2.5,105 是 $2.6,实际购买也几乎没区别。

然而 103 ram 只有 20K,105 则有 64K

另外,105 有更多串口等外设

最早换 105 是有一次调 103 的 USB CDC 串口,stm32cube 生成的代码有 bug,跑一会儿就不通了,同样版本 cube 换 105 芯片一点问题都没有。它们内部 USB 控制器不同。

出0入0汤圆

发表于 2020-3-28 18:32:20 | 显示全部楼层

支持楼主,学习!

出615入1076汤圆

 楼主| 发表于 2020-3-28 18:52:12 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-28 19:04 编辑
shawn_bu 发表于 2020-3-28 18:04
我之前也买过51的所谓国产PLC回来用C编程实现简单的控制。


我造轮子实在是有强迫症,无法接受某些现有的类似控制器,吐槽一下:

led 指示灯和接口不是同一个位置,看起来难受;
MCU 电源电容不仅离的远,竟然都省去没贴,电源的地竟然不是连接覆铜!而且还那么细。
上下两层板子,只通过一个双排针和底板排母连接,松松垮垮,不加上盖烧录和调试时经常扯掉板子。
RS232 我觉得没啥意思,RS485 完全可以取缔 RS232。




下面这个还是品牌的,MCU 电源电容也只有两个,还放在了一起。
led 指示灯和接口也不是同一个位置;
看不惯 SMT 为主的板子选择直插晶振,直插的晶振,手很容易摸到晶振管脚,调试时一不小心摸到就死机;
ID 完全可以软件配置,用一个这么大的拔码配置开关有点累赘;
不喜欢 CAN 接口。

「正运动网络型 独立式 运动控制器扩展ZIO1616 与翠欧完全兼容正品」


另一个自己造轮子的原因是希望可以使用 CDBUS 的 RS485, 有了它写软件可以省很多事。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入42汤圆

发表于 2020-3-28 18:59:48 来自手机 | 显示全部楼层
感谢分享

出0入0汤圆

发表于 2020-3-28 19:35:50 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2020-3-28 19:36:32 | 显示全部楼层
dukelec 发表于 2020-3-28 18:29
同为 RB LQFP64 官方 stm32cube 显示的报价 103 是 $2.5,105 是 $2.6,实际购买也几乎没区别。

然而 10 ...

了解了,多谢!

出0入0汤圆

发表于 2020-3-28 19:59:33 | 显示全部楼层
工控的东西 电阻电容这些用大点封装好点

出0入0汤圆

发表于 2020-3-28 20:57:16 来自手机 | 显示全部楼层
楼主,这个支持步进电机吗?

出615入1076汤圆

 楼主| 发表于 2020-3-28 21:14:58 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-28 21:44 编辑
lnso 发表于 2020-3-28 20:57
楼主,这个支持步进电机吗?


可以,发脉冲信号给步进电机驱动器(或伺服器),步进电机驱动器接电机。

如果电机多,可以考虑使用总线型的电机伺服器,通过 RS485 发命令。

我有另一个小板子,可以控制小步进电机,主控通过 CDBUS (RS485) 和小板子通讯。
下面这台机器,共用了 3 个小板,其中 2 个分别负责控制 X Y 两个轴(含零位开关检测),还有一个用来控制电磁阀(没错,用步进电机驱动芯片驱动电磁阀,有点浪费):




机器运作视频:https://blog.dukelec.com/mb

小板也是开源的(PCB 源文件有人需要的话也可以上传):
https://github.com/dukelec/stepper_motor_controller

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出615入1076汤圆

 楼主| 发表于 2020-3-28 21:32:08 | 显示全部楼层
flash3g 发表于 2020-3-28 19:59
工控的东西 电阻电容这些用大点封装好点

不喜欢太大,功率、耐压都计算过,符合才用的。
LED 用的也是 0402,RGB 灯用的也是和 0402 一致的 1010 封装。
首次在 JLC SMT,以为没有 0402 的 LED,因为搜不到,结果空贴回来手焊。
JLC SMT 提交了就不能修改真的很坑,我刚提交就发现有 0402 的灯,一个板 36 个灯,10 块板子。。。

出0入0汤圆

发表于 2020-3-28 22:09:33 | 显示全部楼层
dukelec 发表于 2020-3-28 16:08
跟带口罩防疫一样,周围人都带口罩,自己不带也不会很危险。。。

只考虑近距离使用,远距离优先选择总线 ...

楼主调研的是哪种plc,到目前为止我还没有见过电源不隔离的plc呢

出0入20汤圆

发表于 2020-3-28 22:14:00 来自手机 | 显示全部楼层
主流的西门子1200系列的电源真的没隔离

出50入0汤圆

发表于 2020-3-29 06:32:38 | 显示全部楼层
支持楼主,学习一下

出0入0汤圆

发表于 2020-3-29 07:19:22 来自手机 | 显示全部楼层
谢谢分享,支持楼主的开源精神。

出100入101汤圆

发表于 2020-3-29 08:42:07 | 显示全部楼层
大牛无处不在

出0入8汤圆

发表于 2020-3-29 15:39:45 | 显示全部楼层
楼主。485怎么升级的,可以分享一下吗

出615入1076汤圆

 楼主| 发表于 2020-3-29 17:13:10 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-29 17:56 编辑
xujihu 发表于 2020-3-29 15:39
楼主。485怎么升级的,可以分享一下吗


传统是:MCU (UART)  <--->  RS-485 接口芯片 (e.g. MAX3485)
升级后是:MCU (SPI)  <--->  CDBUS 控制器  <--->  RS-485 接口芯片 (e.g. MAX3485)

CDBUS 详细可以参考我的签名的帖子。
CDBUS 控制器模组的 PCB 资料(含 Gerber 文件):https://github.com/dukelec/cdpga/tree/master/cdpga_b/files
模组的代码:https://github.com/dukelec/cdbus_ip   工程在 example/top_spi 目录
你自己做板子也可以直接用模组上的 FPGA 芯片($1 左右,愿意折腾还可以考虑用国产的 FPGA,e.g. AG1K $0.3、AG1280 $0.37)。
(代替这个模组的 ASIC 芯片也在弄,到时候芯片估计 1 RMB 多一点。)

升级后,一条总线几乎万能,且效率很高,譬如:
(要求不高的时候,PC 端使用传统的 FT232 之类的 RS485 小板就可以看 Printf 打印、给单个设备升级固件等。。。)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-3-29 17:16:46 | 显示全部楼层
这个帖子不错,有价值!

出0入0汤圆

发表于 2020-3-29 17:17:30 | 显示全部楼层
楼主可以考虑用来设计口罩机专用控制系统

出0入0汤圆

发表于 2020-3-29 17:23:44 | 显示全部楼层
我用以太网和Can设计的系统,分享一下框架图:


Pc端软件的框架图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出615入1076汤圆

 楼主| 发表于 2020-3-29 17:26:37 | 显示全部楼层
codefish 发表于 2020-3-29 17:17
楼主可以考虑用来设计口罩机专用控制系统

我想说的是,目前真的就是用来做口罩机自动化升级的。。。
自己公司有 N95 产线,同时弄好给伙伴公司用,100+ 台,用自己的控制器还可以省不少成本。。。

出615入1076汤圆

 楼主| 发表于 2020-3-29 17:39:29 | 显示全部楼层
本帖最后由 dukelec 于 2020-3-29 18:06 编辑
codefish 发表于 2020-3-29 17:23
我用以太网和Can设计的系统,分享一下框架图:


很不错,只要是支持对等的总线,架构都很方便灵活,CAN 也是一样。(为什么不单独拉一条总线代替以太网?总线布线方便很多。)
不过我觉得:
CAN 2.0 速率低(最高 1 Mbps),单次可传数据量只有 8 字节 。
新版 CAN FD 有所提升,最快 12Mbps,但实际很少超过 6Mbps,数据支持更多,但只增加了 12, 16, 20, 24, 32, 48, 和 64 字节,不满足要手动填补。
协议和控制器使用复杂,通用性差(与串口相比)。

实际上 CAN 有很大瓶颈,CAN FD 已经到头了,因为低速部分的存在,继续提升高速速率意义不大,
CDBUS 的仲裁模式也是一样有这个问题,不过 CDBUS 的 Break 同步模式可以支持全程高速的对等传输(可以上到 50 Mbps),不过节点越少效率越高。

CAN FD 想用来 Printf 打印调试也麻烦,因为调试打印一行很容易超过 64 字节,如果拆包处理就更麻烦了。
CDBUS 一个包最多 253 字节用户数据,用来调试打印足够。

CDBUS 有免费的 IP 核(8 位和 32 位接口都有)可以用在 FPGA 商业项目。

出0入0汤圆

发表于 2020-3-29 17:44:02 | 显示全部楼层
适合于复杂控制项目

出0入0汤圆

发表于 2020-3-29 21:09:40 | 显示全部楼层
不错,适合用在一些低成本非标自动化里

出0入264汤圆

发表于 2020-3-29 21:33:30 来自手机 | 显示全部楼层
PLC的优势在于对于多条件的逻辑控制很方便。如果用C的话,不知道一个if里面嵌套多少个与或非的条件

出0入0汤圆

发表于 2020-3-29 22:46:33 | 显示全部楼层
没用光隔,输入输出是不是容易坏?

出0入0汤圆

发表于 2020-8-20 10:16:33 | 显示全部楼层
dukelec 发表于 2020-3-28 21:14
可以,发脉冲信号给步进电机驱动器(或伺服器),步进电机驱动器接电机。

如果电机多,可以考虑使用总线 ...

你好,拜读了这个的代码,没有硬件,从下面代码感觉这个加速的速度曲线好像有点特殊,不知道什么形状?
  1. } else if (abs(end_period - cur_period) / cur_accel + 1 >= abs(tgt_pos - cur_pos)) {
  2.         cur_period += sign(end_period - cur_period) *
  3.                 min(abs(end_period - cur_period), cur_accel);
  4.     } else {
  5.         cur_period -= sign(cur_period - tgt_period) *
  6.                 min(abs(cur_period - tgt_period), cur_accel);
  7.     }
复制代码

出615入1076汤圆

 楼主| 发表于 2020-8-20 10:42:37 来自手机 | 显示全部楼层
xuxueliang 发表于 2020-8-20 10:16
你好,拜读了这个的代码,没有硬件,从下面代码感觉这个加速的速度曲线好像有点特殊,不知道什么形状?
...

最簡單的 梯形 加減速

出100入101汤圆

发表于 2020-8-20 14:28:35 来自手机 | 显示全部楼层
厉害,两三天搞个产品

出0入76汤圆

发表于 2020-8-20 18:00:29 | 显示全部楼层
fengyunyu 发表于 2020-8-20 14:28
厉害,两三天搞个产品

这个肯定是有类似的基础的

出0入0汤圆

发表于 2020-8-28 17:54:35 | 显示全部楼层
这个得留个记号,以后要交流学习

出0入0汤圆

发表于 2020-8-28 18:35:30 | 显示全部楼层
mark,多谢分享

出615入1076汤圆

 楼主| 发表于 2020-8-28 18:39:24 来自手机 | 显示全部楼层
話說我最近還在整理代碼(核心庫的重構這兩天会發布一個版本),整理好會放出來。。。

出0入10汤圆

发表于 2020-8-29 14:49:58 | 显示全部楼层
支持!!支持!!

出0入0汤圆

发表于 2020-9-1 18:55:08 来自手机 | 显示全部楼层
有价值,支持

出5入8汤圆

发表于 2021-8-13 13:12:10 | 显示全部楼层
大神  期待开源,这个项目开源网址是什么?

出0入0汤圆

发表于 2021-8-22 18:58:05 | 显示全部楼层
这个帖子都是干货。

出15入186汤圆

发表于 2021-8-22 19:35:58 来自手机 | 显示全部楼层
mark         

出615入1076汤圆

 楼主| 发表于 2021-8-23 00:44:00 | 显示全部楼层
本帖最后由 dukelec 于 2021-8-23 12:54 编辑
wt3333 发表于 2021-8-13 13:12
大神  期待开源,这个项目开源网址是什么?


這是之前的 kicad 工程 和 代碼,pcb 和 代碼 一直沒時間更新

再改版的話主芯片要換 stm32g071 了(除了按鍵要去掉,pcb 的 rgb led 的封裝好像畫錯,pcb 有做標記)
固件也要修改,至少要支持 cdbus gui 上位機,建議參考 cd-mdrv-step 步進電機等開源項目





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出5入8汤圆

发表于 2021-8-23 09:07:36 | 显示全部楼层
dukelec 发表于 2021-8-23 00:44
這是之前的 kicad 工程 和 代碼,pcb 和 代碼 一直沒時間更新

再改版的話主芯片要換 stm32g071 了


谢谢  大神 开源分享

出0入0汤圆

发表于 2021-8-31 18:18:28 | 显示全部楼层
kicad好评
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 22:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表