Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: О производительности микроконтроллеров
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
A. Fig Lee
Пишу здесь, так как ориентируюсь на AVR.

Хочу померять напряжение переменного тока (сети) без выпрямления.
Можно применить RMS, как мне посоветовали или другой способ -
в одном и том же полупериоде меряем наряжение 2 раза, с изветным углом сдвига
между ними. Зная угол и результаты измерений, можно посчитать
амплитуду.
Не вдаваясь в подробности - формула для расчета:

A = sqr( (x2 - (x1*cos(d))/sin(d))**2 + x1**2)

где

А - искомая амплитуда
х2 - семпл 2
х1 - семпл 1
d - известный угол между первым и вторым семплом
**2 - возведение в квадрат
sqr - корень квадратный


зарядил следующий код (в цикле):

double calc(double x1, double x2, double x3, double x4) {
double a1 = x1 * x3;
double a2 = x2 - a1;
double a3 = a2/x4;
double a4 = sq(a3);
double a5 = sq(x1);
double a6 = a4 + a5;
double a7 = sqrt(a6);
return a7;
}

проверил на симуляторах IAR/ARM7TDMI - результат примерно 20000 вычислений в секунду при
расчетной частоте 60 MHz.
HTech-MPLab (PIC16F870)- при 20 MHz - около 5.6 миллисек на операцию.
AVR Studio - gcc - при симуляции на 4 MHz - 2.5 millisec на операцию (Атмега 168)
на живом Атмега 168 (Ардуино) - 16 MHz получилось 20000 операций - 2.4 секунды
rezident
На вашем месте я бы привел все результаты к каким-то одним единицам измерения. Либо кол-во вычислений функции в секунду, либо период вчисления функции.
А вообще, о чем этот топик-то? cranky.gif Прелюдия к очередной войне PIC vs AVR (с ARM сравнивать его немного странно) или сравнение компиляторов или обсуждение способа измерения напряжения RMS или что?
A. Fig Lee
Цитата(rezident @ Dec 28 2008, 19:05) *
На вашем месте я бы привел все результаты к каким-то одним единицам измерения. Либо кол-во вычислений функции в секунду, либо период вчисления функции.
А вообще, о чем этот топик-то? cranky.gif Прелюдия к очередной войне PIC vs AVR (с ARM сравнивать его немного странно) или сравнение компиляторов или обсуждение способа измерения напряжения RMS или что?


1. Лень.
2. Информация к размышлению, чтоб знать какой контроллер брать для задачи.
(форум - для начинающих).

Я например, тоже думал какой - взять контроллер чтоб потянул мп3 декодирование.

Кстати, на Атмеле скомпилированная программа была поряка 4 килобайта (AVR-Studio).
Harbour
кое-что можно почерпнуть отседа - http://mcu.caxapa.ru/benchmarks
defunct
Цитата(A. Fig Lee @ Dec 29 2008, 01:52) *
на живом Атмега 168 (Ардуино) - 16 MHz получилось 20000 операций - 2.4 секунды

2.4 милисекунды? или каких операций - то?
A. Fig Lee
Цитата(defunct @ Dec 29 2008, 10:43) *
2.4 милисекунды? или каких операций - то?


СЕКУНДЫ! не милли.
20000 вызовов функций calc() описаной здесь же.
Кстати, стоимость вызова подсчета одного косинуса/синуса/тангенса примерно равна
стоимости вызова calc()
MAXvaLL
Цитата(A. Fig Lee @ Dec 29 2008, 02:52) *
Пишу здесь, так как ориентируюсь на AVR.

Хочу померять напряжение переменного тока (сети) без выпрямления.
Можно применить RMS, как мне посоветовали или другой способ -
.....
A = sqr( (x2 - (x1*cos(d))/sin(d))**2 + x1**2)

Зачем так сложно?!
А померить !1! раз за период в максимуме (минимуме) никак? (всеравно вы для вашего способа должны разность фаз измерять!) Так и измеряйте на 90 градусов. Причем т.к. вершина достаточно пологая, то точность этих самых 90 градусов далеко не критична!
Фиксируете момент перехода через 0, пускаете таймер, и по событию от таймера автоматом пускается АЦП (autotriggered), ну или вручную в обработчике прерывания.
A. Fig Lee
Цитата(MAXvaLL @ Dec 31 2008, 12:11) *
Зачем так сложно?!
А померить !1! раз за период в максимуме (минимуме) никак? (всеравно вы для вашего способа должны разность фаз измерять!) Так и измеряйте на 90 градусов. Причем т.к. вершина достаточно пологая, то точность этих самых 90 градусов далеко не критична!
Фиксируете момент перехода через 0, пускаете таймер, и по событию от таймера автоматом пускается АЦП (autotriggered), ну или вручную в обработчике прерывания.


