Электротранспорт
Пожалуйста, войдите или зарегистрируйтесь.


Расширенный поиск    

Реклама:

Как из мгновенного межфазного напряжения получить фазный угол?

Страницы: 1Вниз

Автор Тема: Как из мгновенного межфазного напряжения получить фазный угол?  (Прочитано 217 раз)

0 Пользователи и 1 Гость просматривают эту тему.

TRO

  • Старожил
  • *****
  • Репутация: 153
  • Сообщений: 7082
  • Украина, г. Запорожье.
  • Оффлайн Оффлайн
    • Награды
Вкратце, есть у меня моторчик с аналоговыми датчиками холла соединенными треугольником.
С помощью АЦП диференциально снимаю с 3 входов межфазное напряжение.
Получаю красивые классические 3 синуса( ~11 бит грязными ) со сдвигом в 120 градусов.
Хочу использовать его как энкодер.
Вопрос: как из этих трех величин получить угол (8-10 бит) с минимумом вычислений, вернее с максимальным быстродействием. Планирую код запихнуть в АВР микроконтроллер (надо будет сваять быструю ассемблерную вставку ). Так что всякие прожорливые арксинусы и арктангенсы отпадают (как делать с ними на языке высокого уровня я знаю, не устраивает быстродействие почти на порядок). Очень желательно ограничится действиями: умножение, сложение, и вычитание (на крайний случай деление).
Погрешность до 1% будет вполне приемлимой.
« Последнее редактирование: 17 Дек 2018 в 13:39 от TRO »

Сообщение понравилось: Frolikum

i

  • Администратор
  • Старожил
  • *
  • Репутация: 269
  • Сообщений: 3773
  • Иваново
  • Оффлайн Оффлайн
    • Награды
В ROM создать таблицу синуса в пол- или четверть периода.
Пронормировать измерения АЦП, чтоб уложились в диапазон 0-255. Требуется знание максимума и умножение.
Найти в таблице ближайшее значение совпадающее с нормированым измерением. Позиция значения даст угол.
Возможно потребуется учесть прежнее измерение, чтоб узнать находимся на спаде или подъеме.
Как-то так.

edw123

  • Старожил
  • *****
  • Репутация: 44
  • Сообщений: 8852
  • ПодМосква
  • Оффлайн Оффлайн
    • Награды
Вкратце, есть у меня моторчик с аналоговыми датчиками холла соединенными треугольником.
...
Погрешность до 1% будет вполне приемлимой.
Наверное только по табличке или попробовать в ряд пораскладывать, но 1% быстро не получить всё рвно таким путём, кмк.

TRO

  • Старожил
  • *****
  • Репутация: 153
  • Сообщений: 7082
  • Украина, г. Запорожье.
  • Оффлайн Оффлайн
    • Награды
Помедитировал на синусоиды, и решил проверить линейность пилы состоящей из наиболее приближенных к прямой пересекающихся участков синусоид. Короче картинка.

Прикол в том что (как мне показала симуляция в экселе) на одном участке пилы нелинейность всего +-0,26%. Это на отрезке в 1/6 периода, а для полных 360 электрических градусов погрешность должна по идее быть еще в 6 раз меньше. Если дотошно подойти к вопросу, то для половинки (половинки симетричны) одной "прямой" можно накидать поправочную табличку.
В принципе если АЦП и сигнал с датчиков достаточно стабилен, то достаточно брать эти куски и складывать в одну прямую. Но, что бы нивелировать всякие дрейфы датчиков и АЦП, наверно нужно брать пропорцию двух отрезков между тремя точками (3х значений с АЦП), она всегда будет более точной.
В общем, задачка в рамках указанной точности можно сказать решена.


i

  • Администратор
  • Старожил
  • *
  • Репутация: 269
  • Сообщений: 3773
  • Иваново
  • Оффлайн Оффлайн
    • Награды
Согласен, выглядит хорошо.
Пара соображений и неястностей (для меня):
1. С ростом скорости крутизна отрезков тоже будет расти, как и амплитуда пиков. Таким образом одно значение АЦП будет соответствовать разным фазным углам.
2. Масштаб временной оси фиксирован, он жестко задан частотой выборок, следовательно число точек на отрезке будет зависеть от оборотов.
Короче, задачка получается весьма интересной.

edw123

  • Старожил
  • *****
  • Репутация: 44
  • Сообщений: 8852
  • ПодМосква
  • Оффлайн Оффлайн
    • Награды
В общем, задачка в рамках указанной точности можно сказать решена.
Если ещё добавить неизбежную техническую потерю точности при дискретизации, то 5 разных углов прямых на полуволну будет вполне нормально. С другой стороны при табличном подходе любое напряжение однозначно определяет фазу независимо от частоты при нормированном максимуме.

