CNC驱动器的建造成本是多少

不久前,我担心如何在采集器电机上驱动CNC系统的驱动器,甚至在有反馈的情况下,该问题也适用于Modbus RTU。

我可以使用Arduino UNO,用于L298N的驱动器,来自AEG汽车座椅驱动器的集线器电机(用于12V),带槽的光电断路器2个。

从一开始,我就按照这个方案将一条围巾和2个光电断路器连接在一起。



最终形式如下:

图片

这件丑陋事情的本质是:一根火柴从头穿过第一个断路器,然后从第二个穿过,因此微控制器可以理解电动机的旋转方向。

所有连接看起来像这样:

d2是第一个光电断路器;
d3是第二个光电断路器;
d5-向左旋转的PWM输出;
d6-向右旋转的PWM输出;

一切都连接在一起,我坐下来编写代码,在受尽折磨之后,我诞生了以下内容:

#include <ModbusRtu.h> #define ID 1 //  ,  ,   TX Modbus slave(ID, 0, 0); int8_t state = 0; //  uint16_t au16data[11];//   modbus #include <PID_v1.h> //     double Setpoint1, Input1, Output1; double Setpoint2, Input2, Output2; double Kp = 1, Ki = 2.5, Kd = 0.5; PID myPID1(&Input1, &Output1, &Setpoint1, Kp, Ki, Kd, DIRECT); //1-     PID myPID2(&Input2, &Output2, &Setpoint2, Kp, Ki, Kd, REVERSE); //2-    int LeftPWM = 5; //     int RightPWM = 6; //     volatile byte EncA, EncB = 0; //     volatile int Position = 0; //   int SetPosition = 0; //     void setup() { slave.begin(9600); pinMode (LeftPWM, OUTPUT); pinMode (RightPWM, OUTPUT); attachInterrupt(0, ChangePosition1, FALLING); //  0-(pin2)    ChangePosition1() attachInterrupt(1, ChangePosition2, FALLING); //  1-(pin3)    ChangePosition2() Setpoint1 = 0; Setpoint2 = 0; digitalWrite (LeftPWM, LOW); digitalWrite (RightPWM, LOW); } //  0 void ChangePosition1() //          ! { EncA = 1; if (EncA == 1 && EncB == 1) { EncA = 0; EncB = 0; Position++; } } //  1 void ChangePosition2() { EncB = 1; if (EncA == 1 && EncB == 1) { EncA = 0; EncB = 0; Position--; } } void loop() { //  ModBus //   state = slave.poll(au16data, 11); //   au16data[2] = Position;//  //   SetPosition = au16data[3];//  //   au16data[8] = slave.getInCnt(); //  au16data[9] = slave.getOutCnt(); //  au16data[10] = slave.getErrCnt();// if (SetPosition == Position) //     { myPID1.SetMode(MANUAL); myPID2.SetMode(MANUAL); Output1 = 0; Output2 = 0; digitalWrite (LeftPWM, LOW); digitalWrite (RightPWM, LOW); } if (SetPosition < Position) { myPID2.SetMode(AUTOMATIC); Setpoint2 = SetPosition; Input2 = Position; myPID2.Compute(); analogWrite (LeftPWM, Output2); digitalWrite (RightPWM, LOW); } if (SetPosition > Position) { myPID1.SetMode(AUTOMATIC); Setpoint1 = SetPosition; Input1 = Position; myPID1.Compute(); analogWrite (RightPWM, Output1); digitalWrite (LeftPWM, LOW); } } 

现在,它已部分地在计算机上。 这些人选择了SinplLight SCADA,以使其全部免费移动。 所以-这就是飞毛腿设置的外观。

图片

图片

图片

界面如下所示:

图片

结果,我们将引擎从属于飞毛腿中的滑块,平稳地加速和制动了引擎,如果您手动滚动电动机锚,则不允许这样做,然后返回。 谢谢您的关注。 这是混乱的总体视图。

图片

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


All Articles