.: robotitaly.NET :. - la community italiana sulla robotica  

Vai indietro   .: robotitaly.NET :. - la community italiana sulla robotica > Microcontrollori > Arduino

Arduino Un progetto Open Source, derivato da Wiring. E' un microcontrollore economico e potente, basato su Atmel ATmega. Il linguaggio di programmazione e' simile al C ma semplificato.

Rispondi
 
Strumenti della discussione Modalità di visualizzazione
  #1  
Vecchio 10-21-2014, 11:39 AM
M4RL3Y M4RL3Y non è collegato
Roboter
 
Registrato dal: Jan 2009
Messaggi: 31
predefinito Motori DC con encoder

Salve ho un problema con la comunicazione di un software con dei motori con encoder.

Allora ho un software che mi controlla dei motori passo passo tramite arduino inviando dei comandi di STEP e DIRECTION ad un driver per motori passo passo e fin qui tutto ok ! il punto è che vorrei sostituire i motori passo passo con dei motori DC con encoder rotativo.

i motori sono questi:

Anche utilizzando un'altro arduino solo per controllare i motori quello che interessa è che dal primo arduino arriva il segnale di STEP e il segnale di DIREZIONE che devono essere controllati dal secondo arduino che mi fa muovere il motore per ogni STEP che arriva una "Tacca" dell'encoder e inverte la direzione in base al segnare ricevuto sul comando di DIREZIONE .

Potreste aiutarmi col codice ???
Rispondi quotando
  #2  
Vecchio 10-21-2014, 03:19 PM
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Moderator
 
Registrato dal: Mar 2006
residenza: Roma
Messaggi: 2,133
Blog Entries: 1
predefinito

Quote:
Originariamente inviata da M4RL3Y Visualizza il messaggio
Anche utilizzando un'altro arduino solo per controllare i motori quello che interessa è che dal primo arduino arriva il segnale di STEP e il segnale di DIREZIONE che devono essere controllati dal secondo arduino che mi fa muovere il motore per ogni STEP che arriva una "Tacca" dell'encoder e inverte la direzione in base al segnare ricevuto sul comando di DIREZIONE .
Scordati di farlo con Arduino, come minimo ti serve un dsPIC33 del tipo Motion Control con relativo ponte H idoneo per il controllo LAP.
Per non parlare della quantità di codice necessaria per implementare un controllo di questo tipo.
Per farti capire meglio, come minimo si parla di un hardware composto da questa scheda e da una coppia di questi ponti H, ogni scheda può controllare due motori.
Rispondi quotando
  #3  
Vecchio 10-21-2014, 06:30 PM
M4RL3Y M4RL3Y non è collegato
Roboter
 
Registrato dal: Jan 2009
Messaggi: 31
predefinito

Grazie per la risposta rapida, allora siccome questi due motori hanno già un'elettronica di controllo che comunica via seriale devo cercare di inviare i comandi ai motori tramite la porta seriale utilizzando arduino, il dispositivo in questione è una montatura motorizzata per telescopi e macchine fotografiche della skywatcher modello Merlin , magari qualcuno già ha usato il protocollo con arduino ... Ho trovato anche alcuni sketch opensource ma vanno in errore quando provo a caricarli in arduino ... Magari mi conviene partire da quello e col vostro aiuto potrei riuscirci ...
Rispondi quotando
  #4  
Vecchio 10-22-2014, 10:15 AM
M4RL3Y M4RL3Y non è collegato
Roboter
 
Registrato dal: Jan 2009
Messaggi: 31
predefinito

Ho trovato questa documentazione, spero che qualche anima pia mi aiuti a scrivere un programma per arduino in grado di comunicare con la testa motorizzata merlin via seriale .

vorrei capire quali sono i comandi per muovere di 1 "STEP" avanti o indietro i motori, non mi interessano le coordinate o posizione assolute, mi interessa che dal punto in cui si trova,io posso far avanzare di uno step l'asse selezionato.

La testa motorizzata in questione è questa:



Merlin/Orion protocol

The head uses a simple ascii serial protocol; the serial line uses standard settings: 9600 8N1 (9600 bauds, 8 bits data, no parity, 1 stop bit). The head waits for incoming commands, and send response to them. The 2 axis are identical, and uses the same commands. They both wait for incoming commands; depending of the first value (see below), the command will be sent to one or the other axis.

A commands always starts with ':', and ends with '\r'. The head response always starts with '=', and also ends with '\r'. As TX/RX lines are wired together, the controller has to first readback its own command, before reading the head response. In the following documentation, the command readback is omitted, as the ':', '=' and '\r' chars.


Ultima modifica di M4RL3Y; 10-22-2014 a 10:20 AM
Rispondi quotando
  #5  
Vecchio 10-22-2014, 10:57 AM
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Moderator
 
Registrato dal: Mar 2006
residenza: Roma
Messaggi: 2,133
Blog Entries: 1
predefinito

Come prima cosa c'è da verificare se l'hardware realmente risponde a quel protocollo, dato che è sotto forma di stringhe ASCII è facile fare delle prove tramite un software emulazione terminale su PC.
Da verificare se l'ingresso è RS232 o UART TTL in modo da utilizzare il corretto adattatore USB.
Rispondi quotando
  #6  
Vecchio 10-22-2014, 12:18 PM
M4RL3Y M4RL3Y non è collegato
Roboter
 
Registrato dal: Jan 2009
Messaggi: 31
predefinito

Allora qui è spiegato come collegarlo alla seriale :
http://www.autopano.net/wiki-fr/acti...rlin_Interface

a quanto ho capito è una TTL 5V

ma comunque a me non interessa collegarlo alla seriale del pc ma bensi ad arduino.




ho trovato questo esempio nella libreria merlin-mount per arduino ma non riesco a caricarlo mi da un sacco di errori ...


codice:
/*
 * MerlinExample
 *
 * Basic test code for the Arduino MerlinMount library.
 *
 */

#include "WProgram.h"
#include <merlin_mount.h>

void setup() {
  //start serial used to communicate with Merlin/Orion mount
  Serial.begin(9600);
  
  //Init the Merlin mount and reset start/end position.
  merlin.init();

}



void  loop() {   // run over and over again
	long pos_pitch = 0;
	long pos_yaw = 0;
	
	//Start to move downward
	merlin.startMoving(AXIS_PITCH, DIR_DOWN);
	delay(5000);
	
	//Start to move left as well
	merlin.startMoving(AXIS_PITCH, DIR_LEFT);
	delay(5000);

	//Stop moving
	merlin.stopMoving(AXIS_YAW);
	merlin.stopMoving(AXIS_PITCH);
	
	//Read current position
	pos_pitch = merlin.readAxisPosition(AXIS_PITCH);
	pos_yaw = merlin.readAxisPosition(AXIS_YAW);
	
	pos_yaw = pos_yaw + merlin.fromAngle(20.0);
	
	//Move 20 degrees
	merlin.driveToPositionBothAxis(pos_yaw, pos_pitch, SYNC_SYNCHRONY);
	
	delay(5000);

}
Rispondi quotando
Rispondi

Segnalibri

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilie sono attive
Il codice IMG è attivo
il codice HTML è disattivato

Salto del forum


Tutti gli orari sono GMT. Attualmente sono le 02:17 AM.


Powered by vBulletin versione 3.8.7
Copyright ©: 2000 - 2018, Jelsoft Enterprises Ltd.