Pozdravujem,
nadvazujem na prechadzajucu komunikaciu a prosim o pomoc.
riesim zariadenie na baze modulu bluepill ktore ma okrem ineho aj moznost zmerat napatie na napajani (jedna sa o zariadene napajane z akumulatora ER18505M - LITHIUM 3.6V)
schema zapojenia:
programujem to v prostredi keil uvision.
Uvadzam nasledujucu funkciu MerajNapatie pre meranie napatia na vstupe A0 mcu.
float MerajNapatie( void )
{
uint16_t adcIn1Raw;
ADC_ChannelConfTypeDef sConfig = {0};
// citam napatie na 0 kanaly
sConfig.Channel = ADC_CHANNEL_0;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5;
if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
{
Error_Handler();
}
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
HAL_Delay(1);
adcIn1Raw = HAL_ADC_GetValue(&hadc1);
HAL_ADC_Stop(&hadc1);
float ret = ( ( (float)adcIn1Raw / (float)4096 ) ) * (float)1.2 * (float) 6;
// 4096 znamena 12 bit. prevodnik
// 1.2 je interna nap. referencia
// 6 je pomer rezistorov 12k / 2k
return ret;
}
funkcia MX_ADC1_Init pre inicializaciu ADC1 prevodnika:
ADC_HandleTypeDef hadc1 = {0};
void MX_ADC1_Init(void)
{
__ADC1_CLK_ENABLE();
// Initialising ADC1
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 1;
// pokus o nastavenie int. referencie napatovej
hadc1.Instance->CR2 |= ADC_CR2_TSVREFE;
if (HAL_ADC_Init(&hadc1) != HAL_OK)
{
Error_Handler();
}
}
funkcia MerajNapatie stale vracia cca 1.1 V
a malo by vratit nieco okolo 3.2V
Ak by niekoho napadlo preco, budem sa tesit kazdej rade.
dakujem !!!
R