Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Функциональный генератор на базе STM32F103

Ср июл 31, 2019 11:31:03

kloker писал(а):или вы про инициализацию и тактирование ЦАП сейчас?
Именно это. Как настроите периферию и будете выводить данные в ЦАП?

если в ардуино, то напрямую никак, только через либу, запиленую под именно эти чипы на STM. как в принципе и сделано в ихних примерах.
как можно наваять платформонезависимый софт, если железо идеологически и архитектурно разное?
у STM с HAL и LL грабля на грабле, даже между кристаллами в линейке клинит на поворотах, а тут с 8 битных чипов архитектуры 20 летней давности надо взлететь на чипах, ктотрым 8 лет еще нет, и чтобы ничего не переписывать))

это как прога в DOS под LPT программатор, для 8086 камня писаная на Win-10 c Core-i7, осталось виртуалку поднять и pci-e-LPT адаптор с чулана вынуть))))

Re: Функциональный генератор на базе STM32F103

Ср июл 31, 2019 13:23:23

kloker писал(а):как можно наваять платформонезависимый софт, если железо идеологически и архитектурно разное?
То есть вы предлагаете отказываться от преимуществ архитектуры?
Тогда зачем вообще нужен STM32? Пишите под Arduino Uno или Nano.
По аналогии при разработке в ArduinoIDE под ESP8266 или ESP32 нужно отказаться от всего платформозависимого, т. е. от WiFi и т. д. Опять же, в таком случае пишите под Arduino Uno или Nano.
Надеюсь понимаете к чему это я?

kloker писал(а):у STM с HAL и LL грабля на грабле
Используйте SPL. В ней давно баги устранили.

И все же вы не ответили как настроите периферию и будете выводить данные в ЦАП? Представьте что есть МК STM32 с ЦАП в который нужно вывести синус. Как вы это сделаете. Код не нужен. Просто напишите какой метод используете.

Re: Функциональный генератор на базе STM32F103

Ср июл 31, 2019 14:50:48

kloker писал(а):как можно наваять платформонезависимый софт, если железо идеологически и архитектурно разное?
То есть вы предлагаете отказываться от преимуществ архитектуры?


интересное заключение, а где вы об этом прочли?


про инит ЦАП и синус ничего делать не буду, ибо опыта на Си и STM полгода от силы, и то, потому что сын в колледже Си++ проходит, вместе сидим и перевариваем)) Delphi и Visual Pascal в институте не в счет, и давно и мало.
максисмум на что пока хватает знаний, допилить чужой код, и в ардуине железку прикрутить.

как делают синхронный вывод через ЦАП есть гайды с примерами от СТМ и кучка статей, как на кубе проинить, или ручками через SPL.
по памяти там 2 счетчика юзают для синхры, и по прерыванию запись с массива в регистр ЦАП, и такт на изменение на аналоговом выходе. а вот масштабирование по временной сетке(смена частоты) уже по формуле. сложности только в делителях PLL, ибо их тоже придется менять на ходу, с выключением и реинитом шины и цап

Re: Функциональный генератор на базе STM32F103

Ср июл 31, 2019 18:29:51

kloker писал(а):потому что сын в колледже Си++ проходит
Для МК не обязательно писать на C++. Обычного Си, бейсика или ассемблера достаточно.

kloker писал(а):по прерыванию запись с массива в регистр ЦАП
Не самое оптимальное решение.
Если форма сигнала не изменяется, создается массив и связкой таймер+ЦАП+DMA генерируется сигнал. При этом нет никаких прерываний и действий со стороны процессора. Периферия работает сама по себе.
Поэтому если хотите использовать все возможности МК, ардуина не самый подходящий инструмент.

Re: Функциональный генератор на базе STM32F103

Ср июл 31, 2019 21:16:19

.
Поэтому если хотите использовать все возможности МК, ардуина не самый подходящий инструмент.

а кто спорит? ардуина не для того создана, если на то пошло))

