Например TDA7294

Форум РадиоКот • Просмотр темы - Вольтметр True Rms на STM32
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 10:21:29

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


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



Начать новую тему Ответить на тему  [ Сообщений: 163 ]     ... , , , 8,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Пт апр 09, 2021 20:12:31 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Эксперимент на чипе stm32f030 72МГц, идеальный вариант, на PB1 ШИМ, на A0 АЦП, сопротивление 200 Ом
АЦП DMA кольцевой буфер, прерывание половинка и полный, расчет среднего в прерывании.
Стабильные показания на частоте ШИМ 1000кГц, меандр, удалось получить только при 239_5 Cycles, хотя может он не успевает просчитывать.

Вот данные замеров ШИМ 10кГц
Спойлер50%
avg = 2029 - 2077
Код:
ADC_values[0]   4095   
ADC_values[1]   4094   
ADC_values[2]   4092   
ADC_values[3]   4090   
ADC_values[4]   4093   
ADC_values[5]   1   
ADC_values[6]   1   
ADC_values[7]   3   
ADC_values[8]   3   
ADC_values[9]   2   
ADC_values[10]   2   
ADC_values[11]   4093   
ADC_values[12]   4093   
ADC_values[13]   4094   
ADC_values[14]   4095   
ADC_values[15]   4090   
ADC_values[16]   2   
ADC_values[17]   2   
ADC_values[18]   2   
ADC_values[19]   1   
ADC_values[20]   1   
ADC_values[21]   2   
ADC_values[22]   4091   
ADC_values[23]   4094   
ADC_values[24]   4094   
ADC_values[25]   4091
25%
avg = 1007 - 1031
Код:
ADC_values[0]   2   
ADC_values[1]   0   
ADC_values[2]   1   
ADC_values[3]   1   
ADC_values[4]   0   
ADC_values[5]   2   
ADC_values[6]   4092   
ADC_values[7]   4091   
ADC_values[8]   4091   
ADC_values[9]   0   
ADC_values[10]   2   
ADC_values[11]   1   
ADC_values[12]   1   
ADC_values[13]   1   
ADC_values[14]   1   
ADC_values[15]   0   
ADC_values[16]   1   
ADC_values[17]   4095   
ADC_values[18]   4092   
ADC_values[19]   4091   
ADC_values[20]   2   
ADC_values[21]   1   
ADC_values[22]   2   
ADC_values[23]   1   
ADC_values[24]   1   
ADC_values[25]   1
полностью массив из 1024 значений не стал приводить

Усе, это идеальный вариант, стабильней некуда.
и код самого прерывания
Спойлер
Код:
void DMA1_Channel1_IRQHandler(void)
{
   static uint64_t avg;
   uint16_t *dp;
   uint32_t irq; uint16_t n;

   DMA1->IFCR = irq = DMA1->ISR & IRQ_MASK;   
   dp = &ADC_values[(irq & DMA_ISR_TCIF1) ? ARRAYSIZE / 2 : 0];   

   n = ARRAYSIZE / 2;   
   avg = 0;
   do {
   avg += *dp;
   dp += 1;
   } while (--n != 0);

   avg /= ARRAYSIZE / 2;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Пт апр 09, 2021 20:21:49 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
чевой-то хваленый STM-овский АЦП шумит аж в трёх младших битах...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Пт апр 09, 2021 20:48:52 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
С чего бы он был хваленым, такой же как и в Атмеги, только разрядность увеличили, а шумит он из-за емкости внутри.
К примеру вот замеры какого-то стабилизированного питания с выхода БП на ТЛ494
Спойлер
Код:
620
616
615
616
616
616
615
613
616
615
616
615
619
617
609
616
616
615
614
615
613
615
617
616
613
616
615
613
615
617
616
615
Это учитывая что вывод AREF на TL431.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Сб апр 10, 2021 18:32:57 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
ARV, продолжаем эксперимент, получил я идеальный вариант, подчеркиваю идеальный.

Увеличил скорость преобразования до 7_5Cycles, если не ошибаюсь, тактовая АЦП 14МГц, тактируется от какого-то собственного HSI генератора, в результате скорость преобразования составило 1,43мкс.

При тактовой CPU 72МГц у меня в прерывании вагон времени, учитывая на вычисление 64 битного корня (над функцией надо бы поработать, может полегче есть), само прерывание идет со скоростью 0,7мс, а весь расчет включая 64 битный корень 0,3мс судя по осциллографу, времени вагон получается.

Сам период измерения выбран 1,43(мкс)*512(половинка буфера)*700=512512мкс = ~0,5сек.
Здесь можно как бы еще поиграться, уменьшить скорость преобразования до минимальной 1_5Cycles, что составит 1мкс, что позволит подняться выше 100кГц.
Можно с самим периодом еще повозиться.
В коде я обнулял младшие три бита, можно попробовать убрать.
Но как бы не важно, я получил идеальный результат, цифра стоит как вкопанная, не колышется.

Вот таблица
СпойлерШИМ частота 10кГц, при % заполненияИзображение
avg и rms это значения которые мне плата stm выдала.
AVGидел и RMSидеал это значения рассчитанные в экселе.
Далее прогнал частотный диапазон
Спойлерот 10Гц до 100кГц, и даже свою волшебную частоту взял 7981Гц
Изображение
AVGидеал = 2044
RMSидеал = 2891
Да и код, кому нужен
Спойлер
Код:
volatile uint32_t avg_s;
volatile uint32_t rms_s;

#define ARRAYSIZE 1024UL
uint16_t ADC_values[ARRAYSIZE] __attribute__ ((aligned(4)));
#define dsp_count 700UL

void DMA1_Channel1_IRQHandler(void)
{
   static uint32_t avg;
   static uint64_t rms;
   static uint64_t avg_t;
   static uint64_t rms_t;
   static uint16_t count=0;
   uint32_t temp;
   uint16_t *dp;   
   uint32_t irq; uint16_t n;

   DMA1->IFCR = irq = DMA1->ISR & DDS_IRQ_MASK;   
   dp = &ADC_values[(irq & DMA_ISR_TCIF1) ? ARRAYSIZE / 2 : 0];   

   n = ARRAYSIZE / 2;      
   avg = 0; rms=0;
   do {
   avg += *dp & 0xFFF8;
   temp = *dp & 0xFFF8;
   rms += (temp) * (temp);
   dp += 1;
   } while (--n != 0);

   avg_t += avg;
   rms_t += rms;

   if(count++ == dsp_count) {

   avg_t /= ((ARRAYSIZE * dsp_count) / 2);

   rms_t /= ((ARRAYSIZE * dsp_count) / 2);

   rms_t = isqrt64(rms_t);

   avg_s = avg_t;
   rms_s = rms_t;

   count=0; avg_t=0; rms_t=0;
   }
}

берите, я не жадный
Усе, на этом хватит.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Сб апр 10, 2021 22:11:04 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 815
Рейтинг сообщения: 0
Dimon456, Очень даже неплохо. Если выложишь hex, то можно сравнить.
STM32F103
LCD_RS as sbit at GPIOA_ODR.PA0
LCD_EN as sbit at GPIOA_ODR.PA1
LCD_D4 as sbit at GPIOA_ODR.PA2
LCD_D5 as sbit at GPIOA_ODR.PA3
LCD_D6 as sbit at GPIOA_ODR.PA4
LCD_D7 as sbit at GPIOA_ODR.PA5
ADC - PA6
PC13 - переполнение ADC
Первая строчка TRMS, вторая AVG.
2048 АЦП - ноль.
100 ед. АЦП - 1 вольт.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Сб апр 10, 2021 22:27:02 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 0
, получил я идеальный вариант, подчеркиваю идеальный.

Никогда не говори никогда. Нет пределу совершенству. Попробуйте:
1. Не надо обнулять младшие биты, они тоже несут информацию. Сигнал, который идет на АЦП не идеальный, не надо гнаться за стабильными цифрами. А то так можно дойти до 5-битного сигнала, еще стабильней будет. Хотите уменьшить шум, усыпляйте МК на время оцифровки, разводите правильно цепи аналогового питания МК, озаботьтесь стабильностью опорного напряжения и т.д.
2. Сначала из суммы извлекайте корень, причем плавучий, только после этого нормализация, причем не к разрядности АЦП, она вам не нужна, а к реальным вольтам на входе с учетом делителя.
3. Не надо извлекать корень в прерывании, передайте его в основное тело, там извлечете без спешки, отфильтруете и отправите на индикацию.
4. Подберите период измерения кратным 20мс, для подавления неизбежных сетевых 50Гц.
5. Время семплирования не делайте меньше 7_5Cycles, возрастает шум. Кстати это не время преобразования. Время преобразования зависит от тактовой АЦП.
6. Импеданс входного сигнала должен быть не выше определенной величины, в даташите найдете таблицу. Вообще есть неплохая статья, как правильно "готовить" АЦП у STM: http://we.easyelectronics.ru/STM32/demo ... stm32.html

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 06:50:34 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Andrey_B писал(а):
Попробуйте:
Нет, пробовать я не буду, нет смысла.
Andrey_B писал(а):
Делайте второй канал измерения тока.
Вот когда он, стм, начинает прыгать между каналами - вот и возникает тот случай, который вы указали по ссылке.
Если и делать второй канал, то только на тех стм, на которых есть второй реальный ацп.
Andrey_B писал(а):
то измеритель мощности легко посчитает активную и реактивную мощности, коэффициент мощности, энергию и т.д.
Для этого есть готовые электросчетчики, в которых установлены аппаратные специализированные чипы, а не какая-то программная хрень.
linkov1959 писал(а):
Если выложишь hex, то можно сравнить.
Ни когда hex от другого чипа не будет равен вашему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 09:52:31 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 0
Эксперимент на чипе stm32f030 72МГц,
Dimon456 писал(а):
Если и делать второй канал, то только на тех стм, на которых есть второй реальный ацп.

Либо F030 и 48МГц, либо F303 и 72МГц, либо у вас косяк. Кстати в STM32F303 аж 4 отдельных АЦП.

Dimon456 писал(а):
Для этого есть готовые электросчетчики, в которых установлены аппаратные специализированные чипы, а не какая-то программная хрень.

Готовые вольтметры TrueRMS тоже есть, однако смысл делать опыты с МК вы нашли. :)
Это в простых электросчетчиках применяют дешевые, массовые, специализированные чипы, а вот многофункциональные счетчики с возможностью измерения кучи параметров, как правило, делают на МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 10:36:57 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Andrey_B писал(а):
F030
СпойлерКварц на 8МГц
Код:
   // Внешний кварцевый HSE генератор
void Overclocking(void) // Разгон микроконтроллера.
{
     FLASH->ACR|=  FLASH_ACR_PRFTBE;        //Включить буфер предварительной выборки
     FLASH->ACR&= ~FLASH_ACR_LATENCY;       //Очистить FLASH_ACR_LATENCY
     FLASH->ACR |= FLASH_ACR_LATENCY;     //Пропускать 1 такт

     RCC_HSEConfig(RCC_HSE_ON); // Включаем  HSE генератор.
     while(!(RCC->CR & RCC_CR_HSERDY));  //ожидание готовности HSE

  RCC->CFGR2 = RCC_CFGR2_PREDIV1_DIV1;  // предделитель для PLL RCC_CFGR2_PREDIV1_DIV1-8MHz
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); // Выбираем источником такторования HSE генератор.
  RCC_PLLCmd(DISABLE); // Выключаем умножитель частоты.
  RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_CFGR_PLLMULL9); // 9*8MHz=72MHz На сколько будем умножать частоту. RCC_CFGR_PLLMULL6 - 48MHz
  RCC_PLLCmd(ENABLE); // Включаем умножитель частоты.
  while ((RCC->CR & RCC_CR_PLLRDY) == 0);     // Ждем запуска умножителя частоты.
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Выбираем источником такторования умножитель частоты.



  SystemCoreClockUpdate(); // Вычисление тактовой частоты ядра.
}
В чем проблема? Или чип не может работать на 72МГц?
После выполнения функции SystemCoreClockUpdate можно глянуть в переменной (не помню на память) на какой частоте он якобы завелся. Еще в регистре можно глянуть (не помню на память) на что он действительно приземлился на HSI или HSE.
Хорошим подтверждающим фактором является настройка USART модуля для частоты 72МГц.