можно и так. пожалуй - простейший вариант из 3-х.
A. Fig Lee
Цитата(A. Fig Lee @ Dec 31 2008, 17:42) *
можно и так. пожалуй - простейший вариант из 3-х.

точность конечно будет хромать.. так как момент перехода через 0 тоже не мгновенен.
ARV
в сети практически никогда не бывает чистой синусоиды (я имею ввиду реальную сеть конечного потребителя). а если брать промышленную сеть - то и подавно. мерить напряжение по одной или нескольким точкам - это означает, получать результат "грубо приблизительный". если нужно действительно измерять, то либо применять RMS-преобразовательные микросхемы, либо делать на основе интегрирования. если учесть, что и частота сети далеко не всегда ровно 50 гц (ее порой умышленно снижают до предельно допустимого уровня), то получение точных результатов - не очень тривиальная задача
MAXvaLL
Цитата(A. Fig Lee @ Jan 1 2009, 03:17) *
точность конечно будет хромать.. так как момент перехода через 0 тоже не мгновенен.

Знаю человека который так решал эту задачу, и ничего у него не хромало smile.gif

Да, не мгновенено, но т.к. напряжение по амплитуде около 300В, то переход от "нуля" к "еденице" на ноге МК будет весьма быстр. Да и синус в окрестности нуля имеет большую крутизну.

И еще раз: вершина, ну очень пологая! Смоделируйте, и увидете допустимую ошибку по фазе, при заданной допустимой ошибке по амплитуде.

PS напряжение фазы подается напрямую на ногу МК через 2 резистора (не чипы!) по мегаому.
+ ставите диоды быстрые для защиты.

Цитата(ARV @ Jan 1 2009, 14:01) *
в сети практически никогда не бывает чистой синусоиды (я имею ввиду реальную сеть конечного потребителя). а если брать промышленную сеть - то и подавно. мерить напряжение по одной или нескольким точкам - это означает, получать результат "грубо приблизительный". если нужно действительно измерять, то либо применять RMS-преобразовательные микросхемы, либо делать на основе интегрирования. если учесть, что и частота сети далеко не всегда ровно 50 гц (ее порой умышленно снижают до предельно допустимого уровня), то получение точных результатов - не очень тривиальная задача

Частоту можно измерять программно и отслеживать ее изменения.
Никто и не говорит, что надо брать ОДНОКРАТНОЕ измерение!
Понятное дело, что каким-то образом результат надо фильтровать, будь то простое усреднение, или полноценная цифровая фильтрация. Т.е. строим оценку на основе N простых измерений.
A. Fig Lee
Ето - да, можно такие методы. Если мерять только напряжение, если же и сдвиг фаз между током,
то лучше как я сказал в первом методе.
В один и тот же момент меряется и ток и напряжение.
repairDV
Производительность микроконтроллера - это категория довольно шаткая. Ибо назначение его - принять сигнал от АЦП или с GPIO и его обработать. Предположим, вы используете AVR и принимаете на GPIO сигнал от компаратора, который, в свою очередь, настроен на сеть 220 В. Вся сетевая помеха воспринимается микроконтроллером как полезный сигнал и у вас возникает необходимость программно от этого защищаться. В ту же схему вы вставляете старый 12-тактовый 51-контроллер и он, вследствие своей тихоходности, без всякой фильтрации совершенно точно воспринимает сигнал. Его самого-то можно, как фильтр, использовать. Так что - смотря какие задачи у вас основные. Если вам нужно информацию брать откуда-то со стороны и её обрабатывать, тогда точно нужен высокопроизводительный проц, а если он сам принимает аналоговый сигнал - какой толк от производительности? Тут другой критерий - стабильность. У однотактовых микроконтроллеров она конкретно хуже.
Proton
Цитата(repairDV @ Jan 6 2009, 10:40) *
Производительность микроконтроллера - это категория довольно шаткая. Ибо назначение его - принять сигнал от АЦП или с GPIO и его обработать. Предположим, вы используете AVR и принимаете на GPIO сигнал от компаратора, который, в свою очередь, настроен на сеть 220 В. Вся сетевая помеха воспринимается микроконтроллером как полезный сигнал и у вас возникает необходимость программно от этого защищаться. В ту же схему вы вставляете старый 12-тактовый 51-контроллер и он, вследствие своей тихоходности, без всякой фильтрации совершенно точно воспринимает сигнал. Его самого-то можно, как фильтр, использовать.
Совершенно неверное утверждение, скорость выборки АЦП можно настраивать.
Цитата(repairDV @ Jan 6 2009, 10:40) *
Так что - смотря какие задачи у вас основные. Если вам нужно информацию брать откуда-то со стороны и её обрабатывать, тогда точно нужен высокопроизводительный проц, а если он сам принимает аналоговый сигнал - какой толк от производительности?
Как минимум иметь возможность всю программу реализовать на Си.
Цитата(repairDV @ Jan 6 2009, 10:40) *
Тут другой критерий - стабильность. У однотактовых микроконтроллеров она конкретно хуже.
Странное заявление, всё зависит от прямоты рук. МК NEC и Renesas позиционирующиеся как особонадёжные имеют RISC систему комманд, инструкции исполняются в основном за 1 такт. У меня устройства на основе ARM, AVR проходили испытания ЭМС на категорию А, по самым жестким нормам(промышленные условия).
SasaVitebsk
Цитата(repairDV @ Jan 6 2009, 08:40) *
Тут другой критерий - стабильность. У однотактовых микроконтроллеров она конкретно хуже.

