MPetrovich 6 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 8 hours ago, HardEgor said: Вы как-нибудь расскажите что вы хотите получить и увидеть, тогда можно подсказать как лучше это сделать Я делаю контроллер BLDC мотора. Измерения АЦП производятся для определения точки пересечения нуля - Zero Cross. Эта точка определяет момент переключения на следующий шаг коммутации. Чтобы удостовериться, что происходит именно Zero Cross, я хочу посмотреть измерения АЦП до и после этой точки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 33 minutes ago, Eddy_Em said: Если мне нужна точность, я беру внешний 24-битный АЦП. Сильно! Даже я так не делаю за 7 лет работы в измериловке) А вы берёте сразу сигма-дельта или последовательного приближения? 34 minutes ago, Eddy_Em said: А 12-битное встроенное чудо - какая там точность? А какая? Можно посчитать. Или вы путаете с разрешающей способностью? Не хватает 12 бит? Можно использовать оверсэмплинг. 34 minutes ago, Eddy_Em said: Так, показометр... Мда... А мы-то на 10-битном встроенном АЦП сделали осциллограф... Завтра срочно скажу коллегам, чтобы переделывали. 35 minutes ago, Eddy_Em said: В указанном вами даташите тоже говорится, что для повышения точности вполне годится усреднение кучи данных. Вы за 5 часов (это время с публикации моего поста) окучили все 50 страниц и осознали написанное? Снова завидую, т.к. я разбирался неделю... Ещё и дополнительные материалы изучил. 36 minutes ago, Eddy_Em said: что для повышения точности вполне годится усреднение кучи данных. Угу. Только это 1/20 документа. И да, это не datasheet, это Application Notes. 37 minutes ago, Eddy_Em said: медианы по 9 значениям Используете МК с FPU? И почему не 2^N? 37 minutes ago, Eddy_Em said: А вот способ ТС даст погрешность значительно выше, т.к. он хочет выполнять единичные измерения и надеяться, что они правдивы. А почему нет? Хотя, в целом, я согласен, лучше делать N-выборок с какой-либо постобработкой. Но всё же зависит снова от требуемой точности. Если вас устраивает 300%, то почему бы и нет? 38 minutes ago, Eddy_Em said: Хотя, если бы он четко сформулировал задачу, может ему что-то более дельное и посоветовали. Здесь тоже согласен. Правильно поставленная задача содержит 70% ответа) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 16 minutes ago, haker_fox said: почему не 2^N? А в чем профит 2^N для медианы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 15 minutes ago, aaarrr said: А в чем профит 2^N для медианы? Для процессоров без математического сопроцессора деление заменяется сдвиговой операцией. При условии, что использована целоцисленная математика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба В 22.04.2020 в 11:53, jcxz сказал: Что по тактам почти то же самое что сдвиг. Если процессор без FPU, вы не сможете умножить на 1/9 просто так. Придётся перейти к целочисленной арифметике. Модератор: дискуссия о делении на 1/9 перенесена сюда: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 1 час назад, MPetrovich сказал: Я делаю контроллер BLDC мотора. Измерения АЦП производятся для определения точки пересечения нуля - Zero Cross. Эта точка определяет момент переключения на следующий шаг коммутации. Чтобы удостовериться, что происходит именно Zero Cross, я хочу посмотреть измерения АЦП до и после этой точки. Это слишком самонадеянно пытаться делать управление BLDC-мотором (да к тому же - бездатчиковое), когда уровня проф.знаний не хватает даже для написания корректной работы с UART-ом. 7 минут назад, haker_fox сказал: Если процессор без FPU, вы не сможете умножить на 1/9 просто так. Вы может и не можете, а я могу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 62 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба Медианный фильтр деление не использует. И речь идет о Cortex-M3, в котором присутствует аппаратное целочисленное деление. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 83 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 2 часа назад, MPetrovich сказал: Я делаю контроллер BLDC мотора. Измерения АЦП производятся для определения точки пересечения нуля - Zero Cross. Эта точка определяет момент переключения на следующий шаг коммутации. Чтобы удостовериться, что происходит именно Zero Cross, я хочу посмотреть измерения АЦП до и после этой точки. Так-то АЦП для этого не очень подходит - лучше использовать компаратор. А для контроля вам достаточно набрать в массив данных с нескольких периодов ШИМ и передать на комп. И уже на компьютере разбираться что там происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 58 minutes ago, HardEgor said: Так-то АЦП для этого не очень подходит - лучше использовать компаратор. Может и лучше... Компаратор все равно должен сравнивать напряжение в момент неактивного уровня ШИМ. Безусловное достоинство - момент перехода четко отображается на выходе компаратора и однозначно видно в какую сторону переход. Да и в наличии у меня нет STM32 с компаратором, а STM32F103 у меня с десяток лежит. Если уж совсем станет тошно и не смогу заставить АЦП нормально работать, то поставлю внешние компараторы. Но это не путь джедая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 4 hours ago, haker_fox said: И почему не 2^N? Вы не путайте медиану с мат. ожиданием? У меня именно медиана вычисляется. Ничего там складывать, делить и умножать не надо! Только сравнения. Код можно найти в книжке "Сниппеты на С": есть сниппеты для фиксированного значения точек от трех и до 25 (кажется), а если точек больше, то уже есть смысл использовать стандартный qsort-алгоритм (неполноценная сортировка). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 22 апреля, 2020 Опубликовано 22 апреля, 2020 · Жалоба 13 hours ago, Eddy_Em said: Если мне нужна точность, я беру внешний 24-битный АЦП. А 12-битное встроенное чудо - какая там точность? Если входной диапазон АЦП 5 В, то 5/(2^24-1)=3e-7В=0.3 мкВ. Как обеспечиваете нечувствительность к наводкам и помехам, стабильность опорного напряжения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 10 hours ago, mdmitry said: Как обеспечиваете нечувствительность к наводкам и помехам, стабильность опорного напряжения? Я как-то особо не заморачивался и младшие 2 бита из 24 у меня шумели. Но на платиновых терморезисторах получал квант меньше 0.001К. Точность не хуже 0.01К. Потом приобрел хорошие мультиплексоры (до этого использовал очень уж высокоомные), точность должна была подскочить немного. Но как-то подзабил на эту задачу. Самой хитростью в трехпроводной схеме было использовать три мультиплексора (т.е. по мультиплексору на каждый провод) и хитрым образом переключать опорный ток АЦП. Наткнулся когда-то на статью одного китайца в интернете, попробовал по ней — действительно, намного меньше получается чувствительность к шумам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба Господа, я весьма признателен всем высококвалифицированным участникам дискуссии за продуктивное обсуждение тонкостей двоичной арифметики в моём скромном топике. Тем не менее, не сочтут ли господа участники невежливостью с моей стороны, если я выскажу пожелание уделить немного внимания также и моей проблеме? Возможно ли обратиться к уважаемому собранию с просьбой порекомендовать какое-нибудь конкретное решение, алгоритм или высказать соображения о возможных методах решения моей задачи. Все исходные данные и куски кода я приводил выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 141 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 57 минут назад, MPetrovich сказал: Все исходные данные и куски кода я приводил выше. покажите объявление ADC, VBEMF, P_V_BEMF, n и работу с n Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 23 апреля, 2020 Опубликовано 23 апреля, 2020 · Жалоба 2 hours ago, Сергей Борщ said: покажите объявление ADC, VBEMF, P_V_BEMF, n и работу с n Инициализацию ADC сейчас не смогу выложить. Прога на домашнем компе, а на флешку скинуть забыл. Но в начале основного цикла измеряется напряжение питания и оно измеряется верно и тем каналом АЦП, каким нужно. Соответственно, в первом приближении АЦП инициирован правильно. uint16_t VBEMF[]={};, uint16_t P_V_BEMF[]={};, uint16_t n - глобальные пeременные. Объявляются в начале файла main перед основным циклом int main(). n - счетчик количества прерываний. Кажый раз, когда возникает прерывание от TIMx CCx, n увеличивается на 1, т.е. n++. Прерывания от ШИМ разрешаются каждый раз, когда происходит переключение на следующий шаг коммутации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться