stm32-multi-channel-adc/

Согласно даташиту [PDF] на STM32F103, микроконтроллер имеет два АЦП . Означает ли это, что МК способен считывать напряжение только на двух пинах? Оказывается, что нет. АЦП может переключаться между несколькими пинами, поочередно считывая напряжение на каждом из них. Давайте разберемся, как этим пользоваться.

Открываем настройки АЦП в STM32CubeMX. Видим, что АЦП имеет множество так называемых «каналов» с именами IN0, IN1, IN2, и так далее. Каждый канал можно задействовать, поставив напротив него галочку. Ему будет автоматически присвоен один из пинов. Само собой разумеется, если пин уже подо что-то занят, воспользоваться соответствующим каналом не получится.

STM32F103 имеет десять доступных каналов на пинах PA0-PA7, PB0 и PB1. Их можно произвольным образом распределить между двумя доступными АЦП. Один и тот же пин может одновременно служить каналом сразу для двух АЦП. Хотя практическое применение этому мне трудно представить.

Со стороны кода работа с АЦП будет выглядеть как-то так:

void ADC_Select_Channel ( uint32_t ch ) {
ADC_ChannelConfTypeDef conf = {
. Channel = ch ,
. Rank = 1 ,
. SamplingTime = ADC_SAMPLETIME_28CYCLES_5 ,
} ;
if ( HAL_ADC_ConfigChannel ( & hadc1 , & conf ) != HAL_OK ) {
Error_Handler ( ) ;
}
}

void init ( ) {
ST7735_Init ( ) ;
ST7735_FillScreen ( ST7735_BLACK ) ;
}

void loop ( ) {
uint32_t adc_values [ 3 ] ;
uint32_t channels [ ] = {
ADC_CHANNEL_0 ,
ADC_CHANNEL_1 ,
ADC_CHANNEL_2 ,
} ;

for ( int i = 0 ; i < 3 ; i ++ ) {
ADC_Select_Channel ( channels [ i ] ) ;
HAL_ADC_Start ( & hadc1 ) ;
HAL_ADC_PollForConversion ( & hadc1 , HAL_MAX_DELAY ) ;
adc_values [ i ] = HAL_ADC_GetValue ( & hadc1 ) ;
HAL_ADC_Stop ( & hadc1 ) ;
}

for ( int i = 0 ; i < 3 ; i ++ ) {
char buff [ 16 ] ;
snprintf ( buff , sizeof ( buff ) , «CH%d: %04ld» , i , adc_values [ i ] ) ;
ST7735_WriteString ( 0 , i * 18 , buff , Font_11x18 ,
ST7735_WHITE , ST7735_BLACK ) ;
}

HAL_Delay ( 100 ) ;
}

А так это выглядит в действии:

Движковые потенциометры были куплены про запас пару лет назад, и все это время лежали без дела. Наконец-то нашел им хоть какое-то применение. Работа с экранчиком на базе ST7735 была ранее рассмотрена в этой заметке .

Полная версии исходников доступна на GitHub . Надеюсь, вы нашли данную информацию полезной.

admin

Share
Published by
admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago