|
|
  |
STM32F0 + датчик Холла SCM Sunfab |
|
|
|
Dec 2 2014, 11:08
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922

|
Следовательно, подходит вариант второй: подсчет числа зубцов прошедших мимо датчика за определенное время
|
|
|
|
|
Dec 2 2014, 19:24
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
ну строго говоря надо еще понять какого уровня изменения возможны за этот интервал. То есть возможно шестерня крутиться так медленно что несколько 5 мСек интервалов попадут на 1 зуб и вам ничего делать не надо, просто тупо раз в 5 мСек опрашивать состояние входа и если оно изменилось из 0 в 1, считать импульс, и ждать изменения из 1 в 0.
Если же скорость вращения выше, или импульсы коротки и есть шанс их пропустить с 5 мСек опросами, то надо их заводить на ногу клока таймера, и пусть он их считает. А вы раз в 5 мСек спрашиваете сколько он насчитал....
Одна хитрость остается, это сброс таймера. Если вы раз в 5 мСек будете забирать значение и сбрасывать таймер, существует вероятность что вы сбросите сразу после импульса, и отсчет потеряется. то есть вы вошли в прерывание берете из таймера значение Н (в этот момент проходит импульс и таймер становится Н+1) вы пишите в таймер 0, и 1 импульс потерялся.
Бороться с этим можно если таймер не сбрасывать, а просто запоминать значение, и определять каждый раз дельту между текущим и прошлым запомненным, только надо еще правильно отследить переполнение таймера.
Вот как бы и все. Так что заводите ваши сигналы на источник клока таймера и дерзайте
|
|
|
|
|
Dec 2 2014, 23:31
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Спасибо, интересная тема. Правда пришлось несколько раз перечитать первые страницы прежде чем в их попытках измерения длинны органов разглядел суть.
Смысл поста такой можно относительно частоты проца считать импульсы измеряемой частоты и получить их с точностью +-1. А можно так вывернуться что относительной измеряемой частоты считать импульсы частоты проца, получить их опять с точность +-1.
Поскольку считается что частота проца в сотни раз выше измеряемой частоты, то и погрешность в 1 процовый такт будет так же в сотни раз, в итоге выше.
Но на самом деле метод что предлагал, когда с равными интервалами относительно частоты проца забираются разницы счета измеряемой величины в мгновенном варианте дает погрешность +-1, а в дальней перспективе значительно выше. Те остатки такта, что были не учтены на текущем интервале перейдут на следующий, и выразятся в дрожании значения, которое после фильтрации (а ее все равно по уму надо делать) как раз даст доп точность....
|
|
|
|
|
Dec 3 2014, 08:03
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(arthedza @ Dec 2 2014, 13:23)  Просмотрел внимательно ТЗ, опрос датчика скорости должен производиться с периодичностью в 5мс Странное ТЗ. В ТЗ не нужно писать _как_делать, а нужно описать _что_делать_. Формулировка в виде: - Диапазон измеряемых скоростей от 5 зуб/с до 300 зуб/с. - Время реакции на изменение скорости не более 1 с. (цифры разумеется должны быть из вашей задачи). сократит число вариантов решения и постов в этой теме)
|
|
|
|
|
Dec 3 2014, 10:34
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922

|
Цитата(adnega @ Dec 3 2014, 10:03)  Странное ТЗ. В ТЗ не нужно писать _как_делать, а нужно описать _что_делать_.
Формулировка в виде: - Диапазон измеряемых скоростей от 5 зуб/с до 300 зуб/с. - Время реакции на изменение скорости не более 1 с. (цифры разумеется должны быть из вашей задачи).
сократит число вариантов решения и постов в этой теме) Частота вращения будет изменяться в диапазоне 0..5200с^-1. 1 оборот=30 зуб. Хотя для объекта управления (гидроклапан) указана частота шим 100гц (10мс) с точки зрения обеспечения устойчивости такт решения задачи производительности гидросистемы необходимо сделать в 5мс. Т.е каждые 5 мс нужно обрабатывать частоту вращения и считать фильтры. Частота выдачи упр. сигнала должна соответствовать частоте ШИМ-сигнала. формировать значение упр. сигнала можно и каждые 5 мс но ШИМ будет менять свою скважность каждые 10мс. Т. е сигнал ШИМ с заданной скважностью должен пройти полностью Цитата(Golikov A. @ Dec 3 2014, 10:49)  периодичность опроса и время реакции системы также нормальные требования ТЗ, особенно если это ТЗ на блок, и оно учитывает общую загрузку системы... написал выше
|
|
|
|
|
Dec 3 2014, 11:12
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(arthedza @ Dec 3 2014, 14:34)  Частота вращения будет изменяться в диапазоне 0..5200с^-1. 1 оборот=30 зуб. Хотя для объекта управления (гидроклапан) указана частота шим 100гц (10мс) с точки зрения обеспечения устойчивости такт решения задачи производительности гидросистемы необходимо сделать в 5мс. Т.е каждые 5 мс нужно обрабатывать частоту вращения и считать фильтры. Частота выдачи упр. сигнала должна соответствовать частоте ШИМ-сигнала. формировать значение упр. сигнала можно и каждые 5 мс но ШИМ будет менять свою скважность каждые 10мс. Т. е сигнал ШИМ с заданной скважностью должен пройти полностью Считаем число импульсов от датчика за 5мс. Имеем число от 0 до 780 импульсов. Разрешающая способность 6.(6) об/сек. При времени реакции 5мс и скоростях ниже 6 об/сек имеем ситуацию, когда на выходе измерителя будет ШИМ: 5 мс скорость будет равна нулю, а в следующие 5 мс = 6.(6) об/сек. На низких оборотах скорость нужно усреднять с большим интервалом.
|
|
|
|
|
Dec 3 2014, 11:48
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922

