реклама на сайте
подробности

 
 
> Нелинейности внутреннего АЦП в STM32, STM32F103RET6 GH22S 9U
zWitCh
сообщение Feb 25 2014, 09:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-08-06
Пользователь №: 19 654



И так работаю с контроллером STM32F103RET6 GH22S 9U (это полная маркировка, вдруг важно), работаю на частоте 72 МГц, и вот какая проблема, не зависимо от времени семплирования и настроек АЦП при подачи на вход плавно меняющейся функции (и сигнал с датчика температуры - терморезистора, так и просто источник опорного напряжения регулируемый пробовал) на выходи имеем нелинейности - ступеньки на определенных значениях, см. вложение.

И так поиск по интернету не дал ответа на вопрос что это и как исправлять (ну кроме смены процессора, просто неисправность камня я исключил так как попробовал на двух идентичных контроллерах), положение ступенек не зависит от напряжения, то есть при изменении опорного напряжения ступеньки остаются в тех же точках, хоть это уже другие напряжения, точки в которых есть ступеньки характерные, в них одновременно сменяется сразу много разрядов (отметил это на графике).

Прикрепленное изображение


Сообщение отредактировал zWitCh - Feb 25 2014, 09:10
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Aner
сообщение Feb 25 2014, 14:59
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 869
Регистрация: 28-02-08
Из: СПБ
Пользователь №: 35 463



Схему, прогу в студию. Телепатов пока нема. Может глюк связан с источником питания и наведенной гармоникой, если плохо отвязка сделана. Программно как сделано? Смотрите в дебаге или как? .. Проблема с циклом? ... читаю в бесконечном цикле -> и куда дале и как вывод данных делается?
Go to the top of the page
 
+Quote Post
zWitCh
сообщение Feb 25 2014, 15:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-08-06
Пользователь №: 19 654



Цитата(Aner @ Feb 25 2014, 18:59) *
Схему, прогу в студию. Телепатов пока нема. Может глюк связан с источником питания и наведенной гармоникой, если плохо отвязка сделана. Программно как сделано? Смотрите в дебаге или как? .. Проблема с циклом? ... читаю в бесконечном цикле -> и куда дале и как вывод данных делается?


И так на ножке PC5 через резистор в 10к подключен лабораторный источник более ничего нет в схеме, минимальная обвязка со всеми рекомендованными блокирующими конденсаторами, подаю напряжение от полвольта до 2 вольт плавно регулируя вход, параллельно на входе висит осциллограф и мультиметр, и на том и на том приборах напряжения меняются плавно, нет ни всплесков, ни помех (осциллограф с 100 Мгц полосой пропускания, смотрю на хорошей развертке). Смотрю в консоле по СОМ порту. Питание платы идет от стабилизированного источника (другого, лабораторника, земли СОЕДИНЕНЫ). Питание первое что проверил, там все чисто настолько на сколько дает мне понять мой осциллограф.

Код:
CODE
#include<stm32f10x_rcc.h>
#include<stm32f10x_gpio.h>
#include "stm32f10x.h"
#include "stm32f10x_usart.h"

void _debug_print_byte(char c){
while(!(USART1->SR & USART_SR_TC));
USART1->DR = c;
}

void _debug_print_str(char *s){
do{
_debug_print_byte(*s);
}while(*(++s));
}

void _debug_print_num(uint16_t var){
char c, s[6], *p_s = &s[0], *p2_s;
uint8_t i, j = 0;

do {
*p_s++ = var % 10 + '0';
j++;
} while ((var /= 10) > 0);
*p_s = '\0';

for (i = 0, p_s--, p2_s = &s[0]; i<j; i++, j--) {
c = *p2_s;
*p2_s++ = *p_s;
*p_s-- = c;
}
_debug_print_str(s);
}

int main(void)
{

uint32_t i;
GPIO_InitTypeDef PORT;

// Initialize USART1
USART_InitTypeDef USART_InitStructure;
GPIO_InitTypeDef PORT;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
AFIO->MAPR |= AFIO_MAPR_USART1_REMAP;
PORT.GPIO_Pin = GPIO_Pin_6;
PORT.GPIO_Speed = GPIO_Speed_2MHz;
PORT.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &PORT);

USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);



RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);
ADC1->CR2 |= ADC_CR2_CAL;
while (!(ADC1->CR2 & ADC_CR2_CAL))
ADC1->CR1 |= ADC_CR1_SCAN;
ADC1->CR2 |= ADC_CR2_EXTSEL;
ADC1->CR2 |= ADC_CR2_EXTTRIG;
ADC1->SQR3 |= (ADC_SQR3_SQ1_3|ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_1|ADC_SQR3_SQ1_0);
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_SWSTART;
while (!(ADC1->SR & ADC_SR_EOC));
while(1)
{
i = 0xffff;
while(i--);
ADC1->CR2 |= ADC_CR2_SWSTART;
while (!(ADC1->SR & ADC_SR_EOC));
_debug_print_num(ADC1->DR);
_debug_print_str("\r\n");

}
}


