Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-окт-14 16:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 278 ]  На страницу Пред.  1 ... 15, 16, 17, 18, 19
Автор Сообщение
СообщениеДобавлено: 2019-сен-23 08:26 
Не в сети

Зарегистрирован: 2019-июл-31 08:38
Сообщения: 7
Alex1 писал(а):
Добрый день,

Угол считывается как раз с 0x10. Но нужно сначала немного понастраивать. Как минимум записать в регистры 0x18, 0x1A, 0x1E.

Всем здравствуйте. Вот моя программа настройки на данный момент в виде нескольких функций:
Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_PLL_config_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x00;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   pLL_config_0x00.address = reg2Tx.word;
   pLL_config_0x00.pLL_config.bit.PLL_N = 10;
   pLL_config_0x00.pLL_config.bit.PLL_Q = 2;
   pLL_config_0x00.pLL_config.bit.ADC_cycle = 17;

   TxBuffer = (volatile uint16_t*)&pLL_config_0x00;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_AFE_config_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x02;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   aFE_config_0x02.address = reg2Tx.word;
   Config_01.Reg.aFE_config_0x02.address = reg2Tx.word;

   aFE_config_0x02.aFE_config.bit.VREF_en = 1;
   aFE_config_0x02.aFE_config.bit.EXT_RES_iREF = 0;
   aFE_config_0x02.aFE_config.bit.OFFSET_LOW = 0;
   aFE_config_0x02.aFE_config.bit.NDIFF_OFF = 1;
   aFE_config_0x02.aFE_config.bit.OPA1_en = 1;
   aFE_config_0x02.aFE_config.bit.OPA2_en = 1;
   aFE_config_0x02.aFE_config.bit.DAC1_en = 1;
   aFE_config_0x02.aFE_config.bit.DAC2_en = 0;
   aFE_config_0x02.aFE_config.bit.bit8_13 = 0;
   aFE_config_0x02.aFE_config.bit.OSC_BYP = 1;
   aFE_config_0x02.aFE_config.bit.OSC_DIS = 0;

   TxBuffer = (volatile uint16_t*)&aFE_config_0x02;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_Mode_state_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x04;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   mode_stat_0x04.address = reg2Tx.word;
   mode_stat_0x04.mode_stat.bit.CONV1_en = 1;
   mode_stat_0x04.mode_stat.bit.CONV2_en = 1;
   mode_stat_0x04.mode_stat.bit.Sample_src = 3;
   mode_stat_0x04.mode_stat.bit.SPI_CRC_en = 1;
   mode_stat_0x04.mode_stat.bit.Mode = 0;

   TxBuffer = (volatile uint16_t*)&mode_stat_0x04;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_C1Cntrl_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x18;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   c1Cntrl_0x18.address = reg2Tx.word;
   c1Cntrl_0x18.C1Cntrl.bit.Ex_on = 1;
   c1Cntrl_0x18.C1Cntrl.bit.Ex_amp = 1;
   c1Cntrl_0x18.C1Cntrl.bit.Ex_recovery_en = 0;
   c1Cntrl_0x18.C1Cntrl.bit.Ex_source = 0;
   c1Cntrl_0x18.C1Cntrl.bit.DC_carrier = 1;
   c1Cntrl_0x18.C1Cntrl.bit.Sensor_mode = 0;
   c1Cntrl_0x18.C1Cntrl.bit.LBW = 14;
   c1Cntrl_0x18.C1Cntrl.bit.DC_correction = 0;

   TxBuffer = (volatile uint16_t*)&c1Cntrl_0x18;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_C1ResCntrl_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x1A;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   c1ResCntrl_0x1A.address = reg2Tx.word;
   c1ResCntrl_0x1A.C1ResCntrl.bit.Enc_en = 0;
   c1ResCntrl_0x1A.C1ResCntrl.bit.Vel_resolution = 3;
   c1ResCntrl_0x1A.C1ResCntrl.bit.Coord_hist = 0;
   c1ResCntrl_0x1A.C1ResCntrl.bit.SPI_ext_en = 0;
   c1ResCntrl_0x1A.C1ResCntrl.bit.Dir_out_en = 0;
   c1ResCntrl_0x1A.C1ResCntrl.bit.Coord_resolution = 2;

   TxBuffer = (volatile uint16_t*)&c1ResCntrl_0x1A;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_C1EXInc_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x1E;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   c1EXInc_0x1E.address = reg2Tx.word;
   c1EXInc_0x1E.C1EXInc = 4194;

   TxBuffer = (volatile uint16_t*)&c1EXInc_0x1E;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_C1Mask_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x16;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   c1Mask_0x16.address = reg2Tx.word;
   c1Mask_0x16.C1Mask.bit.MSK_NLock = 0;

   TxBuffer = (volatile uint16_t*)&c1Mask_0x16;
}

Код:
template <const unsigned int Bits>
void AngleCode<Bits>::Set_Mask_RW(){

   Reg2Tx reg2Tx;

   reg2Tx.bit.bit0_2 = RW;

   reg2Tx.bit.adderss = 0x06;
   reg2Tx.bit.bit_P = calcCheckParity0(reg2Tx.word);

   mask_0x06.address = reg2Tx.word;
   mask_0x06.mask.bit.MSK_ECC_err = 0;

   TxBuffer = (volatile uint16_t*)&mask_0x06;
}