Вот код, для HSI генератора для 48МГц
Код:
void Overclocking(void) // Разгон микроконтроллера.
{
     FLASH->ACR|=  FLASH_ACR_PRFTBE;        //Включить буфер предварительной выборки
     FLASH->ACR&= ~FLASH_ACR_LATENCY;       //Очистить FLASH_ACR_LATENCY
     FLASH->ACR |= FLASH_ACR_LATENCY;     //Пропускать 1 такт

     RCC_HSICmd(ENABLE); // Включаем внутренний RC генератор.
     while(!(RCC->CR & RCC_CR_HSIRDY));  //ожидание готовности HSI
    
  RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);   // Выбираем источником такторования внутренний RC генератор.
  RCC_PLLCmd(DISABLE); // Выключаем умножитель частоты.
  // RCC_CFGR_PLLMULL2-8MGz 4-16MGz 6-24MGz 8-32MGz 12-48MGz
  RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_CFGR_PLLMULL12); // На сколько будем умножать частоту.
  RCC_PLLCmd(ENABLE); // Включаем умножитель частоты.
  while ((RCC->CR & RCC_CR_PLLRDY) == 0);     // Ждем запуска умножителя частоты.
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Выбираем источником такторования умножитель частоты.

  SystemCoreClockUpdate(); // Вычисление тактовой частоты ядра.
}
В обще-то я не программист, могу ошибаться.
На крайняк для проверки осциллограф есть.
Andrey_B писал(а):
однако смысл делать опыты с МК вы нашли
пока не могу ответить на этот вопрос.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 11:05:32 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 815
Рейтинг сообщения: 0
stm32f103 гонится до 128Мгц, два канала АЦП и не сильно подорожал в отличии от 303-го, который уже дороже 750-го!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 20:07:40 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Andrey_B писал(а):
Хотите уменьшить шум, усыпляйте МК на время оцифровки,
Проблема в том что оцифровка сигнала идет постоянна, когда же ему просыпаться?
Andrey_B писал(а):
причем не к разрядности АЦП, она вам не нужна, а к реальным вольтам на входе с учетом делителя.
вот тут уже интересней будет. Опускаем вывод AREF (или как он там правильно? VDDA) на источник опорного напряжения 2.048В что на выходе АЦП ровно даст значение в миллиВ, останется сдвинуть только на единицу в право.
Andrey_B писал(а):
Не надо извлекать корень в прерывании,
для того и кочегарю мк, что бы иметь возможность все расчеты выполнить в прерывании.
Andrey_B писал(а):
Подберите период измерения кратным 20мс, для подавления неизбежных сетевых 50Гц.
Это будет сложно сделать. При Тактовой АЦП 14МГц и 7_5Cycles формула (12,5+7,5)/14=1,43мкс.
при 1_5Cycles = 1мкс
при 71_5Cycles = 6мкс
это то что на цело делится, остальное все дробное и период кратным 20мс не как не выжить, а на сколько мне известно сетевые 50Гц поддерживаются на довольно высоком уровне, а у stm32f030 АЦП 14МГц это HSI генератор, у которого 14МГц - это еще вопрос, а про стабильность - можно и не заикаться.
Andrey_B писал(а):
а вот многофункциональные счетчики с возможностью измерения кучи параметров, как правило, делают на МК.
Связующим звеном у них МК, мне больше попадались с Атмегой и Атюни, а вот для измерения как раз используются специализированные чипы. А также и со встроенной антенной на каком нибудь rf-модуле, встроенная spi-флешка на разъеме, часы реального времени, а еще блютуз и фай-фай. И за все это я должен заплатить. Еще и многотарифность.
Вот скажи мне, на кой мне вот эти часы реального времени, косинусы синусы?
По чему самое главное не показывает: напряжение и мощность? Старый счетчик хоть мощность показывал, а этот косинус с часами.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 21:49:13 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 0
Проблема в том что оцифровка сигнала идет постоянна, когда же ему просыпаться?

Это компромисс, хотите малого шума - изыскивайте возможности. Хотя в данном случае усыплять МК скорее всего будет не целесообразно. При разгоне МК скорее всего, заявленные в даташите параметры АЦП выдержанны не будут, тем более в серии.

