STM32 Первый старт

Кто любит RISC в жизни, заходим, не стесняемся.
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

Большое Вам спасибо ) Все ясно )
Реклама
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 TIM1+Прерывание

Сообщение dosikus »

SubDia писал(а): (Вы, кстати, не модератор на одном из подобных сайтов, аль обознался я?)
На kazus.ru...
Реклама
inkHunter
Грызет канифоль
Сообщения: 287
Зарегистрирован: Сб авг 21, 2010 20:44:27
Откуда: Ростов
Контактная информация:

Re: STM32 TIM1+Прерывание

Сообщение inkHunter »

Если нужно сначала померять U на 10 канале затем U на 11 ?

RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; //Подключаем АЦП к линии тактирования
RCC->CFGR |= RCC_CFGR_ADCPRE; //Предделитель на максимум (на 8)
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV8;

ADC1->CR2 |= ADC_CR2_CAL; //Запуск калибровки (это нужно сделать ДО установки ADON)
while (!(ADC1->CR2 & ADC_CR2_CAL))
{
}
ADC1->SQR3 |= (ADC_SQR3_SQ1_3 | ADC_SQR3_SQ1_1); // 10 канал, 1 преобразование PC0
ADC1->SQR3|= (ADC_SQR3_SQ2_3 | ADC_SQR3_SQ2_1|ADC_SQR3_SQ2_0); // 11 канал, 2 преобразование PC1 (добавил)
ADC1->CR2 |= (ADC_CR2_EXTSEL_0 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTTRIG);
ADC1->CR2 |= ADC_CR2_ADON;
GPIOC->CRL &= ~GPIO_CRL_CNF0; //Аналоговый вход (это АЦП, 10й канал) PC0
GPIOC->CRL &= ~GPIO_CRL_MODE0;
GPIOC->CRL &= ~GPIO_CRL_CNF1; //Аналоговый вход (это АЦП, 11й канал) PC1
GPIOC->CRL &= ~GPIO_CRL_MODE1;

void ADC_RBat(void)
{
ADC1->CR2 |= ADC_CR2_SWSTART; //Запуск преобразования
while (!(ADC1->SR & ADC_SR_EOC)) //Ждем окончания преобразования

adc = ADC1->DR; //Считываем данные (раньше так только с одного канала считывали а как с 2 или больше ? )

}
Galizin
Мучитель микросхем
Сообщения: 477
Зарегистрирован: Ср окт 15, 2008 09:33:03
Откуда: Воронеж

Re: STM32 TIM1+Прерывание

Сообщение Galizin »

Victor Gordienko писал(а):](раньше так только с одного канала считывали а как с 2 или больше ? )
}
В вашем примере вы прочитаете только одно преобразование.
Есть несколько путей для считывания нескольких.
1. Также как раньше, только по очереди, каждый раз перенастраивая ADC на нужный канал. К сожалению у обычной группы каналов только одна выходная ячейка для помещения результатов.
2. Использовать инжектированную группу каналов. Для инжектированной группы есть 4 регистра для помещения результатов. Соотв нужно использовать ADC_JSQR регистр для настройки каналов и еще другие настройки для работы с инжектированными каналами. По инжектированным каналам за раз можно сделать до 4 преобразований. Название инжектированные происходит от того, что эти преобразования могут временно прерывать серию обычных преобразований. Но могут использоваться и отдельно Обратите внимание на порядок преобразований в инжектированной группе. Там были какие то подводные камни, описанные в документации. То ли первый канал в последней ячейке, то ли обратный порядок преобразования в группе. Нужно смотреть документацию внимательней.
3. Использовать 1 обычный и один инжектированный канал. Где-то есть флаг для запуска инжектированной группы после основной. В основной 1 преобразование и в инжектироавнной 1 преобразование.
4. Использовать DMA для передачи только что преобразованных данных обычных каналов. Такой подход использовал я при управлении источником питания на stm32f100с4 (статья на этом сайте). Нужно было считать значения напряжения и тока. Кроме того там используется и запуск инжектированного канала после основного но уже без DMA (3 вариант). Также можно посмотреть.
5. Использовать для считывания обычных каналов прерывание.
Реклама
Эиком - электронные компоненты и радиодетали
GMVM
Родился
Сообщения: 12
Зарегистрирован: Пт июл 02, 2010 22:05:38

Re: STM32 Первый старт

Сообщение GMVM »

Здравствуйте! Кто уже запускал ацп, поделитесь впечатлениями. Как уровень шумов? У меня пока получается +-8 ЕМР. т.е из 12 бит реально только 8 получается снять((.
Реклама
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: STM32 Первый старт

Сообщение SubDia »

У меня достаточно высок уровень шумов - прыжки на десятках милливольт. Правда, грешу на свои ручонки - плату грамотнее разводить нужно было.
Применяю алгоритм усреднения результатов в управляющей программе на ПК.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

На линейность хар-ки и прочие специфические параметры не проверял, но АЦП достаточно хорошее.
В самых первых экспериментах подключал ко входу обычный переменник, значения плавали +- 1 ед
http://ziblog.ru/2011/01/15/stm32-chast ... atel-atsp/
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Zheleznjakov писал(а):На линейность хар-ки и прочие специфические параметры не проверял, но АЦП достаточно хорошее.
Может кто подскажет по АЦП ?
Запуск взят из примеров к библиотеке от ST, измеряем Vref, но что-то значения сильно гуляют :(

Код: Выделить всё

	uint16_t ADC_res;
	RCC_ADCCLKConfig(RCC_PCLK2_Div8);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|RCC_APB2Periph_GPIOA|	RCC_APB2Periph_USART1|
		RCC_APB2Periph_AFIO,ENABLE);

	ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;
	ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;
	ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
	ADC_InitStructure.ADC_NbrOfChannel=1;
	ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
	ADC_InitStructure.ADC_ScanConvMode=DISABLE;
	ADC_TempSensorVrefintCmd(ENABLE);
	ADC_Init(ADC1,&ADC_InitStructure);
	ADC_RegularChannelConfig(ADC1,ADC_Channel_Vrefint,1,ADC_SampleTime_55Cycles5);
	ADC_Cmd(ADC1, ENABLE);
	USART_SendStr(USART1,"Reset calibration\r\n");
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1)) {}
	USART_SendStr(USART1,"Calibration\r\n");
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1)) {}

	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
