Jump to content
Владислав Скайуокер

STM32L486, калибровка, работа АЦП через ДМА

Recommended Posts

Posted (edited)

Не удается запустить АЦП на контроллере STM32L486.

Ожидалось, что АЦП, настроенное в режиме Scan Continuous Conversion Mode будет передавать оцифрованные значения с каждого внутреннего канала (Vref, TempSens, Vbat) в массив с помощью ДМА, настроенного в Circular Mode. Прерывания включены для ДМА. (Скриншоты настройки АЦП и ДМА приложены).
image.png.456c0a4b36247661fbb481f700e3c5b8.png

 

image.png.dfc75bd7d6c77a6bc611cbf2b7e43edc.png
 

После инициализации и перед началом работы АЦП необходимо откалибровать само АЦП (строка 94), а затем, после задержки в 1мс осуществляется старт с помощью ДМА(строка 99):

image.png.65ad2c405eeb1e5963d8cca2fa84aca6.png

Программа постоянно вызывает функцию возврата:

image.png.92b47f19852dfe85304b8ce2874edce5.png

Все происходит так, как и задумывалось, кроме нескольких вещей.
1. После калибровки в регистрe CALFACT_S нулевое значение, хотя этого быть не должно. После калибровки АЦП в этом регистре должен находится рассчитанный коэффициент.

image.png.17ee80f1716016c8a896417d961ab731.png

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

image.png.0b4e674091c0b1ad7a4dcefbf1bc0959.png

И массив adcBuff[] с помощью ДМА заполняется нулями.

Даже если вручную записываю значение калибровочного коэффициента с помощью функции HAL_ADCEx_Calibration_SetValue(), значение внутри регистра CALFACT_S не меняется.

Тоже самое (только без самокалибровки АЦП)  проделал на STM32F407, с точно такой же настройкой АЦП и ДМА. С первой попытки не нулевые значения с опрашиваемых каналов АЦП с помощью ДМА постоянно гонялись в массив.

Так же на контроллере STM32l052 после инициализации в кубе проводилась самокалибровка, после которой на следующем шаге менялось значение CALFACT_S на значение коэффициента. И при запуске АЦП не нулевые значения с помощью ДМА записывались в массив.

Подскажите в чем дело.

Edited by Владислав Скайуокер

Share this post


Link to post
Share on other sites

Для начала требуется выкинуть куб вместе с HAL и настроить АЦП строго по даташту. В этом случае можно будет легко отследить, где и что не прошло как требуется. А настройки там десяток строк кода.

18 минут назад, Владислав Скайуокер сказал:

вручную записываю значение калибровочного коэффициента с помощью функции HAL_ADCEx_Calibration_GetValue()

Но ведь Get - это получить, а не установить...

Share this post


Link to post
Share on other sites

Популярные пружинные клеммники Degson со склада Компэл

Пружинные разъемные клеммники Degson с технологией Push-In обеспечивают надежное и безопасное электрическое соединение. При их использовании исключается возможность короткого замыкания в точке контакта, что гарантирует надежное соединение. Электрическая безопасность клеммных блоков подтверждается соответствием мировым стандартам UL, IEC и VDE.
Подробнее

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...