Кратенько суть того что делает программа вот:

CODE
int main(void)
{
uint32_t i;
GPIO_InitTypeDef PORT;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2ENR_ADC1EN, ENABLE);
ADC1->CR2 |= ADC_CR2_CAL;
while (!(ADC1->CR2 & ADC_CR2_CAL))
ADC1->CR1 |= ADC_CR1_SCAN;
ADC1->CR2 |= ADC_CR2_EXTSEL;
ADC1->CR2 |= ADC_CR2_EXTTRIG;
ADC1->SQR3 |= (ADC_SQR3_SQ1_3|ADC_SQR3_SQ1_2|ADC_SQR3_SQ1_1|ADC_SQR3_SQ1_0);
ADC1->CR2 |= ADC_CR2_ADON;
ADC1->CR2 |= ADC_CR2_SWSTART;
while (!(ADC1->SR & ADC_SR_EOC));
while(1)
{
i = 0xffff;
while(i--);
ADC1->CR2 |= ADC_CR2_SWSTART;
while (!(ADC1->SR & ADC_SR_EOC));
_debug_print_num(ADC1->DR);
_debug_print_str("\r\n");

}
}


Сразу отмечу что время семплирования не влияет, ставил разное, делал то же самое но через инжектированные каналы, эффект тот же...

Цитата(scifi @ Feb 25 2014, 18:40) *
А может, лучше чуть пореже читать? Вдруг там что-то клинит от частого считывания?

чуть выше код того как я делаю, тут мало того что не очень то и часто читается, но и читается только когда данные готовы, так что нет, дело не в чтении (да и чтение бы проявлялось не так, у меня сто процентная повторяемость на определенном значении (нескольких значениях) выдаваемых АЦП, при этом если подать опору другую и АЙП будет выдавать 1023 при другом входном напряжении, все равно ступенька именно в тех же точках оцифрованных, то есть это никак не связано с чтением или входом судя по всему...)

