реклама на сайте
подробности

 
 
> STM32F10x Внутренний датчик температуры, не понятные показания температуры
bullit
сообщение Jan 10 2013, 09:10
Сообщение #1


пуля
****

Группа: Свой
Сообщений: 674
Регистрация: 10-05-06
Из: Уфа
Пользователь №: 16 959



Добрый день!
Процессор STM32F103c8t6.
Столкнулся с проблемой что по 16 каналу (TempSense) ADC1 значение не меняется, как процек не грей!
Код инициализации:
CODE
RCC_ADCCLKConfig(RCC_PCLK2_Div4);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
/* Enable ADC1 */
ADC_Cmd(ADC1, ENABLE);

// Enable ADC1 reset calibration register
ADC_ResetCalibration(ADC1 );
// Check the end of ADC1 reset calibration register
while (ADC_GetResetCalibrationStatus(ADC1 ));

// Start ADC1 calibration
ADC_StartCalibration(ADC1 );
// Check the end of ADC1 calibration
while (ADC_GetCalibrationStatus(ADC1 ));

ADC_InitTypeDef ADC_InitStructure;
/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_TempSensorVrefintCmd(ENABLE);
/* ADC1 regular channels configuration */
ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 1, ADC_SampleTime_239Cycles5 );

ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 7;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


Код запуска конвертирования (запускаем раз в секунду):
Код
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

Код прерывания:
Код
adcdata = ADC_GetConversionValue(ADC1);
adcVolt  = adcdata*3.3/4096;
diffVolt =   0.76 - adcVolt;
temp1  = diffVolt / (2.5/1000);//0.00025;
temp2 = temp1 +25;
ADC_ClearITPendingBit(ADC1, ADC_IT_EOC );


adcdata постоянно равен 1738 +/- 10 едениц. Код тестировался на 2-3 процеках значения теже. Явно в коде, но что не пойму!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01344 секунд с 7
ELECTRONIX ©2004-2016