ATtiny13与PLC的比较,或者如何从8英尺控制器获取14 I / O

图片

在继续之前,我想警告一位热心的读者。

  1. 由于许多原因,我无法完成所描述的内容,这些原因将在评论中高兴地告诉您,而我绝不敦促您这样做。 而且,我绝不声称以下描述的设备可以代替真正的PLC。 所做的一切只是为了向我自己证明这在技术上是可行的,并且不适用于实际设备。
  2. 如果仅因提起“ Arduino”一词而感到不适,最好不要阅读。 我使用Arduino IDE中的控制器执行了所有操作,对我来说更容易。 但是没有什么可以阻止不使用它的人做同样的事情。

很长一段时间以来,我都想写一篇关于我在ATtiny13上进行的实验的文章,但主要是因为我对现场的Arduino专家的态度感到恐惧。 而且,我已经使用控制器仅几年了(再次感谢Arduino,哦,您去哪儿了!)。 对文章的评论帖子上有三只眼睛……表明该主题仍然吸引了足够多的用户。 顺便说一句,文章的标题应该是“ ATtiny13上的PLC”,但在同一评论中,他们在桌上对我客气地解释说所描述的设备不能称为“ PLC”。 好吧,不。

我们需要PLC提供什么?


首先,我想对企业中使用的PLC进行功能模拟,同时考虑到它们的使用方式。 我们拥有的大多数控制电路都有随之而来的所有缺点。 从90年代开始,各种类型的PLC也被广泛使用。 基本上,它们从限位开关和接近传感器的状态开始执行控制电路的逻辑任务。

没有复杂的接口,没有模拟信号。 开/关。 仅此而已。 在大多数情况下,甚至PLC输出的负载也由它们急于摆脱的继电器提供。 (有趣的是,几乎所有地方都使用PLC继电器输出,这些继电器开关外部继电器,液压分配器的电磁开关...有时还增加了起动器的另一个链接。)因此,我需要PLC提供什么:

  1. 离散输入,信号电平为24伏。
  2. 离散输出电压为24伏。
  3. 根据给定的方案测试内部算法,可以在必要时进行更改(主要是在调试过程中)。
  4. 速度约为50毫秒,不再需要更换继电器电路。

就是这样。 没有接口。 没有打扰。 没有屏幕。 嗯,是的,屏幕...显示输入和输出的状态不会有任何问题;在这里,LED还没有配备更可靠的LED。 好吧,不要忘了一切都是出于体育运动的兴趣,预算分别落在开发人员的肩上。 顺便说一句,很好的激励。

如果您不考虑24伏特的信号电平,那么绝对不超过I / O(输入/输出)数量不少于所需数量的任何微控制器都可以轻松地完成任务。

我们处理的水平


最初,我想在输入端使用光耦合器。 任何对电子学,特别是对工业特别熟悉的人都知道,光耦合器并不多。 这些评论将详细告诉您为什么没有光耦合器是不可能的。 但是我权衡了利弊,决定拒绝。 因此,有些读者可能无法继续阅读,请立即写评论。
因此,我们有一个24伏的输入信号,或者在没有信号的情况下有一个0伏的输入信号。 这将允许使用非接触式感应位置传感器或常规的接触限位开关。 从24伏特开始,您需要为控制器获得安全的逻辑单元电压。 好的旧的分压器会尽可能地应对。

图片

计算电阻器时要考虑到,如果输入电压的任何偏差在微控制器输入端的额定电压的正负20%之内,都应该大于开关电压(通常是控制器电压的一半),但不大于控制器电压,我们认为它等于5 V. 适用于AVR系列中的任何控制器。 此外,通过分压器的估计电流约为7 mA,这降低了干扰的可能性,并且同时不会给传感器输出和电源带来沉重的负担。 4.7 V齐纳二极管可防止相同干扰下的电涌。 仍然有联系的反弹,我们可以通过编程或根本不使用它来解决,这只是一个模型。 现在,我仍然必须指出输入的状态。 在这里,您可以进行救生,用一块石头杀死两只鸟:

图片

电路上的LED具有两个功能-就像一个齐纳二极管一样,将电压限制在2.8 ... 2.9伏(仅适用于蓝色和白色LED!),并且它也发光。 我必须警告您,在某些情况下,LED上的电压不足以切换控制器输入! 因此,当使用多个控制器输入时,我们简化了安装并节省了多个齐纳二极管。 通过平稳地增加输入电压,您会注意到LED的点亮时刻与切换输入的时刻并不一致。 但这并不会给我们带来太大的麻烦,因为输入处不应有中间电平,只有0 V或24V。自然,此时,控制器中至少应具有一个输入和一个输出的最低测试固件。

现在,还需要将控制器的输出信号调整为24 V,并考虑到所有输出继电器的公共线也为负号。 在这里,您至少需要2个晶体管和2个电阻器:

方案
图片

实际上,将需要一个更多的电阻器,以及一个与继电器并联的保护二极管,但这并非如此。 首先,我使用了该电路。 但是有一次,我提请注意光耦合器,一开始我就拒绝了。
困扰我们的人会帮助我们

方案
图片
我们通过数据表查看光耦合器的参数:最便宜,最实惠的PC817C输出允许您切换U o:35 V:I o:50 mA。 在我们所在地(在企业中)连接到PLC的那些继电器占用的电流最大为45 mA。 没有库存,但是很合适。 大多数24 V的小型继电器的最大上拉电流为15 ... 20 mA。 最后,您可以购买更昂贵的光耦合器,如果确实需要它,则电流高达80 mA,电压高达60V。我们适合布局和817。 为了避免您从错误中汲取教训,我警告您,要使最大电流通过光耦合器LED,您需要通过7 mA以上的电流。

好了,再次回顾一下指示。 为了显示输出的状态,我们增加了一个与光耦合器的LED串联的LED,在那里仍有3伏以上的电压处于空闲状态。 现在是在烧毁光耦合器之前绘制保护二极管的时候了。 顺便说一句,我找不到根据继电器参数选择保护二极管的方法。 一方面,它必须被脉冲化,高压。 另外,它可以与晶体管平行放置,哪个更好? 实践证明,在这种情况下,二极管IN4148的功率足够低,但是我想从理论上进行论证。

方案
图片

计算结果再次在蓝色或白色LED上显示一个220欧姆的电阻,如果您将其设置为红色,则电路中的电流将从3.5 mA增加到9 mA,必须考虑到这一点。

关于编程的一点


好了,有这么多字母,但我还没打到标题的最底端,也没打到ATtiny13。 为了对控制器进行编程,我使用了FLProg项目 ,这是一个可视化编程环境,可以使控制器编程尽可能接近LAD和FBD中的PLC编程。 在这个环境中创建的电路(也是一个项目)被编译成一个Arduino草图,我已经将它从Arduino上传到ATtiny13或AVR系列的另一个控制器。 例如,这样一个简单的方案

图片

编译成如下代码:

bool _k1 = 0;
void setup()
{
pinMode(1, INPUT);
pinMode(2, INPUT);
pinMode(3, OUTPUT);
}
void loop()
{
_k1 = (((((!(digitalRead (1)))) &&((digitalRead (2))))) || ((((!(digitalRead (1)))) &&(_k1))));
digitalWrite (3, _k1);
}

- - , . FLProg , «» . , . , pin – , . ATtiny13, : Attiny13 Attiny13a Arduino IDE , : FLProg ATtiny13 ( ), , , ATmega168. FLProg , ATtiny13, . Arduino IDE , .


? ATtiny13, 5 , . , 6 , , , : ? RESET.

, 6, . ?

:

image

, . . , . .

, 50 . , 50 , , . , .

0 2,8 , , . , , 1,1 ( ) 2,9 , 4 . , .

. , , . , , 5 , -- , . 3 ( ) 680 . , . , , .

? 50 , 1 , 50 . , 1 , . , .

, . , .

6+6=12 -, 2?

image

, ? , ) 4 , , , . 0 , , 2,8 , ( ). 24, 0, , 2 – 0,93 1,87 . , . Arduino IDE , ATtiny, . , .

, , 6 10 (!) ATtiny13 ( ). , , . , «» ATtiny. , ATmega8, . :-)

, .

, , , . I/O . , (8/6) , , « ».

, , , «», . .

P.S. , : « ?»

image

Source: https://habr.com/ru/post/zh-CN443978/


All Articles