Easyelectronics.ru

Электроника для всех
Текущее время: 23 окт 2019, 07:46

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
 Заголовок сообщения: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 15:06 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Всем привет!

Пытаюсь выжать аппаратно ШИМ сигнал из STM32F100C8T6, частота 4800Гц, фишка в том что скважность меняется каждый такт, импульсы повторяются в таком порядке: 30%, 70%, 95%, 95%, 70%, 30%, это значения скважности в %.
Использую TIM1 и каналы 2й и 4й, это ноги РА9 и РА11.
Скважность меняю в прерывании по сравнению, регистр таймера и регистр сравнения буферизованы, то есть их значения меняются после Update Event, который происходит после переполнения таймера.
На частоте 400Гц или чуть больше всё получается, но при увеличении частоты что-то ломается и пара импульсов идет не с той скважностью, причём у каждого канала это своя пара, но порядок чёткий и не меняется например при увеличении частоты на порядок.

Сейчас выложу скрины и код.
Как тут картинку в спойлер прятать не разобрался, не бейте ногами)


Вложения:
Комментарий к файлу: 4800Гц - сигнал портится
4800.PNG
4800.PNG [ 18.14 Кб | Просмотров: 573 ]
Комментарий к файлу: 400Гц - полёт нормальный
400.PNG
400.PNG [ 10.27 Кб | Просмотров: 573 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 15:20 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Пока склоняюсь к тому что данная стм-ка не справляется с подобным сигналом. Тогда мне надо заменить её другой в корпусе LQFP48, которая может выдать такой сигнал.

Прилагаю код инициализации и прерывания.

Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 16:06 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1021
Код страшненький, вместо switch можно просто данные из массива подставлять и всякие TIM_CCMR1_OC2PE для того и определены, чтобы не писать непонятные 0x0800... Тем не менее вроде должно работать, хотя когда скважность 95%, то нужно вписаться в 1000 тактов, потому с учетом огромного switch и возможных других обработчиков прерываний написанных в таком духе, еще и в дебаге, может и не хватить. Если дело в этом, то можно просто повесить обработчик прерывания на другой неиспользуемый канал и записать в CCR значение поменьше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 16:15 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4013
Откуда: КЧР, поселок Нижний Архыз
Ну и нафига там прерывание, если скважность можно менять при помощи DMA в циклическом режиме?
И МК в этом случае будет более разгруженным...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 16:16 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1021
Eddy_Em писал(а):
Ну и нафига там прерывание, если скважность можно менять при помощи DMA в циклическом режиме?

С прерыванием проще, но не работает нормально даже так, как будет работать с DMA предсказать не сложно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 17:59 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Eddy_Em писал(а):
Ну и нафига там прерывание, если скважность можно менять при помощи DMA в циклическом режиме?
И МК в этом случае будет более разгруженным...

Про DMA думал, но пока сделал так, а код не причёсан пока, отсюда и магические цифры)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 18:00 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Reflector писал(а):
Eddy_Em писал(а):
Ну и нафига там прерывание, если скважность можно менять при помощи DMA в циклическом режиме?

С прерыванием проще, но не работает нормально даже так, как будет работать с DMA предсказать не сложно.

То есть с DMA будет работать не лучше?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 18:06 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4013
Откуда: КЧР, поселок Нижний Архыз
Е-мое! У тебя там флоаты!!! Флоаты в прерывании... Да уж, это жесть!
Кроме того, в очередной раз обращу внимание на то, что регистры объявлены как volatile, поэтому компилятор не оптимизирует последовательные вызовы вида reg |= x → инициализируй все флаги за один проход! Выбрось magick numbers, как уже сказали — в заголовочных файлах все нужные константы/дефайны есть. И определись уже, как работать: с калокубом или без него! а то порты инициализируешь калокубным способом (или SPL - что это за структуры?), а потом нормально работаешь.
Выкинь этот код и перепиши правильно. С DMA.
Reflector писал(а):
С прерыванием проще, но не работает нормально даже так

Понятное дело: абдуринокод работать нормально не может!
А за флоаты там, где они не нужны, надо руки отрывать!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 18:33 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 543
Обновлять в другом прерывании, не по сравнению а по сбросу. Все будет работать независимо от значений заполнения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 18:39 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Eddy_Em писал(а):
Е-мое! У тебя там флоаты!!! Флоаты в прерывании...
что регистры объявлены как volatile.....
Выкинь этот код и перепиши правильно. С DMA.
Reflector писал(а):
С прерыванием проще, но не работает нормально даже так

Понятное дело: абдуринокод работать нормально не может!


На SPL. Сделал инициализацию PWM на регистрах потому что на структурах не работало почему то, то есть при записи в регистры таймера из структуры регистры не менялись, хотя в случае с инициализацией GPIO всё нормально.
volatile у меня только одна переменная - period, хотя ей не надо быть volatile, просто думал сначала что не только в обработчике прерывания буду её использовать. Или ты про что-то другое?
ок, заменю магические цифры, если вам так легче будет) руки пока до этого не добрались) но инициализируется то всё правильно, так?)
Флоат лучше поменять, согласен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 18:42 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
amaora писал(а):
Обновлять в другом прерывании, не по сравнению а по сбросу. Все будет работать независимо от значений заполнения.

По сбросу не подходит, так как надо ещё переключать эти каналы, то есть из 2х сигналов ШИМ получается 4, переключаю через логику, ШИМ идет на движок ДБМ.
но до этого высказали дельную мысль о переключении в прерывании неиспользуемого канала.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 19:38 
Старожил

Зарегистрирован: 26 ноя 2012, 10:28
Сообщения: 4013
Откуда: КЧР, поселок Нижний Архыз
Heisenberg писал(а):
Или ты про что-то другое?

Я про то, что все регистры - volatile! Поэтому писать 100 раз подряд регистр |= флаг не стоит! Лучше один раз написать регистр = флаг1 | флаг2 ... | флагN.
И SPL не надо использовать, от него даже сами ST отказались. Ну, а по говнистости он ничуть не лучше калокуба.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 18 апр 2019, 19:54 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Eddy_Em писал(а):
Heisenberg писал(а):
Или ты про что-то другое?

Я про то, что все регистры - volatile! Поэтому писать 100 раз подряд регистр |= флаг не стоит! Лучше один раз написать регистр = флаг1 | флаг2 ... | флагN.
И SPL не надо использовать, от него даже сами ST отказались. Ну, а по говнистости он ничуть не лучше калокуба.


Ок, спасибо за совет насчёт регистров, учту.
Отказались от SPL и перешли на HAL, который ещё хуже)
Я с куба перешёл на SPL пока, потом перейду на регистры, и какую то свою библиотеку нарабатывать...

С float я лоханулся конечно, он же использует стандартную библиотеку С?
Убрал float и заработало при скважности 90.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 19 апр 2019, 00:57 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Цитата:
С float я лоханулся конечно, он же использует стандартную библиотеку С?

В зависимости от типа контроллера и опиций компилятора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 19 апр 2019, 15:32 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
Речь о контроллере где нет FPU.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 19 апр 2019, 21:26 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
Ес-но. Но даже там, где есть FPU можно компилятор заставить генерить софтовую "эмуляцию" вычислений float.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: F100 ШИМ с постоянно меняющейся скважностью
СообщениеДобавлено: 22 апр 2019, 19:46 
Заглядывает иногда

Зарегистрирован: 19 янв 2014, 16:42
Сообщения: 34
NStorm писал(а):
Ес-но. Но даже там, где есть FPU можно компилятор заставить генерить софтовую "эмуляцию" вычислений float.

Зачем же?)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Финский


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB