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

 

Хочешь стать куратором любимой темы?

* Комментарии к новостям

1. Ковид и ковидобесие (Анекдоты и флУДИЛКА) от Лодочник_А (4.08.2021 в 00:06)2. Вопросы начинающих конструкторов электросамокатов (Самодельные электросамокаты) от ssilk (3.08.2021 в 23:44)3. Китайский бензиновый генератор 72В (Электродвигатели и генераторы) от Aiiar (3.08.2021 в 23:40)4. Контроллер серии КТ и дисплеи LCD-3 (4,5,8) (Электровелосипеды) от rad7776 (3.08.2021 в 23:37)5. Kugoo M4 Pro 2020 (Электросамокаты Kugoo M и G серии и аналоги ) от Trepach (3.08.2021 в 23:29)6. Halten RS-01 PRO новый лидер? (Электросамокаты Halten ) от alittle (3.08.2021 в 23:22)
7. Конверсия эндуро (Электромотоциклы ) от Aiiar (3.08.2021 в 23:22)8. "Временный" контрллер Kugoo S3 на Arduino (Электросамокаты Kugoo S серии и аналоги ) от Oszau (3.08.2021 в 23:15)9. Способы крепления АКБ на электровелосипед (Электровелосипеды) от Татос (3.08.2021 в 23:12)10. KUGOO M5 ошибка E-006 (Электросамокаты Kugoo M и G серии и аналоги ) от _Alex62_ (3.08.2021 в 22:48)11. Bafang BBS движок под каретку (Электровелосипеды с подвесным двигателем) от Rubik (3.08.2021 в 22:31)12. Электро Тигра (Электромобили. Перенесенные темы. Можно их продолжать) от Ustas (3.08.2021 в 22:30)
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

Прочитано 595 раз

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

17 Дек 2018 в 13:24
Прочитано 595 раз
Оффлайн

TRO

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


17 Дек 2018 в 14:16
Ответ #1
Оффлайн

i

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


17 Дек 2018 в 14:21
Ответ #2
Онлайн

edw123

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


17 Дек 2018 в 15:11
Ответ #3
Оффлайн

TRO

Украина, г. Запорожье. Сообщений: 8436
Помедитировал на синусоиды, и решил проверить линейность пилы состоящей из наиболее приближенных к прямой пересекающихся участков синусоид. Короче картинка.

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



18 Дек 2018 в 10:21
Ответ #4
Оффлайн

i

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


18 Дек 2018 в 12:06
Ответ #5
Онлайн

edw123

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


18 Дек 2018 в 16:31
Ответ #6
Оффлайн

TRO

Украина, г. Запорожье. Сообщений: 8436
, я написал чуть выше как правильно отвязаться от нестабильности амплитуды и частоты.
Сортируем полученные величины по возрастанию 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 »


19 Дек 2018 в 11:37
Ответ #7
Оффлайн

i

Администратор Иваново Сообщений: 4061
Здорово! :wow:

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

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

Спасибо.


19 Дек 2018 в 13:37
Ответ #8
Оффлайн

TRO

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


19 Дек 2018 в 13:45
Ответ #9
Оффлайн

Frolikum

Синяокая Сообщений: 58
Что то не нашел где эксель файл прикреплен.
Хотел поиграть с графиками


19 Дек 2018 в 14:26
Ответ #10
Оффлайн

i

Администратор Иваново Сообщений: 4061


19 Дек 2018 в 14:31
Ответ #11
Онлайн

edw123

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


19 Дек 2018 в 15:14
Ответ #12
Оффлайн

i

Администратор Иваново Сообщений: 4061
Пусть есть 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