IMXO Опубликовано 5 октября, 2015 Поделиться Опубликовано 5 октября, 2015 желающие мерятся линейками в курилку.... кто не понял отправлю в читальный зал... 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Ломаю голову, как получить мгновенное значение. Задача такова. датчик скорости имеет 5 импульсов за один оборот колеса. То-есть на расстояние 2.032м есть 5 импульсов. То-есть каждый импульс это 0.4064м Я хочу получить частоту дискретезации скорости хотя бы 10гц, тоесть 10 раз в секунду получать информацию о скорости. 100км в час это 68 импульсов в секунду. Пробывал считать количество импульсов за 0.1 секунду, но получается очень высокая погрешность на 100км в час, так как за 0.1 секунду будет 6.8 импульсов, а точнее 6 импульсов так как нельзя посчитать не целое число импульсов. Пробывал считать время за которое проскакивает 1 импульс, но не хватает 4mhz на точность. 1 импульс на скорости проскакивает за 0.0147 сек. Получается погрешность 2 км в час. Не устраивает. Прежде чем гнаться за увеличением частоты я решил спросить тут, так как может я чего то не знаю, каких то хитростей и других подходов, или каких то элементарных вещей. Pic 16f819 Частота 4mhz и предделитель 1:2 и плюс на пик контроллере за 4 такта тикает. То-есть получается минимальный шаг поднятия флага 8 битного таймера это 512 микросекунд. с таким шагом погрешность велика, думаю может в этом проблема, что я поднятием флага время замеряю? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
IMXO Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 а считать длительность периода религия не позволяет? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Hongfa для различных применений в Компэл. Большой выбор в наличии!Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Zombie47 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Скорее отсутствие знаний =) Это как? чем я буду считать? у флага погрешность 512 микросекунд 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Тренды и лучшие решения для разработки зарядных станций в РоссииК 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
IMXO Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 разбирайся: http://forum.cxem.net/index.php?showtopic=155518entry2243546 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Секреты депассивации литиевых батареек FANSO EVE EnergyСамыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Zombie47 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Забыл уточнить у меня прямоугольные импульсы. Никак не влияет на решение? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 а по ссылке какие? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Как я понял, включаем внешнее прервание по переднему фронту.и в момент прерывания по переднему фронту записываем значение регистра таймера, тоесть по сути записываем сколько тактов сделал таймер. Но не понял а где начало отсчета. Что будет если таймер переполнется, вплане таймер тикает дотикал сбросился и тут бац сразу внешнее прерывание. Чето не разобрать вообщем мне этот код без комментариев =( 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Для измерения периода импульсов можно у пика использовать ССР модуль. У 16F819 есть замечательный вход ССР1. Запускаете таймер 1 в свободном полёте с частотой тиков Fosc/4, то есть таймер считает каждую микросекунду. На вход ССР1 подаёте импульсы скорости и включаете модуль ССР. После этого по каждому пришедшему импульсу скорости значение таймера 1 на лету автоматически будет записываться в специальные регистры, также будет вырабатываться прерывание. То есть пришёл один импульс, значение таймера, например, 1560 записалось в регистры ССР. В прерывании это значение кладётся в переменную cnt0=1560. Пришёл второй импульс, защёлкнулось новое значение таймера 16260. В прерывании вычитаем старое из нового: 16260 - cnt0 = 14700, кладём cnt0=16260. Таким образом период между двумя импульсами скорости получился 14700 микросекунд, с точностью 1 мкс. И т.д. Тут надо учесть, что максимальное число в таймере 65535, при небольших скоростях <25км/час таймер будет пару раз переполняться между импульсами. Ну, можно включить прескейлер и таймер будет тикать по 8 мкс, и минимальная измеряемая скорость составит 3км/час. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Как я понял, включаем внешнее прервание по переднему фронту.и в момент прерывания по переднему фронту записываем значение регистра таймера, тоесть по сути записываем сколько тактов сделал таймер. Но не понял а где начало отсчета. Что будет если таймер переполнется, вплане таймер тикает дотикал сбросился и тут бац сразу внешнее прерывание. Чето не разобрать вообщем мне этот код без комментариев =( в данном случае это не таймер, а счетчик тиков МК, записали значение и обнулили счетчик = начало отсчета... на случай переполнения счетчика прерывание по таймеру = стоит заглушка просто драгаем пин... а так можно в этом месте добавить разрядность счетчика 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Запускаете таймер 1 в свободном полёте с частотой тиков Fosc/4, то есть таймер считает каждую микросекунду да вот по этому пункту вопрос, я что то пересмотрел все свои комментарии с сылками на даташит и не понял как таймер врубить в свободном полете. Ну вплане я вижу где он врубается и дальше вижу где выбирается предделитель, для WDT или TMR0... хотя.... если выбрать предделитель для WDT то у TMR0 не будет предделителя и он будет в свободном полете? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 Я имею ввиду Timer1. Записываете в регистр управления таймером T1CON=0х01, и таймер засчитал каждую микросекунду. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 16 октября, 2015 Поделиться Опубликовано 16 октября, 2015 наверно спать пора или нет? ССР1 работает с TMR1!!! если выбрать предделитель для WDT то у TMR0 не будет предделителя и он будет в свободном полете? таки да , но к ССР он не имеет никакого отношения... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 (изменено) Далее включаете модуль захвата ССР, для этого пишите CCP1CON = 5. Разрешаете прерывания от ССР, пишем PIE1 |= 0x4; Делаете RB2 входом TRISB |= 0x04. И понеслось. Подаёте на вход RB2 импульсы скорости, в прерывании проверяете флаг CCP1IF. Если флаг поднят, то переписываете захваченное значение таймера1 в какую-либо переменную и вычисляете период. Изменено 17 октября, 2015 пользователем Yurkin2015 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
my504 Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 (изменено) Если флаг поднят, то переписываете захваченное значение таймера1 в какую-либо переменную и вычисляете период. Нужно только не забыть объявить (или привести при вычислениях периода) переменные нового и предыдущего значений как signed long (32-разрядная знаковая), а результат вычитания привести к unsigned int (16-разрядная беззнаковая), тогда не нужно ловить переполнение счетчика или каждый раз его сбрасывать, чтобы исключить переполнение. Ну и учесть квалификатор static для старого значения захвата, чтобы компилятор его не выкинул при выходе из обработчика, а также квалификатор volatile для вычисляемого периода, чтобы компилятор не намудрил с оптимизацией вне обработчика... // глобальные переменные volatile unsigned int period; // в обработчике прерываний по захвату static long old_timer; long current_timer; ............................... ............................... current_timer = CCPRL+(CCPRH<<8); period = (unsigned int)(current_timer - old_timer); old_timer = current_timer; Изменено 17 октября, 2015 пользователем my504 0 戦う前に相手のベルトの色に注目 Ссылка на комментарий Поделиться на другие сайты Поделиться
Yurkin2015 Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 Мне кажется с этими long переменными - перебор. Если есть два 16-ти битовых значения типа unsigned int, старое 0xF000 и новое 0x1000, например,то процессор тупо вычитает 0x1000 - 0xF000 = 0x2000 и получает правильный результат. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 Помоему, тут надо действовать в зависимости от входящей частоты - для низкой частоты измерять период импульсов, а для более высокой - период N импульсов. Например 8-и импульсов, результат потом поделить на 8 простым сдвигом на 3 бита. результаты измерения пропустить через фильтр усредняющий по методу подвижного окна(размер окна выбрать в зависимости от необходимой минимальной частоты). 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 Помоему, тут надо действовать в зависимости от входящей частоты это лишние, у ТС на скорости 200км/ч частота около 137Гц , скорости МК выше крыши 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 Помоему, тут надо действовать в зависимости от входящей частоты - для низкой частоты измерять период импульсов, а для более высокой - период N импульсов. Например 8-и импульсов, результат потом поделить на 8 простым сдвигом на 3 бита. Да именно так это слишком медленно будет. Вплане при 100 км в час у меня всего будет 7 импульсов в секунду, а если ждать секунду чтобы отсчитать эти 7 импульсов то погрешность будет 1 секунда а это дофига. как я написал мне нужно максимум погрешность 0.1 сек 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 (изменено) Интерполяцию используй по 3...5 последним результатам. Это конечно дело ресурсоёмкое, но с частотой 10/сек я думаю справиться можно будет. Например кубический сплайн. Впрочем, есть и другой метод измерения частоты. Как думаешь измеряют частоту сети 50Гц с точностью до 4 знаков да еще за время 0.1 сек? довольно просто... там используют умножитель частоты и обыкновенный частотомер, который по факту измеряет 50кГц за 0.1 сек. Изменено 17 октября, 2015 пользователем Alexeyslav 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 Зачем интерполяция? я думаю она не нужна. Я сейчас не спидометр делаю, а просто счетчик времени разгона до 100км в час. тоесть мне побольшому счету не обязательно что то выводить на экран, нужно будет время выводить и все. но можно и скорость показывать. Спидометр думаю сделать гораздо проще, ну или да сделать со средней скользящей 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alexeyslav Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 так если тебе надо сделать счетчик времени разгона, то просто привяжись к периоду сигнала с датчика - как только станет меньше заданного - скорость достигнута. 0 Учение - изучение правил. Опыт - изучение исключений. Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 Впрочем, есть и другой метод измерения частоты. Как думаешь измеряют частоту сети 50Гц с точностью до 4 знаков да еще за время 0.1 сек? довольно просто... там используют умножитель частоты и обыкновенный частотомер, который по факту измеряет 50кГц за 0.1 сек. умножитель на 1000 это как???? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Zombie47 Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 так если тебе надо сделать счетчик времени разгона, то просто привяжись к периоду сигнала с датчика - как только станет меньше заданного - скорость достигнута. Отличный совет. Тоесть мне нужно модуль CCP использовать в режиме сравнения? Я просто пока только знакомлюсь по даташиту с этим модулем 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 17 октября, 2015 Поделиться Опубликовано 17 октября, 2015 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.