Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм вычисления скорости для тягового двигателя.
Форум разработчиков электроники ELECTRONIX.ru > Силовая Электроника - Power Electronics > Электрические машины, Электропривод и Управление
Папа Карло
Всем привет.

Делаю электромобиль весом 50кг на 3 колеса.
2 колеса ведущие и 1 подруливающие.

Поставил после редуктора энкодеры.
Пытаюсь регулировать скорость вращения двигателей по энкодерам.

Идея такая: получать текущую скорость привода в районе 0 - 100.
ШИМ от 0 до 100 регулируется.

Но если считать прерываний от таймера за 1 тик энкодера, то скорость получается очень не равномерная.

Например:
PWM Encoder
0x10 0x72
0x20 0x2B
0x30 0x1A
0x40 0x13
0x50 0x0F
0x60 0x0D

При том, что двигатель крутится от 0xAA до 0x2B еле-еле.
И почти весь интервал забивает в начале.

Как бы мне сделать равномерное регулирование скорости ?
Iptash
Цитата(Папа Карло @ Dec 7 2008, 21:44) *
Всем привет.

Делаю электромобиль весом 50кг на 3 колеса.
2 колеса ведущие и 1 подруливающие.

Поставил после редуктора энкодеры.
Пытаюсь регулировать скорость вращения двигателей по энкодерам.

Идея такая: получать текущую скорость привода в районе 0 - 100.
ШИМ от 0 до 100 регулируется.

Но если считать прерываний от таймера за 1 тик энкодера, то скорость получается очень не равномерная.

Например:
PWM Encoder
0x10 0x72
0x20 0x2B
0x30 0x1A
0x40 0x13
0x50 0x0F
0x60 0x0D

При том, что двигатель крутится от 0xAA до 0x2B еле-еле.
И почти весь интервал забивает в начале.

Как бы мне сделать равномерное регулирование скорости ?


Что то не понятно от 0 до 100 , это проценты или км/час или др..И энкодер вы заводите на вжод INT
или как и вы, что считаете количество прерываний от таймера за один импульс энкодера?
orthodox
А не было желания прицепить маленький коллекторный движок на постоянных магнитах, и получать с него постоянное напряжение, прямо пропорционально скорости?
Я сейчас тоже делаю управление для глайдера (это такой же электромобильчик, как вы описали), и выбрал такой датчик. Чем хорош - на малых скоростях регулирует без рывков, IMHO - самая плавная регулировка из всего, что я знаю для ЭМ.
Папа Карло
Непонятно куда его цеплять.
Со стороны двигателя, без переделки, некуда подключить энкодер.
И непонятно какие значения будет выдавать движок энкодера при низких оборотах, если его подключить после редуктора.
Там обороты 60 об\мин.


Цитата(Iptash @ Dec 7 2008, 23:15) *
Что то не понятно от 0 до 100 , это проценты или км/час или др..И энкодер вы заводите на вжод INT
или как и вы, что считаете количество прерываний от таймера за один импульс энкодера?


Выходит, что проценты, но вообще мне всё равно, главное чтоб было равномерное увеличение скорости.
Вот, если подавать ШИМ от 0 до 100, то скорость увеличивается линейно, только в начале от 0 до 10 провал. скорость не растёт.

Выход энкодера завожу на свободную ножку МК и программно отслеживаю изменения состояния.
А кол-во прерывания считаю так, включаю счётчик таймера и увеличиваю переменную за каждое прерывание, при изменении состояния на ноге от энкодера записываю значение переменной.
Iptash
Цитата(Папа Карло @ Dec 8 2008, 11:52) *
Непонятно куда его цеплять.
Со стороны двигателя, без переделки, некуда подключить энкодер.
И непонятно какие значения будет выдавать движок энкодера при низких оборотах, если его подключить после редуктора.
Там обороты 60 об\мин.
Выходит, что проценты, но вообще мне всё равно, главное чтоб было равномерное увеличение скорости.
Вот, если подавать ШИМ от 0 до 100, то скорость увеличивается линейно, только в начале от 0 до 10 провал. скорость не растёт.

Выход энкодера завожу на свободную ножку МК и программно отслеживаю изменения состояния.
А кол-во прерывания считаю так, включаю счётчик таймера и увеличиваю переменную за каждое прерывание, при изменении состояния на ноге от энкодера записываю значение переменной.

