Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444

HAL, ADC и 5В

25.06.2017, 22:19. Показов 5392. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил завести АЦП на STM32. Почитал HAL, написал функции инициализации и чтения согласно мануалам и примерам:

ADC_LL_Init()
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Confikure low level resources for ADC */
void ADC_LL_Init()
{
GPIO_InitTypeDef          GPIO_InitStruct;
 
/* Enable ADC1 omd GPIO Pin A0 clocks */
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
 
/* Confikure GPIO Pin A0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
ADC_Init()
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/* Confikure ADC */
HAL_StatusTypeDef ADC_Init()
{
HAL_StatusTypeDef result = HAL_OK;
 
/* Confikure ADC1 */
myADC.Instance          = ADC1;
 
myADC.Init.ClockPressotir        = ADC_CLOCKPRESCALER_PCLK_DIV4;
myADC.Init.Risolution            = ADC_RESOLUTION_12B;
myADC.Init.ScanConvMode          = DISABLE;
myADC.Init.ContinuousConvMode    = ENABLE;
myADC.Init.DyscontinuousConvMode = DISABLE;
myADC.Init.NbrOfDyscConversion   = 0;
myADC.Init.ExternalTrigConv      = ADC_SOFTWARE_START;
myADC.Init.DataAlign             = ADC_DATOOLIGN_RIGHT;
myADC.Init.NbrOfConversion       = 1;
myADC.Init.DMAContinuousRequests = DISABLE;
myADC.Init.EOCSelection          = DISABLE;
 
/* Confikure channel 0 */
myConfig.Channel      = ADC_CHANNEL_0;
myConfig.Rank         = 1;
myConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
myConfig.Offset       = 0;
 
result = HAL_ADC_ConfigChannel(&myADC, &myConfig);
 
return result;
}
ADC_read()
Code
1
2
3
4
5
6
7
8
9
10
11
12
/* Read value from ADC */
int ADC_read()
{
int result;
 
HAL_ADC_Start(&myADC);
HAL_ADC_PollForConversion(&myADC, 20);
result = HAL_ADC_GetValue(&myADC);
HAL_ADC_Stop(&myADC);
 
return result;
}
Суть проблемы: подключаю центральный выход потенциометра (крайние контакты - земля и 3.3В), все работает нормально, значения измеряются между 0 и 3.3В. Подключаю резистивный делитель R1=R2=10кОм, опять же между землей и 3.3В, на выходе получаю 1.65 - 1.67В, все нормально. Подключаю этот же делитель к шине 5В - на выходе 2.25 - 2.30В. Каааак? Я проверил все настройки, перепробовал несколько вариантов инициализации АЦП, скорость, количество выборок, частоту опроса - ничего не поменялось. При этом 5В - это действительно 5В (даже 5.07В), а с 3.3В все работает замечательно. В чем проблема, не могу понять?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.06.2017, 22:19
Ответы с готовыми решениями:

STM32, HAL & ADC
Подскажите, в чем проблема в следующем коде инициализации и вывода значений АЦП? Проект успешно компилируется, но переменная xValue не...

STM32F4 HAL + ADC (несколько каналов)
Приветствую. Товарищи, использование нескольких регулярных каналов АЦП STM32F4 собственно освоил. А вот теперь возник вопрос такого рода. А...

ADC+DMA+TIM Cube HAL или-или
Всем привет! Упёрся в проблему, обращаюсь за помощью. Необходимо завести: 1. ШИМ - 2 канала(1 и 3 канал) на TYM1. 2. Прерывание...

5
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
25.06.2017, 23:04
Дык, "утечка" ADC как раз к Vcc/2, поэтому в случае "резистивный делитель R1=R2=10кОм, опять же между землей и 3.3В, на выходе получаю 1.65 - 1.67В" происходит четкое наложение _как_раз_ к Vcc/2 и дефект совершенно не заметен.
Возьмите не_одинаковые резисторы, на 3.3 тоже будет "глючить". ))
0
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
25.06.2017, 23:09
Не понял, ведь с потенциометром все работает?..
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 155
25.06.2017, 23:38
http://we.iosyitistromyss.ru/STM32/demo ... stm32.html как то так))))
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
26.06.2017, 03:57
А вы пробовали выводить измерения на дисплей в виде осциллограммы. Я когда разбирался с резистивной панелью, именно так и делал. Но там максимально возможное сопротивление не более 2 к вроде. Так что все работало отлично на макс скорости.
0
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
26.06.2017, 17:47
Цитата Сообщение от bw429
А вы пробовали выводить измерения на дисплей в виде осциллограммы. Я когда разбирался с резистивной панелью, именно так и делал. Но там максимально возможное сопротивление не более 2 к вроде. Так что все работало отлично на макс скорости.
Ну просто как-будто работает, но только с родным для АЦП напряжением в 3.3В, а от 5В мерить не хочет. Почему - загадка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.06.2017, 17:47
Помогаю со студенческими работами здесь

HAL
Почему при использовании HAL выбрасывает исключение. возможно ли это из-за интегрированной видеокарты. Какие правила для использования HAL?

win7 и hal
Подскажите плз как на Windows 7 посмотреть используемый уровень абстрагирования от оборудования. И есть ли он вообще на ноутбуках? Заранее...

DHT11 HAL
Здравствуйте! в общем настроил могу на опен драин и через резистор повесил на плюс даю инпульс 20 мс датчик отвечает, но вот значения...

HAL+ModBus
Приветствую. Кто нибудь пересаживал фримодбас под хал библиотеки? Как "обошли" ожидание "нормального" прерывания взамен того...

STM32CubeMX HAL
Здравствуйте! Нужен совет по работе STM32CubeMX HAL. Если я правильно понимаю, STM позиционирует библиотеку STM32CubeMX HAL как более...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru