Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Настройка АЦП stm32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
anubis
Добрый день.
Возникли проблемы с работой АЦП на stm32f107vc - форма оцифрованного сигнала довольно сильно искажена - завалены фронты. см картинку:


На АЦП подается сигнал с генератора (звуковая карта) далее после оцифровки результат выдается на цап.
Входной и выходной сигнал выводятся также на осциллограф.



код мк:
CODE
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

int main(void)
{
/* Включаем порт А */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Включаем ЦАП */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

AdcInit(); //выполнить инициализацию АЦП /


/* Настраиваем ногу PA4 и PA4 ЦАПа */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4 | GPIO_Pin_5);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);



/* Включить DAC2 */
DAC->CR |= DAC_CR_BOFF2;
DAC->CR |= DAC_CR_EN2;


while(1)
{
short adc_val = ADC1->DR;

DAC->DHR12R2=(adc_val-2048);
}
}


void AdcInit(void)
{
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Разрешить тактирование порта PORT A
//Конфигурирование PORT PA.3 - аналоговый вход
GPIOA->CRL &= ~GPIO_CRL_MODE3; //Очистить биты MODE
GPIOA->CRL &= ~GPIO_CRL_CNF3; //Очистить биты CNF

RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //подаем тактирование АЦП
RCC->CFGR &= ~RCC_CFGR_ADCPRE; //входной делитель
ADC1->CR1 = 0; //
ADC1->SQR1 = 0; //
ADC1->CR2 |= ADC_CR2_CAL; //запуск калибровки
while (!(ADC1->CR2 & ADC_CR2_CAL)){}; //ждем окончания калибровки
ADC1->CR2 = ADC_CR2_EXTSEL; //выбрать источником запуска разряд SWSTART
ADC1->CR2 |= ADC_CR2_EXTTRIG; //разр. внешний запуск регулярного канала
ADC1->CR2 |= ADC_CR2_CONT; //режим непрерывного преобразования

/* Задаем длительность выборки */
ADC1->SMPR2 |= (ADC_SMPR2_SMP4_2 | ADC_SMPR2_SMP4_1 | ADC_SMPR2_SMP4_0);

ADC1->SQR3 = 3; //загрузить номер канала
ADC1->CR2 |= ADC_CR2_ADON; //включить АЦП
ADC1->CR2 |= ADC_CR2_SWSTART; //запустить процес преобразования
}
dac
где снимался входной сигнал осциллографом, на выходе источника или на ножке вход ацп стм32? аналогично с выходным.
что показывает дамп значений ацп?
какая частота сигнала?
схема входных/выходных цепей?

а то телепаты опять в отпуске sm.gif
ViKo
Думаю, АЦП не при чем. Где-то в аналоговой части получился ФНЧ с частотой среза, слишком большой для такого сигнала.
anubis
Входной сигнал снимался на выходе звуковой карты (узел между выходом карты и пином отладочной карты ).
Входной пин PA3.
Выходной сигнал ЦАП снимался на пине отладочной карты PA5 в данном случае.
частота 100Гц-1000Гц
Дополнительной обвязки нету, подключен только осциллограф.
ps на картинке сигнал инвертированный.
Толич
Ткни осциллографом в порт PORT PA.3, посмотри там прямоугольник или уже с завалами
anubis
Вот еще скриншот:
1кГц меандр исходный сигнал


Цитата(Толич @ Oct 18 2013, 15:38) *
Ткни осциллографом в порт PORT PA.3, посмотри там прямоугольник или уже с завалами

На пине PA3 сигнал такой же
alexdos
Для исключения возможности пакости сигнала на выходе DAC, вывидите с него меандр частотой 1КГц и посмотрите что у Вас покажет осциллограф.
anubis
Действительно этот выход ЦАП работает криво, перекинул на другой все стало впорядке.
Спасибо за помощь
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.