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

Re: Карманный осциллограф на STM32

Ср авг 31, 2016 11:17:48

GFX писал(а): С такой подачей как здесь, мол ты дурак, сразу видно программист и т.д. мне помощь не нужна, тратя свое время получать оскорбления? да на фиг оно мне упало, для себя я его доделаю.


Ну-ну :))) По плечу - валяйте. Зачем вам тогда вообще нужен форум?
Потратьте своё драгоценное время лучше на изучение аналоговой схемотехники, чтобы избежать хотя бы детских граблей, и соответствующей, как вы сказали, "подачи".
У людей на уяснение всех нюансов уходят годы, это тебе не HAL с калокубом крутить, когда наваял по-быстрячку и запустил.

Re: Карманный осциллограф на STM32

Ср авг 31, 2016 12:16:12

Andrew Martin писал(а):
GFX писал(а): С такой подачей как здесь, мол ты дурак, сразу видно программист и т.д. мне помощь не нужна, тратя свое время получать оскорбления? да на фиг оно мне упало, для себя я его доделаю.


Ну-ну :))) По плечу - валяйте. Зачем вам тогда вообще нужен форум?
Потратьте своё драгоценное время лучше на изучение аналоговой схемотехники, чтобы избежать хотя бы детских граблей, и соответствующей, как вы сказали, "подачи".
У людей на уяснение всех нюансов уходят годы, это тебе не HAL с калокубом крутить, когда наваял по-быстрячку и запустил.
Моей целью не было изучение аналоговой части, моя цель была лучшее изучение STM32 в практической задаче, хотите лучшею входную часть, да пожалуйста, изучайте, делайте, АЦП от этого работать по другому не начнет и программа тоже. Мне это не нужно сто лет. Заменю ОУ на МСР6022 и в путь. Форум нужен для конструктивной беседы, а не хаяния, прошу не путать. Дельного только услышал "поставь, что по схеме МСР6022", ну ОК, остальное вода. Мне не интересно изучать ОУ, экспериментировать с ними, покупать кучу разных, оно мне не нужно, в жизни я ими не пользуюсь. Хотите помочь, знаете простую, надежную, проверенную схему, выкладывайте, нет, хорош пустые коменты набивать. Устройство будет по схеме хамелиона, и оно будет работать т.к. он работал, я просто отошел от схемы входной части. в моей задумке входную часть менять не планировалось. Замену МК, и экрана я выполнил.

Re: Карманный осциллограф на STM32

Ср авг 31, 2016 13:00:42

GFX писал(а):Устройство будет по схеме хамелиона, и оно будет работать т.к. он работал, я просто отошел от схемы входной части. в моей задумке входную часть менять не планировалось. Замену МК, и экрана я выполнил.

У Хамелеона основной недостаток в необходимости поисков дисплея, недорогой распространенный дисплей будет многими приветствоваться. Кстати, как он по SPI, не тормозит?
Нормальная зарядка и преобразователь отрицательного питания на IC тоже хорошо, упростит сборку и наладку.
Если использовать внутренний АЦП STM, можно избавиться от внешнего недешевого, что тоже многим понравится.
Нужно ли два канала? Вопрос спорный.
Но если быстродействие МК значительно превышает возможности аналоговой части, то можно сделать двухканальный с переключением входных каналов.

Re: Карманный осциллограф на STM32

Ср авг 31, 2016 14:03:42

vlad465 писал(а):
GFX писал(а):Устройство будет по схеме хамелиона, и оно будет работать т.к. он работал, я просто отошел от схемы входной части. в моей задумке входную часть менять не планировалось. Замену МК, и экрана я выполнил.

У Хамелеона основной недостаток в необходимости поисков дисплея, недорогой распространенный дисплей будет многими приветствоваться. Кстати, как он по SPI, не тормозит?
Нормальная зарядка и преобразователь отрицательного питания на IC тоже хорошо, упростит сборку и наладку.
Если использовать внутренний АЦП STM, можно избавиться от внешнего недешевого, что тоже многим понравится.
Нужно ли два канала? Вопрос спорный.
Но если быстродействие МК значительно превышает возможности аналоговой части, то можно сделать двухканальный с переключением входных каналов.

Скорости SPI достаточно, конечно если график загруженный то FPS проседает, вообще оно от 100 Гц до 4 может прыгать, но если на экране разборчивый сигнал то около 15-20 есть и этого вполне достаточно.