Далее в цикле

Код: Выделить всё

	while (ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET) {}
	ADC_res=ADC_GetConversionValue(ADC1);
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
и вывод на USART с подсчетом крайних значений и дельты.
В итоге за 905 секунд значения полученные с АЦП min:1488 max:1535 delta:47
Что-то великоват разброс для Vref
— Не говорите мне что делать и я не скажу куда Вам идти...
GMVM
Родился
Сообщения: 12
Зарегистрирован: Пт июл 02, 2010 22:05:38

Re: STM32 Первый старт

Сообщение GMVM »

Вообще советуют на время преобразования переходить в режим sleep(т.е отключать обработку проги) по __WFI(), но у меня пока это результата не дало((
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Про sleep понятно, но мне кажется это надо при "борьбе за повышенную" точность.
В моем случае - меряем ИОН, и получаем +-20 ед. Многовато..
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Вероятно влияет само АЦП, нужно увеличить его входное сопротивление для этого максимально увеличить время преобразования.
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Не удержался решил попробовать, вот что получилось
при 1.5 cycles значение 0x66D-0x66E
при 239.5 cycles значение 0x675-0x676

т.е. не так уж и сильно пляшут.
плата STM32-Discovery
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Zheleznjakov писал(а):Не удержался решил попробовать, вот что получилось
при 1.5 cycles значение 0x66D-0x66E
при 239.5 cycles значение 0x675-0x676
т.е. не так уж и сильно пляшут.
плата STM32-Discovery
Спасибо за тест!
Хм... 1504 : 2412: min:1503 max:1511 delta:8
или 0x5DF-0x5E7 это при 239.5 циклов.
Плата самодельная, емкости по питанию стоят непосредственно у ног контроллера.
Тактовая 72МГц, делитель ЦАП - 8.
Кусок кода:

Код: Выделить всё

	RCC_ADCCLKConfig(RCC_PCLK2_Div8);
	RCC_GetClocksFreq(&clk);
	USART_SendStr(USART1,_int2strr(clk.ADCCLK_Frequency));
Выдает в терминалку 9000000

Попробую на discovery... Может, что-то в datasheet упустил - какие-то особенности монтажа.
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

А какой мк, а то у меня есть ещё вот такая плата
http://ziblog.ru/2011/03/25/demka-dlya-stm32f103cb/
попробую проверить на ней.
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Zheleznjakov писал(а):А какой мк, а то у меня есть ещё вот такая плата
http://ziblog.ru/2011/03/25/demka-dlya-stm32f103cb/
попробую проверить на ней.
МК stm32f103cbt.
Плата аналогичная, своя:
Изображение
Вложения
16082011129s.jpg
(31.09 КБ) 5177 скачиваний
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Мыльни код, что бы мне не писать
можешь просто прошивку, только скажи какой порт USART
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Zheleznjakov писал(а):Мыльни код, что бы мне не писать
можешь просто прошивку, только скажи какой порт USART
Саму библиотеку от ST я туда не пихал.
USART1, компилятор от CodeSourcery
Вложения
ADC.zip
(89.51 КБ) 342 скачивания
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: STM32 Первый старт

Сообщение md5sum »

Zheleznjakov писал(а):Мыльни код, что бы мне не писать
можешь просто прошивку, только скажи какой порт USART
В файле rename_to_hex.jpg прошивка - надо переименовать. :))
Вложения
rename_to_hex.jpg
(27.53 КБ) 661 скачивание
— Не говорите мне что делать и я не скажу куда Вам идти...
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

На моей плате то же самое :)
min:1493 max:1501 delta:8
min:1493 max:1501 delta:8

Провел дополнительно пару тестов., см рисунки (прога самописная, вся шакала 256=1, т.е. вывожу младший байт)
рис2 - ожидаю-считываю-запускаю-посылаю (АЦП 14 МГц)
ри2.JPG
(33.8 КБ) 621 скачивание
рис1 - запускаю-ожидаю-считываю-посылаю (АЦП 14 МГц)
рис1.JPG
(35.55 КБ) 895 скачиваний
видно что на втором случае лучше результат, видимо сказывается передача по уарт во время преобразования.
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Аватара пользователя
Zheleznjakov
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Сб июн 12, 2010 16:19:17
Откуда: Россия, Томск
Контактная информация:

Re: STM32 Первый старт

Сообщение Zheleznjakov »

Изменил время преобразования с 55 до 239
Вложения
рис3.JPG
(34.02 КБ) 1040 скачиваний
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Ответить

Вернуться в «ARM»