Перейти к содержанию

crazz

Рекомендуемые сообщения

  • 2 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Ломаю голову, как получить мгновенное значение.

Задача такова. датчик скорости имеет 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 микросекунд. с таким шагом погрешность велика, думаю может в этом проблема, что я поднятием флага время замеряю?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Hongfa для различных применений в Компэл. Большой выбор в наличии!

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Тренды и лучшие решения для разработки зарядных станций в России

К 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Секреты депассивации литиевых батареек FANSO EVE Energy

Самыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Как я понял, включаем внешнее прервание по переднему фронту.и в момент прерывания по переднему фронту записываем значение регистра таймера, тоесть по сути записываем сколько тактов сделал таймер.

Но не понял а где начало отсчета. Что будет если таймер переполнется, вплане таймер тикает дотикал сбросился и тут бац сразу внешнее прерывание. Чето не разобрать вообщем мне этот код без комментариев =(

Ссылка на комментарий
Поделиться на другие сайты

Для измерения периода импульсов можно у пика использовать ССР модуль. У 16F819 есть замечательный вход ССР1. Запускаете таймер 1 в свободном полёте с частотой тиков Fosc/4, то есть таймер считает каждую микросекунду. На вход ССР1 подаёте импульсы скорости и включаете модуль ССР. После этого по каждому пришедшему импульсу скорости значение таймера 1 на лету автоматически будет записываться в специальные регистры, также будет вырабатываться прерывание.

То есть пришёл один импульс, значение таймера, например, 1560 записалось в регистры ССР. В прерывании это значение кладётся в переменную cnt0=1560. Пришёл второй импульс, защёлкнулось новое значение таймера 16260. В прерывании вычитаем старое из нового: 16260 - cnt0 = 14700, кладём cnt0=16260. Таким образом период между двумя импульсами скорости получился 14700 микросекунд, с точностью 1 мкс. И т.д.

Тут надо учесть, что максимальное число в таймере 65535, при небольших скоростях <25км/час таймер будет пару раз переполняться между импульсами. Ну, можно включить прескейлер и таймер будет тикать по 8 мкс, и минимальная измеряемая скорость составит 3км/час.

Ссылка на комментарий
Поделиться на другие сайты

Как я понял, включаем внешнее прервание по переднему фронту.и в момент прерывания по переднему фронту записываем значение регистра таймера, тоесть по сути записываем сколько тактов сделал таймер.

Но не понял а где начало отсчета. Что будет если таймер переполнется, вплане таймер тикает дотикал сбросился и тут бац сразу внешнее прерывание. Чето не разобрать вообщем мне этот код без комментариев =(

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

Запускаете таймер 1 в свободном полёте с частотой тиков Fosc/4, то есть таймер считает каждую микросекунду

да вот по этому пункту вопрос, я что то пересмотрел все свои комментарии с сылками на даташит и не понял как таймер врубить в свободном полете. Ну вплане я вижу где он врубается и дальше вижу где выбирается предделитель, для WDT или TMR0... хотя.... если выбрать предделитель для WDT то у TMR0 не будет предделителя и он будет в свободном полете?

Ссылка на комментарий
Поделиться на другие сайты

наверно спать пора или нет? ССР1 работает с TMR1!!!

если выбрать предделитель для WDT то у TMR0 не будет предделителя и он будет в свободном полете? 

таки да , но к ССР он не имеет никакого отношения...

Ссылка на комментарий
Поделиться на другие сайты

Далее включаете модуль захвата ССР, для этого пишите CCP1CON = 5.

Разрешаете прерывания от ССР, пишем PIE1 |= 0x4;

Делаете RB2 входом TRISB |= 0x04.

И понеслось. Подаёте на вход RB2 импульсы скорости, в прерывании проверяете флаг CCP1IF. Если флаг поднят, то переписываете захваченное значение таймера1 в какую-либо переменную и вычисляете период.

Изменено пользователем Yurkin2015
Ссылка на комментарий
Поделиться на другие сайты

Если флаг поднят, то переписываете захваченное значение таймера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;

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Мне кажется с этими long переменными - перебор. Если есть два 16-ти битовых значения типа unsigned int, старое 0xF000 и новое 0x1000, например,то процессор тупо вычитает 0x1000 - 0xF000 = 0x2000 и получает правильный результат.

Ссылка на комментарий
Поделиться на другие сайты

Помоему, тут надо действовать в зависимости от входящей частоты - для низкой частоты измерять период импульсов, а для более высокой - период N импульсов. Например 8-и импульсов, результат потом поделить на 8 простым сдвигом на 3 бита.

результаты измерения пропустить через фильтр усредняющий по методу подвижного окна(размер окна выбрать в зависимости от необходимой минимальной частоты).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Помоему, тут надо действовать в зависимости от входящей частоты

это лишние, у ТС на скорости 200км/ч частота около 137Гц , скорости МК выше крыши
Ссылка на комментарий
Поделиться на другие сайты

Помоему, тут надо действовать в зависимости от входящей частоты - для низкой частоты измерять период импульсов, а для более высокой - период N импульсов. Например 8-и импульсов, результат потом поделить на 8 простым сдвигом на 3 бита.

Да именно так это слишком медленно будет. Вплане при 100 км в час у меня всего будет 7 импульсов в секунду, а если ждать секунду чтобы отсчитать эти 7 импульсов то погрешность будет 1 секунда а это дофига. как я написал мне нужно максимум погрешность 0.1 сек

Ссылка на комментарий
Поделиться на другие сайты

Интерполяцию используй по 3...5 последним результатам. Это конечно дело ресурсоёмкое, но с частотой 10/сек я думаю справиться можно будет. Например кубический сплайн.

Впрочем, есть и другой метод измерения частоты. Как думаешь измеряют частоту сети 50Гц с точностью до 4 знаков да еще за время 0.1 сек? довольно просто... там используют умножитель частоты и обыкновенный частотомер, который по факту измеряет 50кГц за 0.1 сек.

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Зачем интерполяция? я думаю она не нужна. Я сейчас не спидометр делаю, а просто счетчик времени разгона до 100км в час. тоесть мне побольшому счету не обязательно что то выводить на экран, нужно будет время выводить и все. но можно и скорость показывать. Спидометр думаю сделать гораздо проще, ну или да сделать со средней скользящей

Ссылка на комментарий
Поделиться на другие сайты

так если тебе надо сделать счетчик времени разгона, то просто привяжись к периоду сигнала с датчика - как только станет меньше заданного - скорость достигнута.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Впрочем, есть и другой метод измерения частоты. Как думаешь измеряют частоту сети 50Гц с точностью до 4 знаков да еще за время 0.1 сек? довольно просто... там используют умножитель частоты и обыкновенный частотомер, который по факту измеряет 50кГц за 0.1 сек.

умножитель на 1000 :shok: это как????
Ссылка на комментарий
Поделиться на другие сайты

так если тебе надо сделать счетчик времени разгона, то просто привяжись к периоду сигнала с датчика - как только станет меньше заданного - скорость достигнута.

Отличный совет. Тоесть мне нужно модуль CCP использовать в режиме сравнения? Я просто пока только знакомлюсь по даташиту с этим модулем

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Да он скорее всего поторопился.  Долго изготавливал? Как то пытался тоже,но не срослось
    • Здраствуйте,собрал липина из первого поста,все отлично заработал без танцев с бубном,первое включение через латр смотря за сколом на коллекторе нижнего ключа,далее на балласте и на сварку варил замечательно,но включил его через несколько дней ключи тихо умерли,заменил запускаю через латр подымаю потихоньку напряжение все отлично,в первый раз подумал что частота уплыла и ключики из-за этого стрельнули но нет частота как была 38-39 кГц так и осталась полка так же есть только думаю она завышена на половину амплитуды регулировал ее путем подбора сопротивления на дед тайм,так вот через латр все отлично запускается подымаю до 310 на ключе,но дежурка подключена отдельно так вот когда отключаеш ключи в этот момент как я понял стреляют,даже в сборе когда дежурка запитана от основного питания как по схеме при включении сразу в сеть начало стрелять,думал может когда устанавливал крышку трансформатор повредил,нет же индуктивность проверил 3900 мкГн первичка,ток намагничивания насколько помню 0.7…0.8 ампер Снабера по ключам в норме проверял C метром,1 мкФ пленка по питанию около ключей в норме Осцилка приведу позже, сейчас на работе Возможно ли быть такое что после выключения от сети сигнал с затвора пропадает ,и он повисает в воздухе,хотя в принципе по схеме он подтянут резистором к эммитеру,да и работало же как-то да и у всех работает
    • Неверный ход мыслей. Резонатором внутренний объём становится начиная не от входного сечения,а от того места, которое ты обозначил стрелкой, являющегося по сути некоторой разновидностью компрессионной камеры, в которой как раз и формируется пучок звуковых волн, направленных в сторону входного сечения, а на самом деле выходного отверстия, порта свёрнутого рупора, резонансное усиление которых, как у простого открытого рупора формируется по всей длине конструкции вплоть до самого выходного сечения.
    • Название микры написано в заголовке. 8051 - совместимый универсальный МК.  На этом наши полномочия - всё.
    • @Boris U, у тебя что ли такие же "колонки" на 10ГДГДШ-1-4? При Qts 0,8 и выше ФИ подобным динамикам противопоказан. Банально потому, что рано или поздно от их ППУ-подвесов останутся одни лохмотья и дыры. Не зря же их на заводе ставили в различной формы ЗЯ.  В середине 80-ых я пытался повторить проект акустической системы высокой верности А. Голунчикова. Полгода с упорством носорога пыхтел над динамиками и собирал одну, а потом как только не пытался настроить её, так чтобы, как описано в статье журнала Радио'10, 83г, чтобы работал а "в полку" не смог добиться желаемого результата. И только когда измерил АЧХ тех своих 10ГД-36К и прикинул какова их добротность, понял, что все мои попытки тщетны, и почти готовый корпус пошёл на дрова, а для 10ГД36К вылепил из папье маше пару шаров объёмом около 8 литров. Для тех динамиков такое решение было оптимальным. 
    • Не буду спорить. Для меня это скорее "дело тёмное и непонятное". Вот до сих пор для меня загадка, считать ли внутренний объём этого резонатора частью внутреннего объёма колонки? Ведь начиная со своего входного сечения он же уже резонатор. Если это четвертьволновый разомкнутый на конце резонатор, то по определению его входное сопротивление на резонансной частоте близко к нулю (КЗ), и значит для динамика никак не может являться объёмом (нагрузкой)... А вот в таких конструкциях мучаюсь вопросом, как считать вот этот объём и его форму. Почему это - не резонатор, если у него, причём на довольно высокой частоте, есть прилично выраженный резонанс? Так что просто читаю с интересом и иногда задаю глупые вопросы.
    • Лучше поздно, чем некогда. Нашел время отыскать схемку аткель можно взять ограничение тока с синхрона. Сам же преобразователь будет представлять собой две синхронные понижайки на драйверах 2104, 2184 работающие в противофазе от двухтактного контроллера. Меньше пульсации с двух дросселей и четырех транзисторов от материнок, они лучше под синхрон заточены в плане быстроты бодидиодов.  Проще 494. На один операционник подать ОСН с выхода, на второй с интегратора измеряющего через диоды напряжение открытого нижнего ключа. На словах для понимания описание принципа в несколько измененном варианте. При открывании ключа управляющее напряжение на его затвор через резистор заряжает конденсатор интегратора, а через диод со стока разряжает пропорционально току через ключ с поправкой на его температуру. Через второй диод и резистор во втором такте. Напряжение с интегратора сравниваем с предустановкой тока. Вообщем кто захочет разберется. Практически вся инфа есть в теме по ссылке и ссылках в ней. Удачи!  
  • Похожий контент

×
×
  • Создать...