Dima1060
Свой-
Постов
517 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Dima1060
-
Звание
Знающий
Посетители профиля
3 209 просмотров профиля
-
Передача данных по Interrupt каналу для STM32F4
Dima1060 опубликовал тема в ARM, 32bit
Здравствуйте! Делал проект в CubeMX для STM32F429 с передачей данных по USB. Сейчас есть две конечных точки, одна Bulk OUT и одна Interrupt IN. Изначально сгенерировал в CubeMX проект для USB CDC и переделал в дескрипторах одну конечную точку в тип Interrupt. Для передачи данных по Interrupt каналу использовал стандартную функцию uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len) { uint8_t result = USBD_OK; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData; if (hcdc->TxState != 0){ return USBD_BUSY; } USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len); result = USBD_CDC_TransmitPacket(&hUsbDeviceFS); return result; } Все заработало, только отредактировал немного функцию передачи данных низкого уровня - насколько помню, нашел это на форуме ST: После этого никаких проблем с передачей данных по Interrupt не наблюдалось, но всегда глодало сомнение, а правильно ли я сделал. Каких то примеров нигде не нашел, везде bulk и иногда изохронные. Недавно же при испытаниях на ЭСР выяснилось что иногда передача данных по Interrupt прекращается и никак не удается возобновить ее работу, кроме как перезагрузкой прибора. Причем перестает работать именно передача по Interrup, вторая конечная точка нормально работает. Здесь хотелось бы узнать, может кто-то делал передачу по Interrupt или находил адекватный пример. Стоит отметить, что у меня используется довольно старая библиотека STM32CubeF4, от февраля 2015 года, возможно какие то баги были поправлены за это время. -
Нецелая системная частота STM32F4
Dima1060 ответил Dima1060 тема в ARM, 32bit
Считаем: 76800/[(32*2)*((2*25)+0)*4)] = 76800/[64*50*4] = 6 кГц Но судя по таблице 127 (у Вас почему то это 126, может RM на другой процессор?) можно получить точность 0,0186%, если задать умножитель PLLI2SN = 258, а делители PLLI2SR и I2SDIV по 3 (I2SODD = 1), но у меня это тоже не сходится... Хотя нет, все правильно, на I2S точность 0,01% показывает CubeMX, а я же использую не его, а модуль SAI! -
Нецелая системная частота STM32F4
Dima1060 ответил Dima1060 тема в ARM, 32bit
Что-то у меня не сходится, второй период получается больше чем первый. Я что-то не так посчитал, вернее, переформулирую так: по каким причинам конец синусоиды достигнет нуля раньше, чем ЦАП отправит точку с амплитудой ноль? Не понял половины делителей, что Вы написали, у меня минимальная погрешность на 8 МГц кварце получается при таких настройках: -
Нецелая системная частота STM32F4
Dima1060 ответил Dima1060 тема в ARM, 32bit
Не понял Вас, можете пояснить, как при частоте квантования ЦАП = 46875Гц получить ровно 8 кГц? Там же получается нецелое число точек на период. Спасибо, интересная штука, но мне кроме синуса нужно и другие сигналы воспроизводить, нужен ЦАП -
Нецелая системная частота STM32F4
Dima1060 ответил Dima1060 тема в ARM, 32bit
Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц. По умолчанию у меня была частота квантования 46875 Гц. Разделим 46875 на 8000, получится 5,859375 точек. Округляем до целых 6 точек. 46875 делим на 6, получаем 7812,5 Гц - реальная частота стимула вместо 8 кГц. Погрешность 2,34% -
Нецелая системная частота STM32F4
Dima1060 ответил Dima1060 тема в ARM, 32bit
Ну например стимул состоящий из 2-3 периодов с частотой 8 кГц, повторяющийся с частотой 20Гц. С кварцем 8 МГц получается частота квантования не ровно 48 кГц, отсюда вылезает погрешность по частоте для стимулов. Если поковырять делители, получается погрешность 0,19% в наилучшем случае, с таким кварцем. Требование у меня - обеспечить точность не более 1%. Но можно же эту погрешность практически убрать вообще с кварцем 8,192 МГц. Вот я и пытаюсь выяснить, будет ли это иметь какие то последствия. -
Нецелая системная частота STM32F4
Dima1060 ответил Dima1060 тема в ARM, 32bit
В CubeMX высвечивается что частота должна быть в пределах 47,88 - 48,12 МГц. У меня получилась 47,981714 МГц. -
Нецелая системная частота STM32F4
Dima1060 опубликовал тема в ARM, 32bit
Здравствуйте! Использую STM32F429 для аудио девайса, возникло требование выдавать тональные стимулы с высокой точностью по частоте. Для этого решил поставить кварцевый резонатор на 8,192 МГц вместо 8 МГц. В итоге получил частоту I2S ровно 48 кГц. Но с таким кварцем теперь все остальные системные частоты неровные и нецелые. В CubeMX во вкладке тактирования ничего красным не подсвечивается, вроде как все частоты допустимы. Но меня немного терзают смутные сомнения, не получится ли от этого каких-нибудь проблем? Использую в процессоре два I2S, USB, SPI, SDRAM. Подскажите пожалуйста, есть ли какие то поводы для беспокойства? -
Это понятно, хотелось чего то простого... А подключение конденсаторов через полевые транзисторы как то повлияет на работу? Ну там скорость нарастания наверно уменьшится
-
Ну не знаю, хорошо ли вставлять сопротивление полевика в питание усилителя... Впрочем это неважно, какая разница что размыкать ключи питания или выходное реле, вопрос мой был в том как этот сигнал генерировать Я же писал, что уровень напряжения может доходить до 8 вольт
-
Отключить могу, но это ничего не даст, поскольку на питании усилителя емкости большие стоят.
-
Так же, как медицинский лазер защищен от того чтобы не поджарить здоровые ткани вместо раковых. Никак. Благоразумие и следование инструкции.
-
Проблема в контроле. Для людей с нормальным слухом громкий сигнал не выдается, а щелчок недопустим требованиями безопасности. Тем не менее он возможен и нужно что-то сделать, чтобы его предотвратить.
-
Должно, это для глухих, тестовый стимул должен быть именно такой
-
Дело в том, что стандарт на безопасность не допускает даже разового щелчка определенной амплитуды. И надо показать контролирующим органам, что сделано хоть что-то для защиты от него. 20 Ом последовательно - много, выходное напряжение может достигать 8,5 вольт по амплитуде.