Перейти к содержанию
    

STM32F103 не пишет в TIM4->DIER

8 hours ago, HardEgor said:

Вы как-нибудь расскажите что вы хотите получить и увидеть, тогда можно подсказать как лучше это сделать

Я делаю контроллер BLDC мотора. Измерения АЦП производятся для определения точки пересечения нуля - Zero Cross. Эта точка определяет момент переключения на следующий шаг коммутации. Чтобы удостовериться, что происходит именно Zero Cross, я хочу посмотреть измерения АЦП до и после этой точки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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% ответа)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, aaarrr said:

А в чем профит 2^N для медианы?

Для процессоров без математического сопроцессора деление заменяется сдвиговой операцией. При условии, что использована целоцисленная математика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 22.04.2020 в 11:53, jcxz сказал:

Что по тактам почти то же самое что сдвиг.

Если процессор без FPU, вы не сможете умножить на 1/9 просто так. Придётся перейти к целочисленной арифметике.

 

Модератор: дискуссия о делении на 1/9 перенесена сюда: 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, MPetrovich сказал:

Я делаю контроллер BLDC мотора. Измерения АЦП производятся для определения точки пересечения нуля - Zero Cross. Эта точка определяет момент переключения на следующий шаг коммутации. Чтобы удостовериться, что происходит именно Zero Cross, я хочу посмотреть измерения АЦП до и после этой точки.

Это слишком самонадеянно пытаться делать управление BLDC-мотором (да к тому же - бездатчиковое), когда уровня проф.знаний не хватает даже для написания корректной работы с UART-ом.  :unknw:

 

7 минут назад, haker_fox сказал:

Если процессор без FPU, вы не сможете умножить на 1/9 просто так.

Вы может и не можете, а я могу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Медианный фильтр деление не использует.

И речь идет о Cortex-M3, в котором присутствует аппаратное целочисленное деление.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, MPetrovich сказал:

Я делаю контроллер BLDC мотора. Измерения АЦП производятся для определения точки пересечения нуля - Zero Cross. Эта точка определяет момент переключения на следующий шаг коммутации. Чтобы удостовериться, что происходит именно Zero Cross, я хочу посмотреть измерения АЦП до и после этой точки.

Так-то АЦП для этого не очень подходит - лучше использовать компаратор.

А для контроля  вам достаточно набрать в массив данных с нескольких периодов ШИМ и передать на комп. И уже на компьютере разбираться что там происходит.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

58 minutes ago, HardEgor said:

Так-то АЦП для этого не очень подходит - лучше использовать компаратор.

Может и лучше... Компаратор все равно должен сравнивать напряжение в момент неактивного уровня ШИМ. Безусловное достоинство - момент перехода четко отображается на выходе компаратора и однозначно видно в какую сторону переход. Да и в наличии у меня нет STM32 с компаратором, а STM32F103 у меня с десяток лежит. Если уж совсем станет тошно и не смогу заставить АЦП нормально работать, то поставлю внешние компараторы. Но это не путь джедая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, haker_fox said:

И почему не 2^N?

Вы не путайте медиану с мат. ожиданием?

У меня именно медиана вычисляется. Ничего там складывать, делить и умножать не надо! Только сравнения.

Код можно найти в книжке "Сниппеты на С": есть сниппеты для фиксированного значения точек от трех и до 25 (кажется), а если точек больше, то уже есть смысл использовать стандартный qsort-алгоритм (неполноценная сортировка).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, Eddy_Em said:

Если мне нужна точность, я беру внешний 24-битный АЦП. А 12-битное встроенное чудо - какая там точность?

Если входной диапазон АЦП 5 В, то 5/(2^24-1)=3e-7В=0.3 мкВ. Как обеспечиваете нечувствительность к наводкам и помехам, стабильность опорного напряжения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, mdmitry said:

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

Я как-то особо не заморачивался и младшие 2 бита из 24 у меня шумели. Но на платиновых терморезисторах получал квант меньше 0.001К. Точность не хуже 0.01К.

Потом приобрел хорошие мультиплексоры (до этого использовал очень уж высокоомные), точность должна была подскочить немного. Но как-то подзабил на эту задачу.

Самой хитростью в трехпроводной схеме было использовать три мультиплексора (т.е. по мультиплексору на каждый провод) и хитрым образом переключать опорный ток АЦП. Наткнулся когда-то на статью одного китайца в интернете, попробовал по ней — действительно, намного меньше получается чувствительность к шумам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, я весьма признателен всем высококвалифицированным участникам дискуссии за продуктивное обсуждение тонкостей двоичной арифметики в моём скромном топике.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 минут назад, MPetrovich сказал:

Все исходные данные и куски кода я приводил выше.

покажите объявление  ADC, VBEMF, P_V_BEMF, n и работу с n

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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++. Прерывания от ШИМ разрешаются каждый раз, когда происходит переключение на следующий шаг коммутации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...