В них что то неправильно. Прошу помощи. Всем заранее спасибо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-23 12:28 
Не в сети

Зарегистрирован: 2015-фев-24 19:17
Сообщения: 97
Откуда: АО "ПКК Миландр"
Не понятно какие симптомы.

1. Тактирование от внешнего генератора? Какой частоты? Для включения OSC_BYP=1 есть определенная процедура (см. описание бита), не ясно, выполняется ли она. Какой получается FINT?
2. Есть ли на входе датчика сигнал, правильной ли он частоты и амплитуды? Ex_amp возможно нужно ставить 0 это полная амплитуда.
3. Есть ли на входах (IOSA/IOCA) микросхемы сигналы от датчика, правильной ли они амплитуды? Ведут ли себя адекватно вращению датчика, остаются ли правильной амплитуды при вращении?
4. Установлен бит SPI_CRC_en, правильно ли все записывается в регистры? Если на стороне процессора не рассчитывается бит CRC (или рассчитывается как то не так), то микросхема будет такую запись в регистры игнорировать. Я бы рекомендовал отключить CRC до момента когда все остальное заработает.
5. DC_carrier = 1; DC_correction = 0; Ex_recovery_en = 0; - это не для СКВТ настройки, для какого нибудь не стандартного резистивного датчика. Если это не СКВТ вообще может быть много ньюансов, тут нужны все подробности что именно не работает, или не устраивает. Для СКВТ эти биты лучше оставить по умолчанию.
6. Там есть регистр C?Stat - было бы неплохо его почитав поставив маску во все 1. На основании ошибок в нем что то еще можно понять


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-23 15:33 
Не в сети

Зарегистрирован: 2019-июл-31 08:38
Сообщения: 7
Alex1 писал(а):
Не понятно какие симптомы.

Здравствуйте:
1. Тактирование от внешнего генератора 30МГц. Регистр AFE_config отвечает тем, что в него записываю. Это можно считать положительным признаком? FINT 50МГц.
2. На входе датчика сигнал sin и cos, 4КГц и размах 800мВ на входах 12 и 13.
3. Есть на входах (IOSA/IOCA) микросхемы сигналы от датчика и они правильной амплитуды. Ведут себя адекватно вращению датчика, остаются правильной амплитуды.
4. ...Отключил...
5. ...Оставил по умолчанию...
6. С1Stat отвечает нулем.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-23 17:38 
Не в сети

Зарегистрирован: 2015-фев-24 19:17
Сообщения: 97
Откуда: АО "ПКК Миландр"
Входная частота PLL от 2 до 16МГц, в данном случае 30МГц. Можно записать PLL_N = 0 отключив PLL, тогда работать будет на 30МГц, либо поменять генератор на 50 (с отключенной PLL) или от 2-16 с включенной. Хотя, если на выходе есть правильная частота, то как то она все таки завелась...
А что не работает?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-24 09:41 
Не в сети

Зарегистрирован: 2019-июл-31 08:38
Сообщения: 7
Alex1 писал(а):
Входная частота PLL от 2 до 16МГц, в данном случае 30МГц. Можно записать PLL_N = 0 отключив PLL, тогда работать будет на 30МГц, либо поменять генератор на 50 (с отключенной PLL) или от 2-16 с включенной. Хотя, если на выходе есть правильная частота, то как то она все таки завелась...
А что не работает?

Всем здравствуйте. Дискреты приходят от 0 до 65535. Пробую по совету...от внешнего генератора... Не прошиваю PLL - получается 12КГц на входе датчика. А какими делителями теперь "правильнее" добиться 4Кг? Всем заранее спасибо за помощь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-24 10:17 
Не в сети

Зарегистрирован: 2015-фев-24 19:17
Сообщения: 97
Откуда: АО "ПКК Миландр"
Добрый день,

Выводы 14, 31, 51 соединены между собой? Если да, то можете прислать схему в личку, посмотрю.

По тактированию, лучше: Использовать внешний генератор 50МГц с откл. PLL, либо кварц/генератор на 2-16МГц (10МГц, например) и PLL настроить делителями.
В текущей ситуации можно 12кГц можно превратить в 4кГц записав в регистр C1Exinc значение в 4 раза больше.

Вложение:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-30 09:17 
Не в сети

Зарегистрирован: 2018-сен-05 15:25
Сообщения: 8
Зарегистрирован: 2018-сен-05 16:25
Сообщения: 8

В каком состоянии будут находится выводы микросхемы1310нм025 при сбрасывании? , при подачи активного 0 на вывод nreset (26)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2019-сен-30 14:51 
В сети

Зарегистрирован: 2017-май-31 15:10
Сообщения: 45
Откуда: АО "ПКК Миландр"
Steak777 писал(а):
Зарегистрирован: 2018-сен-05 16:25
Сообщения: 8

В каком состоянии будут находится выводы микросхемы1310нм025 при сбрасывании? , при подачи активного 0 на вывод nreset (26)

При установке nReset=0 выводы ENC* остаются в том же состоянии, Ready1, Ready2, Ready, Dir1, Dir2 устанавливаются в 0.
После отпускания nReset, ENC*, Dir1, Dir2 устанавливаются в высокоимпедансное состояние.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 278 ]  На страницу Пред.  1 ... 15, 16, 17, 18, 19

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB