|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
Работа АЦП по таймеру во FREERTOS stm3215.09.2020, 07:33. Показов 9943. Ответов 31
Столкнулся с такой проблемой: не работает АЦП по таймеру во FREERTOS. Есть проект, сгенерированный в CubeMX, там настроено: FREERTOS, LWIP, АЦП, таймер и USART. Если запускать АЦП вручную, т.е. в одной из задач использую задержку osDelay(1000), то все работает отлично, АЦП раз в секунду оцифровывает несколько каналов, DMA забирает данные, потом в прерывании от DMA вызывается семафор, который сигнализирует о том, что данные готовы и их можно передавать, следом идет передача данных по LWIP и USART, цикл повторяется. Таймер тоже в это время настроен и работает.
Дальше я хочу запускать АЦП не каждый раз, когда запускается задача FREERTOS, а по таймеру. И тут накрывается все, что есть. LWIP и USART перестают работать, АЦП вроде тоже. Не могу понять в чем проблема, какие настройки не так заданы, или может какой-то конфликт с ОС. Задача ОС для АЦП:
0
|
|||||||||||
| 15.09.2020, 07:33 | |
|
Ответы с готовыми решениями:
31
FreeRTOS для STM32 Семафоры в FreeRTOS на STM32
|
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||
| 22.09.2020, 08:01 | |||
|
поставь хотя бы osDelay(1000) Добавлено через 1 минуту
1
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||
| 22.09.2020, 08:07 [ТС] | |||
|
ValeryS,
Я открыл ваш проект, запустил, как минимум в колбэк теперь попадаю, там прописывал светодиодом моргать, моргает. Правда передача по сокету и USART перестали работать. Тут пока не знаю в чем причина может быть. А какие изменения вы внесли в проект? Я так пробежался взглядом по таймеру и ацп, вроде ничего не заметил
0
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 22.09.2020, 08:20 | |
|
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||
| 22.09.2020, 09:59 [ТС] | |||
|
_SayHello, ValeryS,
Добавлено через 5 минут ValeryS,
0
|
|||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 22.09.2020, 13:33 [ТС] | |
|
_SayHello, я просто выставил Trigger Event Sekection TRGO в Output Compare (OC4REF), не знал, что еще надо настраивать канал 4 дополнительно. Просто сколько не смотрел примеров настройки АЦП по таймеру в Cube, во всех просто настраивали таймер и в АЦП указывали источник запуска таймер, и все. Спасибо за помощь, теперь вроде разобрался с запуском АЦП. Почему-то правда сокет и USART теперь не запускаются
Добавлено через 1 час 22 минуты _SayHello, Рано я обрадовался, я думал, что попадаю в колбэк, т.к. там было настроено мигание светодиодом, оказалось он мигал из другой задачи, я там его забыл отключить. Поэтому пока все так же как и раньше, в колбэк не попадаю
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|
| 25.09.2020, 05:53 [ТС] | |
|
ValeryS, _SayHello, может кому будет полезно или интересно, но АЦП с DMA по таймеру запустилось только когда указал в настройках таймера:
Mode: Toggle on match Clock source: disable Channel4: Output COmpare No Output Причем, насколько успел потестить, от настроек Trigger Event Selection и auto-reload preload ничего не меняется, включены они или нет, хотя одна указывает событие по которому должно срабатывать прерывание, а другая указывает, что при переполнении таймер надо перезапустить заново. Казалось бы важные настройки, да и во всех уроках, которые встречал они использовались, но потом нашел другой урок и взял некоторые настройки оттуда и там они были отключены
0
|
|
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 25.09.2020, 12:21 | |
|
DmitryDDDD, проверьте только одну штуку: по какаому событию у вас будет АЦП срабаотывать по rising/falling edge или both. Так как при режиме Toggle on match и rising/falling edge, частота оцифровки скорее всего будет в два раза меньше частоты таймера.
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||
| 25.09.2020, 13:22 [ТС] | ||||||
|
_SayHello, ну да, есть такое, спасибо, не мог понять почему при частоте 100 МГц (APB2 timers), делители 10 000, и счетчике до 10 000, я получаю оцифровку каждые две секунды, а не раз в секунду. Сейчас поставил срабатывание АЦП по both, стало нормально срабатывать
Добавлено через 20 минут _SayHello, А еще можете подсказать, наткнулся на форуме на ваши темы относительно измерения выходного сигнала температурных датчиков при помощи АЦП, в целом то же самое делаю сейчас. И там вы писали про самонагрев датчика в процессе работы, т.е. если постоянно гнать ток через него, то он будет нагревать сам себя, поэтому вы включали источник тока только на период измерения АЦП, остальное время ток через датчик не проходил. Вот я думаю сделать аналогично, только я не использую источник тока, у меня датчик температуры подключен как один из резисторов делителя напряжения, на который я подаю 3.3 вольта. Но суть та же, напряжение подается постоянно. Поэтому я хочу напряжение подавать не постоянно, а с пина МК (датчиков несколько, поэтому по пину на датчик). Реализовать я думаю это можно если подключить второй таймер, который будет запускать первым таймером, запускающим АЦП. Но при этом у первого таймера выставить настройку Master/Slave Mode в Enable для синхронизации, а так же Pulse порядка 1000 тиков (это будет 10 микросек при частоте тактирования 100 МГц) для задержки, чтобы второй таймер в это время подал напряжение на все пины, с которых подается напряжение на делитель. Напряжение подается на время равное 40,5 тиков (28 тиков на заряд кондера АЦП и 12,5 на оцифровку) умноженое на количество датчиков, там выходит чуть больше 10 мк сек в итоге. Т.е. первый таймер при срабатывании запускает АЦП с задержкой, а второй таймер устанавливает напряжение на используемые пины на время чуть больше времени работы АЦП. Так будет работать? Добавлено через 17 минут _SayHello, Но тут по-моему только такой вариант: при вызове второго таймера установить уровни пинов, разово досчитать до нужного количества тиков, вызвать прерывание в котором сбросить все пины и ждать следующего вызова первым таймером. Функцию прерывания таймера я вроде знаю
0
|
||||||
|
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
|
|
| 25.09.2020, 13:53 | |
|
DmitryDDDD, в HAL Я вам не подскажу, так как не особо силен. Что по датчикам: для платиновых датчиков постоянный ток, который можно использовать, насколько я помню, 1 мА. Если использовать такой ток, то можно ничего не выключать. Но с таким током разрашение для PT100 будет 0.385 * 0.001 = 0.385 мВ на градус, я поднимал ток до 10 мА, чтобы разрешение стало 3.85 мВ на градус.
Пусть у вас АЦП запускается раз в секунду по событию от канала CH4 таймера 3. Вы можете использовать CH2 для включения питания и CH3 для выключения. Настраиваете CH2 и CH3 в режим Output Compare. Пусть ваш таймер запускает АЦП при сравнении CH4 скажем с 30000, тогда вы можете CH2 поставить на сравнение с 29000, и в прерывании этого канала выставлять питание (разницу 1000 тиков оставим на переходный процесс установки питания), а CH3 на сравнение скажем 35000 и по прерыванию от CH3 выключать питание. Таким образом у вас будет 5000 тиков на измерение, тут уж сами посчитает хватит вам этого времени или нет, может и раньше можно будет отключить. Таким образом, питание будет подано на датчик только в течение 6000 тиков. Опять же посчитаете скважность, какую вам нужно.
0
|
|
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
||||||||||||||||
| 25.09.2020, 14:14 [ТС] | ||||||||||||||||
|
_SayHello, ValeryS, , там pt1000, ну я делителем делал, у меня получись по напряжению не помню, а по отсчетам АЦП от 1263 до 1910 это на измерение от -50 до 150 град. Т.е. 3,235 значения АЦП на градус. Десятые градуса не вывожу, поэтому хватает вроде. Еще второй датчик есть, там уже на градус 6,74 значения АЦП получается. По току там примерно выходит так, что допустимый 1 mA и как раз через делитель проходит 1mA, вот греет он его или нет не помню, надо еще раз будет посчитать схему. Но у вас был фиксированный ток, менялось напряжение и сопротивление. У меня схема другая, тут напряжение фиксированное, меняется ток и сопротивление. Я думаю пока оставлю так как есть.
Я как-то даже не подумал, что можно обойтись одним таймером, надо попробовать. Еще такой вопрос по прерываниям таймеров, может знаете, есть файл stm32f7xx_it.c там есть функции прерывания наподобие такой
0
|
||||||||||||||||
|
4 / 4 / 0
Регистрация: 12.11.2018
Сообщений: 511
|
|||||||||||
| 29.09.2020, 12:44 [ТС] | |||||||||||
|
Если вдруг кому-то понадобится, помог вызов колбека:
0
|
|||||||||||
| 29.09.2020, 12:44 | |
|
FreeRTOS + STM32 VL Discovery + CoIDE STM32 Sleep\Stop with FreeRTOS Stm32 не работает I2C в FreeRTOS STM32 + ENC28J60 + LwIP + FreeRTOS Stm32, FREERtos и загрузка программы в ОЗУ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|