Да внешний АЦП можно и не ставить, будут работать 2 канала на встроенных АЦП, просто битрейт будет до 4,5 мегасемпла на канал. Но внешнее по лучше вроде по шумам. В режиме 9.14 встроенное АЦП уже работает с огромными косяками и можно только лишь на форму сигнала посмотреть, но оно и понятно, встроенное должно работать только до 2 мегасемплов в режиме 1 канала на два АЦП. а дальше это издевательство над ним.

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

АЦП внешнее завелось, я подал на него 32 мегагерца, считывание происходит с частотой 21333333 артефактов вроде нет, есть колебание на 1 разряд, если прицепить вход на землю или опорное, но реальный сигнал посмотреть не могу, у меня ОУ нет нормальных, а те что есть сами генерят что-то.

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

Re: Карманный осциллограф на STM32

Ср авг 31, 2016 23:03:55

Запитал ОУ и 4051 от ДС-ДС 3,8-3,9В ситуация с помехами стала горазда лучше. Отрицательное напряжение на входе пропало, правда появилось положительное при малых коэфициентах деления, но уже не такое и сигнал хоть за рамки не выходит.
2016-08-31 23.52.29.jpg
(248.31 KiB) Скачиваний: 1382

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 10:59:58

Анализатор спектра планируется?

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 11:11:34

GFX, а какую максимальную частоту можно будет контролировать этим осликом при использовании внешнего или внутреннего ацп? и какова максимальная амплитуда без применения внешних делителей?

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 11:47:49

Andrew Martin писал(а):Анализатор спектра планируется?
Буфер с данными есть, можно и проанализировать, только памяти программ мало из-за программного чтения 4000 значений с внешнего АЦП отъелось много памяти, перейду на ДМА, сэкономлю память, можно будет сделать.

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 11:53:43

Pixel_84 писал(а):GFX, а какую максимальную частоту можно будет контролировать этим осликом при использовании внешнего или внутреннего ацп? и какова максимальная амплитуда без применения внешних делителей?
амплитуда +-50В без делителей (10В на клетку), частота внутреннего 2мегасепмла нормально, до 9.14мегасемпла - 3й сорт, внешний 21,333 на текущий момент, но если за 5 тактов берет ДМА то будет 25,6 мегасемпла. Какую частоту можно контролировать - 100кГц видно хорошо на встроенном, на внешнем 300 нормально, а так до половины частоты выборки при условии, что входной каскад пропустит столь высокую частоту(но при этом будет сигнал из 2 точек). Частоты менее 100 кГц обычных блоков питания в принципе смотреть можно, но только при ремонте, при создании конечно нужен нормальный прибор чтобы выбросы видеть и прочие помехи, которые наш прибор не покажет.

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 17:38:05

GFX писал(а):
Andrew Martin писал(а):Анализатор спектра планируется?
Буфер с данными есть, можно и проанализировать, только памяти программ мало из-за программного чтения 4000 значений с внешнего АЦП отъелось много памяти, перейду на ДМА, сэкономлю память, можно будет сделать.

ДМА завелось - 30к кода освободилось :hunger: Но оно считывает данные только за 9 тактов :shock: В чем дело? это в 1.5 раза медленнее моей сосиски кода по ручному считыванию

DMA_DeInit(DMA1_Channel7);
DMA_ini_PORTB.DMA_PeripheralBaseAddr = (uint32_t)&(GPIOB->IDR);
DMA_ini_PORTB.DMA_MemoryBaseAddr = (uint32_t)&AD9280_ADC_Buff[0];
DMA_ini_PORTB.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_ini_PORTB.DMA_BufferSize = ADC2_MAX;
DMA_ini_PORTB.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_ini_PORTB.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_ini_PORTB.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_ini_PORTB.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_ini_PORTB.DMA_Mode = DMA_Mode_Normal;
DMA_ini_PORTB.DMA_Priority = DMA_Priority_VeryHigh;
DMA_ini_PORTB.DMA_M2M = DMA_M2M_Enable;
DMA_Init(DMA1_Channel7, &DMA_ini_PORTB);

NVIC_EnableIRQ(DMA1_Channel7_IRQn);
DMA_ITConfig(DMA1_Channel7, DMA_IT_TC, ENABLE);
DMA_Cmd(DMA1_Channel7, ENABLE);

ДМА не надежное какое-то, если работают два штуки то, оно еще медленнее.

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 19:21:22

Тут давеча говорили про остановку ядра (WFI) на время семплирования...

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 19:57:35

Andrew Martin писал(а):Тут давеча говорили про остановку ядра (WFI) на время семплирования...