Сообщение отредактировал IgorKossak - Feb 25 2014, 17:46
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zWitCh   Нелинейности внутреннего АЦП в STM32   Feb 25 2014, 09:09
- - MrYuran   Это называется "missing code", место сши...   Feb 25 2014, 11:08
|- - ViKo   Цитата(MrYuran @ Feb 25 2014, 14:08) Это ...   Feb 25 2014, 11:26
- - scifi   Может быть, не была проделана процедура автоматиче...   Feb 25 2014, 11:18
|- - MrYuran   Цитата(scifi @ Feb 25 2014, 15:18) Может ...   Feb 25 2014, 11:34
|- - scifi   Цитата(MrYuran @ Feb 25 2014, 15:34) А че...   Feb 25 2014, 11:56
|- - MrYuran   Цитата(scifi @ Feb 25 2014, 15:56) Вы, ви...   Feb 25 2014, 12:11
|- - zWitCh   Цитата(scifi @ Feb 25 2014, 15:56) Вы, ви...   Feb 25 2014, 14:30
|- - scifi   Цитата(zWitCh @ Feb 25 2014, 18:30) прост...   Feb 25 2014, 14:40
- - Aner   Программная проблема, разбирайтесь с прерываниями ...   Feb 25 2014, 11:32
- - ViKo   ЦитатаThe ADC has an built-in self calibration mod...   Feb 25 2014, 12:48
|- - Леонид Иванович   Цитата(zWitCh @ Feb 25 2014, 19:41) И так...   Mar 1 2014, 19:42
|- - adnega   Цитата(Леонид Иванович @ Mar 1 2014, 23:4...   Mar 1 2014, 20:02
- - ViKo   http://electronix.ru/forum/index.php?showt...088...   Feb 25 2014, 19:43
|- - zWitCh   Цитата(ViKo @ Feb 25 2014, 23:43) http://...   Feb 26 2014, 07:27
|- - scifi   Цитата(zWitCh @ Feb 26 2014, 11:27) не мо...   Feb 26 2014, 09:23
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 10:27) ссылк...   Feb 26 2014, 09:27
- - zWitCh   продолжил свои изыскания, взял я совершенно другую...   Feb 26 2014, 11:11
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 14:11) Вроде...   Feb 26 2014, 11:19
|- - zWitCh   Цитата(ViKo @ Feb 26 2014, 15:19) Так не ...   Feb 26 2014, 11:56
||- - ViKo   Цитата(zWitCh @ Feb 26 2014, 14:56) Интер...   Feb 26 2014, 12:00
||- - scifi   Цитата(ViKo @ Feb 26 2014, 16:00) Ничего ...   Feb 26 2014, 12:28
|- - Tanya   Цитата(ViKo @ Feb 26 2014, 15:19) Так не ...   Feb 26 2014, 12:04
|- - ViKo   Цитата(Tanya @ Feb 26 2014, 15:04) Источн...   Feb 26 2014, 12:10
||- - zWitCh   Цитата(ViKo @ Feb 26 2014, 16:10) На Диск...   Feb 26 2014, 12:35
|||- - ViKo   Цитата(zWitCh @ Feb 26 2014, 15:35) ...та...   Feb 26 2014, 12:36
||||- - zWitCh   Цитата(ViKo @ Feb 26 2014, 16:36) А это н...   Feb 26 2014, 12:39
|||- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:35) Госпо...   Feb 26 2014, 12:39
|||- - zWitCh   Цитата(Tanya @ Feb 26 2014, 16:39) А вход...   Feb 26 2014, 12:42
|||- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:42) вход ...   Feb 26 2014, 12:45
||- - Tanya   Цитата(ViKo @ Feb 26 2014, 16:10) На Диск...   Feb 26 2014, 12:35
||- - ViKo   Цитата(Tanya @ Feb 26 2014, 15:35) А разв...   Feb 26 2014, 12:38
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 16:04) Источн...   Feb 26 2014, 12:37
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 15:37) (пров...   Feb 26 2014, 12:41
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:37) вот т...   Feb 26 2014, 12:41
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 16:41) Нет, я...   Feb 26 2014, 12:56
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 16:56) кажет...   Feb 26 2014, 13:10
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 15:56) Зачем...   Feb 26 2014, 13:11
|- - Tanya   Цитата(ViKo @ Feb 26 2014, 17:11) Еще раз...   Feb 26 2014, 13:36
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 17:36) Какая-...   Feb 26 2014, 13:43
|- - ViKo   Цитата(zWitCh @ Feb 26 2014, 16:43) так в...   Feb 26 2014, 13:45
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 17:43) да вс...   Feb 26 2014, 13:56
|- - zWitCh   Цитата(Tanya @ Feb 26 2014, 17:56) Так мо...   Feb 26 2014, 14:16
|- - Tanya   Цитата(zWitCh @ Feb 26 2014, 18:16) - 24 ...   Feb 26 2014, 14:39
- - zWitCh   Занизил частоту ADCCLK поделил на 16, все стало ок...   Feb 26 2014, 14:40
|- - scifi   Цитата(zWitCh @ Feb 26 2014, 18:40) Заниз...   Feb 26 2014, 14:45
|- - zWitCh   Цитата(scifi @ Feb 26 2014, 18:45) Семён ...   Feb 26 2014, 15:10
- - ViKo   Найдите у STMicroelectronics AN3137, там показано ...   Mar 2 2014, 18:59
|- - Леонид Иванович   Документ AN3137 во многом повторяет AN2834. Там со...   Mar 2 2014, 21:22
|- - ViKo   Цитата(Леонид Иванович @ Mar 3 2014, 00:2...   Mar 3 2014, 11:50
|- - Леонид Иванович   Цитата(ViKo @ Mar 3 2014, 14:50) Этот сов...   Mar 3 2014, 12:34
- - ViKo   Входной ток у АЦП - это ток заряда внутреннего кон...   Mar 3 2014, 13:06
|- - Леонид Иванович   Цитата(ViKo @ Mar 3 2014, 16:06) Если бы ...   Mar 3 2014, 14:25
|- - ViKo   Цитата(Леонид Иванович @ Mar 3 2014, 17:2...   Mar 3 2014, 17:46
|- - Леонид Иванович   Цитата(ViKo @ Mar 3 2014, 20:46) Чем боль...   Mar 3 2014, 21:54
- - ViKo   Если от Cext не зависит, то почему вы назвали сове...   Mar 4 2014, 08:03
|- - Леонид Иванович   Цитата(ViKo @ Mar 4 2014, 11:03) Если от ...   Mar 4 2014, 09:02
- - ViKo   Если не трудно, покажите, что будет при Cext = 200...   Mar 4 2014, 09:50
|- - Леонид Иванович   Без проблем. Видно, что время переходного процесса...   Mar 4 2014, 10:02
- - ViKo   Вы правы. Попробую сам в LTspice.   Mar 4 2014, 10:53
|- - Леонид Иванович   Вообще, выводы находятся в соответствии с рекоменд...   Mar 4 2014, 11:25
- - ViKo   Возник один вопрос, вспомнил про эту тему. Зачем в...   Mar 28 2014, 08:31
- - Леонид Иванович   Увеличение времени выборки ts может потребоваться ...   Mar 28 2014, 16:15


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 12:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01489 секунд с 7
ELECTRONIX ©2004-2016