Перейти к содержанию
    

Нецелая системная частота STM32F4

Здравствуйте!

Использую STM32F429 для аудио девайса, возникло требование выдавать тональные стимулы с высокой точностью по частоте. Для этого решил поставить кварцевый резонатор на 8,192 МГц вместо 8 МГц. В итоге получил частоту I2S ровно 48 кГц. Но с таким кварцем теперь все остальные системные частоты неровные и нецелые. В CubeMX во вкладке тактирования ничего красным не подсвечивается, вроде как все частоты допустимы. Но меня немного терзают смутные сомнения, не получится ли от этого каких-нибудь проблем? Использую в процессоре два I2S, USB, SPI, SDRAM. Подскажите пожалуйста, есть ли какие то поводы для беспокойства?

Clock.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

USB нужно 48 МГц. У вас сколько вышло? 

По остальным интерфейсам - без разницы. Не о чем беспокоиться. Примут любуд частоту из диапазона допустимых. 

Если есть UART, то нужно обеспечить равные частоты на стороне передатчика и приёмника. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, ViKo said:

USB нужно 48 МГц. У вас сколько вышло? 

По остальным интерфейсам - без разницы. Не о чем беспокоиться. Примут любуд частоту из диапазона допустимых. 

Если есть UART, то нужно обеспечить равные частоты на стороне передатчика и приёмника. 

В CubeMX высвечивается что частота должна быть в пределах 47,88 - 48,12 МГц. У меня получилась 47,981714 МГц.

Clock.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, Dima1060 сказал:

Использую STM32F429 для аудио девайса, возникло требование выдавать тональные стимулы с высокой точностью по частоте. Для этого решил поставить кварцевый резонатор на 8,192 МГц вместо 8 МГц.

А что такое "тональные стимулы" и как они связаны с частотой кварца? И почему их нельзя выдавать с кварцем = 8МГц?

 

33 минуты назад, Dima1060 сказал:

В CubeMX высвечивается что частота должна быть в пределах 47,88 - 48,12 МГц. У меня получилась 47,981714 МГц.

А должно быть 48МГц. При такой частоте USB не факт что будет работать.

 

PS: Если уж реально нужно на I2S получить именно ровно 48кГц, так для этого у МК есть вход внешнего тактирования I2S (I2S_CKIN). Вот его и стоит задействовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, jcxz said:

А что такое "тональные стимулы" и как они связаны с частотой кварца? И почему их нельзя выдавать с кварцем = 8МГц?

Ну например стимул состоящий из 2-3 периодов с частотой 8 кГц, повторяющийся с частотой 20Гц. С кварцем 8 МГц получается частота квантования не ровно 48 кГц, отсюда вылезает погрешность по частоте для стимулов. Если поковырять делители, получается погрешность 0,19% в наилучшем случае, с таким кварцем. Требование у меня - обеспечить точность не более 1%. Но можно же эту погрешность практически убрать вообще с кварцем 8,192 МГц. Вот я и пытаюсь выяснить, будет ли это иметь какие то последствия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, Dima1060 сказал:

Ну например стимул состоящий из 2-3 периодов с частотой 8 кГц, повторяющийся с частотой 20Гц.

Ещё раз: Как именно частота неких стимулов связана с частотой кварца МК???  Где эти "2-3 периода 8кГц"? На Луне, на Марсе?

И что такое эти "стимулы"? Напряжение, ток, волны на воде, ...? Как получаются и как связаны с частотой кварца МК?

Телепатов тут нет.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, jcxz said:

Ещё раз: Как именно частота неких стимулов связана с частотой кварца МК???  Где эти "2-3 периода 8кГц"? На Луне, на Марсе?

И что такое эти "стимулы"? Напряжение, ток, волны на воде, ...? Как получаются и как связаны с частотой кварца МК?

Телепатов тут нет.  :unknw:

Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц. По умолчанию у меня была частота квантования 46875 Гц. Разделим 46875 на 8000, получится 5,859375 точек. Округляем до целых 6 точек. 46875 делим на 6, получаем 7812,5 Гц - реальная частота стимула вместо 8 кГц.  Погрешность 2,34%

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, Dima1060 сказал:

Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц. По умолчанию у меня была частота квантования 46875 Гц. Разделим 46875 на 8000, получится 5,859375 точек. Округляем до целых 6 точек. 46875 делим на 6, получаем 7812,5 Гц - реальная частота стимула вместо 8 кГц.  Погрешность 2,34%

Частота тактирования ЦАП и частота сигнала получаемого с него - никак не связаны (ну т.е. - если конечно частота получаемого сигнала много меньше частоты тактирования ЦАП).

При частоте тактирования ЦАП = 46875Гц нет никаких проблем получить на выходе синусоидальный сигнал с частотой = ровно 8 кГц (ФНЧ по выходу ЦАП-а конечно никто не отменял).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, jcxz сказал:

 нет никаких проблем получить на выходе синусоидальный сигнал с частотой = ровно 8 кГц (ФНЧ по выходу ЦАП-а конечно никто не отменял).

ТС, видимо, не хочет заниматься арифметикой, а хочет использовать константный массив.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, adnega сказал:

ТС, видимо, не хочет заниматься арифметикой, а хочет использовать константный массив.

На таком мощном МК и с такой низкой частотой тактирования ЦАП это просто бессмысленно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, Dima1060 сказал:

Например, ЦАП должен выдать стимул (звуковой) - один период синуса 8 кГц

Гляньте статью Леонида Ивановича про прямой цифровой синтез. Сможете получить любую частоту при любом кварце.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сигнал заранее известен, можно настроить DMA в кольцевом режиме и готовить половинки заранее - FPU в помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, adnega сказал:

FPU в помощь.

FPU не нужен для вычисления синуса полиномом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, jcxz сказал:

FPU не нужен для вычисления синуса полиномом.

Ряд Тейлора? Т.е. иметь заранее вычисленные значения синуса, а рядом Тейлора достраивать промежуточные значения?

Я примерно о том же и говорю: для ускорения можно в добавок к таблицам значений синуса в конкретных точках, хранить значения коэффициентов ряда Тейлора для данной точки. Затем берем дельту, дельту в кубе, в пятой и т.д. и делам свертку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...