Страница 11 из 13
Re: частотомер на GD32f303c
Добавлено: Вт ноя 21, 2023 09:35:47
Игорь2111
Из оригинальной библиотеки.
/* FPU settings 303*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
#endif
Советы из инета.
Нужно стараться, чтобы все переменные были float а не double. По умолчанию компилятор делает double, и в этом случае сопроцессор особо не помогает.
В прерываниях плавучку не использовать (либо озаботиться сохранением плавучего контекста).
после инициализации переменной нужно букву f ставить.
Либо указать ключ -fsingle-precision-constant (это для gcc). Тогда все константы по умолчанию будут float, а не double.
По умолчанию константы с плавающей точкой считаются double. А если в выражении хоть один операнд является double, то все другие операнды преобразуются в double, и вычисления производятся в double. Так работает си.
Re: частотомер на GD32f303c
Добавлено: Пт ноя 24, 2023 23:43:21
linkov1959
Andrey_B, хочу сделать конвейер на GD. Или чего-то не понимаю, или куб не использует своими настройками возможности таймеров. Куб не позволяет настроить таймер так, что бы тактировался от своего канала захвата и захват работал. Таймер тактируется от канала, но захват не работает. Если выставить TI1_ED(по двум фронтам), то работает, а от TI1FP1 не хочет.
Если вручную подшаманить, то работает. Это недоработка куба или моя?
Эти строчки приходится каждый раз добавлять вручную.
sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
Re: частотомер на GD32f303c
Добавлено: Сб ноя 25, 2023 10:36:01
Andrey_B
linkov1959, да, куб некоторые вещи не позволяет сделать. Видимо разработчики считают, что чрезмерная гибкость больше навредит. Иногда помогает перейти с HAL на LL. Но частенько "доинициализировать" приходится вручную. Пользоваться функциями куба не только для инициализации, но и для непосредственного управления, считаю вообще нельзя.
Вообще использовать заточенный на STM куб для работы с GD плохая идея. Они всё таки различаются. Сам я с GD не работал, но по опыту работы например с CH32F103C8T6 или CH32V203K8T6, при всей похожести периферии клонов, иногда вылезают ну очень значительные отличия. Так что только даташит.
ЗЫ: что касается плавучки и быстродействия. Многие вещи, которые на первый взгляд скрыты, например сохранение и восстановления контекста при вызове обработчика прерывания с использованием плавучих переменных или без них, тоже по разному будет сказываться на производительности в целом. Или интенсивное использование ПДП (DMA), которое вроде как идёт в фоне, тоже может сильно влиять на производительность.
Re: частотомер на GD32f303c
Добавлено: Сб ноя 25, 2023 14:50:08
linkov1959
Andrey_B, по прерываниям есть вопросы. Оказалось, что мой конвейер на stm401 работает не так, как я задумал. Может, потому и работает.

Я там разрешаю прерывания по захвату NVIC_EnableIRQ(50), но по таймингу вижу, что прерывание срабатывает сразу не дожидаясь захвата. Вроде за это какой-то бит отвечает и его надо сбрасывать, неужели куб этого не делает?
Re: частотомер на GD32f303c
Добавлено: Сб ноя 25, 2023 23:45:48
КРАМ
[uquote="Andrey_B",url="/forum/viewtopic.php?p=4507946#p4507946"]интенсивное использование ПДП (DMA), которое вроде как идёт в фоне, тоже может сильно влиять на производительность.[/uquote]
Не просто влиять, а вплоть до почти полной блокировки исполнения...
Попробуйте снять данные с конвейерного АЦП через GPIO и DMA на частоте вчетверо ниже частоты ядра...

Re: частотомер на GD32f303c
Добавлено: Чт ноя 30, 2023 09:50:52
Игорь2111
Запаял GD32F407VG (360 руб) на переходник (100 руб)
Залил blink кокосом как для stm32f407ve.
Запустился на частотах по Кубу.
с кварцем 20 мгц коэф. /2 *78 /2=390мгц
с ТСХО 25 мгц /2 *63 /2=393мгц
периферию не смотрел.
Плюсы
подключается FPU
таймера 8+2(32 бит) +2+2
ADC -3 штуки
флеш 512 кб. с 0-ws.
рам 192 кб.
По цене оптимально GD32F407VE -260 руб с доставкой
BOOT0 нужно садить на землю
Прошивка и отладка в кокосе через порт SW без отключения от компа и всяких перемычек.
Через ST LINK v2 , с него и питание 3,3в
Re: частотомер на GD32f303c
Добавлено: Чт ноя 30, 2023 12:45:29
linkov1959
Игорь2111, супер! Где брал?
Re: частотомер на GD32f303c
Добавлено: Чт ноя 30, 2023 13:07:15
Игорь2111
на AliExpress
https://sl.aliexpress.ru/p?key=89LvU77
Периферию надо будет проверить на макс. тактовую.
Re: частотомер на GD32f303c
Добавлено: Чт ноя 30, 2023 19:35:17
linkov1959
//По цене оптимально GD32F407VE -260 руб с доставкой//
Заказал за 150р с доставкой.
https://www.aliexpress.com/item/1005005 ... 1802hsc9Cx
Re: частотомер на GD32f303c
Добавлено: Пн дек 04, 2023 01:09:49
Игорь2111
По частоте ядра GD32F407 стабильно работает только до 330-340 мгц
С ТСХО 25 мгц коф /2 *54 /2 =337 мгц
Re: частотомер на GD32f303c
Добавлено: Вт дек 05, 2023 15:41:51
Игорь2111
Нестабильность была из-за питания.
Внутренний стаб.ST-LINK не тянул.
При 400 мгц потребление 175 ма.
Норма при 168 мгц 85 ма.
Поставил внешний 1117-33.
При 400 мгц тактовой время расчета синуса без FPU по ранее описанному алгоритму 2,7 мксек (1118 тактов)
с FPU 0.7 мксек. (291 такт системной)
Прилично теплый.
Режим тяжелый придется или клеить радиатор или снижать частоту.
без FPU
https://img.radiokot.ru/files/149432/3b7spfoe08.jpg
c FPU
https://img.radiokot.ru/files/149432/3b7sqcymkk.jpg
Добавлено after 5 hours 58 minutes 42 seconds:
В GD32F407 есть строеный режим работы ADC 1,2,3
Интересно что получится при макс.тактовой.
https://img.radiokot.ru/files/149432/3b83m95zcc.jpg
Re: частотомер на GD32f303c
Добавлено: Ср дек 06, 2023 04:23:26
КРАМ
В очередной раз. Дело не в интерливе. Дело в совершенно аналоговой схеме АЦП. Сигнал еще нужно захватить, прежде чем запустить преобразование. Ну и само преобразование - это тоже глубоко аналоговый процесс с балансировкой заряда... Его разгон приводит к потере эффективной разрядности.
На выходе быстро растет шум.
Re: частотомер на GD32f303c
Добавлено: Ср дек 06, 2023 17:42:34
linkov1959
КРАМ, Всё просто. В кубе выставляется 3 ADC на общий канал, выбирается режим интерлив, разрядность, настраивается DMA и массив из ОЗУ выводится на экран. Подаем тестовый сигнал и гоним тактовую ADC , наблюдая картинку. Полутонов не замечал, там резкий срыв.
Re: частотомер на GD32f303c
Добавлено: Чт дек 07, 2023 11:43:40
КРАМ
[uquote="linkov1959",url="/forum/viewtopic.php?p=4513658#p4513658"]Полутонов не замечал, там резкий срыв.[/uquote]
Вы несете ахинею, извините.
Что вы называете "тестовым сигналом"?
Как вы измеряете ENOB?
Срыв - это когда перестает работать автомат последовательных приближений - чисто цифровая схема.
Но далеко задолго до этого срыва от исходных 12 разрядов мало что остается...
Откройте даташит на любой SAR ADC и узнайте для себя его основные параметры. И лишь потом экспериментируйте со встроенным АЦП.
Интерлив лишь позволяет получить чередование АЦП в автоматическом режиме, тем самым кратно увеличивая скорость. Но он никак не влияет на скорость отдельных ядер АЦП.
[uquote="linkov1959",url="/forum/viewtopic.php?p=4513658#p4513658"]массив из ОЗУ выводится на экран.[/uquote]
Я должен вас огорчить. Скорость сканирования памяти с помощью JTAG столь низка, что вашим "методом" ничего определить невозможно.
Re: частотомер на GD32f303c
Добавлено: Чт дек 07, 2023 14:27:26
Игорь2111
Попробуем , может и получится. Любителям много не надо
Увидеть на экране показометра-частомера TFT-LCD 128*160 чистый меандр на частоте желательно 10 мгц. без внешней обвязки. (тестовый сигнал)
При этом не спалив МК из-за большой потребляемой мощности.
Это и будет проверкой всей периферии МК. (А как это все будет реализовано абсолютно неважно)
Re: частотомер на GD32f303c
Добавлено: Чт дек 07, 2023 15:18:07
linkov1959
Игорь2111, 15 Мсэмплов минимум должны получить, это сносный меандр 1 Мгц, но можно помечтать о 30 Мсэмплах.

Re: частотомер на GD32f303c
Добавлено: Чт дек 07, 2023 19:10:04
240265
Для 10МГц нужно , хотя бы, 300 М/с.
Re: частотомер на GD32f303c
Добавлено: Сб фев 10, 2024 23:14:35
Игорь2111
На макетнойй плате с GD32F303CC можно сделать простой генератор синуса
с помощью 12 бит DAC (pin A4) на фиксированную частоту.
Первый способ рассчет таблицы синуса в оперативке и вывод в DAC в цикле for()
для частоты 775 гц 4631 точка на период синуса.
+-1 точка +-0,2 гц
Добавлено after 6 minutes 51 second:
Второй способ
Предварительный расчет таблицы одного периода синуса в оперативке и
вывод по переполнению таймера через DMA в DAC
для 775 гц таблица 20071 точка
Частота меняется изменением количества точек
+-1точка +-0,1 гц
Собирается,прошивается и отлаживается в Кокосе под видом stm32f103RC
Бюджет макетка-350 руб, програматор-120 руб, усилок D класс 20 Вт на tpa3116 собранный 350 руб
Re: частотомер на GD32f303c
Добавлено: Вс фев 11, 2024 02:27:15
КРАМ
Оба метода ничем друг от друга не отличаются и для формирования сетки 0,1 Гц являются отвратительными.
Причин две.
1. Сетка будет принципиально нелинейной.
2. Безумное, ни на чем не основанное количество отсчетов.
Мелкий шаг делается с помощью DDS. А DDS - это скользящая фаза.
Если не устраивает полученный джиттер, то делают дополнительно следящий фильтр.
Re: частотомер на GD32f303c
Добавлено: Вс фев 11, 2024 12:23:20
Игорь2111
Благодарю, будем учиться дальше
Добавлено after 9 hours 11 minutes 28 seconds:
По количеству точек
Читал по теории для КНИ синуса половина младшего разряда DAC 2-n разрядов количество точек на период должно быть 2-n +3.
Т.е для 12 разрядного 32568.
И поразила низкая частота вывода массива в цикле for (~100 тактов)