UR5FFR

Радиолюбительские конструкции и программы
It is currently 25 Jun 2021, 07:10

All times are UTC + 2 hours [ DST ]




Post new topic Reply to topic  [ 15 posts ]  Go to page Previous  1, 2
Author Message
PostPosted: 03 Jun 2020, 23:56 
Offline
Site Admin

Joined: 21 Apr 2012, 22:00
Posts: 1091
Location: Odessa
Позывной: UR5FFR
На гитхабе обновлена прошивка. Для ее правильной сборки нужно взять новую версию 1.1 библиотеки для работы с Si5351 https://github.com/andrey-belokon/UR5FFR_Si5351. В результате уменьшен объем кода на 2.5кб


Top
 Profile  
 
PostPosted: 02 Mar 2021, 18:18 
Offline
Site Admin

Joined: 21 Apr 2012, 22:00
Posts: 1091
Location: Odessa
Позывной: UR5FFR
Обновил прошивку на гитхабе. Высвободил 1.2к место. Будет интересно тем кто дописывает свой функционал


Top
 Profile  
 
PostPosted: 05 Mar 2021, 15:04 
Offline
Site Admin

Joined: 21 Apr 2012, 22:00
Posts: 1091
Location: Odessa
Позывной: UR5FFR
Валкодер для синтезатора - это достаточно проблемное место. Оптические промышленные дают 300-400 импульсов на оборот, удобны и эргономичны, но дорогие и имеют большие габариты и вес. Механические "трещетки" дешевые и малогабаритные, но всего 20 импульсов на оборот и контакты, которые ненадежны и со временем могут выйти из строя. Различная "самопальная" оптика достаточно сложна в реализации и нужен диск с большим количеством прорезей. Валкодеры из шаговых двигателей габаритны и судя по отзывам тоже имеют свои нюансы.

На фоне всего этого разнообразия особняком стоят валкодеры на основе специализированных микросхем датчиков магнитного поля. Обычно для этих целей используют AS5040 из-за того, что у нее есть квадратурные выходы и она может быть применена вместо любого оптического или механического энкодера с такими же выходами. Минус - цена от 5$ за корпус. Есть и более дешевые микросхемы. Например AS5600 стоимостью около 1$. Но она не имеет квадратурных выходов. Это не позволяет использовать AS5600 в синтезаторах с закрытым исходным кодом. Но для нас это не помеха :)

Схема подключения AS5600 для питания 3.3в крайне проста

Attachment:
as5600_encoder.png
as5600_encoder.png [ 12.32 KiB | Viewed 1682 times ]


Вся "обвязка" - блокировочные по питанию. Подключается такой энкодер к разъему расширения P15 куда выведена I2C шина и питание 3.3в.
Для включения энкодера в прошивке необходимо в файле config_hw.h раскоментарить соответствующую строчку

Code:
// раскоментировать ТОЛЬКО ОДИН требуемый тип энкодера. закоментировать все если нет
//#define ENCODER_OPTICAL
//#define ENCODER_MECHANIC
#define ENCODER_AS5600


Валкодер позволяет получить дискретность в 256 импульсов на оборот что более чем достаточно для плавной перестройки. Прошивка залита на гитхаб.
Конструктивное исполнение может быть различным - на основе механики от переменного резистора или на подшипнике с печатью деталей на 3D-принтере.

3D-модель для энкодера на основе подшипника 25*37*7 доступна тут Магнитный энкодер для синтезатора


Top
 Profile  
 
PostPosted: 05 Mar 2021, 20:24 
Offline
Site Admin

Joined: 21 Apr 2012, 22:00
Posts: 1091
Location: Odessa
Позывной: UR5FFR
Все вопросы по синтезатору перенес в тему для обсуждения
viewtopic.php?f=11&t=190


Top
 Profile  
 
PostPosted: 18 May 2021, 09:46 
Offline
Site Admin

Joined: 21 Apr 2012, 22:00
Posts: 1091
Location: Odessa
Позывной: UR5FFR
Прислали на почту вопрос - что нужно изменить в коде чтобы управлять ДПФ без дешифратора двоичного кода.
Управление ДПФ вынесено на I2C расширитель. В модуле Syntez.ino есть следующая функция в которой определяется что и на какие пины будет выводиться (сами пины определены в config_hw.h)

Code:
void UpdateBandCtrl()
{
#ifdef BANDCTRL_ENABLE
  outBandCtrl.Set(BCPN_BAND_0, trx.BandIndex & 0x1);
  outBandCtrl.Set(BCPN_BAND_1, trx.BandIndex & 0x2);
  outBandCtrl.Set(BCPN_BAND_2, trx.BandIndex & 0x4);
  outBandCtrl.Set(BCPN_BAND_3, trx.BandIndex & 0x8);
  // 0-nothing; 1-ATT; 2-Preamp
  switch (trx.state.AttPre) {
    case 0:
      outBandCtrl.Set(BCPN_ATT,false);
      outBandCtrl.Set(BCPN_PRE,false);
      break;
    case 1:
      outBandCtrl.Set(BCPN_ATT,true);
      outBandCtrl.Set(BCPN_PRE,false);
      break;
    case 2:
      outBandCtrl.Set(BCPN_ATT,false);
      outBandCtrl.Set(BCPN_PRE,true);
      break;
  }
  outBandCtrl.Set(BCPN_CW, trx.state.mode == MODE_CW);
  outBandCtrl.Set(BCPN_SB, trx.state.mode == MODE_USB);
  outBandCtrl.Write();
#endif
}


Для управления 5ти диапазонным ДПФ (Raisin 1.x) нам придется пожертвовать одним из пинов BCPN_CW или BCPN_SB. ниже код для случая когда 5й бенд выводится на пин BCPN_SB который раньше выводил какая боковая полоса выбрана - для Raisin это не актуально т.к. фильтр у него один.

Code:
void UpdateBandCtrl()
{
#ifdef BANDCTRL_ENABLE
  outBandCtrl.Set(BCPN_BAND_0, trx.BandIndex == 0);
  outBandCtrl.Set(BCPN_BAND_1, trx.BandIndex == 1);
  outBandCtrl.Set(BCPN_BAND_2, trx.BandIndex == 2);
  outBandCtrl.Set(BCPN_BAND_3, trx.BandIndex == 3);
  // 0-nothing; 1-ATT; 2-Preamp
  switch (trx.state.AttPre) {
    case 0:
      outBandCtrl.Set(BCPN_ATT,false);
      outBandCtrl.Set(BCPN_PRE,false);
      break;
    case 1:
      outBandCtrl.Set(BCPN_ATT,true);
      outBandCtrl.Set(BCPN_PRE,false);
      break;
    case 2:
      outBandCtrl.Set(BCPN_ATT,false);
      outBandCtrl.Set(BCPN_PRE,true);
      break;
  }
  outBandCtrl.Set(BCPN_CW, trx.state.mode == MODE_CW);
  outBandCtrl.Set(BCPN_SB, trx.BandIndex == 4);
  outBandCtrl.Write();
#endif
}


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 15 posts ]  Go to page Previous  1, 2

All times are UTC + 2 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group