Обновить
10
0

Пользователь

Отправить сообщение

Автор, а почему Вы не захотели использовать PDM режим I2S? Это почти что полноценный ЦАП, частотно-импульсная модуляция. Можно было бы настоящий полифонический звук играть, ну, в меру убогости пищалки, конечно

А где именно это написано, если не секрет? Пошёл гуглить, хер найдёшь вообще официальный источник со списком. У опсосов одно, в новостях другое, плюс он постоянно меняется. Дебилизм.

У кортекса аппаратный умножатор есть, а в конкретно этом RISC-V ядре его нет.

Так точно. Предположу, что дипсик.

А Сишного компилятора на эту штуку точно нет? Я бы поигрался, пусть и проц аппаратно под жабу, как тут пишут. Конечно, дум не сделаешь, но интересны конкретные ТТХ — набор инструкций ЦП, скорость их исполнения, тактовые частоты, объём ПЗУ/ОЗУ, наличие аппаратных ускорителей и прочей периферии... И карта областей памяти со всеми регистрами периферии :)

Да, и я в других ответах расписал, почему не получилось использовать H743

Это уже будет не аппаратный синтез. Опять же, программный я уже делал. И я не понял, что за щелчки

Те DDS-генераторы, которые я использовал, не умеют генерировать прямоугольную волну с изменяемым коэффициентом заполнения. Умеют только меандр. И поскольку я по опыту изучения MOS Technology SID знаю, как изменяемый коэффициент заполнения может разнообразить звучание, я каждый из четырёх каналов сделал через аналоговый мультиплексор. Мультиплексор подключает на вход управляемого аттенюатора либо сигнал с DDS (треугольная волна или синус), либо сигнал с вывода микроконтроллера (ШИМ). После аттенюаторов сигналы суммируются аналогово на операционнике и подаются на джек

Если честно, всегда хотел такую штуку сделать. А тут как раз случай подвернулся. Вообще хотелось бы сделать свой звуковой чип, но это, понятное дело, невозможно из-за цены, плюс в ПЛИС и прочих смежных с этим делом вещах только начал разбираться.

Здравствуйте, я выше уже пояснял, как я использовал все таймеры: https://habr.com/ru/articles/871564/comments/#comment_27744520. Также можете посмотреть исходники на гитхабе, ссылка на репозиторий в самом начале статьи.

Да, смысл конкретно этой статьи был именно показать, как использовать. Вообще надо бы добавить, что лучший результат получится, если у UART есть FIFO, поскольку тогда период будет выдержан железобетонно (в статье и здесь же в комментариях описал, почему с обычным UARTом это может быть не так).

Про ШИМ не очень понял. В курсовом проекте ШИМ генерируется на звуковых частотах...

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

У меня курсовой проект называется «Устройство программно-аппаратного синтеза звука», если я правильно помню. Изначально приписки «программно-» вообще не было, она появилась по причине того, что можно получить новые тембры, если быстро переключать настройки канала. Но сам синтез строго аппаратный. Я пробовал сделать программный синтез: https://github.com/LTVA1/flizzer_tracker и https://youtu.be/dLWK_Au_vbM, однако там были проблемы с невозможностью добавить оверсэмплинг по причине ограниченных вычислительных мощностей. Без оверсэмплинга и ферритовых фильтров в проводе с аудиоджеком звучит не очень хорошо. Плюс преподаватель настаивал на проектировании какой-то достаточно сложной обвязки для полученич оценки «отлично», и простой аудиоджек явно на требуемую сложность не тянул. Поэтому решил попробовать с внешними DDS-генераторами, генератором шума и прочими аппаратными делами.

Вот для этого, внимание на четыре верхних канала: https://youtu.be/L5HF_qdjZyU

Я не собираюсь никакие гармоники генерировать. Я говорил про восприятие ШИМ-сигнала на слух. Посмотрите верхние четыре канала здесь, чтобы понять, о чём я: https://youtu.be/L5HF_qdjZyU

Требования: настройка коэффициента заполнения от 0 до 100% с точностью не хуже 1%, диапазон частот от 10 Гц до пусть будет 4 кГц. При этом частота счёта счётчика, на базе которого ШИМ генерируется, не менее 500 кГц. Почему? Потому что послушайте сгенерированный на компьютере ШИМ сигнал 2 кГц с плавно меняющимся коэффициентом заполнения при сэмплрейте 44100 Гц. Услышите алиасинг. Для того, чтобы его уменьшить, нужно применить оверсэмплинг, желательно 16х. Так и приходим к вышеозвученной частоте. Таймеры микроконтроллера работают у меня на частоте 72 МГц, ну и остальным требованиям соответствуют. Единственный минус — на разных частотах разная сетка коэффициента заполнения (поскольку меняем значение в регистре ARR для смены частоты). Но на всех частотах она достаточно мелкая, чтобы выдерживалась точность в 1%.

Хорошо, возможно, требования слишком строгие. Можно уменьшить интервал частот, например до 100 Гц — 1 кГц. Если забить на реальную точность кварца, то всё равно получится, что прерывание-«диспетчер» придётся вызывать слишком часто. Я эту проблему решил путём использования аппаратных счётчиков, в том числе тех, которые не совсем для этого предназначены.

Покажите или расскажите, как сделать четыре ШИМ-сигнала с полностью независимыми частотами и коэффициентами заполнения на каком-нибудь таймере в STM32F303. Я способа не нашёл. По блок-схемам счётчик там один, а вот ШИМ-контроллеров четыре и более. Но внутри ШИМ-контроллеров своих счётчиков нет, ну или я невнимательно смотрел. Я могу независимо управлять коэффициентом заполнения каждого канала, но частота у них будет общая.

Не один. Там будет довольно сложный обработчик, который будет очень часто вызываться, поскольку у меня большие требования к точности выдерживания частоты. В результате процессорное ядро будет тратить на это кучу времени.

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

1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность