ajuste firmware pulverizador driver 2 canais
This commit is contained in:
parent
e03d84b498
commit
23a64b93ec
|
|
@ -609,11 +609,8 @@ namespace AgroBase.Models.Modules
|
|||
Mandatorio = true,
|
||||
Funcoes = new List<FuncoesPinout>()
|
||||
{
|
||||
FuncoesPinout.ENA,
|
||||
FuncoesPinout.CS,
|
||||
FuncoesPinout.INA,
|
||||
FuncoesPinout.INB,
|
||||
FuncoesPinout.PWM,
|
||||
FuncoesPinout.IN1,
|
||||
FuncoesPinout.IN2,
|
||||
},
|
||||
ValoresLeituras = new List<SensorValoresLeituraModel>()
|
||||
{
|
||||
|
|
@ -660,11 +657,8 @@ namespace AgroBase.Models.Modules
|
|||
Mandatorio = true,
|
||||
Funcoes = new List<FuncoesPinout>()
|
||||
{
|
||||
FuncoesPinout.ENA,
|
||||
FuncoesPinout.CS,
|
||||
FuncoesPinout.INA,
|
||||
FuncoesPinout.INB,
|
||||
FuncoesPinout.PWM,
|
||||
FuncoesPinout.IN1,
|
||||
FuncoesPinout.IN2,
|
||||
},
|
||||
ValoresLeituras = new List<SensorValoresLeituraModel>()
|
||||
{
|
||||
|
|
@ -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<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),
|
||||
(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()),
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -434,7 +434,9 @@ namespace AgroBase.Models.Modules
|
|||
LeituraAngulo,
|
||||
Cooler,
|
||||
QtdPulsos,
|
||||
Periodo
|
||||
Periodo,
|
||||
IN1,
|
||||
IN2
|
||||
}
|
||||
|
||||
public static class PinoutUtils
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue