Referenciamento com uso do sensor AS5600

This commit is contained in:
Diego Freitas 2026-03-03 14:31:59 -03:00
parent 84962cb7de
commit 15c0bb29cd
1 changed files with 59 additions and 9 deletions

View File

@ -353,12 +353,62 @@ namespace AgroBase.Models.Modules
public async Task ReferenciaMotor()
{
if (Referenciando || !Inicializado) return;
Referenciando = true;
await Task.Delay(1000);
Referenciado = false;
bool sensorAngRealConectado = (SensorAnguloReal?.Inicializado ?? false);
if (sensorAngRealConectado)
{
Referenciado = await ReferenciaMotorAbsoluto();
}
else
{
Referenciado = await ReferenciaMotorRelativo();
}
if (Referenciado)
{
await SetZero();
Console.WriteLine($"[DIR {Mod_ID}] - Referenciamento Concluído!");
}
else
{
Console.WriteLine($"[DIR {Mod_ID}] - Referenciamento Falhou!");
}
Referenciando = false;
UltimoReferenciamento = DateTime.Now;
}
public async Task<bool> ReferenciaMotorAbsoluto()
{
double angControle = Math.Abs(AnguloReal);
if (angControle <= 0.8)
{
Console.WriteLine($"[DIR {Mod_ID}] - RefAbs: AnguloReal já dentro da tolerância ({AnguloReal:F2}°).");
return true;
}
int velocidade = 10;
Sentido _sentido = AnguloReal > 0 ? Sentido.Antihorario : Sentido.Horario;
MKS057DCanService.Movimento(_EnderecoCAN_Tx, _EnderecoCAN_Rx, angControle, velocidade, _sentido);
bool AtingiuSP() => AtingiuAnguloSP;
await FuncoesGlobais.AguardarCondicaoAsync(AtingiuSP, 5000, 200);
return AtingiuSP();
}
public async Task<bool> ReferenciaMotorRelativo()
{
await SetZero();
bool Sucesso = false;
@ -409,21 +459,18 @@ namespace AgroBase.Models.Modules
anguloAnterior = AnguloLeitura;
Sucesso = AnguloEntrada != 9999 && AnguloSaida != 9999 && (FuncoesMatematicas.ValorEstaEntre(Leitura.AnguloEstimado(), _anguloSP, 0.5));
if (Sucesso)
{
await SetZero();
Console.WriteLine($"[DIR {Mod_ID}] - Referenciamento Concluído!");
Referenciado = true;
}
DateTime Inicio = DateTime.Now;
bool NovoDado() => MKS057DCanService.DadosLeitura.Any(x => x.EnderecoRx == _EnderecoCAN_Rx && x.UltimoComandoRecebido > Inicio);
await FuncoesGlobais.AguardarCondicaoAsync(NovoDado, 500, 100);
}
Referenciando = false;
if (!Sucesso)
{
Console.WriteLine($"[DIR {Mod_ID}] - ReferenciaMotorRelativo falhou (timeout ou não inicializado). Entrada={AnguloEntrada}, Saida={AnguloSaida}");
}
UltimoReferenciamento = DateTime.Now;
return Sucesso;
}
private int DefineVelocidadeReferenciamento()
@ -477,6 +524,9 @@ namespace AgroBase.Models.Modules
}
public void RequisitarDadosSensoresExternos()
{
@ -490,7 +540,7 @@ namespace AgroBase.Models.Modules
{
if (SensorAnguloReal != null)
{
double angulo = SensorAnguloReal.ValoresLeituras.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? double.NaN;
double angulo = SensorAnguloReal.ValoresLeituras?.FirstOrDefault(x => x.funcao == FuncoesPinout.LeituraAngulo)?.atual?.valor ?? double.NaN;
if (!double.IsNaN(angulo))
{
double bruto = angulo + OffsetAnguloReal;