|
Цитата(adnega @ Dec 3 2014, 13:12)  Считаем число импульсов от датчика за 5мс. Имеем число от 0 до 780 импульсов. Разрешающая способность 6.(6) об/сек. При времени реакции 5мс и скоростях ниже 6 об/сек имеем ситуацию, когда на выходе измерителя будет ШИМ: 5 мс скорость будет равна нулю, а в следующие 5 мс = 6.(6) об/сек. На низких оборотах скорость нужно усреднять с большим интервалом. А если низкие обороты будут только при пуске/останове, а основная частота, к примеру, будет составлять 1000-1500 с^-1?
|
|
|
|
|
Dec 3 2014, 13:05
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
1000-1500 - это 150 - 225 импульсов в 5мСек 6.666666 оборотов в секунду - это 1 импульс в 5 мСек получается что у вас 1000 оборотов в секунду не отличимо от 1001, 1002, 1003, 1004, 1005, 1006, но вот 1007 уже отличается это 151 импульс так что если вы шимом будете стараться поддержать обороты, то вы это сможете сделать с точностью до 6 оборотов в 5 мСек. Но обычно системы несколько более инертны, и можно использовать показания за несколько 5 мСек периудов, и получить разрешение повыше, ценой потери оперативность регулировки. Но думаю что мотор все равно мгновенно скорость не поменяет, наверняка будет там какой то ПИД, который все сгладит...
|
|
|
|
|
Dec 4 2014, 07:11
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922

|
Цитата(adnega @ Dec 3 2014, 13:12)  Считаем число импульсов от датчика за 5мс. Имеем число от 0 до 780 импульсов. Разрешающая способность 6.(6) об/сек. При времени реакции 5мс и скоростях ниже 6 об/сек имеем ситуацию, когда на выходе измерителя будет ШИМ: 5 мс скорость будет равна нулю, а в следующие 5 мс = 6.(6) об/сек. На низких оборотах скорость нужно усреднять с большим интервалом. Простите, не то написал. Обороты в минуту, а не в секунду. Выходит: 5200 об/мин * 30 = 156000 имп/мин 156000/60 = 2600 имп/сек 2600/1000*5 = 13 импульсов в 5 милисекунд при 5200 об/мин.
Сообщение отредактировал arthedza - Dec 4 2014, 07:19
|
|
|
|
|
Dec 4 2014, 07:25
|
Участник

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922

|
Цитата(adnega @ Dec 4 2014, 09:15)  Что ж - стало хуже ровно в 60 раз) Всего будет три режима работы: V1 = 1800 об/мин = 4,5 имп/5мс V2 = 3000 об/мин = 7,5 имп/5мс V3 = 5200 об/мин = 13 имп/5мс Делать мгновенные выборки через каждые 5 мс в несколько тактов, а потом усреднять? Или как?
Сообщение отредактировал arthedza - Dec 4 2014, 07:42
|
|
|
|
|
Dec 4 2014, 08:13
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(arthedza @ Dec 4 2014, 11:25)  Или как? Мотор - штука инертная, поэтому за 5 мс скорость поменяться не может, и даже если поменяется зубцов не так много, чтобы уловить эти изменения. Я бы предложил: 1. Запустить 16-разрядный счетчик на непрерывный подсчет импульсов. 2. Раз в 5 мс считывал значение из счетчика и считал дельту с предыдущим считанным значением (аккуратно на переходе 0xFFFF -> 0x0000 !). 3. Полученную дельту помещал в очередь (LIFO) из N элементов, где N*5мс = интервал усреднения/сглаживания. 4. Зная N и общее число импульсов в очереди (сумма всех элементов), можно рассчитать мгновенную (каждые 5 мс) скорость усредненную за большой интервал (N * 5 мс).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|