Jump to content

    

Dima1060

Свой
  • Content Count

    517
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Dima1060

  • Rank
    Знающий

Recent Profile Visitors

2725 profile views
  1. Здравствуйте! Делал проект в 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 года, возможно какие то баги были поправлены за это время.
  2. Считаем: 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!
  3. Что-то у меня не сходится, второй период получается больше чем первый. Я что-то не так посчитал, вернее, переформулирую так: по каким причинам конец синусоиды достигнет нуля раньше, чем ЦАП отправит точку с амплитудой ноль? Не понял половины делителей, что Вы написали, у меня минимальная погрешность на 8 МГц кварце получается при таких настройках:
  4. Не понял Вас, можете пояснить, как при частоте квантования ЦАП = 46875Гц получить ровно 8 кГц? Там же получается нецелое число точек на период. Спасибо, интересная штука, но мне кроме синуса нужно и другие сигналы воспроизводить, нужен ЦАП
  5. Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц. По умолчанию у меня была частота квантования 46875 Гц. Разделим 46875 на 8000, получится 5,859375 точек. Округляем до целых 6 точек. 46875 делим на 6, получаем 7812,5 Гц - реальная частота стимула вместо 8 кГц. Погрешность 2,34%
  6. Ну например стимул состоящий из 2-3 периодов с частотой 8 кГц, повторяющийся с частотой 20Гц. С кварцем 8 МГц получается частота квантования не ровно 48 кГц, отсюда вылезает погрешность по частоте для стимулов. Если поковырять делители, получается погрешность 0,19% в наилучшем случае, с таким кварцем. Требование у меня - обеспечить точность не более 1%. Но можно же эту погрешность практически убрать вообще с кварцем 8,192 МГц. Вот я и пытаюсь выяснить, будет ли это иметь какие то последствия.
  7. В CubeMX высвечивается что частота должна быть в пределах 47,88 - 48,12 МГц. У меня получилась 47,981714 МГц.
  8. Здравствуйте! Использую STM32F429 для аудио девайса, возникло требование выдавать тональные стимулы с высокой точностью по частоте. Для этого решил поставить кварцевый резонатор на 8,192 МГц вместо 8 МГц. В итоге получил частоту I2S ровно 48 кГц. Но с таким кварцем теперь все остальные системные частоты неровные и нецелые. В CubeMX во вкладке тактирования ничего красным не подсвечивается, вроде как все частоты допустимы. Но меня немного терзают смутные сомнения, не получится ли от этого каких-нибудь проблем? Использую в процессоре два I2S, USB, SPI, SDRAM. Подскажите пожалуйста, есть ли какие то поводы для беспокойства?
  9. Это понятно, хотелось чего то простого... А подключение конденсаторов через полевые транзисторы как то повлияет на работу? Ну там скорость нарастания наверно уменьшится
  10. Ну не знаю, хорошо ли вставлять сопротивление полевика в питание усилителя... Впрочем это неважно, какая разница что размыкать ключи питания или выходное реле, вопрос мой был в том как этот сигнал генерировать Я же писал, что уровень напряжения может доходить до 8 вольт
  11. Отключить могу, но это ничего не даст, поскольку на питании усилителя емкости большие стоят.
  12. Так же, как медицинский лазер защищен от того чтобы не поджарить здоровые ткани вместо раковых. Никак. Благоразумие и следование инструкции.
  13. Проблема в контроле. Для людей с нормальным слухом громкий сигнал не выдается, а щелчок недопустим требованиями безопасности. Тем не менее он возможен и нужно что-то сделать, чтобы его предотвратить.
  14. Должно, это для глухих, тестовый стимул должен быть именно такой
  15. Дело в том, что стандарт на безопасность не допускает даже разового щелчка определенной амплитуды. И надо показать контролирующим органам, что сделано хоть что-то для защиты от него. 20 Ом последовательно - много, выходное напряжение может достигать 8,5 вольт по амплитуде.