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

Re: частотомер на GD32f303c

Вт ноя 21, 2023 09:35:47

Из оригинальной библиотеки.
/* 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

Andrey_B, хочу сделать конвейер на GD. Или чего-то не понимаю, или куб не использует своими настройками возможности таймеров. Куб не позволяет настроить таймер так, что бы тактировался от своего канала захвата и захват работал. Таймер тактируется от канала, но захват не работает. Если выставить TI1_ED(по двум фронтам), то работает, а от TI1FP1 не хочет.
Если вручную подшаманить, то работает. Это недоработка куба или моя?
Эти строчки приходится каждый раз добавлять вручную.
sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;

Re: частотомер на GD32f303c

Сб ноя 25, 2023 10:36:01

linkov1959, да, куб некоторые вещи не позволяет сделать. Видимо разработчики считают, что чрезмерная гибкость больше навредит. Иногда помогает перейти с HAL на LL. Но частенько "доинициализировать" приходится вручную. Пользоваться функциями куба не только для инициализации, но и для непосредственного управления, считаю вообще нельзя.

Вообще использовать заточенный на STM куб для работы с GD плохая идея. Они всё таки различаются. Сам я с GD не работал, но по опыту работы например с CH32F103C8T6 или CH32V203K8T6, при всей похожести периферии клонов, иногда вылезают ну очень значительные отличия. Так что только даташит.

ЗЫ: что касается плавучки и быстродействия. Многие вещи, которые на первый взгляд скрыты, например сохранение и восстановления контекста при вызове обработчика прерывания с использованием плавучих переменных или без них, тоже по разному будет сказываться на производительности в целом. Или интенсивное использование ПДП (DMA), которое вроде как идёт в фоне, тоже может сильно влиять на производительность.

Re: частотомер на GD32f303c

Сб ноя 25, 2023 14:50:08

Andrey_B, по прерываниям есть вопросы. Оказалось, что мой конвейер на stm401 работает не так, как я задумал. Может, потому и работает.:) Я там разрешаю прерывания по захвату NVIC_EnableIRQ(50), но по таймингу вижу, что прерывание срабатывает сразу не дожидаясь захвата. Вроде за это какой-то бит отвечает и его надо сбрасывать, неужели куб этого не делает?

Re: частотомер на GD32f303c

Сб ноя 25, 2023 23:45:48

интенсивное использование ПДП (DMA), которое вроде как идёт в фоне, тоже может сильно влиять на производительность.

Не просто влиять, а вплоть до почти полной блокировки исполнения...
Попробуйте снять данные с конвейерного АЦП через GPIO и DMA на частоте вчетверо ниже частоты ядра... :tea: :)))

Re: частотомер на GD32f303c

Чт ноя 30, 2023 09:50:52

Запаял 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в
Последний раз редактировалось Игорь2111 Чт ноя 30, 2023 15:36:43, всего редактировалось 3 раз(а).

Re: частотомер на GD32f303c

Чт ноя 30, 2023 12:45:29

Игорь2111, супер! Где брал?

Re: частотомер на GD32f303c

Чт ноя 30, 2023 13:07:15

на AliExpress
https://sl.aliexpress.ru/p?key=89LvU77

Периферию надо будет проверить на макс. тактовую.

Re: частотомер на GD32f303c

Чт ноя 30, 2023 19:35:17

//По цене оптимально GD32F407VE -260 руб с доставкой//
Заказал за 150р с доставкой.:)
https://www.aliexpress.com/item/1005005 ... 1802hsc9Cx

Re: частотомер на GD32f303c

Пн дек 04, 2023 01:09:49

По частоте ядра GD32F407 стабильно работает только до 330-340 мгц
С ТСХО 25 мгц коф /2 *54 /2 =337 мгц

Re: частотомер на GD32f303c

Вт дек 05, 2023 15:41:51

Нестабильность была из-за питания.
Внутренний стаб.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

КРАМ, Всё просто. В кубе выставляется 3 ADC на общий канал, выбирается режим интерлив, разрядность, настраивается DMA и массив из ОЗУ выводится на экран. Подаем тестовый сигнал и гоним тактовую ADC , наблюдая картинку. Полутонов не замечал, там резкий срыв.

Re: частотомер на GD32f303c

Чт дек 07, 2023 11:43:40

Полутонов не замечал, там резкий срыв.

Вы несете ахинею, извините.
Что вы называете "тестовым сигналом"?
Как вы измеряете ENOB?
Срыв - это когда перестает работать автомат последовательных приближений - чисто цифровая схема.
Но далеко задолго до этого срыва от исходных 12 разрядов мало что остается...
Откройте даташит на любой SAR ADC и узнайте для себя его основные параметры. И лишь потом экспериментируйте со встроенным АЦП.
Интерлив лишь позволяет получить чередование АЦП в автоматическом режиме, тем самым кратно увеличивая скорость. Но он никак не влияет на скорость отдельных ядер АЦП.
массив из ОЗУ выводится на экран.

Я должен вас огорчить. Скорость сканирования памяти с помощью JTAG столь низка, что вашим "методом" ничего определить невозможно.

Re: частотомер на GD32f303c

Чт дек 07, 2023 14:27:26

Попробуем , может и получится. Любителям много не надо
Увидеть на экране показометра-частомера TFT-LCD 128*160 чистый меандр на частоте желательно 10 мгц. без внешней обвязки. (тестовый сигнал)
При этом не спалив МК из-за большой потребляемой мощности.
Это и будет проверкой всей периферии МК. (А как это все будет реализовано абсолютно неважно)

Re: частотомер на GD32f303c

Чт дек 07, 2023 15:18:07

Игорь2111, 15 Мсэмплов минимум должны получить, это сносный меандр 1 Мгц, но можно помечтать о 30 Мсэмплах.:)

Re: частотомер на GD32f303c

Чт дек 07, 2023 19:10:04

Для 10МГц нужно , хотя бы, 300 М/с.

Re: частотомер на GD32f303c

Сб фев 10, 2024 23:14:35

На макетнойй плате с 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 руб
Вложения
303 синус табл 775 гц +DMA+TIM4+.rar
синус таймер+DMA
(2.96 KiB) Скачиваний: 47
303 синус табл 775 гц +.rar
вывод в цикле
(2.29 KiB) Скачиваний: 43
Последний раз редактировалось Игорь2111 Вс фев 11, 2024 03:51:59, всего редактировалось 1 раз.

Re: частотомер на GD32f303c

Вс фев 11, 2024 02:27:15

Оба метода ничем друг от друга не отличаются и для формирования сетки 0,1 Гц являются отвратительными.
Причин две.
1. Сетка будет принципиально нелинейной.
2. Безумное, ни на чем не основанное количество отсчетов.
Мелкий шаг делается с помощью DDS. А DDS - это скользящая фаза.
Если не устраивает полученный джиттер, то делают дополнительно следящий фильтр.

Re: частотомер на GD32f303c

Вс фев 11, 2024 12:23:20

Благодарю, будем учиться дальше

Добавлено after 9 hours 11 minutes 28 seconds:
По количеству точек
Читал по теории для КНИ синуса половина младшего разряда DAC 2-n разрядов количество точек на период должно быть 2-n +3.
Т.е для 12 разрядного 32568.
И поразила низкая частота вывода массива в цикле for (~100 тактов)
Ответить