Программирование МК STM32. УРОК 30. HAL. DAC. Sinus. DMA

Поделиться
HTML-код
  • Опубликовано: 18 сен 2024

Комментарии • 47

  • @alexmueller1041
    @alexmueller1041 7 лет назад +1

    Для работы с аналоговыми сигналами удобно использовать Digital signal processing for STM32 microcontrollers К примеру произвести FFT ( Fast Fourier Transformation) и сразу будет видно все компоненты сигнала. Если появятся видеос по ДСП , обязательно посмотрел бы!

  • @mykhailomorhal2181
    @mykhailomorhal2181 6 лет назад

    Сапсибо вам огромное)

  • @Kaagwaan
    @Kaagwaan Год назад

    Здравствуйте, если бы Вы замерили данный синусоидальный сигнал на обычном осциллографе, то увидели бы что частота синусоиды не 26,7 кГц, а 13,33кГц. Реализованный вами счетчик clk_counter почему-то считает такты на частоте HCKL/2, при условии если у вас тоже HCLK=84МГц.

  • @wdm_frwrd
    @wdm_frwrd 4 года назад

    Интересно, если в строке вывода времени периода всё умножить на 2, а в строке вывода частоты разделить всё на 2, то это уже будет больше соответствовать действительности. Сигнал смотрел на осциллографе.

  • @victorsi1992
    @victorsi1992 3 года назад

    HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_1, (uint32_t*)sin_tab1, 128, DAC_ALIGN_12B_R);
    Як стартувати не з нульової адреси в масиві, а скажімо з 35-ї ? Дякую

  • @abdelalkuor6293
    @abdelalkuor6293 7 лет назад

    Hi, Is there a way to change the amplitude of the sin wave while it is running on the TFT screen, like using potentiometer?

  • @nomadenvoy
    @nomadenvoy 7 лет назад

    Спасибо за примеры! Подскажите - почему во всех примерах у меня выскакивает одна ошибка:
    error: #20: identifier "GPIO_SPEED_FREQ_VERY_HIGH" is undefined
    error: #20: identifier "GPIO_SPEED_FREQ_LOW" is undefined

  • @vladislavalbus2211
    @vladislavalbus2211 6 лет назад

    Показания осциллографа отличаются ровно в два раза - частота в два раза меньше, чем на дисплее, а период, соответственно, в два раза больше. Показания на дисплее получились точно как на видео. Может где-то ошибка в частотах тактирования?

  • @YuriyIY
    @YuriyIY 8 лет назад

    Надо было у меня же спросить. Чет посчитать я могу. Вот пример расчета для функции HAL_Delay().
    Dly = 1000 / freq / 2;
    Где freq - требуемая частота импульсов, а dly - время в миллисекундах для функции задержки.

    • @narodstream552
      @narodstream552  8 лет назад

      В смысле? Что-то не то в проекте? Нам же нужна частота полного синусоидального колебания. Причем не сколько частота, сколько период. Вы про какие задержки?

    • @YuriyIY
      @YuriyIY 8 лет назад

      А, понял, сорри. Видимо отвлекли от видео, я пропустил, что мы считали. :-) Ну вот по этой формуле я как раз считал задержку для генерации меандра заданной частоты.

    • @narodstream552
      @narodstream552  8 лет назад

      Понятно. Тут нам важно отследить за сколько тактов мы управимся благодаря DMA с передачей всего массива. Надо потом ещё анализатором померить будет. Ему всё равно, какой формы колебания, для него они все квадратные)

    • @YuriyIY
      @YuriyIY 8 лет назад +1

      Кстати, мне тут идут из Москвы дисплеи от МЭЛТ, аналоги HD44780. Сделать обзор? Будет кому интересно, не?

    • @narodstream552
      @narodstream552  8 лет назад

      А вот и посмотрим. Думаю дисплеи - это всегда интересно.

  • @nikolai4498
    @nikolai4498 6 лет назад

    можно было воспользоваться функцией синус с библиотеки math.h
    unsigned short sinys[64];
    for(unsigned char a = 0; a < 64; a++){
    sinys[a] = (unsigned short)(4095.0 * sin(6.28*(float)a/64.0)+4095.0);
    }
    HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)sinys, 64, DAC_ALIGN_12B_R);

    • @nikolai4498
      @nikolai4498 6 лет назад

      частота = част таймера / 64
      период = 1 / частота

    • @ВладимирГрачев-в4к
      @ВладимирГрачев-в4к 6 лет назад

      попробовал синус почему-то вышел очень корявый с всплесками, не подскажите в чем может быть дело?

    • @nikolai4498
      @nikolai4498 6 лет назад

      может помехи, посмотри при меандре будут ли помехи.

  • @vad741
    @vad741 6 лет назад

    Учусь работать с СТМ32 по Вашим урокам. Но как увидел получения синус через таблицу то просто орнул в голос. Без обид, но это метод для школьников максимум. Ожидал увидеть задание частоты дискретизации, определения приращения угла от заданной частоты в герцах, ВЫЧИСЛЕНИЯ синуса по новому углу и выдачу нового отсчёта в ЦАП. П.С. в темах про АЦП тоже отсутствует пониятие дискретизация и получение значений со строго определённой частотой. А без этого не построить форму сигнала для дальнейшего анализа.

    • @narodstream552
      @narodstream552  6 лет назад +1

      А я и не знал, что люди сюда приходят учиться строить синус программно. Мало того, я не знал, что это так важно. Поэтому не придал этому значения. Урок-то вообще-то по программированию периферии контроллера.

    • @vad741
      @vad741 6 лет назад

      Принимайте не как критику, а как пожелание к уделению внимания к таким параметрам. На прошлых уроках (АЦП по прерываниям и ДМА) меня очень смутило что осталось не понятным с какой частотой получаем выборки, как на это влиять и получать значения с точно заданной частотой? Вопрос конечно решил, путём симбиоза двух уроков. Но был удивлён отсутствием такой инфы. Я понимаю что большинство измеряет вялые процессы типа температуры, и там секундой позже - не беда. Но для цифровой обработки сигналов нужна строгая определённость.

    • @narodstream552
      @narodstream552  6 лет назад

      А меня теперь всё время за эту таблицу будут понукать? Мне может урок из-за этого удалить?

    • @vad741
      @vad741 6 лет назад

      Быстродействие! Как оказалось на практике, функция sin() очень медленная. Даже более быстрая sinf() тоже тормозит. В итоге лучше заранее сделать большую таблицу с не менее 360 значений, и потом из нее брать наиболее близкий угол. Частота выборок постоянна. А вот приращение угла зависит от частоты. Добавляй приращение и бери из таблицы ближайший угол.

    • @vad741
      @vad741 6 лет назад

      Вы проделали большую работу. Спасибо вам. Ничего удалять не надо.

  • @quantrieu686
    @quantrieu686 8 лет назад

    Добрый день. Подскажите, пожалуйста, как таблицу значений синуса рассчитать! Спасибо.

    • @narodstream552
      @narodstream552  8 лет назад

      Добрый день! Я делал в Excel. Разделил 360 градусов на желаемое количество ступеней и сделал столбец из этих значений, а затем другой столбец заполнил с вычислением синуса углов, благо есть такая формула, ну и округлил соответственно.

    • @yuriyvolkov5850
      @yuriyvolkov5850 5 лет назад

      @@narodstream552 дайте пожалуйста файлик

  • @иванрусев-ш5щ
    @иванрусев-ш5щ 5 лет назад

    Можно вопрос массив синуса по какой формуле вы вычисляли в Exel?

    • @narodstream552
      @narodstream552  5 лет назад

      Точно не помню, но, по-моему, просто вычислял синус, а потом умножал его на пять. А величины в ряду от нуля до 2 ПИ.

    • @ivanrusev2270
      @ivanrusev2270 5 лет назад

      @@narodstream552 можете дать ссылку.Я не прошу другое ?

    • @narodstream552
      @narodstream552  5 лет назад

      Я не сохранял, поэтому рассказал принцип. Это важнее, лучше понять, чем копировать.

    • @ivanrusev2270
      @ivanrusev2270 5 лет назад

      @@narodstream552 метод тыка у меня вся жизнь такая спасибо

  • @ivanrusev2270
    @ivanrusev2270 5 лет назад

    У STm32 есть максимум 2 цапа а если мне нужно больше что мне тогда делать?

    • @epicmap
      @epicmap 5 лет назад

      На некоторых есть и больше двух. Но также можно внешние DAC использовать. Есть по I2C/SPI, но они дороже. На I2S дешевле. Но где есть I2S, там есть и DAC. Но их можно и комбинировать.

  • @ivanrusev2270
    @ivanrusev2270 5 лет назад

    а формулу я нашёл

  • @ivanrusev2270
    @ivanrusev2270 5 лет назад

    только у вас это не синус.а пила

    • @narodstream552
      @narodstream552  5 лет назад

      Цель не в этом данного урока. Цель - научиться работать с периферией.

    • @ivanrusev2270
      @ivanrusev2270 5 лет назад

      @@narodstream552 понял

  • @ЛучшийДвигатель
    @ЛучшийДвигатель 5 лет назад

    26:31 - 13(МГц) не годится для звука? Ты гонишь!!!!! У тебя же у самого 217(кГц) выводится. Даже ультразвук еще выведет.

    • @narodstream552
      @narodstream552  5 лет назад

      Пожалуйста, поаккуратнее с выражениями. Также с серией восклицательных знаков. 217 - это сэмплрейт, а частота синусоиды - это другое. В одном периоде синусоиде должно быть как минимум 10 сэмлов, это как минимум. Но чтобы увидеть какую-то картину, надо хотя бы 20. Так что посчитайте.

    • @ЛучшийДвигатель
      @ЛучшийДвигатель 5 лет назад

      @@narodstream552 Может быть это тебе нужно пересчитать и перечитать частоту звука: от 20(Гц) до 20(кГц). У тебя выводится 217(кГц), т.е. в 10 раз больше. У тебя проблемы с арифметикой?

    • @narodstream552
      @narodstream552  5 лет назад

      217 килогерц - это частота измерений, а не частота синуса.
      а нам нужно измерить частоту синуса 20 килогерц.
      Делим 217 на 20 получим меньше 11 килогерц.
      Если начнем измерять 20 килогерц, то на один период синуса у нас получится 11 измерений, маловато, я считаю.
      С арифметикой у меня всё хорошо. С тригонометрией, линейной алгеброй и прочими отраслями высшей математики тоже не плохо - курсовые делал в своё время всей группе.
      А Вам надо разобраться в отличии сэмпл-рейтинга с частотой. У осциллографов есть и то и другое.
      У моего UNI-T частота 25 мегагерц, а сэмплрейтинг 250. Там отношение 1 к 10, но практика показала, что это мало, желательно для пущей полноты картины 1 к 20. я подавал 25 мегагерц - синус виден но не отчетливо, а вот при 12 мегагерц - отчётливо.

    • @narodstream552
      @narodstream552  5 лет назад +1

      следующий комментарий был удалён по причине присутствия в нём национальной розни.
      Здесь публичное сообщество и здесь все равны.