Привет.
Столкнулся с особенностью АЦП которая загнала меня в тупик.
За 20 мкс АЦП не может сделать преобразование в регистре RDATAR находится малое число (около 100).
Проверил просто, подавал сигнал прямоугольник на ножку ацп, но не как попало а синхронизируя с ацп. В момент установки N1_SIGNAL_ON на ножки ацп 1 В, в момент N1_SIGNAL_OFF на входе ацп 0 В. Включен режим Fast.
Код:
|
adcSD = SDADC1-›RDATAR;
while( (SDADC1-›ISR&SDADC_ISR_REOCF) != SDADC_ISR_REOCF);
N1_SIGNAL_ON; // падаю напряжение на ацп 1 Вольт
adcSD = SDADC1-›RDATAR;
while( (SDADC1-›ISR&SDADC_ISR_REOCF) != SDADC_ISR_REOCF);
adcSD = SDADC1-›RDATAR;
N1_SIGNAL_OFF; // выключаю напряжение ацп 0 вольт
adcSD = SDADC1-›RDATAR; |
Но если выключить режим Fast, то ацп начинает нормально работать, но тогда длительность преобразования увеличивается до 60 мкс. А мне нужно 20 мкс.
инициализация ацп
Код:
|
static void MX_SDADC1_Init(void)
{
SDADC_ConfParamTypeDef ConfParamStruct;
/**Configure the SDADC low power mode, fast conversion mode,
slow clock mode and SDADC1 reference voltage
*/
hsdadc1.Instance = SDADC1;
hsdadc1.Init.IdleLowPowerMode = SDADC_LOWPOWER_NONE;
hsdadc1.Init.FastConversionMode = SDADC_FAST_CONV_ENABLE;
hsdadc1.Init.SlowClockMode = SDADC_SLOW_CLOCK_DISABLE;
hsdadc1.Init.ReferenceVoltage = SDADC_VREF_EXT;
if (HAL_SDADC_Init(&hsdadc1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
/**Set parameters for SDADC configuration 0 Register
*/
ConfParamStruct.InputMode = SDADC_INPUT_MODE_SE_OFFSET;
ConfParamStruct.Gain = SDADC_GAIN_1_2;
ConfParamStruct.CommonMode = SDADC_COMMON_MODE_VSSA;
ConfParamStruct.Offset = 0;
if (HAL_SDADC_PrepareChannelConfig(&hsdadc1, SDADC_CONF_INDEX_0, &ConfParamStruct) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
} |
Настройка ацп:
Код:
|
HAL_SDADC_AssociateChannelConfig(&hsdadc1, SDADC_CHANNEL_6, SDADC_CONF_INDEX_0);
HAL_SDADC_ConfigChannel(&hsdadc1, SDADC_CHANNEL_6 , SDADC_CONTINUOUS_CONV_ON );
HAL_SDADC_SelectRegularTrigger(&hsdadc1, SDADC_SOFTWARE_TRIGGER); |
Запуск ацп:
Код:
|
SDADC1-›CR2 |= SDADC_CR2_RSWSTART; |
RCONT установлен в 1.