ajuste firmware pulverizador driver 2 canais

This commit is contained in:
Diego Freitas 2026-04-01 14:03:04 -03:00
parent e03d84b498
commit 23a64b93ec
4 changed files with 49 additions and 75 deletions

View File

@ -609,11 +609,8 @@ namespace AgroBase.Models.Modules
Mandatorio = true, Mandatorio = true,
Funcoes = new List<FuncoesPinout>() Funcoes = new List<FuncoesPinout>()
{ {
FuncoesPinout.ENA, FuncoesPinout.IN1,
FuncoesPinout.CS, FuncoesPinout.IN2,
FuncoesPinout.INA,
FuncoesPinout.INB,
FuncoesPinout.PWM,
}, },
ValoresLeituras = new List<SensorValoresLeituraModel>() ValoresLeituras = new List<SensorValoresLeituraModel>()
{ {
@ -660,11 +657,8 @@ namespace AgroBase.Models.Modules
Mandatorio = true, Mandatorio = true,
Funcoes = new List<FuncoesPinout>() Funcoes = new List<FuncoesPinout>()
{ {
FuncoesPinout.ENA, FuncoesPinout.IN1,
FuncoesPinout.CS, FuncoesPinout.IN2,
FuncoesPinout.INA,
FuncoesPinout.INB,
FuncoesPinout.PWM,
}, },
ValoresLeituras = new List<SensorValoresLeituraModel>() ValoresLeituras = new List<SensorValoresLeituraModel>()
{ {
@ -1399,22 +1393,13 @@ namespace AgroBase.Models.Modules
(byte)(conectar ? 1 : 0), (byte)(conectar ? 1 : 0),
(byte)Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha, (byte)Variaveis.OperacaoEmAndamento.Parametros.Controle.AtuPressaoLinha,
(byte)Sensor_ID_Num, (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.ComponenteID == ID && x.Funcao == FuncoesPinout.IN1)?.Pino ?? PinoutUtils.PINO_INVALIDO),
(byte)(pinout.Pinos.FirstOrDefault(x => x.Funcao == FuncoesPinout.CS)?.Pino ?? PinoutUtils.PINO_INVALIDO), (byte)(pinout.Pinos.FirstOrDefault(x => x.ComponenteID == ID && x.Funcao == FuncoesPinout.IN2)?.Pino ?? PinoutUtils.PINO_INVALIDO),
};
List<byte> config2 = new List<byte>()
{
(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),
}; };
return new List<(CanMessagePosicaoDados, byte[])>() return new List<(CanMessagePosicaoDados, byte[])>()
{ {
(CanMessagePosicaoDados.Config1, config1.ToArray()), (CanMessagePosicaoDados.Config1, config1.ToArray()),
(CanMessagePosicaoDados.Config2, config2.ToArray()),
}; };
} }

View File

@ -434,7 +434,9 @@ namespace AgroBase.Models.Modules
LeituraAngulo, LeituraAngulo,
Cooler, Cooler,
QtdPulsos, QtdPulsos,
Periodo Periodo,
IN1,
IN2
} }
public static class PinoutUtils public static class PinoutUtils

View File

@ -108,8 +108,8 @@ BicoPulverizador_v2* ObterBicoPorId(uint8_t idNum) {
#pragma endregion #pragma endregion
#pragma region BOMBAS #pragma region BOMBAS
BombaPressurizadora_v2 sBMB_Linha("BMBLN", 51, 40, 38, 37, 36, 39, TiposBarramentos::CONTROLADOR, 0, &sPRS_Linha); BombaPressurizadora_v2 sBMB_Linha("BMBLN", 51, 36, 1, 37, 2, TiposBarramentos::CONTROLADOR, Sentido::Horario, &sPRS_Linha);
BombaPressurizadora_v2 sBMB_Agitador("BMBAGT", 52, 6, 7, 15, 16, 17, TiposBarramentos::CONTROLADOR, 1); BombaPressurizadora_v2 sBMB_Agitador("BMBAGT", 52, 38, 3, 39, 4, TiposBarramentos::CONTROLADOR, Sentido::Horario);
BombaPressurizadora_v2* ObterBombaPorId(uint8_t idNum) { BombaPressurizadora_v2* ObterBombaPorId(uint8_t idNum) {
switch (idNum) { switch (idNum) {

View File

@ -12,24 +12,22 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
BombaPressurizadora_v2( BombaPressurizadora_v2(
const String& id, const String& id,
uint8_t idNum, uint8_t idNum,
int pinoEN, int pinoIN1,
int pinoCS, int canalIN1,
int pinoINA, int pinoIN2,
int pinoINB, int canalIN2,
int pinoPWM,
TiposBarramentos barramento = CONTROLADOR, TiposBarramentos barramento = CONTROLADOR,
int canalPwm = 0, Sentido sentido = Sentido::Horario,
SensorPressao_v2* sensor = nullptr, SensorPressao_v2* sensor = nullptr,
int pressaoInicial = 0 int pressaoInicial = 0
) )
: _ID(id), : _ID(id),
ID_Num(idNum), ID_Num(idNum),
_pinoEN(pinoEN, barramento, _OUTPUT), _pinoIN1(pinoIN1, barramento, _PWM),
_pinoCS(pinoCS, barramento, _INPUT), _pinoIN2(pinoIN2, barramento, _PWM),
_pinoINA(pinoINA, barramento, _OUTPUT), _canalIN1(canalIN1),
_pinoINB(pinoINB, barramento, _OUTPUT), _canalIN2(canalIN2),
_pinoPWM(pinoPWM, barramento, _PWM), _sentido(sentido),
_canal(canalPwm),
sensorPressao(sensor), sensorPressao(sensor),
_PressaoSP(pressaoInicial) { _PressaoSP(pressaoInicial) {
} }
@ -37,13 +35,13 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
String _ID; String _ID;
uint8_t ID_Num = 0; uint8_t ID_Num = 0;
PinoModel _pinoEN; PinoModel _pinoIN1;
PinoModel _pinoCS; PinoModel _pinoIN2;
PinoModel _pinoINA;
PinoModel _pinoINB; int _canalIN1 = 1;
PinoModel _pinoPWM; int _canalIN2 = 2;
int _canal = 0; Sentido _sentido = Sentido::Horario;
float _Kp = 3.0; float _Kp = 3.0;
float _Ki = 2.2; float _Ki = 2.2;
@ -79,23 +77,20 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
MalhaFechada = (sensorPressao != nullptr); MalhaFechada = (sensorPressao != nullptr);
_pinoEN.Conectar(false); _pinoIN1.Conectar(0);
_pinoCS.Conectar(); if (_pinoIN1.Definido()) {
_pinoINA.Conectar(false); ledcSetup(_canalIN1, 1000, 10);
_pinoINB.Conectar(true); ledcAttachPin(_pinoIN1.num, _canalIN1);
_pinoPWM.Conectar(0); ledcWrite(_canalIN1, 0);
}
if (_pinoPWM.Definido()) { _pinoIN2.Conectar(0);
ledcSetup(_canal, 1000, 10); if (_pinoIN2.Definido()) {
ledcAttachPin(_pinoPWM.num, _canal); ledcSetup(_canalIN2, 1000, 10);
ledcWrite(_canal, 0); ledcAttachPin(_pinoIN2.num, _canalIN2);
ledcWrite(_canalIN2, 0);
} }
Iniciado = Iniciado = _pinoIN1.Definido() && _pinoIN2.Definido();
_pinoEN.Definido() &&
_pinoINA.Definido() &&
_pinoINB.Definido() &&
_pinoPWM.Definido();
if (Iniciado) { if (Iniciado) {
_EstadoControle = Estado::Desligado; _EstadoControle = Estado::Desligado;
@ -116,14 +111,12 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
} }
_EstadoControle = Estado::Desligado; _EstadoControle = Estado::Desligado;
AplicarSaida(false, 0); ledcWrite(_canalIN1, 0);
ledcWrite(_canalIN2, 0);
_pinoPWM.Desconectar();
_pinoEN.Desconectar();
_pinoCS.Desconectar();
_pinoINA.Desconectar();
_pinoINB.Desconectar();
_pinoIN1.Desconectar();
_pinoIN2.Desconectar();
PotenciaLeitura = 0; PotenciaLeitura = 0;
PercentualPotenciaLeitura = 0; PercentualPotenciaLeitura = 0;
EstadoLeitura = Estado::Desligado; EstadoLeitura = Estado::Desligado;
@ -181,7 +174,7 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
} }
} }
AplicarSaida(_EstadoControle == Estado::Desligado, PotenciaLeitura); AplicarSaida(_EstadoControle == Estado::Ligado, PotenciaLeitura);
AtualizarLeitura(); AtualizarLeitura();
} }
@ -251,19 +244,13 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
void AplicarSaida(bool ligado, int pwm) { void AplicarSaida(bool ligado, int pwm) {
if (!Iniciado && pwm != 0) return; if (!Iniciado && pwm != 0) return;
_pinoEN.set(ligado); if (!ligado) {
if (ligado) {
_pinoINA.set(false);
_pinoINB.set(true);
} else {
_pinoINA.set(false);
_pinoINB.set(false);
pwm = 0; pwm = 0;
} }
pwm = LimitarPWM(pwm); pwm = LimitarPWM(pwm);
ledcWrite(_canal, pwm); ledcWrite(_canalIN1, _sentido == Sentido::Horario ? pwm : 0);
ledcWrite(_canalIN2, _sentido == Sentido::Horario ? 0 : pwm);
} }
int LimitarPWM(int valor) { int LimitarPWM(int valor) {
@ -275,7 +262,7 @@ class BombaPressurizadora_v2 : public ComponenteCAN {
void AtualizarLeitura() { void AtualizarLeitura() {
if (!Iniciado) return; if (!Iniciado) return;
EstadoLeitura = _pinoEN.get() ? Ligado : Desligado; EstadoLeitura = (PotenciaLeitura > 0 && _EstadoControle == Estado::Ligado) ? Estado::Ligado : Estado::Desligado;
PercentualPotenciaLeitura = (RampaMax > 0) PercentualPotenciaLeitura = (RampaMax > 0)
? (PotenciaLeitura / (double)RampaMax) * 100.0 ? (PotenciaLeitura / (double)RampaMax) * 100.0
: 0.0; : 0.0;