Не то что странное, а вообще непонятное заявление. Если речь идёт о надёжности исполнения команд, то есть о стабильности работы ядра, то я думаю - строго наоборот.
MAXvaLL
Цитата(repairDV @ Jan 6 2009, 07:40) *
В ту же схему вы вставляете старый 12-тактовый 51-контроллер и он, вследствие своей тихоходности, без всякой фильтрации совершенно точно воспринимает сигнал. Его самого-то можно, как фильтр, использовать.

Если честно, то для меня это откровение!
Вы думаете что если частота выборок мала, то ВЧ помехи фильтруются сами сабой? Обоснуйте!
SasaVitebsk
Да это не подлежит обоснованию.
Это что-то из разряда "гашения дребезга контактов, за сёт уменьшения частоты опроса". Объективно - эффект уменьшается, но на самом деле проблема не снимается, а маскируется.

Реально так. И на мой взгляд это даже обсуждению не подлежит. Чем более мощный проц, тем более стабильную и защищённую прогу можно создать. Тем более сложную обработку сигнала можно обеспечить. Именно по этому и идёт развитие процессоров в направлении увеличения вычислительной мощности. Сдерживающих фактора только 2. Энергоёмкость и стоимость.
MAXvaLL
Цитата(SasaVitebsk @ Jan 13 2009, 21:52) *
Да это не подлежит обоснованию.
Это что-то из разряда "гашения дребезга контактов, за сёт уменьшения частоты опроса". Объективно - эффект уменьшается, но на самом деле проблема не снимается, а маскируется.

Ну как-то странно... Ответ из серии "это так, потому, негры черные". Хоть на пальцах объясните, я же не прошу строгих мат. выводов biggrin.gif

Дребезг контактов ИМХО тут не причем, т.к. тут выигрыш получается вследствии того, что дребезг действует НЕ НЕПРЕРЫВНО, а "пачками" - начиная с момента переключения еще какое-то определенное время, а потом утихает, и велика вероятность что отсчет попадет в "чистую зону".

А при действии помехи, ака белый шум, вне зависимости от частоты выборок, вероятность отклонения от истинного значения на какую-то величину определяется функцией распределения, которая близка к нормальному.
Так что зависимость вероятности поймать помеху, от частоты выборок, фактически отсутствует.

Если помеха далека от белого шума, ну, пусть даже чисто сетевая - синус, то тут картина та же.
Если частота выборок не кратна частоте помехи, и/или фаза не синхронизированна с моментом перехода через "0", то вероятность попасть в "0" исчезающе мала.
SasaVitebsk
Вы меня не поняли. Я вас полностью поддерживаю. Просто автор того топика путает мягкое с тёплым. Помеховый сигнал, как и дребезг клавиш нельзя устранить снижением частоты выборок.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.