Автор Тема: Энкодеры AS5045,AS5040...  (Прочитано 12971 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн R6DT Павел

  • Старожил
  • ****
  • Сообщений: 202
  • Репутация: +17/-5
  • RX6DT2(кот или собака)gmail.com
  • QRA: KN94ul
Энкодеры AS5045,AS5040...
« : 31 Март 2013, 22:50:58 »
Кто-нибудь писал программы для них?
С уважением Павел
 73!
RX6DT2(кот или собака)gmail.com

Оффлайн RW3TU Сергей

  • Ветеран
  • *****
  • Сообщений: 778
  • Репутация: +83/-11
  • 73&DX!!!
Re: Энкодеры AS5045,AS5040...
« Ответ #1 : 31 Март 2013, 23:10:19 »
VK5DJ - на его сайте есть разные прошивки на контроллеры под эти энкодеры..
Dum spiro - spero. 73&DX! Сергей. LO25BR.

Оффлайн R6DT Павел

  • Старожил
  • ****
  • Сообщений: 202
  • Репутация: +17/-5
  • RX6DT2(кот или собака)gmail.com
  • QRA: KN94ul
Re: Энкодеры AS5045,AS5040...
« Ответ #2 : 31 Март 2013, 23:20:45 »
VK5DJ - на его сайте есть разные прошивки на контроллеры под эти энкодеры..
Cпасибо, я в курсе.
Вопрос остаётся
С уважением Павел
 73!
RX6DT2(кот или собака)gmail.com

Оффлайн ut3lk

  • Постоялец
  • ***
  • Сообщений: 116
  • Репутация: +5/-5
Re: Энкодеры AS5045,AS5040...
« Ответ #3 : 31 Март 2013, 23:43:04 »
http://www.ok2tpq.net/

Оффлайн R6DT Павел

  • Старожил
  • ****
  • Сообщений: 202
  • Репутация: +17/-5
  • RX6DT2(кот или собака)gmail.com
  • QRA: KN94ul
Re: Энкодеры AS5045,AS5040...
« Ответ #4 : 31 Март 2013, 23:57:04 »
http://www.ok2tpq.net/
Я спрашиваю, кто лично писал проги,а не ссылки.
С уважением Павел
 73!
RX6DT2(кот или собака)gmail.com

Онлайн RM5P

  • Очный чемпионат
  • Ветеран
  • *****
  • Сообщений: 658
  • Репутация: +202/-4
  • QRA: KO84VH
Re: Энкодеры AS5045,AS5040...
« Ответ #5 : 01 Апрель 2013, 12:38:17 »
Я немного экспериментировал с AS5048 под Arduino.
Best regards and 73!
Gleb RM5P

Оффлайн PavelS

  • Постоялец
  • ***
  • Сообщений: 51
  • Репутация: +6/-0
Re: Энкодеры AS5045,AS5040...
« Ответ #6 : 01 Апрель 2013, 14:16:16 »
Программировал PIC16F628 под AS5040. Но уже склероз не знает где исходники.
73! RA9ODA

Оффлайн OlegG

  • Пользователь
  • **
  • Сообщений: 26
  • Репутация: +4/-3
Re: Энкодеры AS5045,AS5040...
« Ответ #7 : 24 Май 2013, 23:33:29 »
Если будет интересно то недавно писал под С8051F350, считываются данные с двух энкодеров и шлются через UART:



///////////Encoder based AS5045 chip///////////////

#include "C8051F350.h"
#include "Pin_designator.c"
#include "stdio.h"

///////////// Function ////////////////////

void del_10us(void);
void del_500ms(void);

void  read_encod_1(void);
void  read_encod_2(void);

void TXDataUART(void);

///////////Extern function/////////////////
extern void Init_Device (void);

///////////Variable////////////

unsigned int  enc_1, enc_2;          //дані з енкодера (D11, D10,....D2, D1, D0)
unsigned int  enc1_avg, enc2_avg;    //дані з енкодера for averaging
unsigned char stat_bits;             //статус биты OCF COF LIN
unsigned char n;
unsigned char DataTxUART[8];   //8 byte for TX
static bit flag1_error;   //flag1 oszibok
static bit flag2_error;   //flag2 oszibok
 
///////////////////////////////MAIN///////////////////////////////

void main (void)        //Osnownyj cykl
{
  Init_Device();       //Inicializacia kontrolera
   
   //-------------------Початкові установки -----------------------

  CS_1  = 1;    //dla Az-encodera
  CLK_1 = 1;   
   
   CS_2  = 1;    //dla El-encodera
  CLK_2 = 1;   

  del_500ms();   // na perechidni procesy
   
   while(1)      //----------  mean loop  --------------------------
   {
     enc1_avg=0;            // обнуляем 1
       enc2_avg=0;            // обнуляем 2
       flag1_error = 0;       // обнуляем flag1 oszibok
       flag2_error = 0;       // обнуляем flag2 oszibok      
   
      for (n=0;n<8;n++)  read_encod_1();     //useredniujem 8 raz   
       enc1_avg = enc1_avg >> 3;              //here enc1_avg - averaging in 8 time

       for (n=0;n<8;n++)  read_encod_2();      //useredniujem 8 raz
     enc2_avg = enc2_avg >> 3;               //here enc2_avg - averaging in 8 time   
   
       TXDataUART();                        //prepare data

      for (n=0;n<8;n++)                   //Here send to UART 8 byte
         {
             SBUF0=DataTxUART[n];
         while (!TI0);                   //wait while the transmission is going on
         TI0=0;                               //Clear TI0            
       }
   }      
}
//*****************************************************
//------------Процедура зчитування енкодера N1---------
//-----------------------------------------------------

void  read_encod_1(void)
{
     unsigned char i;
     stat_bits=0;         // обнуляем
     enc_1=0;
   
     CS_1  = 0;           //устанавливаем 0 CS1
     del_10us();          //delay, ne menee 500ns
     CLK_1 = 0;             // устанавливаем 0 CLK
     del_10us();          //delay, ne menee 500ns

     for (i=0;i<12;i++)
     {
      CLK_1 = 1;           // устанавливаем 1 CLK
      del_10us();        //delay, ne menee 500ns
        if (DO_1 == 1)    //Czytajemo
         {
          enc_1=((0x0800>>i)|enc_1);
         }
     CLK_1 = 0;           // устанавливаем 0 CLK     
     del_10us();        //delay, ne menee 500ns
     }
     
     for(i=0;i<3;i++)     // Проверяем статус биты OCF COF LIN
     {
      CLK_1 = 1;          // устанавливаем 1 CLK
      del_10us();        //delay, ne menee 500ns
        if (DO_1 == 1)    //
         {
          stat_bits=((0x04>>i)|stat_bits);
         }
     CLK_1 = 0;           // устанавливаем 0 CLK     
     del_10us();        //delay, ne menee 500ns
     }

     CS_1  = 1;          // устанавливаем 1 CS   
     del_10us();        //delay, ne menee 500ns
       
    if (stat_bits == 0x04)     //0000 0100  проверка правильности биты OCF COF LIN
     {
      enc1_avg = enc1_avg + enc_1;
     }
      else flag1_error = 1;
}

//*****************************************************
//------------Процедура зчитування енкодера N2---------
//-----------------------------------------------------

void  read_encod_2(void)
{
     unsigned char i;
     stat_bits=0;         // обнуляем
     enc_2=0;
   
     CS_2  = 0;           //устанавливаем 0 CS1
     del_10us();          //delay, ne menee 500ns
     CLK_2 = 0;             // устанавливаем 0 CLK
     del_10us();          //delay, ne menee 500ns

     for (i=0;i<12;i++)
     {
      CLK_2 = 1;           // устанавливаем 1 CLK
      del_10us();         //delay, ne menee 500ns
        if (DO_2 == 1)    //Czytajemo
         {
          enc_2=((0x0800>>i)|enc_2);
         }
     CLK_2 = 0;           // устанавливаем 0 CLK     
     del_10us();          //delay, ne menee 500ns
     }
     
     for(i=0;i<3;i++)     // Проверяем статус биты OCF COF LIN
     {
      CLK_2 = 1;          // устанавливаем 1 CLK
      del_10us();         //delay, ne menee 500ns
        if (DO_2 == 1)    //
         {
          stat_bits=((0x04>>i)|stat_bits);
         }
     CLK_2 = 0;           // устанавливаем 0 CLK     
     del_10us();          //delay, ne menee 500ns
     }
     CS_2  = 1;           // устанавливаем 1 CS   
     del_10us();          //delay, ne menee 500ns
      
    if (stat_bits == 0x04)     //0000 0100  проверка правильности биты OCF COF LIN
     {
      enc2_avg = enc2_avg + enc_2;
     }
      else flag2_error = 1;    
}

//---------------------------------------------

//////////////// Zaderzky ///////////////////

void del_10us(void)          //~10 us
   {
     unsigned char j;
      for (j = 0; j < 60; j++);
   }

void del_500ms(void)         ///~500 ms
 {
   unsigned char l,m,n;

   for (l = 0; l < 38; l++)
     {
       for (m = 0; m < 255; m++)
         {
            for (n = 0; n < 255; n++);
          }
     }
 }
///////////////////////////////////////////////////////////////
// --------------- Prepary data to send -----------------------
//-------------------------------------------------------------
 void TXDataUART(void)
{
 DataTxUART[0]= 0xE1;
 DataTxUART[1]= 0xE1;

   if(flag1_error)       //jesli byla oszibka wo wremija sczitywanija
  {
      DataTxUART[2]= 0xEE;   //MSB
    DataTxUART[3]= 0xEE;   //LSB
   }
   else
  {
      DataTxUART[2]= (enc1_avg & 0xFF00)>>8;     //MSB
    DataTxUART[3]= enc1_avg & 0x00FF;          //LSB
   }      

 DataTxUART[4]= 0xE2;
 DataTxUART[5]= 0xE2;

   if(flag2_error)       //jesli byla oszibka wo wremija sczitywanija
  {
      DataTxUART[6]= 0xEE;   //MSB
    DataTxUART[7]= 0xEE;   //LSB
   }
   else
  {
   DataTxUART[6]= (enc2_avg & 0xFF00)>>8;     //MSB
   DataTxUART[7]= enc2_avg & 0x00FF;          //LSB
   }   
}

//-----------------------------------------------------------------------------   
// UART0_Interrupt   
//-----------------------------------------------------------------------------   
   
void uart_tx(void) interrupt 4   
{     
  if (RI0 == 1)            // Check if receive flag is set
    {
    RI0 = 0;               // Clear interrupt flag RX
     }      

   if (TI0 == 1)            // Check if transmit flag is set   
   {   
      //TI0 = 0;              //Clear interrupt flag  TX
   }   
}   
//-----------------------------------------------------------------------------   

 

Оффлайн R6DT Павел

  • Старожил
  • ****
  • Сообщений: 202
  • Репутация: +17/-5
  • RX6DT2(кот или собака)gmail.com
  • QRA: KN94ul
Re: Энкодеры AS5045,AS5040...
« Ответ #8 : 26 Май 2013, 20:39:54 »
Если будет интересно то недавно писал под С8051F350, считываются данные с двух энкодеров и шлются через UART:
Спасибо OlegG.
Считывание работает нормально. Но когда попытался записать в AS5045, то AS5045 перестала отвечать.Видимо испортил. Не пробовали?
С уважением Павел
 73!
RX6DT2(кот или собака)gmail.com

Онлайн UD2F

  • Модератор форума
  • Ветеран
  • *****
  • Сообщений: 4515
  • Репутация: +864/-32
  • UA2 Contest Club
  • QRA: KO04HR
Re: Энкодеры AS5045,AS5040...
« Ответ #9 : 01 Март 2014, 13:15:35 »
http://radiomarket.lg.ua/advanced_search_result.php?search_in_description=1&keywords=%FD%ED%EA%EE%E4%E5%F0&x=31&y=5

Такие вот энкодеры никто не пробовал применять для азимута или элевации ?
73! Валентин   ex: RU2FM

Оффлайн R3TGM Дмитрий

  • Ветеран
  • *****
  • Сообщений: 2228
  • Репутация: +189/-344
  • N.Novgorod R3TGM
Re: Энкодеры AS5045,AS5040...
« Ответ #10 : 02 Март 2014, 18:26:03 »
Валентнин приветствую , это немного не те энкодеры о которых шла речь выше . Те имют разрешение в 1/16 градуса или 0,0625градуса. А то что вы выложили на фото - это энкодер из разряда примитивных так сказать - механический, предназначен для применения в различного рода дешёвых изделий из разряда аудиотехники.искал в нете даже не нашёл сколько у него импульсов на оборот . Но точно можно сказать - что навряд ли он может быть применён в качестве датчика угла положения , разве только по азимуту 4 или 8 положений антены определять ....

Предлагаю Вам ознакомится с данным документом - там есть то как это работает ......

http://www.heidenhain.ru/ru_RU/php/dokumentacija-informacija/dokumentacija/katalogi/popup/media/media/file/view/file-0561/file.pdf

Речь идёт о правильных энкодерах .....

С такими конткретно работал  -- http://www.psystem.ru/datchiki/Pologenie-Honeywell-4.html

RPN1A111
« Последнее редактирование: 02 Март 2014, 18:28:15 от Дмитрий Макаров »
N.Novgorod

Оффлайн RA3EME Александр

  • Очный чемпионат
  • Ветеран
  • *****
  • Сообщений: 3171
  • Репутация: +827/-50
Re: Энкодеры AS5045,AS5040...
« Ответ #11 : 18 Сентябрь 2017, 11:34:10 »
Нужна помощь в написании простой проги под AS5045 простой вывод информации (числа) с энкодера на светодиодный индикатор с кнопкой сброса в ноль. Предложения в личку.
EX RA3WME

Оффлайн RA3WDK

  • Ветеран
  • *****
  • Сообщений: 6996
  • Репутация: +787/-88
Re: Энкодеры AS5045,AS5040...
« Ответ #12 : 18 Сентябрь 2017, 13:44:46 »
Нужна помощь в написании простой проги под AS5045 простой вывод информации (числа) с энкодера на светодиодный индикатор с кнопкой сброса в ноль. Предложения в личку.

Саша, с какой точностью? Если точность 10 бит устроит, то 12 ножки с PWM можно на ОУ подать, на выходе которого китайский вольтметр поставить.

Онлайн RM5P

  • Очный чемпионат
  • Ветеран
  • *****
  • Сообщений: 658
  • Репутация: +202/-4
  • QRA: KO84VH
Re: Энкодеры AS5045,AS5040...
« Ответ #13 : 18 Сентябрь 2017, 14:19:43 »
Интерфейс какой, SPI или I2C ?
Best regards and 73!
Gleb RM5P

Оффлайн RA3EME Александр

  • Очный чемпионат
  • Ветеран
  • *****
  • Сообщений: 3171
  • Репутация: +827/-50
Re: Энкодеры AS5045,AS5040...
« Ответ #14 : 18 Сентябрь 2017, 16:33:55 »
Точность нужна максимальная, делаю показометр для УДГ фрезерного станка.
EX RA3WME