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

Sergo1799

Участник
  • Постов

    10
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Спасибо. Выдача ТЗ означает как минимум предоплата и/или договор, а наши заказчики очень не любят так работать. Поэтому нам приходится работать на авось.
  2. Доброго вечера! Имеем звуковой излучатель, который излучает через ШИМ синусоидальные сигналы заданных частот через обычный маломощный динамик. На плате излучателя стоит цифровой микрофон, который используется для адаптивной регулировки громкости, т.е. когда окружающая обстановка шумная, громкость сигнала становится выше и наоборот. Микроконтроллер ATMega328. По документации заданы частоты в диапазоне 500 Гц, например 2000 Гц +/- 500 Гц. По требованиям нужно поддерживать некий минимальный уровень шума. Возникает подозрение, что микроконтроллер регулирует не громкость, т.е. уровень заполнения ШИМ, а сдвигает частоту 2000 Гц в зависимости от уровня сигнала от микрофона. Верно ли подозрение? И как это можно реализовать программно? Каков алгоритм? Заранее, спасибо.
  3. Я читал про это, но боюсь прототип устройства на ATmega такое не делает. Мощи не хватит. Там задействовано два канала ШИМ и скорее всего используют 16-битный ШИМ с разделением по 8 бит на канал с резюками R и 2^N*R. Но при этом еще стоит микрофон заведенный на АЦП и обратная связь с усилка и динамика, заведенная опять же на АЦП. На выходе с фильтра 2-ф гармоника меньше в 2 раза по сравнению с 1-ой. Но тут еще фокус в том, что после усилка и динамика спектроанализатор на смартфоне выдает амплитуду 2-ой и 3-ей гармоник даже выше основной. Попробую увеличить частоту ШИМ. Таймер ТIM3 в stm32g4. Режим обычный - PWM mode 1.
  4. Доброго дня! Вопрос в следующем: Стоит задача получить синусоидальный сигнал посредством ШИМ. Все работает, но, соответственно, появились гармоники нежелательные. Нужен чистый тон. Соответственно нужно подавить 2-у и последующие гармоники. Как это эффективно сделать? Активные фильтры нет возможности использовать, только RC первого порядка. Сигналы в районе 1500-3000 Гц. Частота ШИМ 100 кГц. Разрешение 8 бит. Есть вариант использовать 2 канала ШИМ с общей разрядностью 16 бит и соединять их через резистры R и 2^N*R. Есть вариант вывести 3 старших бита на порты в/в, а остальные на ШИМ с частотой 800 кГц через матрицу R-2R. Можно сделать противофазный канал ШИМ и сложить с обычным ШИМ для устранения шумов. Что лучше по критерию эффективности? Либо лучше брать сигнал с выхода, заводить на АЦП, а потом к ШИМ-сигналу что-то подмешивать?
  5. STM32G4 PLL

    Вы тут прекрасно общаетесь между собой. Это хорошо. Но тем товарищам, которые упоминали про "калокод" отвечу, что задачи упихать код в минимум памяти не стоит, проект делается пока на отладке. Критически важные прерывания я делаю по всем правилам. А умничать может каждый вмеру своей калости)
  6. STM32G4 PLL

    Все заработало. Спасибо!
  7. STM32G4 PLL

    fVCO_OUT минимум 96 МГц, т.е. надо либо P, либо Q, либо R выходы использовать, а коэффициент N увеличить до как минимум 96 МГц?
  8. STM32G4 PLL

    Смотрел уже - 16 МГц, VCO соответственно 32 МГц должно быть на выходе, максимум 170 МГц по даташиту.
  9. STM32G4 PLL

    Нет, сам писал. А что?
  10. STM32G4 PLL

    Приветствую! Проблема в следующем: PLL не хочет устанавливаться в качестве SYSCLK. В регистре CFGR не устанавливаются соответствующие биты SWS и программа не выходит из цикла ожидания этих битов. В чем может быть косяк? //Включаем HSE на 24МГц и ждем его готовности RCC->CR |= RCC_CR_HSEON; while((RCC->CR & RCC_CR_HSERDY) != RCC_CR_HSERDY) { } //HSE как источник тактов для PLL RCC->PLLCFGR |= RCC_PLLCFGR_PLLSRC_HSE; //Настройка коэффициентов PLL: PLLM = 6; PLLN = 8 RCC->PLLCFGR |= (RCC_PLLCFGR_PLLM_0 | RCC_PLLCFGR_PLLM_2); RCC->PLLCFGR ^= RCC_PLLCFGR_PLLN_4; RCC->PLLCFGR |= RCC_PLLCFGR_PLLN_3; //Включаем PLL и ждем его готовности RCC->CR |= RCC_CR_PLLON; while((RCC->CR & RCC_CR_PLLRDY) != RCC_CR_PLLRDY) { } //Подключаем PLL в качестве SYSCLK RCC->CFGR |= RCC_CFGR_SW_1; while((RCC->CFGR & RCC_CFGR_SWS_PLL) != RCC_CFGR_SWS_PLL) { } //Обновляем системную частоту SystemCoreClockUpdate(); //Выключаем HSI RCC->CR ^= RCC_CR_HSION;
×
×
  • Создать...