Опускаем вывод AREF (или как он там правильно? VDDA) на источник опорного напряжения 2.048В что на выходе АЦП ровно даст значение в миллиВ, останется сдвинуть только на единицу в право.
...
это то что на цело делится, остальное все дробное и период кратным 20мс не как не выжить, а на сколько мне известно сетевые 50Гц поддерживаются на довольно высоком уровне, а у stm32f030 АЦП 14МГц это HSI генератор, у которого 14МГц - это еще вопрос, а про стабильность - можно и не заикаться.

Опускать опору не стоит, сильно проиграете на шумах. Зачем вам значение в вольтах на ноге АЦП, ведь будут какие-то входные цепи, сразу с их учетом и приводите значение. Не пытайтесь выбрать длину буфера степенью двойки, для замены деления сдвигом. Делить ведь в прерывании не надо, надо в основном теле умножать на плавучий коэффициент. Выбирайте длину буфера просто четным количеством отсчетов, так чтобы ровно уложиться в интервал, кратный 20мс. Прерывание МК будет оставлять достаточно временнЫх ресурсов для основного тела, т.к. в прерывании будут только накапливаться квадраты выборок половинок буфера и отмерятся интервал. После окончания интервала, конвейером передавайте накопленные данные из прерывания в основное тело. Квадратный корень в основном теле будет извлекаться один раз за время нескольких прерываний одного интервала, и времени на это будет с запасом. Измерения будут идти непрерывно, и для них хорошие результаты даст применение фильтра скользящего среднего. Если нестабильность внутреннего генератора АЦП будет сильно влиять, можно затактировать АЦП от кварцевого генератора.
Вот еще к вопросу точности АЦП: http://we.easyelectronics.ru/STM32/test ... 2f100.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 22:11:09 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Andrey_B писал(а):
изыскивайте возможности
Andrey_B писал(а):
Не пытайтесь выбрать
Andrey_B писал(а):
передавайте
Мне это не надо. Я за этот код больше не возьмусь.
Andrey_B писал(а):
Опускать опору не стоит, сильно проиграете на шумах.
Не думаю, при питании от батареи все нормально будет. И про какие шумы идет речь? Если не прыгать по каналам - то все ок.
Andrey_B писал(а):
уложиться в интервал, кратный 20мс.
Да не уложитесь вы ни когда в этот интервал, без синхронизации, для этого нужен какой нибудь сверх точный кварц с х.0000000001 в каком-то разряде.
Andrey_B писал(а):
Делить ведь в прерывании не надо
Andrey_B писал(а):
Квадратный корень в основном теле
Что вам мешает его в прерывании выполнять? Не пойму. 64битное число из прерывания вытаскивать против 32битного числа.
Andrey_B писал(а):
применение фильтра скользящего среднего
Для чего? За 0,5сек эта штука выполняет 358400 измерений, вы потом из всего этого среднее находите или квадратное.
У МК ресурсов хватает все тащит в прерывании, за чем-то вытаскивать все из прерывания? Там еще половина времени остается.
Вам прерывание все посчитает, +в volatile засунет, вам остается только на индикатор вывести.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вс апр 11, 2021 23:10:33 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 815
Рейтинг сообщения: 0
Dimon456, у меня всего 100000 изм. за 0.3сек без DMA, но с разгоном до 128Мгц ядро и 21Мгц АЦП.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Пн апр 12, 2021 07:24:15 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
linkov1959, таким способом, как у вас не возможно гарантировать, что на каждый ваш период 0.3сек будет тратится одинаковое количество тактов, если так делать, то надо на asm писать.

Для решения задачи есть два метода:
1 используют синхронизацию, бонусом получают частотомер
2 использовать какой-то период, неважно какой, можете в екселе посчитать, к примеру период сигнала пусть у вас 4 клетки, а период расчета 5 клеток, результат должен быть одинаков.

И так выбрали второй метод, дискретизация.
Так же можно пойти двумя путями:
1 использование таймера, очень хорошо HSE генератор, кварц.
2 производитель stm гарантирует, что на одно преобразование ацп будет тратится одинаковое количество тактов, к примеру (12,5+7,5) = 20 тактов, не зависимо от результата преобразования. В F030 все очень плохо, АЦП висит на HSI генераторе который имеет стабильность 10-3, но все таки во много раз лучше, чем ваш способ.