То другое, остановка ядра дает стабильные 5 тактов(и меньшие шумы), без него иногда получается больше, но в среднем торможение будет меньше процента.

GFX писал(а):ДМА завелось - 30к кода освободилось :hunger: Но оно считывает данные только за 9 тактов :shock: В чем дело? это в 1.5 раза медленнее моей сосиски кода по ручному считыванию

SPL не пользуюсь, но код вроде правильный, даже не знаю в чем там можно накосячить. Как ты производишь измерения?

ДМА не надежное какое-то, если работают два штуки то, оно еще медленнее.

Зачем тебе 2 DMA? Внутренние ADC медленные и в dual mode пишут в один регистр, потому все равно хватит одного DMA. Внешний ADC у тебя один, если добавить второй, то нужно его вешать на тот же порт и опять же хватит одного DMA. Запускать одновременно внешний и внутренний ADC на разных частотах бессмысленно, а на одинаковых скорость DMA не важна...

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 23:18:00

Andrew Martin писал(а):Тут давеча говорили про остановку ядра (WFI) на время семплирования...
Ну я в сон захожу, первым делом это проверил, разницы нет.

Re: Карманный осциллограф на STM32

Чт сен 01, 2016 23:31:34

Reflector писал(а): Как ты производишь измерения?

Провожу на глаз и потом, видишь у меня частоту сигнала определяет, так вот сигнал 300кГц а определяется как 450, я считал из расчета 6 тактов на замер и частота совпадала. Ну и при прямом сравнении сосиськи и ДМА видно что в 1.5 раза разница

Reflector писал(а):
Зачем тебе 2 DMA? Внутренние ADC медленные и в dual mode пишут в один регистр, потому все равно хватит одного DMA. Внешний ADC у тебя один, если добавить второй, то нужно его вешать на тот же порт и опять же хватит одного DMA. Запускать одновременно внешний и внутренний ADC на разных частотах бессмысленно, а на одинаковых скорость DMA не важна...

это все понятно, но это и есть лучший результат во сне и одно ДМА активно с высшим приоритетом. Если с двумя, то результат еще хуже(определяет частоты, как 500кГц)

Вот встроенное и сосиська-код внешнего АЦП
2016-09-01 23.45.51.jpg
(128.34 KiB) Скачиваний: 1042

2016-09-02 00.14.40.jpg
(239.67 KiB) Скачиваний: 798

И тоже ДМА
2016-09-02 00.26.16.jpg
(223.07 KiB) Скачиваний: 739

Так что все видно наглядно, такты посчитаны правильно. Вот только это очень плохо. Я обрадовался, что ДМА может работать с портами ввода-вывода и на тебе, процедура ручного считывания отнимает 30 кбайт памяти, т.е. половину из доступной, лучше я на ней анализатор спектра намучу или сохранение на флешку скриншотов, а тут такая подстава. свободно памяти 2.4 кбайта, это только на исправление косяков можно сказать. Есть код работающий быстрее, только не на ХОЛовский функциях?

Re: Карманный осциллограф на STM32

Пт сен 02, 2016 11:23:23

GFX писал(а):Провожу на глаз и потом, видишь у меня частоту сигнала определяет, так вот сигнал 300кГц а определяется как 450, я считал из расчета 6 тактов на замер и частота совпадала. Ну и при прямом сравнении сосиськи и ДМА видно что в 1.5 раза разница

Как-то я делал товарищу, который до сих пор сидит на AVR, простенький ЛА на разогнанном в 2 раза F031. Кроме того там был генератор от 1Hz до 48 Mhz, частотомер(висящий на входе ETR), который брал этот диапазон, один аналоговый канал до 4.36MHz и частоту дискретизации можно было менять в широких пределах. Т.к. от ЛА на крохотном экранчике толку мало, то клиент был на C#. И этот девайс показывает, что для F4 получается 4 такта для DMA или асма, а для F0 и F1 - по 5. Хоть точки на графике считай, хоть дрыгай ножкой по окончанию заполнения всего буфера и меряй частоту... Если сомневаешься, что для F4 должно быть 4 такта, можешь почитать эту серию статей, там парень пытался избавиться(и избавился) от артефактов при работе с VGA. Не может же быть, чтобы у меня правильно показывало 4 такта, но вместо 9 выдавало 5 :) Кроме того у меня в файлик сохраняются сырые данные и можно посмотреть сколько там точно приходится выборок на период. Например, для максимальной частоты семплирования 96 / 5 = 19.2MHz получаем ровный заборчик 0101 для меандра 9.6MHz.

