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

 

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

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

1. Kugoo S3 мк при включенном самокате туго крутится (Электросамокаты) от Vish (23.08.2019 в 16:54)2. Kugoo S3 (Электросамокаты Kugoo S серии и аналоги ) от Serg_On_Kugoo (23.08.2019 в 16:52)3. Электроунициклы и ПДД. (Моноколеса (электроунициклы)) от Alexey (23.08.2019 в 16:48)4. Практические опыты по переполюсовке АКБ (Свинцовые аккумуляторы) от Cyberpapa (23.08.2019 в 16:47)5. Контроллер (Электровелосипеды) от AlexS4 (23.08.2019 в 16:43)6. XPD: программа для настройки контроллеров Infineon (Полезные программы) от crond (23.08.2019 в 16:37)
7. Dualtron Raptor (Электросамокаты MiniMotors) от Макс1 (23.08.2019 в 16:35)8. ULTRON T11/HALTEN RS-03 (60v, 2x1200, 23,4Ah) (Электросамокаты Halten ) от Ibif (23.08.2019 в 16:26)9. Halten (Voyager1200) - 11", мотор 1200Вт(2х1200), батарея 48в21,6Ач(52в23,4Ач) (Электросамокаты Halten ) от novel (23.08.2019 в 16:26)10. Опознать радиодеталь, в контроллере для без щеточного электромотора. (Микроэлектроника) от CAUTION (23.08.2019 в 16:24)11. kugoo es2, пневматические колеса (Электросамокаты) от xixik (23.08.2019 в 16:08)12. Эл. самокат из колес 10.5 гироскутера (Самодельные электросамокаты) от Ilya tmb (23.08.2019 в 16:04)
Не нравится реклама? Пройдите простую регистрацию на форуме и не будете видеть рекламу.

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

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

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

TRO

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

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

i

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

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

edw123

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

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

TRO

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

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


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

i

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

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

edw123

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

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

TRO

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

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

i

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

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

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

Спасибо.

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

TRO

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

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

Frolikum

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

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

i

Администратор Иваново Сообщений: 3854
Сообщение понравилось: Frolikum

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

edw123

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

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

i

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