Данная библиотека используется для работы с АЦП в режиме единичного запроса. Выводы АЦП должны быть указанны в H-файле и правильно настроены в C-файле библиотеке. Также может быть выполнено усреднение значения измеряемой величины (период оценки увеличивается в соответствии с настройкой). В приложении прикреплено две одинаковые библиотеки ADC1 и ADC2 (они отличаются только именами используемых переменных).
Вот оценка точности:
Напряжение подается с подтяжкой 100кОм (без использования внешнего конденсатора). После 100тыс. измерений сравниваем разницу максимального и минимального значений (разрядность АЦП – 12бит, Uref=3В, погрешность - 730мкВ).
без усреднения : 814 - 1144 = +/- 165 усреднение 2 : 974 - 1132 = +/- 79 усреднение 4 : 990 - 1114 = +/- 62 усреднение 8 : 1014 - 1101 = +/- 43 усреднение 16 : 1036 - 1086 = +/- 25 усреднение 32 : 1043 - 1077 = +/- 17 усреднение 64 : 1052 - 1068 = +/- 8 усреднение 128 : 1054 - 1066 = +/- 6
В примере, для работы в аналоговом режиме ADC1 было использовано три вывода: PA3, PC4, PC5.
Требования:
Подключаемые модули CooCox-IDE : GPIO, ADC.
Поддерживаемые библиотеки: отсутствуют.
Перечисления:
typedef enum { ADC_PA3 = 0, // PA3 ADC_PC4 = 1, // PC4 ADC_PC5 = 2 // PC5 }ADC1s_NAME_t; typedef enum { MW_NONE =0, // без усреднения MW_2, // усреднение 2 MW_4, // усреднение 4 MW_8, // усреднение 8 MW_16, // усреднение 16 MW_32, // усреднение 32 MW_64, // усреднение 64 MW_128 // усреднение 128 }ADC1s_MW_t;
Функции:
void UB_ADC1_SINGLE_Init(void); // Инициализация ADC1 uint16_t UB_ADC1_SINGLE_Read(ADC1s_NAME_t adc_name); // непосредственное считывание данных с АЦП uint16_t UB_ADC1_SINGLE_Read_MW(ADC1s_NAME_t adc_name); //считывание данных АЦП с усреднением
Пример использования:
//-------------------------------------------------------------- // File : main.c // Datum : 17.02.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Function : Demo of Button Library // Reference: These two files must be written to 8MHz // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_adc1_single.h" #include "stm32_ub_led.h" int main(void) { uint16_t adc_wert; SystemInit(); // Инициализация настроек кварца UB_ADC1_SINGLE_Init(); // Инициализация ADC1 UB_Led_Init(); // Инициализация светодиодов while(1) { // Канал АЦП PA3 управляет тремя светодиодами соответственно adc_wert=UB_ADC1_SINGLE_Read_MW(ADC_PA3); if(adc_wert>1024) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN); if(adc_wert>2048) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE); if(adc_wert>3072) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED); // Канал АЦП PC4 управляет синим светодиодом, инвертирую его состояние adc_wert=UB_ADC1_SINGLE_Read_MW(ADC_PC4); if(adc_wert>2048) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE); } }
Режим работы:
- ADC1 инициализируется в режиме единичного запроса
- измеряется уровень аналогового напряжения на выходах PA3 и PC4 (определяются в библиотеке)
- в зависимости от величины напряжения 4 светодиода либо загораются, либо тухнут
Библиотека, использованная в примере: stm32_ub_adc1_single, stm32_ub_led.
В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- Demo_05_ADC_Single_RUS.rar (179 Кб)
- ub_stm32f4_adc_single_v100_RUS.rar (8 Кб)
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация