Например TDA7294

Форум РадиоКот • Просмотр темы - Инжектированые каналы АЦП STM32F4 DISCOVERY
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн янв 26, 2026 08:17:29

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Инжектированые каналы АЦП STM32F4 DISCOVERY
СообщениеДобавлено: Вт дек 10, 2013 21:19:03 
Родился

Зарегистрирован: Вт дек 10, 2013 21:06:13
Сообщений: 3
Рейтинг сообщения: 0
Доброго времени суток!

Возникла следующая проблема с АЦП, а точнее с результатом преобразования.

Привожу код:
Код:

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_tim.h"

int main(void)
{
   GPIO_InitTypeDef GPIO_InitStructure;
   TIM_TimeBaseInitTypeDef TIM_InitStructure;

   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);// 42 MHz
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); // 84 MHz
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); // 42 MHz

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
   GPIO_Init(GPIOA, &GPIO_InitStructure);

   TIM_InitStructure.TIM_ClockDivision = 42; // 1 MHz
   TIM_InitStructure.TIM_Prescaler = 101; // 10 kHz
   TIM_InitStructure.TIM_Period = 9; // 1000 Hz
   TIM_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
   TIM_TimeBaseInit(TIM5, &TIM_InitStructure);

   TIM_SelectOutputTrigger(TIM5, TIM_TRGOSource_Update);
   TIM_Cmd(TIM5, ENABLE);

   ADC->CCR |= ADC_CCR_ADCPRE_0;   //Предделитель 84 MHz / 4 = 21 MHz
   ADC->CCR &= ADC_CCR_MULTI;   //Независимый режим

   ADC1->CR2 &=~ ADC_CR2_ALIGN; //Данные справа
   ADC1->CR2 |= ( ADC_CR2_JEXTSEL_0 | ADC_CR2_JEXTSEL_1 | ADC_CR2_JEXTSEL_3); //Триггер таймера 5
   ADC1->CR2 |= ADC_CR2_JEXTEN_0;   // По переднему фронту

   ADC1-> CR1 &=~ ADC_CR1_RES; // 12 бит
   ADC1->JSQR |= (1<<20) | (1<<21); //4 преобразования
       ADC1->JSQR |= (1<<0) | (1<<6) | (1<<10) | (1<<11) | (1<<18); //Каналы с 1 по 4

   ADC1->CR2 |= ADC_CR2_ADON;

   uint32_t adc_res1=0;
   uint32_t adc_res2=0;
   uint32_t adc_res3=0;
   uint32_t adc_res4=0;

    while(1)
    {
       ADC1->CR2 |= ADC_CR2_JSWSTART;

             adc_res1=ADC1->JDR1;
             adc_res2=ADC1->JDR2;
             adc_res3=ADC1->JDR3;
             adc_res4=ADC1->JDR4;

    }
}



Собственно результат имеется только в adc_res1. Остальные переменные равны нулю.
Господа, в чём может быть проблема?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инжектированые каналы АЦП STM32F4 DISCOVERY
СообщениеДобавлено: Вт дек 10, 2013 22:43:32 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
В бесконечном цикле, неплохо бы проверять ADC->SR на предмет окончания преобразования (флаг JEOC). Вы непрерывно перезапускаете конвертирование, не дождавшись окончания операции. Думаю правильно будет так:
Код:
while(1)
    {
       ADC1->CR2 |= ADC_CR2_JSWSTART;
       while((ADC1->SR & ADC_SR_JEOC)==0) {};
             adc_res1=ADC1->JDR1;
             adc_res2=ADC1->JDR2;
             adc_res3=ADC1->JDR3;
             adc_res4=ADC1->JDR4;

    }

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инжектированые каналы АЦП STM32F4 DISCOVERY
СообщениеДобавлено: Ср дек 11, 2013 16:20:55 
Родился

Зарегистрирован: Вт дек 10, 2013 21:06:13
Сообщений: 3
Рейтинг сообщения: 0
Попробовал. К сожалению, по прежнему работает только один канал.
В отладчике по-крайней мере.

Ещё какие варианты?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инжектированые каналы АЦП STM32F4 DISCOVERY
СообщениеДобавлено: Ср дек 11, 2013 17:21:10 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
Сегодня вечером "в железе" проверю, потом отпишусь. Мне ADC в таком режиме пока не было надобности использовать.

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Инжектированые каналы АЦП STM32F4 DISCOVERY
СообщениеДобавлено: Ср дек 11, 2013 18:50:54 
Родился

Зарегистрирован: Вт дек 10, 2013 21:06:13
Сообщений: 3
Рейтинг сообщения: 0
Задача решена :)

Итак:
1.
Ошибка:
Не было выбрано режим преобразования.
Решение:
Код:
ADC1->CR1 |= ADC_CR1_SCAN; //Поочереди каждый канал.


2.
Ошибка:
Биты сместились не правильно, не настроив каналы должным образом.
Код:
ADC1->JSQR |= (1<<0) | (1<<6) | (1<<10) | (1<<11) | (1<<18); //Каналы с 1 по 4

Решение:
Код:
ADC1->JSQR |= (ADC_JSQR_JSQ4_2); // Группа 4, канал 4
ADC1->JSQR |= (ADC_JSQR_JSQ3_0 | ADC_JSQR_JSQ3_1); // Группа 3, канал 3
ADC1->JSQR |= (ADC_JSQR_JSQ2_1); // Группа 2, канал 2
ADC1->JSQR |= (ADC_JSQR_JSQ1_0); // Группа 1, канал 1


3.
Нужно дождаться конца преобразования.
Решение:
Указано coredumped .

Вот таким образом удалось настроить 4 инжектированных канала :)
Причём каждый канал имеет свою погрешность.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Инжектированые каналы АЦП STM32F4 DISCOVERY
СообщениеДобавлено: Ср дек 11, 2013 21:33:08 
Опытный кот
Аватар пользователя

Карма: 3
Рейтинг сообщений: 43
Зарегистрирован: Вт апр 12, 2011 18:38:19
Сообщений: 838
Откуда: с Земли
Рейтинг сообщения: 0
Ну и замечательно :beer: А я только собрался поковыряться, а Вы уже все сделали.
Самые опасные грабли - детские. Взрослые бьют по лбу, а вот детские... :)

_________________
Все будет только лучше, в крайнем случае - хуже.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y