TRO

  • Старожил
  • *****
  • Репутация: 153
  • Сообщений: 7082
  • Украина, г. Запорожье.
  • Оффлайн Оффлайн
    • Награды
, я написал чуть выше как правильно отвязаться от нестабильности амплитуды и частоты.
Сортируем полученные величины по возрастанию A>B>C , и вычисляем номер отрезка по порядку от 0 до 5.
Потом по формуле (B-C)*256/(A-C) получаем значение угла на отрезке считая от начала отрезка в диапазоне 0-256 (и пусть амплитуда с АЦП хоть заплавается, отношение между точками при делении будет фиксировано). Потом номер отрезка умножаем на 256 и прибавляем полученный угол, получаем полный угол в диапазоне 0 - 256*6, т.е. 0-1536 (и это только разрешение одного электрического оборота, в реале 6 электрических на круг, т.е.
 9216 на полный оборот). 
В коде для аттини44 уже работает (на бейсике), еле уложился в пол миллисекунды на 8 мегагерц. Жаль дешевые ардуинки на мега328 не умеют диференциально АЦП измерять, прийдется операционники лепить, так как по итогу надо именно на мегу328 ассемблерную вставку сделать.
« Последнее редактирование: 18 Дек 2018 в 18:03 от TRO »

Сообщение понравилось: i, Frolikum

i

  • Администратор
  • Старожил
  • *
  • Репутация: 269
  • Сообщений: 3773
  • Иваново
  • Оффлайн Оффлайн
    • Награды
Здорово! :wow:

Немного сбило с толку ABC в формуле, когда понял, что в ней a=max(A,B,C), b=mid(ABC), c=min(A,B,C), все получилась.

Пила стоит как вкопанная, реально не зависит от амплитуды.

Спасибо.

TRO

  • Старожил
  • *****
  • Репутация: 153
  • Сообщений: 7082
  • Украина, г. Запорожье.
  • Оффлайн Оффлайн
    • Награды
Всегда пожалуста, вам тоже спасибо за
Цитата
a=max(A,B,C), b=mid(ABC), c=min(A,B,C)
Посмотрел у себя в компиляторе, есть и там такие команды.
А я не знал, и не пользовался, плодил код из кучи условий (в 3 раза больше).
Век живи век учись.

Frolikum

  • Начинающий
  • *
  • Репутация: 0
  • Сообщений: 54
  • Синяокая
  • Хочу ездить на батарейках!
  • Оффлайн Оффлайн
    • Награды
Что то не нашел где эксель файл прикреплен.
Хотел поиграть с графиками

i

  • Администратор
  • Старожил
  • *
  • Репутация: 269
  • Сообщений: 3773
  • Иваново
  • Оффлайн Оффлайн
    • Награды
Поиграйте.

Сообщение понравилось: Frolikum

edw123

  • Старожил
  • *****
  • Репутация: 44
  • Сообщений: 8852
  • ПодМосква
  • Оффлайн Оффлайн
    • Награды
Всегда пожалуста, вам тоже спасибо за Посмотрел у себя в компиляторе, есть и там такие команды.
А я не знал, и не пользовался, плодил код из кучи условий (в 3 раза больше).
Век живи век учись.
Эти функции точно такой же код и используют, только стек забивают.

i

  • Администратор
  • Старожил
  • *
  • Репутация: 269
  • Сообщений: 3773
  • Иваново
  • Оффлайн Оффлайн
    • Награды
Пусть есть 3 ячейки памяти a, b и c. В них лежат числа.
1. сравнить a и b, если b<a поменять их местами.
2. сравнит b и c, если c<b - поменять местами
3. повторить п.1
После этого числа в ячейках  будут расположены по убыванию.
Кстати, обменять регистры значениями, можно тремя командами EOR, при этом дополнительный регистр не потребуется.
Типа так:
sort:       CP    R1,R2
            BRCC  m82
            EOR   R1,R2
            EOR   R2,R1
            EOR   R1,R2
m82:        CP    R2,R3
            BRCC  m83
            EOR   R2,R3
            EOR   R3,R2
            EOR   R2,R3
m83:        CP    R1,R2
            BRCC  m84
            EOR   R1,R2
            EOR   R2,R1
            EOR   R1,R2
m84:        RET

Сообщение понравилось: TRO
Страницы: 1Вверх
 

Помощь форуму | Отказ от ответственности | Новая версия форума
©, Форум электротранспорта, electrotransport.ru, 2007—2018.
Копирование материалов возможно только с согласия правообладателя.

Размер занимаемой памяти: 6 мегабайт.
Страница сгенерирована за 0.272 секунд. Запросов: 90.

Powered by SMFPacks Alerts Pro Mod
Powered by SMFPacks Mentions Pro Mod