Изображение

Для 1MHz уже выходит 9-10 выборок на полупериод, в среднем на период будет 19, как и должно быть.
Изображение

Более низкие частоты семплирования уже задаются через таймер, там минимум 6 тактов. Лесенка 0101 будет для меандра 8MHz, а для 1MHz в файлике одни 8-ки, т.е. 16 выборок на период.
Изображение

Так что все видно наглядно, такты посчитаны правильно. Вот только это очень плохо. Я обрадовался, что ДМА может работать с портами ввода-вывода и на тебе, процедура ручного считывания отнимает 30 кбайт памяти, т.е. половину из доступной, лучше я на ней анализатор спектра намучу или сохранение на флешку скриншотов, а тут такая подстава. свободно памяти 2.4 кбайта, это только на исправление косяков можно сказать. Есть код работающий быстрее, только не на ХОЛовский функциях?

У меня все на клаcсах :)
Код:
Dma1Ch3 ch3;
ch3.initMemToMem((void*)&GPIOA->IDR, DmaDataSize::_8bits, false, data, DmaDataSize::_8bits, true, 3584, DmaPriority::VeryHigh);
ch3.interruptEnable(DmaFlag::TransferComplete);
ch3.enable();
__WFI();

Внутри init помимо установки всяких CPAR/CMAR/CNDTR только для CCR выставляются биты приоритета, размера и инкремента, т.е. ровно то, что туда передается. Потому я и говорил, что тут сложно где-то накосячить, а вот измеряя частоту при помощи ADC ошибиться намного проще.

Re: Карманный осциллограф на STM32

Пт сен 02, 2016 11:42:15

Reflector писал(а): а вот измеряя частоту при помощи ADC ошибиться намного проще.
Дело ведь не только в измерении частоты, это только один факт. Вы же видите визуально, что один и тот же сигнал 300кГц при ручном считывании выглядит как менее быстрый, в экран помещается меьнше. Отсюда только 2 варианта:
1. считывание по ДМА происходит за 5 тактов, то тогда ручное за 3,333 такта что подозрительно да и при сравнении со встроенным АЦП видно что это не так.
2. считывание по ДМА у меня лично происходит за 9 тактов, это не противоречит тому что у вас может происходит за 5, может все таки что-то у меня насроено не так как должно, хотя ДМА сложно заставить работать быстрее или медленнее, его настроил и вперед.

Поэтому я и не понимаю, либо у вас там не было 5 тактов, просто косяк в методике, либо у меня почему-то ДМА работает медленнее, может размер буфера, может еще что, но это факт. Оно медленнее процессора копирует из памяти в память. Я сейчас сделаю простой пример, выставлю какой-то порт в 1, запущу ДМА и в прерывании ДМА выставлю этот порт в ноль. И на логическом анализаторе посмотрим время (у меня 4000 значений), но я в чудеса не верю, моя методика определения количества тактов понятна и наглядна, что-то не то. Есть место в датащите или референс мануале или еще где, где прописано конкретно сколько тактов ДМА нужно для записи и чтения памяти?

Re: Карманный осциллограф на STM32

Пт сен 02, 2016 12:22:37

Вот провел проверку через логический анализатор, все сходится с достаточно большой точностью, вывод 9 тактов на 1 чтение с портов ввода-вывода через ДМА, на текущий момент это так. Вопрос в другом, можно ли достичь хотя бы 6 тактов как при чтении процессором.
Скриншот 2016-09-02 13.23.11.png
(24.79 KiB) Скачиваний: 743

Re: Карманный осциллограф на STM32

Пт сен 02, 2016 13:40:59

Похоже разобрался. Оригинальный девайс у меня на F0, там заполняется буфер длиной 3584 байт, SysTick показывает, что на это уходит 17981 тактов, т.е. 5 тактов на байт. На F4 получается 14384 тактов, т.е. 4 такта на байт. Проверяя F1 я где-то недоглядел и подумал, что они с F0 по скорости одинаковые, но сейчас F1 действительно выдает 32302, а это 9 тактов...

Re: Карманный осциллограф на STM32

Пт сен 02, 2016 13:47:05

Reflector писал(а):а это 9 тактов...
а значит дело не в моей прошивке, печально все это, но хоть разобрались.

Re: Карманный осциллограф на STM32

Пт сен 02, 2016 16:09:13

А что там разбираться? У ДМА есть такой параметр как латентность. У разных МК она разная.
Ответить