меняется не форма сигнала а частота, от 0.1 гц до предельной для ЦАП, потому надо и о интерполяции задумываться на границах диапазона. с инфранизкими частотами даже сложнее задача..
если на борту есть FPU, то и массива с заготовкой формы сигнала не нужно, следующая итерация вычисляется по формуле.

два таймера не для синусоиды, а для потоковых данных, половину буфера заполнять, пока DMA второй половиной ЦАП кормит, а второй таймер следит за битрейтом.

Re: Функциональный генератор на базе STM32F103

Чт авг 01, 2019 20:43:52

Прокомментирую вкратце некоторые идеи:
-К572ПА1 в качестве ЦАПа для DDS не годится, слишком медленный. Нужна скорость установления уровня не более нескольких единиц наносекунд.
-Встроенный ЦАП даже при условии разгона всё равно медленнее внешнего резисторного (~ 4,5Мсемпла/сек против ~5 Мегасемплов/сек на F103 && 72MHz)
- Кому-как, а лично мне паять корпуса с более мелким шагом чем у tqfp32 трудно физически.. и руки подводят и зрение. :cry: Так что единственный вариант покупать готовую плату. Кстати платы аля BluePill, но с F303 уже есть в продаже, видел на Али по 300р, к сожалению ссылку не сохранил :facepalm:
-шутка про ассемблерные вставки понравилась :)))


ассемблерные вставки в ардуино под AVR, IDE это позволяет. частенько попадались кстати.
на STM гуру ваяющих в ассемблере в природе не встречал, но поговаривают, что такие существуют.
К572ПА1 я для примера привел, ессно нужны более современные.
если внешняя R2R то берите готовой дип сборкой, их еще продают, только с погрешностью не больше 1 %, не хорошо когда старший бит своим разбросом перекрывает все младшие с запасом, синусоиды потом надкусанные получаются :)

Добавлено after 25 minutes 10 seconds:
кстати вот примерчик показательный:
https://habr.com/ru/post/372453/
Логический анализатор
Самый быстрый режим. Примерно 20 MSPS на каждом канале. Самый быстрый код для этого режима выглядит так:
Код:
u32 i = 0;
dataBuffer.u8[i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;
dataBuffer.u8[++i] = GPIOA->IDR;

и так далее на весь буфер.
Значение переменной i в этом случае вычисляются на этапе компиляции и в итоге из dataBuffer.u8[++i] = GPIOA->IDR; получается всего 2 операции — загрузить данные в регистр из порта и сохранить данные в память по заранее посчитанному адресу. Никакими циклами такой производительности достичь не получилось.

тем же способом можно и на R2R семплы выплевывать, если мимо тормоза с DMA .

Re: Функциональный генератор на базе STM32F103

Чт авг 01, 2019 22:32:33

__asm {

LDRH rez,[#0x4001244C]
STRH rez,[addressbuffer], #2
.
.
.
.
.
}

Так еще быстрей.

Добавлено after 3 minutes 3 seconds:
Но будет джиттер.

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 05:43:40

Не самое оптимальное решение.
Если форма сигнала не изменяется, создается массив и связкой таймер+ЦАП+DMA генерируется сигнал. При этом нет никаких прерываний и действий со стороны процессора. Периферия работает сама по себе. Поэтому если хотите использовать все возможности МК, ардуина не самый подходящий инструмент.


Мурик, вы уже не в первый раз пишите про ардуино какие-то странные вещи. В чём конкретно неподходит то? В частности написать тот же вывод массива через DMA в Arduino IDE ещё быстрее и проще чем в любой другой IDE. Это буквально 5 строк.


ассемблерные вставки в ардуино под AVR, IDE это позволяет. частенько попадались кстати.


Вы про что? Я собссно как раз из тех, кто активно использует ассемблерные вставки и на AVR и на ARM :)

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 18:16:40

DimKra писал(а):В частности написать тот же вывод массива через DMA в Arduino IDE ещё быстрее и проще чем в любой другой IDE. Это буквально 5 строк.
И что помешало выложить в теме эти 5 строк?

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 19:07:12

Мурик , можно и выложить :) Вот пример, выводит 8-битный синус в ЦАП через DMA . Написал, когда изучал F103ret6.
Код:
#include <libmaple/dac.h>
#include <dma_private.h>
uint8_t wave[256]; //массив синусоиды
void setup() {
for(uint16_t n=0; n<256; n++){wave[n]=255*(sin(TWO_PI*float(n)/256)+1)/2 ;}// синус
dac_init(DAC,DAC_CH1);
DAC->regs->CR =  DAC_CR_EN1 | DAC_CR_BOFF1 | DAC_CR_TEN1 | (1<<5) | DAC_CR_DMAEN1;
TIMER2_BASE->CR2= 1<<5; TIMER2_BASE->ARR=1;
TIMER2_BASE->CR1=1;

dma_init(DMA2);
dma_setup_transfer(DMA2,DMA_CH3,&DAC->regs->DHR8R1,DMA_SIZE_8BITS, (uint8_t*)wave, DMA_SIZE_8BITS, (DMA_FROM_MEM|DMA_MINC_MODE|DMA_CIRC_MODE) );
dma_set_num_transfers(DMA2, DMA_CH3, 255);
dma_enable(DMA2, DMA_CH3);

}

