Trang chủ / Tin tức / Tin công nghệ / Lập trình Encoder 32bit SPI Adruino LS7366

Lập trình Encoder 32bit SPI Adruino LS7366

Hôm nay Mình chia sẻ các bạn đếm encoder dùng IC chuyên dụng

Đầu tiên sơ đồ mạch LS7366

 

Sơ đồ cũng khá đơn giản ,Với Thạch anh 40Mhz chạy chế độ 5V ,20M với Chế độ 3V3

Code chương trình :

#include <SPI.h>
#include “LS7366RLib.h”
#define SSS_1 10
#define SSS_2 9
#define SSS_3 8
#define SSS_4 7
#define SSS_5 6
#define SSS_6 5
#define SSS_7 4
#define SSS_8 3

LS7366R Encoder1(SSS_1) ;
LS7366R Encoder2(SSS_2) ;
LS7366R Encoder3(SSS_3) ;
LS7366R Encoder4(SSS_4) ;
LS7366R Encoder5(SSS_5) ;
LS7366R Encoder6(SSS_6) ;
LS7366R Encoder7(SSS_7) ;
LS7366R Encoder8(SSS_8) ;

int32_t EncoderValue1=0;
int32_t EncoderValue2=0;
int32_t EncoderValue3=0;
int32_t EncoderValue4=0;
int32_t EncoderValue5=0;
int32_t EncoderValue6=0;
int32_t EncoderValue7=0;
int32_t EncoderValue8=0;
int newposition;
int oldposition=0;
long newtime;
long oldtime=0;
int vantoc = 0;
int ganvantoc = 0;
int ganxung = 0;
int sovong = 0;
volatile  int encoderPos = 0;  // Cho vị trí đầu bằng 0

long previousMillis = 0;
long currentMillis = 0;

//Encoder variables
volatile long currentEncoder;
volatile long previousEncoder = 0;
volatile long oldPosition = 0;
volatile long newPosition;

long positionMain  = -999;
int rotation=0;
float old_rot_speed=0;
float rot_speed;           //rotating speed in rad/s
const int interval = 1000; //choose interval is 1 second (1000 milliseconds)
const int Encoder_1_round = 1000; //define number of pulses in one round of encoder

// the setup function runs once when you press reset or power the board
void setup() {
Serial.begin(9600);
pinMode(SSS_1, OUTPUT);
Encoder1.ResetEncoder();
Encoder2.ResetEncoder();
Encoder3.ResetEncoder();
Encoder4.ResetEncoder();
Encoder5.ResetEncoder();
Encoder6.ResetEncoder();
Encoder7.ResetEncoder();
Encoder8.ResetEncoder();
}

// the loop function runs over and over again until power down or reset
void loop() {

//EncoderValue1 = Encoder1.ReadEncoder();
//Serial.print(“Enc1: “); Serial.println(EncoderValue1);
currentEncoder = Encoder1.ReadEncoder();

currentMillis = millis();

if (currentMillis – previousMillis > interval)
{
previousMillis = currentMillis;
rot_speed = (float)((currentEncoder – previousEncoder)*60 / (Encoder_1_round));
previousEncoder = currentEncoder;
Serial.print(“Speed = “);
Serial.print(rot_speed);
return rot_speed;
}

// delay(1000);

//newtime=millis();
// newposition=encoderPos;

// vantoc = (newposition-oldposition)*60/360;
// Serial.print(“vantoc=”);
// Serial.println(vantoc,DEC);
// oldposition=newposition;
// oldtime=newtime;

//  EncoderValue2 = Encoder2.ReadEncoder();
//  Serial.print(“Enc2: “); Serial.println(EncoderValue2);
//
//    EncoderValue3 = Encoder3.ReadEncoder();
//  Serial.print(“Enc3: “); Serial.println(EncoderValue3);

//    EncoderValue4 = Encoder4.ReadEncoder();
//  Serial.print(“Enc4: “); Serial.println(EncoderValue4);
//
//    EncoderValue5 = Encoder5.ReadEncoder();
//  Serial.print(“Enc5: “); Serial.println(EncoderValue5);
//
//    EncoderValue6 = Encoder6.ReadEncoder();
//  Serial.print(“Enc6: “); Serial.println(EncoderValue6);
//
//    EncoderValue7 = Encoder7.ReadEncoder();
//  Serial.print(“Enc7: “); Serial.println(EncoderValue7);
//
//    EncoderValue8 = Encoder8.ReadEncoder();
//  Serial.print(“Enc8: “); Serial.println(EncoderValue8);
}

Chân CS để các bạn chọn đến bộ encoder tùy ý .

Thư viện các bạn tải ở đây :https://github.com/adgzlanl/arduino-atmega2560-ls7366r-Library

Cảm bạn đã ghé thăm shop .

Tags