Возможности stm позволяют довести весь процесс чуть ли не до аппаратного уровня.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Пн апр 12, 2021 09:12:12 
Опытный кот

Карма: -2
Рейтинг сообщений: 35
Зарегистрирован: Пн сен 10, 2018 19:16:28
Сообщений: 815
Рейтинг сообщения: 0
Dimon456, у меня с синхронизацией проблем нет, могу уложиться в любое время измерения с точностью 1/100000. Среда разработки у меня специфическая, многие сложные вещи делаются легко, а простые сложно.
Настройка DMA занимает целую страницу, на досуге разберусь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Пн апр 12, 2021 21:46:50 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Придется наверное собрать этот стенд, еще и индикатор прикрутить надо будет.
Входной формирователь будет построен на диодном мосту и делителе, ни каких конденсаторов в цепи не будет, достаточно того который в stm имеется, думаю для теста пойдет где-то 33В к 3В, думаю достаточно будет, AREF опускать не буду, пусть сидит где сидит, 3,3В.
Быстро не обещаю, сегодня ни как, завтра то же ни как, может после завтра.

Добавлено after 8 hours 21 minute 11 seconds:
Собрал я этот х. стенд.
1 тест был 50Гц транс
В екселе вот тут картинку считал
СпойлерИзображение
1. с сетевым напряжением оба прибора справились на ура
2. вторичная обмотка транса, и ... ?
3. ко вторичной обмотке транса был подключен диод-шотки, ни каких конденсаторов нет, просто диод
измерено как AC так и DC.
Размах синусоиды на осциллографе 60 вольт.
ИзображениеНапомню:
В расчетах:
~ это положительная и отрицательная части синусоиды
- а это, если отрицательную часть синусоиды перевести в положительную
1 это полная синусоида
1/2 а это как на графике
плюс еще посчитал вот по этим формулам для варианта (- 1/2):
AVG = 9.55
RMS = 15

А вот что мне выдала плата stm
Изображение
Показания в небольших пределах плавают, во первых не стабилизированное напряжение, во вторых за точностью я не гнался, примерно сопротивлениями подогнал в делителе.
В принципе, сходится.
Далее тест БП ТЛ494 стабилизированное на выходе 10В.
СпойлерИзображение
Измеряем на контактах А В.
Изображение
Показания платы stm стабильны, даже не колышутся.
Вроде усё понятно.
Форма осцилограммы
Изображение
срисовал с экрана, примерно
Какие будут выводы, я у вас спрашиваю, у всех спрашиваю?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вт апр 13, 2021 11:08:23 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 0
И про какие шумы идет речь?

Работа внутренних частей МК неизбежно наводит помехи на АЦП, уровень этих помех не зависит от величины опоры, другими словами, чем опора больше, тем больше младший разряд АЦП, тем меньше будут сказываться помехи, проявляясь в зашумленности значений с АЦП.

Если не прыгать по каналам - то все ок.

Если правильно сформировать сигнал для АЦП, переключение каналов ни как не сказывается на точности.

Да не уложитесь вы ни когда в этот интервал, без синхронизации, для этого нужен какой нибудь сверх точный кварц с х.0000000001 в каком-то разряде.

Посчитаем. Типичный кварц ABM3-8.000MHZ имеет точность 50ppm, нестабильность в рабочем диапазоне температур 50ppm, и дрейф за годы 5ppm. 50ppm - это 0.005%, а в розетке по ГОСТ всего ±0,2 Гц.

Что вам мешает его в прерывании выполнять? Не пойму. 64битное число из прерывания вытаскивать против 32битного числа.
...
У МК ресурсов хватает все тащит в прерывании, за чем-то вытаскивать все из прерывания?

Это позволит выполнять оцифровку на максимально доступной, высокой частоте непрерывно, не теряя вообще отсчеты, тогда и синхронизация не нужна будет, вы все отсчеты сможете учесть. Как их потом правильно интерпретировать и показать без мельтишения на дисплее, уже другой вопрос.

Dimon456 писал(а):
, сегодня ни как, завтра то же ни как, может после завтра.
...
Добавлено after 8 hours 21 minute 11 seconds:
Собрал я этот х. стенд.
...
Какие будут выводы, я у вас спрашиваю, у всех спрашиваю?

:) Вывод такой: что-то вас в этой теме интересует.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вт апр 13, 2021 15:45:18 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Andrey_B писал(а):
от величины опоры
от величины опоры зависит целочисленное деление.
Как думаете на сколько будет выигрыш?
Код:
1. RESULT = ((ADCA*3300)/4096);
2. RESULT = ((ADCA*2048)/4096);

Andrey_B писал(а):
Если правильно сформировать сигнал для АЦП, переключение каналов ни как не сказывается на точности.
Не вы ли мне давали ссылку на какой-то сайт?
Мы пытаемся оцифровать не понятно какой сигнал, не постоянный, не надо прыгать по каналам, тем более на высокой частоте сэмплирования, это может привести к непредсказуемым значениям.
Andrey_B писал(а):
Типичный кварц ABM3-8.000MHZ
Надо бы это проверить, разгоним до 72МГц, и выдадим ШИМ 4Гц, получается
Код:
Timer Prescaler :287; Preload = 62499; Actual Interrupt Time = 250 ms
DM-90A измеряет с точностью до 3 знака, 0.000, конечно возникает вопрос, насколько точно сам прибор откалиброван.
Но как бы это не важно, можно примерно настроить +-, можно осциллографом глянуть, частотомером или еще чем.

Меня больше волнует целочисленное деление
Код:
avg_t /= ((ARRAYSIZE * dsp_count) / 2);
знаменатель должен быть кратен степени двойки, тогда операция деления выполнится сдвигами, а не километровыми участками кода.

Тем более, как я уже писал, ваши 50Гц остаются в розетке, дальше пошли импульсные источники питания и частотные преобразователи, а там далеко уже не 50Гц, и нет ни какого смысла гнаться к этому периоду.
50Гц - это частный случай.
Andrey_B писал(а):
тогда и синхронизация не нужна будет
вы что, не смотрели мой код?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вольтметр True Rms на STM32
СообщениеДобавлено: Вт апр 13, 2021 16:35:07 
Опытный кот
Аватар пользователя

Карма: 14
Рейтинг сообщений: 307
Зарегистрирован: Пт апр 09, 2010 16:06:38
Сообщений: 869
Откуда: Тула
Рейтинг сообщения: 0
Dimon456 писал(а):
от величины опоры зависит целочисленное деление.
Как думаете на сколько будет выигрыш?
Код:
1. RESULT = ((ADCA*3300)/4096);
2. RESULT = ((ADCA*2048)/4096);

Если делать деление и извлечение корня в основном теле, это все не важно будет. Кстати, сопротивления масштабного делителя на входе тоже будете подбирать под степень двойки, чтоб делилось сдвигами ?

Dimon456 писал(а):
Не вы ли мне давали ссылку на какой-то сайт?

Вы ее читали ? Какая разница, с одной ножки подается сигнал на семплирующий конденсатор АЦП, или по очереди с разных ? Конденсатор все равно перезаряжается. Или вы думаете, что во время преобразования напряжение на нам остается неизменным ? Наверно при оцифровке сильно разных по уровню сигналов ему перезаряжаться нужно будет сильнее. Но если правильно выбрать частоту оцифровки и импеданс источника, результат будет не хуже, чем в даташите.

Dimon456 писал(а):
, это может привести к непредсказуемым значениям.

Любая непредсказуемость берется от незнания.

Dimon456 писал(а):
Тем более, как я уже писал, ваши 50Гц остаются в розетке, дальше пошли импульсные источники питания и частотные преобразователи, а там далеко уже не 50Гц, и нет ни какого смысла гнаться к этому периоду.

Ну если только в чистом поле, с питанием от аккума. 50Гц вокруг нас, можно на это забить, а можно спроектировать прибор из расчета воздействия самой вероятной помехи. Хорошие приборы потому и хорошие, что в них предусматривается плохое стечение условий работы.


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

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


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

Сейчас этот форум просматривают: celladon1 и гости: 23


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

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


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