Может быть лучше считать количество импульсов пришедших с энкодера за определенное время
таймера. Если МК имеет вх. счетчика, вот туда и заводить и по прерывнию таймера допустим каждые
1мсек. считывать значение счетчика.
Папа Карло
Тогда реакция регулятора скорости будет большой.
Папа Карло
Сделать, допустим wink.gif, прерывание с частотой 1мсек можно, но за это время от энкодера не придёт ни одного импульса, т.к. вал крутится со скоростью 1 об\сек и выдаёт 30 импульсов за оборот.
Можно сделать и 80 импульсов за оборот, но 1 мсек мы не получим...
Iptash
Значит энкодер нужен точный поставить, а по вашему алгоритму на малых оборотах
очень много прерываний по таймеру а на нуле об. вообще бесконечное заполнение будет.
Папа Карло
Вот я и мучаюсь ...

Насколько точный ставить ?
Ну допустим, я поставлю на двигатель диск энкодера, а не на редуктор.
И будет у меня выдавать не 30 импульсов, а 1000.
Это означает, что на максимальной скорости я смогу поймать только 1 импульс.


Кстати, с нулём я сделал нормально, при получении импульсов больше 128 ставлю значение скорости 0.
Если пришёл тик от энкодера и прерываний больше 128, то ставлю скорость 1.

А вот сделать равномерно в шкале от 0 до 100 никак не получается.
Iptash
Цитата(Папа Карло @ Dec 8 2008, 17:00) *
Вот я и мучаюсь ...

Насколько точный ставить ?
Ну допустим, я поставлю на двигатель диск энкодера, а не на редуктор.
И будет у меня выдавать не 30 импульсов, а 1000.
Это означает, что на максимальной скорости я смогу поймать только 1 импульс.
Кстати, с нулём я сделал нормально, при получении импульсов больше 128 ставлю значение скорости 0.
Если пришёл тик от энкодера и прерываний больше 128, то ставлю скорость 1.

А вот сделать равномерно в шкале от 0 до 100 никак не получается.


Это значит заполнение импульсов в счетчик нужно делать аппаратно, а не по прерыванию,
какой вы используете МК? я же говорю, что многие МК имеют вход счетчик который заполняется
вх. сигналом(выбираеете режим) вот его и используейте, а счетчик считываете по прер. таймера,
и скорость(или количество импульсов энкодера за один тик) равна разность данного значения счетчика с предыдущим значением счетчика.
Папа Карло
Увы плата сама не сможет вывести на разъём нужные ножки МК.
Поэтому будем исходить из программного варианта.

Цитировать пост предыдущий не имеет смысла, если вы конечно не хотите этот форум перегрузить.

МК у меня LPC2134.

Конечно, сделав счётчик импульсов по вашему предложению я сильно разгружу МК, но увы это не даст мне нужной скорости обновления датчика скорости и ни о каких 1мсек, речи быть не может.

Если бы посчитали хотя бы в уме, то не писали бы своих шуток...

П.С.
МК занят на 20% и функция обработки датчика занимает 0.5% времени МК.
Iptash
А частоту вращения чем вы задаете?
Папа Карло
Регулирую частоту вращения ШИМом.
Iptash
Цитата(Папа Карло @ Dec 8 2008, 20:31) *
Регулирую частоту вращения ШИМом.

Понятно, что ШИМом, я говорю задание что у вас аналоговый сигнал или еще что?

Цитата(Папа Карло @ Dec 8 2008, 20:07) *
Конечно, сделав счётчик импульсов по вашему предложению я сильно разгружу МК, но увы это не даст мне нужной скорости обновления датчика скорости и ни о каких 1мсек, речи быть не может.

Если бы посчитали хотя бы в уме, то не писали бы своих шуток...

Делать мне нечего как шутки шутить. Вы строите электропривод для своего электромобиля,
я в свое время разработал и изготовил несколько электроприводов и установил на металлорежущие станки и я говору то, что я говорю.
Папа Карло
Не пойму, всё равно ...
"задание что у вас аналоговый сигнал" - вы имеете ввиду какой сигнал с энкодера выходит ?
Iptash
Цитата(Папа Карло @ Dec 9 2008, 17:52) *
Не пойму, всё равно ...
"задание что у вас аналоговый сигнал" - вы имеете ввиду какой сигнал с энкодера выходит ?

Я чето тоже не пойму. sad.gif
У вас задание на увеличение оборотов или уменьшение будет? в виде допустим педали на которую
прицеплен потенциометр с которого снимается аналоговый сигнал который поступает на ваш
электропривод или еще что-то. Поправь меня, если я ,что-то не понимаю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.