2017-01-18 2 views
1

Je suis en train de tourner le moteur (RMCS-220X couple élevé encodeur DC Servo moteur et pilote) en utilisant l'interface i2c de framboise pi 2 avec le code suivant:bibliothèque wiringPi de Raspberry Pi 2 pour faire tourner le moteur servo DC bidirectionnel

#include <stdio.h> 
#include <wiringPi.h> 
#include <wiringPiI2C.h> 
#define Motoraddrs 0x08 //motor address 

int main(void){ 
int I2C_fd; 

wiringPiSetupGpio(); 
wiringPiSetup(); 

I2C_fd = wiringPiI2CSetup(Motoraddrs); 

wiringPiI2CWriteReg16(I2C_fd, 0x01, 0xff);//spins from low speed of 0x01 to 
              max 0xff in right side 
delay(100); 

return 0; 
} 

Les octets écrits dans la fonction de câblagePiI2CWriteReg16 sont ceux du code suivant qui sont donnés dans la fiche technique du moteur.

/* Voici un exemple d'utilisation de la mise à jour de la variable de vitesse sur la RMCS-220x de transmettre 255 */

I2C_Start(0x10 + 0); // send the slave address of the RMCS-220x and write 
         bit 0     
I2C_Write(1); // send the command variable for speed 
I2C_Write(255); // send LSB of 255 
I2C_Write(0); // send MSB of 0 to and so Speed of forward 255 
I2C_Stop(); // send I2C stop 

/* Voici un exemple d'utilisation de la mise à jour de la variable de vitesse sur la RMCS-220x pour inverser 255 et en les lisant */

I2C_Start(0x10 + 0); // send the slave address of the RMCS-220x and 
         write bit 0 
I2C_Write(1); // send the command variable for speed 
I2C_Write(1); // send LSB of 1 
I2C_Write(255); // send MSB of 255 to and so Speed of backward 255 
I2C_Rep_Start(0x10 + 1); // send I2C address with rep start and 1 to read 
speed = I2C_Read_Ack(); // read speed LSB byte and ack 
speed = I2C_Read_Nak(); // read speed MSB byte and don’t ack 
I2C_Stop(); // send I2C stop 

dans mon cas avec le code ci-dessus en utilisant la bibliothèque wiringPi, me permettant de faire tourner le moteur dans une seule direction (à droite). Maintenant, je veux le faire pivoter dans la direction gauche aussi.

J'apprécierais vraiment vos suggestions.

Répondre

0

Vous devez utiliser la valeur signée en 2 derniers octets de données:

à tourner en arrière:

... 

I2C_Write(1); // send the command variable for speed 

I2C_Write(1); // send LSB of 1 

I2C_Write(255);// send MSB of 255 to and so Speed of backward 255 

... 

à tourner vers l'avant:

... 

I2C_Write(1);// send the command variable for speed 
I2C_Write(255);// send LSB of 255 
I2C_Write(0);// send MSB of 0 to and so Speed of forward 255 

...