Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Проблема с VBAT и термодатчиком - STM32F303CB

Непрочитано 21.06.2017, 15:18  
decanium
Прохожий
 
Регистрация: 23.12.2011
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
decanium на пути к лучшему
По умолчанию Проблема с VBAT и термодатчиком - STM32F303CB

Доброго времени суток!
Возникла проблема при работе AЦП со встроенным терморезистором и напряжением VBAT.
Всегда читается значение 4095.
Привожу пример кода для чтения напряжения VBAT:
Нажмите, чтобы открыть спойлер
int main(void)
{
/*!‹ At this stage the microcontroller clock setting is already configured,
this is done through SystemInit() function which is called from startup
file (startup_stm32f30x.s) before to branch to application main.
To reconfigure the default setting of SystemInit() function, refer to
system_stm32f30x.c file
*/

/* Configure the ADC clock */
RCC_ADCCLKConfig(RCC_ADC12PLLCLK_Div2);

/* Enable ADC1 clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ADC12, ENABLE);

/* Setup SysTick Timer for 1 µsec interrupts */
if (SysTick_Config(SystemCoreClock / 1000000))
{
/* Capture error */
while (1)
{}
}

ADC_StructInit(&ADC_InitStructure);

/* Calibration procedure */
ADC_VoltageRegulatorCmd(ADC1, ENABLE);

/* Insert delay equal to 10 µs */
Delay(10);

ADC_SelectCalibrationMode(ADC1, ADC_CalibrationMode_Single);
ADC_StartCalibration(ADC1);

while(ADC_GetCalibrationStatus(ADC1) != RESET );
calibration_value = ADC_GetCalibrationValue(ADC1);

Delay(100);

ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Clock = ADC_Clock_AsynClkMode;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_DMAMode = ADC_DMAMode_OneShot;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = 0;

ADC_CommonInit(ADC1, &ADC_CommonInitStructure);

ADC_InitStructure.ADC_ContinuousConvMode = ADC_ContinuousConvMode_Disable;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ExternalTrigConvEvent = ADC_ExternalTrigConvEvent_0;
ADC_InitStructure.ADC_ExternalTrigEventEdge = ADC_ExternalTrigEventEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_OverrunMode = ADC_OverrunMode_Disable;
ADC_InitStructure.ADC_AutoInjMode = ADC_AutoInjec_Disable;
ADC_InitStructure.ADC_NbrOfRegChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_Vbat, 1, ADC_SampleTime_7Cycles5);
ADC_VbatCmd(ADC1, ENABLE);

/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);

/* wait for ADRDY */
while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_RDY));

/* Infinite loop */
while (1)
{
ADC_StartConversion(ADC1);

/* Test EOC flag */
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);

/* Get ADC1 converted data */
ADC1ConvertedValue =ADC_GetConversionValue(ADC1);

/* Compute the voltage */
ADC1ConvertedVoltage = (ADC1ConvertedValue *3300)/0xFFF;

printf("ADC1ConvertedValue = %d\r\n",ADC1ConvertedValue);
}
}

Чтение термодатчика аналогично, отличается только выбор канала АЦП:
Код:
ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 1, ADC_SampleTime_7Cycles5);  
ADC_TempSensorCmd(ADC1, ENABLE);
В обоих случаях АЦП возвращает значение 4095.
Что я не так делаю?
Во вложении - проекты целиком:
adc_std_01.rar - проект измерения VBAT
adc_std_02.rar - проект измерения температуры
adc_01.rar - проект измерения температуры, собранный в CubeMX с использованием HAL
adc_02.rar - проект измерения VBAT, собранный в CubeMX с использованием HAL
Вложения:
Тип файла: rar adc_std_01.rar (182.8 Кб, 0 просмотров)
Тип файла: rar adc_std_02.rar (183.5 Кб, 0 просмотров)
Тип файла: rar adc_01.rar (3.83 Мб, 0 просмотров)
Тип файла: rar adc_02.rar (3.83 Мб, 0 просмотров)
Реклама:
decanium вне форума  
Непрочитано 23.06.2017, 14:58  
NewWriter
Почётный гражданин KAZUS.RUN
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Проблема с VBAT и термодатчиком - STM32F303CB

Вообще-то, чтобы читать температуру или напряж.бат., нужно еще включить эти возможности установкой битов VBATEN, TSEN и VREFEN в регистре ADCx CCR.
NewWriter вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема со стереосистемой Logitech Z-340 Old_25 Аудиотехника 2 23.03.2008 19:44
проблема с блоком питания Chieftec hpc-360-202. MMK00 Источники питания и свет 9 21.03.2008 19:04
Проблема с записью в EEPROM 24С16А по адресам свыше 255 Zemlyanov Микроконтроллеры, АЦП, память и т.д 15 10.09.2007 18:20
Проблема с ЛСД Zemlyanov Делимся опытом 4 12.01.2007 20:53
Проблема при запуске uc3855 Marlboro Источники питания и свет 0 19.07.2005 13:52


Часовой пояс GMT +4, время: 09:36.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.