void loop() {  }

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 20:16:26

готового решения из всех теоретических изысканий и взаимных замеров IQ, я так понимаю, не предвидится..

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 20:25:05

А это http://arduino.ru/forum/proekty/generat ... ent-457249 что не готовое ?

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 20:50:44

А это http://arduino.ru/forum/proekty/generat ... ent-457249 что не готовое ?

я про бой двух интеллектов))
ветку по ссылке я в первую очередь пересмотрел, и буду пробовать.

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 21:04:15

К сентябрю будет версия 3.5 :) В частотометре можно будет вкл/откл делитель на 8. и ещё планирую новый режим - одновибратор. По нажатию кнопки будет генерировать импульс длительностью от одного такта мк (~13,8nS) и длиннее. А пока в отпуск собираюсь.. :music:

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 22:07:46

Ну да, ssss же сказал что все это " ерунда получается" :))). Хорошо отдохнуть!

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 22:48:52

DimKra писал(а):В частности написать тот же вывод массива через DMA в Arduino IDE ещё быстрее и проще чем в любой другой IDE.
DimKra писал(а):Вот пример, выводит 8-битный синус в ЦАП через DMA.
Во первых, строк больше чем 5.
Во вторых, с таким подходом можно написать в другой IDE и отладить, что в ArduinoIDE недоступно.
ArduinoIDE ничего не упрощает. Код платформозависимый. Пока что одни недостатки.

Re: Функциональный генератор на базе STM32F103

Пт авг 02, 2019 23:17:26

Спасибо за конструктив, и приятно отдохнуть!))

Добавлено after 8 minutes 16 seconds:
И да, одновибратор это полезная штука.
Хорошо бы еще счетчик импульсов с компаратором на входе прикрутить, чтобы возможность отлова тех самых иголок в постоянке появилась.
Дебажить аппаратные глюки без таких ловушек сложновато, вч осцилом даже поймать сложно.

Re: Функциональный генератор на базе STM32F103

Пн авг 05, 2019 18:59:44

Да! Теоретические изыскания пока ни как не сказываются на практическом конструктиве в ЛУТ исполнении из рассыпных деталей.
Видать придется самому печать рисовать

Re: Функциональный генератор на базе STM32F103

Пн авг 05, 2019 21:44:04

софт и схема есть, уже половина работы выполнена, осталось под свою комплектуху плату нарисовать.
ну или в архиве яндекс диска у пользователя 240265 нужное поискать

Re: Функциональный генератор на базе STM32F103

Вт авг 06, 2019 05:02:35

Там нету.
Ответить