Миландр

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

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 303 сообщения ]  На страницу « 117 18 19 20 21 »
Автор Сообщение
СообщениеДобавлено: 2019-сен-23 08:26 
Не в сети

Зарегистрирован: 2019-июл-31 08:38
Сообщения: 17
Организация: ПАО АНПП "ТЕМП-АВИА"
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
Сообщения: 100
Откуда: АО "ПКК Миландр"
Не понятно какие симптомы.

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
Сообщения: 17
Организация: ПАО АНПП "ТЕМП-АВИА"
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
Сообщения: 100
Откуда: АО "ПКК Миландр"
Входная частота PLL от 2 до 16МГц, в данном случае 30МГц. Можно записать PLL_N = 0 отключив PLL, тогда работать будет на 30МГц, либо поменять генератор на 50 (с отключенной PLL) или от 2-16 с включенной. Хотя, если на выходе есть правильная частота, то как то она все таки завелась...
А что не работает?


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

Зарегистрирован: 2019-июл-31 08:38
Сообщения: 17
Организация: ПАО АНПП "ТЕМП-АВИА"
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
Сообщения: 100
Откуда: АО "ПКК Миландр"
Добрый день,

Выводы 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
Сообщения: 70
Организация: АО "ПКК Миландр"
Откуда: АО "ПКК Миландр"
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


Вернуться к началу
СообщениеДобавлено: 2019-окт-29 20:20 
Не в сети

Зарегистрирован: 2018-ноя-15 07:56
Сообщения: 14
Организация: АО ГосНИИП
Откуда: АО ГосНИИП Москва
Здравствуйте

Есть 2 м/сх 1310НМ025. Выход источника опорного напряжения первой микросхемы может потянуть вторую, настроенную на работу с внешним ИОН ?


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

Зарегистрирован: 2017-май-31 15:10
Сообщения: 70
Организация: АО "ПКК Миландр"
Откуда: АО "ПКК Миландр"
Storoj писал(а):
Здравствуйте

Есть 2 м/сх 1310НМ025. Выход источника опорного напряжения первой микросхемы может потянуть вторую, настроенную на работу с внешним ИОН ?
Здравствуйте! Подскажите, пожалуйста, для чего Вам необходимо подобное включение микросхем?
Разработчики на подобное использование точно не рассчитывали и данный выход ИОН сделан только для того, чтобы на него повесить конденсатор.

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


Вернуться к началу
СообщениеДобавлено: 2019-дек-20 06:40 
Не в сети

Зарегистрирован: 2018-май-10 06:35
Сообщения: 8
Организация: АО НПЦ ПОЛЮС
Снова здравствуйте!
Возникли ещё некоторые вопросы. Я пытаюсь использовать режим параллельной выдачи результата, т.е. SPI_ext_en = 1, ENC_en = 0 в регистре C1ResCntrl. Пин VC всегда 0. По выводам ENC1A, ENC1B и ENC10 всё прекрасно выдаётся и я успешно использую эти данные.
Но, допустим, я хочу вклиниться в эту непрерывную параллельную выдачу результата прочитать регистр Mode_stat, меня интересуют флаги этого регистра, а конкретно ECC_err для реализации защиты от сбоев микросхемы.
Я делаю это следующим образом. Когда я хочу прочитать параллельный результат (забрать угол, скорость и статус канала с ножек энкодера), то соответственно выставляю SDI (он же MOSI) в 0, т.е. отправляю по SPI нулевой байт. На следующем такте SPI данные должны придти, и в этот же следующий такт я отправляю команду на чтение регистра Mode_stat. Следующий такт должен выдать значение, записанное по этому регистру. Как при этом должны вести себя ножки ENC? Дело в том, что они выдают какую-то информацию всегда, отдалённо похожую на правду. В целом, в результате таких действий, информация, полученная по ENC, становится некорректной, даже если пропускать те значения, которые были получены после выдачи команды на чтение Mode_stat. Конкретнее: угол становится слишком ступенчатым, на 360 градусов получается что-то около 4 дискретов.
Это так и задумано?
Я ещё попробую читать Mode_stat допустим раз в 1000 измерений, посмотрю, как он будет себя вести, но читать через раз точно не получается.
В качестве альтернативы получилось реализовать чтение угла, скорости и Mode_stat последовательно через чтение их регистров, но тогда данные собираются слишком медленно и меня это, увы, не устраивает.

И ещё такой вопрос: достаточно ли будет читать биты регистра Mode_stat, чтобы по их состоянию реализовать защиту от одиночного сбоя, например от ТЗЧ (тяжёлая заряженная частица)? Особенно интересует ECC_err. Не совсем понятно из спецификации, в каких случаях он срабатывает. Кстати, он не работает в rev.3. Планируете ли исправлять в следующей ревизии и, раз уж речь зашла, когда она будет?
С уважением.

