Vai al contenuto

Controllo di un motore DC brushless con driver integrato

Home Forum Controllori SlimLine e Netsyst (LogicLab) Controllo di un motore DC brushless con driver integrato

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Autore
    Post
  • #60950
    Giovanni
    Partecipante

    Un amico mi ha chiesto di esplorare la possibilità di sviluppare un sistema di guida automatica per un robot cingolato e durante le ferie, da buon appassionato, sto esplorando le mille insidie che si celano dietro il controllo automatico di tale tipologia di robot. Di questo robot esiste già una versione dedicata a un compito molto diverso, ma ora l’esigenza è di fare in modo che il robot si mantenga a distanza costante da oggetti approssimativamente rettilinei e lunghi anche più di quaranta metri (tipo pareti esterne di grossi fabbricati). Per questo motivo ho fatto acquistare all’amico un misuratore di distanza ad ultrasuoni 20/200 mm e l’hardware Elsist consigliatomi dal titolare per questo tipo di applicazione.

    I motori già presenti nelle precedenti versioni del robot sono dei DC brushless a 24 V con driver integrato, nati per essere controllabili tramite un potenziometro inserito fra una sorgente a 5 V e il morsetto del segnale di controllo (ovviamente con una GND in comune). Nelle precedenti versioni del robot tali motori erano invece controllati tramite Arduino ed encoder, ma in questo caso il mio amico aveva suggerito di controllarli direttamente in tensione (cosa che faccio tramite un modulo contenente due analog-out) in quanto l’eventuale funzione del robot richiede che marcino a velocità costante e sono accettabili anche grossi errori di velocità.

    La mia idea era, banalmente, di misurare tramite la sonda ad ultrasuoni la distanza dalla parete e di darla in pasto al PID di libreria in modo da poter generare un segnale differenziale fra i due cingoli e determinare la sterzata di correzione traiettoria. L’idea in effetti funziona, nonostante le difficoltà di controllo di un robot cingolato soggetto a molte non linearità, la più insidiosa delle quali è lo stick-slip (quando perde aderenza su un cingolo il PID corregge in modo crescente, e quando il cingolo riprende aderenza il robot s’intraversa di colpo e la sonda non riesce più a leggere gli ultrasuoni di ritorno dal muro a causa dell’angolo elevato). Ma anche il controllo dei brushless senza encoder si sta dimostrando meno semplice del previsto, perché l’elettronica di controllo dei motori, progettata per essere controllata tramite un potenziometro, sta mostrando di essere tutt’altro che lineare rispetto al segnale fornito dal modulo Elsist.

    Per questo motivo mi è venuto il dubbio che il controllo integrato del motore abbia bisogno anche del potenziale a 5 V per funzionare regolarmente, e qui vengo finalmente alla domanda. Su robot io ho a disposizione solo i 24 V della batteria, ma so che i moduli Elsist prendono l’alimentazione dalla CPU proprio a 5 V. È possibile prelevare una tensione a 5 V in qualche modo dalla CPU o da alcuni moduli ELSIST, e in caso di risposta affermativa come potrei fare in modo semplice a mandare tale tensione al morsetto + 5 V del motore?

    Inoltre, nel caso che io possa prelevare tale tensione a 5 V, il potenzia di GND è lo stesso che io ho su uno dei morsetti dell’uscita analogica del modulo ELSIST, o devo ponticellare il GND dell’uscita analogica con lo 0 V dell’alimentazione del PLC?

    #60953
    Sergio Bertana
    Amministratore del forum

    Interessante applicazione, leggendo la tua relazione e non essendomi mai cimentato con regolazione di robot cingolati posso solo riportare qualche mio pensiero, magari completamente errato.

    Per il problema dello sbandamento quando un cingolo perde aderenza si potrebbe inserire un controllo sulla soglia sull’errore e quando a causa dello slittamento l’errore di allineamento diventa grande si bloccano le regolazioni ID lavorando solo di proporzionale. Cosi si evita di accumulare errore integrativo che alla ripresa dell’aderenza sarà tutto da “scaricare”.

    Per il driver mi sembra di capire che sia predisposto per essere pilotato da un potenziometro mentre tu lo stai pilotando con un riferimento analogico 0-5V. A quanto posso avere visto nella mia esperienza gli ingressi analogici dei drivers sono sempre ad alta impedenza, quindi che tu lo alimenti con un potenziometro (Tra 0 e 5V) o con un ingresso analogico non dovrebbe cambiare assolutamente nulla.

    La prova che puoi fare è collegare il potenziometro e verificare con un multimetro all’ingresso analogico come varia la tensione la variazione dovrebbe essere lineare. Ma indipendentemente da tutto, quello che interessa è che la variazione di velocità sia lineare, dovresti provare variando il riferimento con l’uscita D/A tra 0 e 5V se i giri variano linearmente. Nel caso la variazione non fosse lineare dovresti utilizzare la funzione Linearize tra l’uscita del PID e la conversione D/A per linearizzarla. Il PID considera che l’azione di correzione sia lineare se invece al variare dell’uscita la velocità del motore non è lineare è impossibile stabilizzare il PID.

Stai visualizzando 2 post - dal 1 a 2 (di 2 totali)
  • Devi essere connesso per rispondere a questo topic.