diff --git a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs index 36905ed1e..61e43a31d 100644 --- a/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs +++ b/AgroBase/AgroBase/Models/Modules/AtuadorModel.cs @@ -609,11 +609,8 @@ namespace AgroBase.Models.Modules Mandatorio = true, Funcoes = new List() { - FuncoesPinout.ENA, - FuncoesPinout.CS, - FuncoesPinout.INA, - FuncoesPinout.INB, - FuncoesPinout.PWM, + FuncoesPinout.IN1, + FuncoesPinout.IN2, }, ValoresLeituras = new List() { @@ -660,11 +657,8 @@ namespace AgroBase.Models.Modules Mandatorio = true, Funcoes = new List() { - FuncoesPinout.ENA, - FuncoesPinout.CS, - FuncoesPinout.INA, - FuncoesPinout.INB, - FuncoesPinout.PWM, + FuncoesPinout.IN1, + FuncoesPinout.IN2, }, ValoresLeituras = new List() { @@ -1399,22 +1393,13 @@ namespace AgroBase.Models.Modules (byte)(conectar ? 1 : 0), (byte)Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha, (byte)Sensor_ID_Num, - (byte)(pinout.Pinos.FirstOrDefault(x => x.ComponenteID == ID && x.Funcao == FuncoesPinout.ENA)?.Pino ?? PinoutUtils.PINO_INVALIDO), - (byte)(pinout.Pinos.FirstOrDefault(x => x.Funcao == FuncoesPinout.CS)?.Pino ?? PinoutUtils.PINO_INVALIDO), - }; - - List config2 = new List() - { - (byte)Componente, - (byte)(pinout.Pinos.FirstOrDefault(x => x.Funcao == FuncoesPinout.INA)?.Pino ?? PinoutUtils.PINO_INVALIDO), - (byte)(pinout.Pinos.FirstOrDefault(x => x.Funcao == FuncoesPinout.INB)?.Pino ?? PinoutUtils.PINO_INVALIDO), - (byte)(pinout.Pinos.FirstOrDefault(x => x.Funcao == FuncoesPinout.PWM)?.Pino ?? PinoutUtils.PINO_INVALIDO), + (byte)(pinout.Pinos.FirstOrDefault(x => x.ComponenteID == ID && x.Funcao == FuncoesPinout.IN1)?.Pino ?? PinoutUtils.PINO_INVALIDO), + (byte)(pinout.Pinos.FirstOrDefault(x => x.ComponenteID == ID && x.Funcao == FuncoesPinout.IN2)?.Pino ?? PinoutUtils.PINO_INVALIDO), }; return new List<(CanMessagePosicaoDados, byte[])>() { (CanMessagePosicaoDados.Config1, config1.ToArray()), - (CanMessagePosicaoDados.Config2, config2.ToArray()), }; } diff --git a/AgroBase/AgroBase/Models/Modules/PinoutModel.cs b/AgroBase/AgroBase/Models/Modules/PinoutModel.cs index d374e659e..eb3138197 100644 --- a/AgroBase/AgroBase/Models/Modules/PinoutModel.cs +++ b/AgroBase/AgroBase/Models/Modules/PinoutModel.cs @@ -434,7 +434,9 @@ namespace AgroBase.Models.Modules LeituraAngulo, Cooler, QtdPulsos, - Periodo + Periodo, + IN1, + IN2 } public static class PinoutUtils diff --git a/Firmware/Atuador/Atuador_v13/Atuador_v13.ino b/Firmware/Atuador/Atuador_v13/Atuador_v13.ino index d119f3552..d20401bdc 100644 --- a/Firmware/Atuador/Atuador_v13/Atuador_v13.ino +++ b/Firmware/Atuador/Atuador_v13/Atuador_v13.ino @@ -108,8 +108,8 @@ BicoPulverizador_v2* ObterBicoPorId(uint8_t idNum) { #pragma endregion #pragma region BOMBAS -BombaPressurizadora_v2 sBMB_Linha("BMBLN", 51, 40, 38, 37, 36, 39, TiposBarramentos::CONTROLADOR, 0, &sPRS_Linha); -BombaPressurizadora_v2 sBMB_Agitador("BMBAGT", 52, 6, 7, 15, 16, 17, TiposBarramentos::CONTROLADOR, 1); +BombaPressurizadora_v2 sBMB_Linha("BMBLN", 51, 36, 1, 37, 2, TiposBarramentos::CONTROLADOR, Sentido::Horario, &sPRS_Linha); +BombaPressurizadora_v2 sBMB_Agitador("BMBAGT", 52, 38, 3, 39, 4, TiposBarramentos::CONTROLADOR, Sentido::Horario); BombaPressurizadora_v2* ObterBombaPorId(uint8_t idNum) { switch (idNum) { diff --git a/Firmware/Modulos/BombaPressurizadoraModel_v2.h b/Firmware/Modulos/BombaPressurizadoraModel_v2.h index c04c36c99..88a319071 100644 --- a/Firmware/Modulos/BombaPressurizadoraModel_v2.h +++ b/Firmware/Modulos/BombaPressurizadoraModel_v2.h @@ -12,24 +12,22 @@ class BombaPressurizadora_v2 : public ComponenteCAN { BombaPressurizadora_v2( const String& id, uint8_t idNum, - int pinoEN, - int pinoCS, - int pinoINA, - int pinoINB, - int pinoPWM, + int pinoIN1, + int canalIN1, + int pinoIN2, + int canalIN2, TiposBarramentos barramento = CONTROLADOR, - int canalPwm = 0, + Sentido sentido = Sentido::Horario, SensorPressao_v2* sensor = nullptr, int pressaoInicial = 0 ) : _ID(id), ID_Num(idNum), - _pinoEN(pinoEN, barramento, _OUTPUT), - _pinoCS(pinoCS, barramento, _INPUT), - _pinoINA(pinoINA, barramento, _OUTPUT), - _pinoINB(pinoINB, barramento, _OUTPUT), - _pinoPWM(pinoPWM, barramento, _PWM), - _canal(canalPwm), + _pinoIN1(pinoIN1, barramento, _PWM), + _pinoIN2(pinoIN2, barramento, _PWM), + _canalIN1(canalIN1), + _canalIN2(canalIN2), + _sentido(sentido), sensorPressao(sensor), _PressaoSP(pressaoInicial) { } @@ -37,13 +35,13 @@ class BombaPressurizadora_v2 : public ComponenteCAN { String _ID; uint8_t ID_Num = 0; - PinoModel _pinoEN; - PinoModel _pinoCS; - PinoModel _pinoINA; - PinoModel _pinoINB; - PinoModel _pinoPWM; + PinoModel _pinoIN1; + PinoModel _pinoIN2; + + int _canalIN1 = 1; + int _canalIN2 = 2; - int _canal = 0; + Sentido _sentido = Sentido::Horario; float _Kp = 3.0; float _Ki = 2.2; @@ -79,23 +77,20 @@ class BombaPressurizadora_v2 : public ComponenteCAN { MalhaFechada = (sensorPressao != nullptr); - _pinoEN.Conectar(false); - _pinoCS.Conectar(); - _pinoINA.Conectar(false); - _pinoINB.Conectar(true); - _pinoPWM.Conectar(0); - - if (_pinoPWM.Definido()) { - ledcSetup(_canal, 1000, 10); - ledcAttachPin(_pinoPWM.num, _canal); - ledcWrite(_canal, 0); + _pinoIN1.Conectar(0); + if (_pinoIN1.Definido()) { + ledcSetup(_canalIN1, 1000, 10); + ledcAttachPin(_pinoIN1.num, _canalIN1); + ledcWrite(_canalIN1, 0); + } + _pinoIN2.Conectar(0); + if (_pinoIN2.Definido()) { + ledcSetup(_canalIN2, 1000, 10); + ledcAttachPin(_pinoIN2.num, _canalIN2); + ledcWrite(_canalIN2, 0); } - Iniciado = - _pinoEN.Definido() && - _pinoINA.Definido() && - _pinoINB.Definido() && - _pinoPWM.Definido(); + Iniciado = _pinoIN1.Definido() && _pinoIN2.Definido(); if (Iniciado) { _EstadoControle = Estado::Desligado; @@ -116,14 +111,12 @@ class BombaPressurizadora_v2 : public ComponenteCAN { } _EstadoControle = Estado::Desligado; - AplicarSaida(false, 0); - - _pinoPWM.Desconectar(); - _pinoEN.Desconectar(); - _pinoCS.Desconectar(); - _pinoINA.Desconectar(); - _pinoINB.Desconectar(); + ledcWrite(_canalIN1, 0); + ledcWrite(_canalIN2, 0); + _pinoIN1.Desconectar(); + _pinoIN2.Desconectar(); + PotenciaLeitura = 0; PercentualPotenciaLeitura = 0; EstadoLeitura = Estado::Desligado; @@ -181,7 +174,7 @@ class BombaPressurizadora_v2 : public ComponenteCAN { } } - AplicarSaida(_EstadoControle == Estado::Desligado, PotenciaLeitura); + AplicarSaida(_EstadoControle == Estado::Ligado, PotenciaLeitura); AtualizarLeitura(); } @@ -251,19 +244,13 @@ class BombaPressurizadora_v2 : public ComponenteCAN { void AplicarSaida(bool ligado, int pwm) { if (!Iniciado && pwm != 0) return; - _pinoEN.set(ligado); - - if (ligado) { - _pinoINA.set(false); - _pinoINB.set(true); - } else { - _pinoINA.set(false); - _pinoINB.set(false); + if (!ligado) { pwm = 0; } pwm = LimitarPWM(pwm); - ledcWrite(_canal, pwm); + ledcWrite(_canalIN1, _sentido == Sentido::Horario ? pwm : 0); + ledcWrite(_canalIN2, _sentido == Sentido::Horario ? 0 : pwm); } int LimitarPWM(int valor) { @@ -275,7 +262,7 @@ class BombaPressurizadora_v2 : public ComponenteCAN { void AtualizarLeitura() { if (!Iniciado) return; - EstadoLeitura = _pinoEN.get() ? Ligado : Desligado; + EstadoLeitura = (PotenciaLeitura > 0 && _EstadoControle == Estado::Ligado) ? Estado::Ligado : Estado::Desligado; PercentualPotenciaLeitura = (RampaMax > 0) ? (PotenciaLeitura / (double)RampaMax) * 100.0 : 0.0;