UPD: Всё получилось. Делаю следующим образом. Вклиниваюсь в параллельную выдачу чтением Mode_stat не через раз, а один раз в 1000 измерений. При этом угол, скорость и статус канала по ENC идут корректные, по SDO читаю Mode_stat, проверил осциллографом, всё как надо (ну кроме ECC_err, конечно же). Частота между посылками SPI равняется 175кГц.

Остальные вопросы по-прежнему интересуют.


Вернуться к началу
СообщениеДобавлено: 2019-дек-20 13:18 
Не в сети

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

В Mode_stat собраны все ошибки. Лучше, конечно, завести сигнал Ready на прерывание, и читать регистр Mode_stat по нему.
ECC_err - выставляется, если обнаруживается двойная ошибка в регистре (одинарную оно может исправить, код SecDed). ЕСС защищены только регистры, вычислительные ядра не защищены. Поэтому, лучше 2 канала дублировать, причем снаружи микросхемы и сравнивать значения идущие с них (есть спец. битик в регистре Mode_stat).
Дополнительно, можно изредка читать регистр 0x0C (начиная с 3 ревизии), это просто счетчик и он должен просто меняться. Позволяет отследить проблему остановки тактового сигнала (без тактирования ничего не работает, и флаги остаются в своем последнем состоянии).

По работе при смене режимов SPI - нужно моделировать, наверное есть какой то ньюанс, сразу сложно сказать.
В новой ревизии все найденные ошибки будут исправлены, а будет она явно не раньше конца следующего года.


Вернуться к началу
СообщениеДобавлено: 2019-дек-22 16:25 
Не в сети

Зарегистрирован: 2018-ноя-15 07:56
Сообщения: 14
Организация: АО ГосНИИП
Откуда: АО ГосНИИП Москва
Здравствуйте,
А когда ревизия 3 будет доступна к покупке?


Вернуться к началу
СообщениеДобавлено: 2019-дек-23 08:53 
Не в сети

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

3 ревизия - это текущая. Новая ревизия = четвертая, про нее ничего пока не известно.


Вернуться к началу
СообщениеДобавлено: 2019-дек-24 13:54 
Не в сети

Зарегистрирован: 2018-май-10 06:35
Сообщения: 8
Организация: АО НПЦ ПОЛЮС
Alex1, благодарю за ваш ответ.
Использую ПЛИС, так что мне не трудно читать Mode_stat каждое 1001-е измерение, но идея с Ready понравилась, упустил этот момент, когда читал пдфку.

Что касается дублирования каналов "снаружи микросхемы", вы ведь имели ввиду независимую работу преобразователей, т.е. регистр Mode = 000b в Mode_stat? При этом я включил ОУ на втором канале и подал на них то же, что и на ОУ первого канала (т.е. сигналы с выходных обмоток СКВТ, схему подключения повторил как для первого). EXI1 и EXI2 соединил проводком на плате, генератор и ЦАП второго канала отключены. Для первого канала выставил Ex_source = 00b, для второго - 01b, т.е. у каждого канала работает свой блок восстановления опорной частоты (Ex_recovery_en = 1 для 1 и 2 каналов), но второй дублирует первый.
При этом первый канал как работал, так и работает, а второй выдаёт в C2Stat биты NLock, Vel_ovf и UIN_LOW. Осциллографом проверил, что IOCA1==IOCA2, IOSA1==IOSA2. Вместо угла и скорости по второму каналу некорректная информация. В Mode_stat выставились nReady2 и Not_equal. Что я делаю не так?
Пробовал этот же способ, но ставил Ex_source = 10b, EXI естественно разъединял. Результат такой же. Заметил, что EXI1 немного опережает по фазе EXI2 (ну как я понял это так и должно быть).

Попробовал так же физически отключить второй канал, а так же выставить OPA2_en = 0. Выставил Mode = 010b, Ex_source оставил таким же (00 первый канал и 01 второй), соединение EXI1,2 оставил. Всё прекрасно работает, углы совпадают с точностью до бита. Но я не совсем уверен, достаточно ли этого для резервирования.

Ещё такой момент. Необходимо ли резервировать генератор и цап обмотки возбуждения? Если отвалится один канал целиком, вместе с ним ведь перестанет работать и генератор ОВ.
Спасибо.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 303 сообщения ]  На страницу « 117 18 19 20 21 »

Часовой пояс: UTC+03:00


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

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


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

Перейти: 

cron
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB