Senzor Rotacol SPI

Odpovědět
matie
Příspěvky: 3
Registrován: 31 říj 2017, 09:03
Reputation: 0

Senzor Rotacol SPI

Příspěvek od matie » 31 říj 2017, 09:22

dobry den,

Som arduino nadseny zaciatocnik. Poprosil by som skusenejsich pozriet sa na senzor 28PERCK od megatronu . Tento senzor komunikuje po zbernici SPI.
pouzil som nasledujuci program z netu pre arduino avsak senzor stale ukazuje nulu. Nemozem prist kde je chyba . Jazyk C zatial velmi neovladam. Pre skusenejsich by to teda mohol byt len trivialny problem.


#include <SPI.h>
#include <inttypes.h>

int CSn;
uint8_t readbuf[2];
void setup()
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

//initialise spi communications as 1MHz
CSn =10;
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.setDataMode(SPI_MODE1);
pinMode(CSn, OUTPUT);
digitalWrite(CSn, HIGH);

}


void loop()

{
//To Read the angle of the sensor we must send a read command for
//the appropriate register which for angles is x3FFF

//so to read from this register we must send 0b1111 0111 1111 1111


//this transfer will consist of two spi bytes each of 0xFF
digitalWrite(CSn, LOW);


uint8_t val = 0xFF;
SPI.transfer(val);


//Read in values
SPI.transfer(val);

//After 16 clock cycles Csn must be pulled high to reset some parts
//of the interface core
digitalWrite(CSn, HIGH);
digitalWrite(CSn,LOW);

//Now send a NOP 0b0000 0000 0000 0000and recieve the latest angle
val = 0x00;
readbuf[0]=SPI.transfer(val);


val = 0x00;
readbuf[1] = SPI.transfer(val);

digitalWrite(CSn, HIGH);
//Break down readbuf into its integer representation:

uint16_t angle = readbuf[0]&0b00111111;
angle = angle << 8;
angle = angle + readbuf[1];
//angle = 1000;
// print out the value you read:


Serial.println(angle);
delay(1500); // delay in between reads for stability
}

Wojta
Příspěvky: 184
Registrován: 22 črc 2017, 16:39
Reputation: 0

Re: Senzor Rotacol SPI

Příspěvek od Wojta » 31 říj 2017, 16:00

No. vidím tu toho docela hodně :D
Zaprvé, našel jste někde jak se se senzorem komunikuje? Zkuste poslat odkaz na tu stránku kde jste našel váš kód. Z datasheetu jsem vyčetl pouze toto:
SPI.png
SPI.png (32.6 KiB) Zobrazeno 4645 x
MOSI je to co posílá arduino (Master Out Slave In)
MISO je to co posílá senzor zpět (Master In Slave Out)

Nejspíše, jak to tedy z obrázku vypadá, se musí senzoru posílat 0xFF byty a on na ně odpovídá.
Zkusil bych tedy nejdřív naslouchat co vám senzor vrátí pomocí takového jednoduchého programu:

Kód: Vybrat vše

#include <SPI.h>
#include <inttypes.h>

int CSn;
uint16_t readbuf[2]; //senzor vrací 2x16bitů
void setup() 
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

//initialise spi communications as 1MHz
CSn =10;
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV16);
SPI.setDataMode(SPI_MODE1);
pinMode(CSn, OUTPUT);
digitalWrite(CSn, HIGH);

}


void loop() 

{
//Aktivuj senzor
digitalWrite(CSn, LOW);

//Zapíšeme první FF, na to senzor nic extra nevrací -> nic nečteme
SPI.transfer(0xFF);


//Zapíšeme 0xFFFF, senzor by nám měl vrátit první slovo, prvních 16b
readbuff[0] = SPI.transfer16(0xFFFF);

//Zapíšeme znovu 0xFFFF, senzor by nám měl druhé první slovo, druhých 16b
readbuff[1] = SPI.transfer16(0xFFFF);

//Zapíšeme poslední FF, senzor nám opět nic extra nevrací
SPI.transfer(0xFF);

//CS na 1 - nechceme dál komunikovat
digitalWrite(CSn, HIGH);

//Vypíšeme obě slova (4 byty)
Serial.print(readbuff[0], HEX);
Serial.print("   /   ");
Serial.print(readbuff[1], HEX);
Serial.print("   nebo dohromady pro přehlednost: ");
Serial.print(readbuff[0], HEX);
Serial.print(readbuff[1], HEX);
Serial.println();

delay(1500); // pauza
}
Tímhle můžete odzkoušet co se vám dostává zpátky a jak to reaguje na otáčení. Výsledky se vytisknou hexadecimálně, tak se vám bude líp zjišťovat co je v datech kde. Cíl je zjistit které bity obsahují hodnotu úhlu.

matie
Příspěvky: 3
Registrován: 31 říj 2017, 09:03
Reputation: 0

Re: Senzor Rotacol SPI

Příspěvek od matie » 02 lis 2017, 12:24

dakujem za testovaci kod s popisom. Cele to ma logiku,ale bohuzial senzor mi ukazuje aj stymto programom stale nulu.
ten moj prvy kod som vyguglil tu: https://github.com/PeterQFR/SPI-encoder-example.
Ziadny iny manual k senzoru nemam. Iba ten, ktory ste tiez nasiel u megatronu.Senzor mam priamo novy od megatronu.

matie
Příspěvky: 3
Registrován: 31 říj 2017, 09:03
Reputation: 0

Re: Senzor Rotacol SPI

Příspěvek od matie » 03 lis 2017, 10:14

senzor uz bezi,kontaktoval som vyrobcu.Stacila mi info ze senzor ma chip mlx90316.z datasheetu chipu uz to slo hladko.

Wojta
Příspěvky: 184
Registrován: 22 črc 2017, 16:39
Reputation: 0

Re: Senzor Rotacol SPI

Příspěvek od Wojta » 03 lis 2017, 10:32

Super. To je asi ta nejlepší možnost! Možná byste sem ještě mohl dát kód kdyby to někdo hledal tak aby měl z čeho čerpat.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti