рдПрдХ рд╕реАрдПрдирд╕реА рдбреНрд░рд╛рдЗрд╡ рд╣рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЦрд░реНрдЪ рдХрд░рддреА рд╣реИ

рдЗрддрдиреА рджреЗрд░ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдХ рдХрд▓реЗрдХреНрдЯрд░ рдореЛрдЯрд░ рдкрд░ рд╕реАрдПрдирд╕реА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдбреНрд░рд╛рдЗрд╡ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рдерд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде, рдФрд░ рдпрд╣ рдХрд┐ рдореЙрдбрдмрд╕ рдЖрд░рдЯреАрдпреВ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдерд╛, Arduino UNO, L298N рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░, 12V рдХреЗ рд▓рд┐рдП AEG рдХрд╛рд░ рд╕реАрдЯ рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдХрд▓реЗрдХреНрдЯрд░ рдореЛрдЯрд░, рдлреЛрдЯреЛ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ 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/hi410931/


All Articles