Dima1060 0 16 июля, 2021 Опубликовано 16 июля, 2021 · Жалоба Здравствуйте! Использую STM32F429 для аудио девайса, возникло требование выдавать тональные стимулы с высокой точностью по частоте. Для этого решил поставить кварцевый резонатор на 8,192 МГц вместо 8 МГц. В итоге получил частоту I2S ровно 48 кГц. Но с таким кварцем теперь все остальные системные частоты неровные и нецелые. В CubeMX во вкладке тактирования ничего красным не подсвечивается, вроде как все частоты допустимы. Но меня немного терзают смутные сомнения, не получится ли от этого каких-нибудь проблем? Использую в процессоре два I2S, USB, SPI, SDRAM. Подскажите пожалуйста, есть ли какие то поводы для беспокойства? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 16 июля, 2021 Опубликовано 16 июля, 2021 · Жалоба USB нужно 48 МГц. У вас сколько вышло? По остальным интерфейсам - без разницы. Не о чем беспокоиться. Примут любуд частоту из диапазона допустимых. Если есть UART, то нужно обеспечить равные частоты на стороне передатчика и приёмника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 9 hours ago, ViKo said: USB нужно 48 МГц. У вас сколько вышло? По остальным интерфейсам - без разницы. Не о чем беспокоиться. Примут любуд частоту из диапазона допустимых. Если есть UART, то нужно обеспечить равные частоты на стороне передатчика и приёмника. В CubeMX высвечивается что частота должна быть в пределах 47,88 - 48,12 МГц. У меня получилась 47,981714 МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 10 часов назад, Dima1060 сказал: Использую STM32F429 для аудио девайса, возникло требование выдавать тональные стимулы с высокой точностью по частоте. Для этого решил поставить кварцевый резонатор на 8,192 МГц вместо 8 МГц. А что такое "тональные стимулы" и как они связаны с частотой кварца? И почему их нельзя выдавать с кварцем = 8МГц? 33 минуты назад, Dima1060 сказал: В CubeMX высвечивается что частота должна быть в пределах 47,88 - 48,12 МГц. У меня получилась 47,981714 МГц. А должно быть 48МГц. При такой частоте USB не факт что будет работать. PS: Если уж реально нужно на I2S получить именно ровно 48кГц, так для этого у МК есть вход внешнего тактирования I2S (I2S_CKIN). Вот его и стоит задействовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 5 minutes ago, jcxz said: А что такое "тональные стимулы" и как они связаны с частотой кварца? И почему их нельзя выдавать с кварцем = 8МГц? Ну например стимул состоящий из 2-3 периодов с частотой 8 кГц, повторяющийся с частотой 20Гц. С кварцем 8 МГц получается частота квантования не ровно 48 кГц, отсюда вылезает погрешность по частоте для стимулов. Если поковырять делители, получается погрешность 0,19% в наилучшем случае, с таким кварцем. Требование у меня - обеспечить точность не более 1%. Но можно же эту погрешность практически убрать вообще с кварцем 8,192 МГц. Вот я и пытаюсь выяснить, будет ли это иметь какие то последствия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 5 минут назад, Dima1060 сказал: Ну например стимул состоящий из 2-3 периодов с частотой 8 кГц, повторяющийся с частотой 20Гц. Ещё раз: Как именно частота неких стимулов связана с частотой кварца МК??? Где эти "2-3 периода 8кГц"? На Луне, на Марсе? И что такое эти "стимулы"? Напряжение, ток, волны на воде, ...? Как получаются и как связаны с частотой кварца МК? Телепатов тут нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dima1060 0 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 17 minutes ago, jcxz said: Ещё раз: Как именно частота неких стимулов связана с частотой кварца МК??? Где эти "2-3 периода 8кГц"? На Луне, на Марсе? И что такое эти "стимулы"? Напряжение, ток, волны на воде, ...? Как получаются и как связаны с частотой кварца МК? Телепатов тут нет. Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц. По умолчанию у меня была частота квантования 46875 Гц. Разделим 46875 на 8000, получится 5,859375 точек. Округляем до целых 6 точек. 46875 делим на 6, получаем 7812,5 Гц - реальная частота стимула вместо 8 кГц. Погрешность 2,34% Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 1 минуту назад, Dima1060 сказал: Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц. По умолчанию у меня была частота квантования 46875 Гц. Разделим 46875 на 8000, получится 5,859375 точек. Округляем до целых 6 точек. 46875 делим на 6, получаем 7812,5 Гц - реальная частота стимула вместо 8 кГц. Погрешность 2,34% Частота тактирования ЦАП и частота сигнала получаемого с него - никак не связаны (ну т.е. - если конечно частота получаемого сигнала много меньше частоты тактирования ЦАП). При частоте тактирования ЦАП = 46875Гц нет никаких проблем получить на выходе синусоидальный сигнал с частотой = ровно 8 кГц (ФНЧ по выходу ЦАП-а конечно никто не отменял). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 2 минуты назад, jcxz сказал: нет никаких проблем получить на выходе синусоидальный сигнал с частотой = ровно 8 кГц (ФНЧ по выходу ЦАП-а конечно никто не отменял). ТС, видимо, не хочет заниматься арифметикой, а хочет использовать константный массив. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба Только что, adnega сказал: ТС, видимо, не хочет заниматься арифметикой, а хочет использовать константный массив. На таком мощном МК и с такой низкой частотой тактирования ЦАП это просто бессмысленно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 8 минут назад, Dima1060 сказал: Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц Гляньте статью Леонида Ивановича про прямой цифровой синтез. Сможете получить любую частоту при любом кварце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба Сигнал заранее известен, можно настроить DMA в кольцевом режиме и готовить половинки заранее - FPU в помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 3 минуты назад, adnega сказал: FPU в помощь. FPU не нужен для вычисления синуса полиномом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 2 минуты назад, jcxz сказал: FPU не нужен для вычисления синуса полиномом. Ряд Тейлора? Т.е. иметь заранее вычисленные значения синуса, а рядом Тейлора достраивать промежуточные значения? Я примерно о том же и говорю: для ускорения можно в добавок к таблицам значений синуса в конкретных точках, хранить значения коэффициентов ряда Тейлора для данной точки. Затем берем дельту, дельту в кубе, в пятой и т.д. и делам свертку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 17 июля, 2021 Опубликовано 17 июля, 2021 · Жалоба 4 минуты назад, adnega сказал: Ряд Тейлора? Т.е. иметь заранее вычисленные значения синуса, а рядом Тейлора достраивать промежуточные значения? Нет. Никаких таблиц не нужно. Считаем синус полиномом в fixed-point для каждого сэмпла. Например: SECTION .text:CODE:NOROOT(2) PUBLIC sine THUMB A6 EQU -248273016 ;A6=-0.9248890576 A5 EQU 845095976 ;A5=3.1482278419 A4 EQU -53406012 ;A4=-0.1989528976 A3 EQU -1377768454 ;A3=-5.1325874557 A2 EQU -830573 ;A2=-0.0030941259 A1 EQU 843345115 ;A1=3.1417053758 A0 EQU -267 ;A0=-0.0000009929 ;Синус. Аргумент R0 == угол[радиан] / PI * 2^31 ;Результат: R0{-2^31+1...+2^31-1} == {-1...+1} sine: LSLS R1, R0, #1 IT MI RSBMI R1, R1, #0 SUBS R1, R1, R1, LSR #31 ASRS R3, R0, #31 LDRD R0, R2, sineT + 0 SMMLAR R0, R1, R0, R2 LDRD R2, R12, sineT + 8 SMMLAR R0, R1, R0, R2 SMMLAR R0, R1, R0, R12 LDRD R2, R12, sineT + 16 SMMLAR R0, R1, R0, R2 SMMLAR R0, R1, R0, R12 SMMULR R0, R1, R0 SUB R0, R0, #-A0 USAT R0, #30, R0, LSL #2 ;ограничим диапазоном 0...2^30-1 EORS R0, R3, R0, LSL #1 SUBS R0, R0, R3 BX LR DATA ALIGNROM 2 sineT DC32 A6, A5, A4, A3, A2, A1 ;, A0 си-объявление: extern "C" s32 sine(s32); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться