Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Электроника средств транспорта Ремонт и разработка дополнительного автооборудования. Бортовые компьютеры и многое другое.

 
Опции темы
Непрочитано 04.07.2012, 17:46  
Alex_Sss
Прописка
 
Регистрация: 03.06.2012
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
Alex_Sss на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

Да, очень хочется, чтобы заработало у всех!
И даже с такими кривыми датчиками, как у нас ).
Был еще вариант - активировать prescaler у счетчика импульсов ICP и считать по 4..16 импульсов. Но тогда для минимальной скорости наши измерения займут явно больше чем 100мс с нашими немногоимпульсными датчиками...
Посему - вижу единственный способ - считать кол-во импульсов за какой-то большой период (300..500мс), и считать точное время от фронта до фронта. Два таймера - счетный и основной, даже с периодом 100мс, а так же прерывание по ICP (которое надо включать только для двух фронтов - первого, и последнего) - решат эту проблему. Единственное - надо правильно это реализовать.
Если б проект был написан на С - я бы с удовольствием присоединился к разработке софта. Но увы, пока могу помочь только идеей.
gnomon72, можете сказать какие таймеры для каких целей задействованы и как считают?
Реклама:
Alex_Sss вне форума  
Непрочитано 04.07.2012, 20:40  
gnomon72
Почётный гражданин KAZUS.RU
 
Регистрация: 25.06.2010
Сообщений: 1,223
Сказал спасибо: 13
Сказали Спасибо 176 раз(а) в 123 сообщении(ях)
gnomon72 на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

Да какие там могут быть таймеры, кроме единственного 16-разрядного Timer1.
Как в штатном драйвере считает примерно понятно, т.к. других вариантов нет.
1. Поднимаем флаг запуска прерывания по ICP
2. Выбираем примерную базу замера. Например 100 мсек. И запускаем ей отсчет.
2. Ждем первый фронт
3. Получили 1-й фронт в прерывании и обнуляем Timer1 - начинаем замерять интервал до 2-го фронта.
4. Получили 2-й фронт. Считали аппаратно захваченное прерыванием значение Timer1. Это и есть период между двумя импульсами в тактах с учетом прескалера. Сохранили период. Обнулили Timer1.
5. Получили 3-й фронт. Считали аппаратно захваченное прерыванием значение Timer1. Прибавили его к предыдущему и сохранили. Обнулили Timer1.
....
И т.д. и т.п. продолжаем складывать периоды пока база замера не закончилась. Точность её отсчета никакой роли не играет. Естественно ещё и считаем количество полученных периодов.

Делим сумму периодов на их количество и получаем средний период за базу замера.
Если база короткая, то на низких скоростях вообще ничерта не получаем, т.к. для замера нужна минимум пара импульсов в базе., т.е. для 100 мсек это минимум надо 20 Герц на входе иметь.

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

Я самопальный драйвер написал. На 6-импульсном меряет с точностью до 0,02 км/ч с генератора на частоте 50 Гц.

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

Например с дискретным замерам по количеству импульсов пусть дискрета будет 0,4 км/ч.
Пример:
Скорость реальная 60 км/ч, дискретная замеренная скорость 60 км/ч, периодически замеренная скорость 60 км/ч
Через 1 секунду.
Скорость реальная 60,1 км/ч, дискретная замеренная скорость 60,4 км/ч (переход на шаг дискреты 0,4), периодически замеренная скорость 60,1 км/ч
Реальное ускорение 0,1 км/ч*с, ускорение по дискретному замеру 0,4 км/ч*с, по периодическому 0,1 км/ч*с.
Отличие ускорений в методиках замера получается в 4 раза, хотя разница в скоростях всего 0,4%. Адекватно корректировать дроссель на упреждение по ускорению уже не получится.

Последний раз редактировалось gnomon72; 04.07.2012 в 23:49.
gnomon72 вне форума  
Непрочитано 04.07.2012, 22:20  
krww
Временная регистрация
 
Регистрация: 07.04.2012
Адрес: Москва
Сообщений: 97
Сказал спасибо: 12
Сказали Спасибо 24 раз(а) в 21 сообщении(ях)
krww на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

Сообщение от gep Посмотреть сообщение
1) У меня нет АБС
2) АБС относится к системам безопастности - знаю что можно, но стремно туда лезть
3) разнообразие сигналов у разных людей повторяющих схему резко возрастет ИМХО
1.Смотря какая машина.На многих авто сейчас,да и раньше впрочем, узлы унифицированы,АБС может и не быть,а вот зубчатые диски в колесах могут стоять,да и место под датчик в ступице тоже будет при этом.Если иномарка,то снимите колесо,тормозной диск и поглядите ,что там.
2.Безопасность конечно безопасность,но АБС от глюков защищена,если что,то просто она отключится и загорится лампочка,просто будет авто без АБС,тормозить она сама не умеет.Как уже сказали -высокоомный вход решает проблему глюка.Кстати датчик АБС мощный,они индуктивные как привило ,он способен зажечь даже лампочку накаливания от фонаря ,3.5 вольта
3.Тут только будет разница в количестве импульсов на метр,датчики то везде индуктивные практически.
ЗЫ: я буду делать на АБС ,благо оно есть и провод с заднего колеса проходит прямо у блока КК,тут же там и разъем переходной имеется,к нему и подпаяюсь.Правда придется тестить на прошивке для 2.55 импульса,ибо перепрошить нет пока никакой возможности.
krww вне форума  
Непрочитано 04.07.2012, 22:54  
hardlock
Вид на жительство
 
Аватар для hardlock
 
Регистрация: 06.07.2006
Адрес: zp.ua
Сообщений: 393
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 18 сообщении(ях)
hardlock на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

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


Как видно всё просто. На дисплей выводится в таком формате:

Первая строка:
On|Off - Круиз включен или выключен,
K|N|D - таблица (Комфорт, Норма, Динамик)
f 0.0 - зафиксированная скорость, если ›99.9, то "1" выводится на месте "f"
s 0.0 - текущая скорость, с сотнями также - замещается "s"

Вторая строка:
_ - падающая палка. Каждая принятая посылка опускает палку на один пиксель вниз, потом начинается опять сверху. Хорошо видно, работает ли КК и сыплются ли данные.
00 - Ошибка. Первый символ - прямо из строки, второй сохраняется в памяти и выводится до появления следующей ошибки.
d 0.0 - Перемещение привода в %.
u60.0 - Пользовательская скорость, сотни отображаются так же, как в "f" и "f".

Прошивка писана в CodeVisionAVR v2.05.3, расписаны все параметры, передаваемые в строке, но не все выводятся, можно подкорректировать - там всё просто.
Во вложении HEX и исходник.

На всякий случай повторю формат посылок:
Код:
// текстовый формат ***********************************
// Формат буфера текст, 55 байт. Разделитель данных ";" двоеточие.
// Индекс, целое без знака - 5 байт
// Режим работы КК (0/1), целое без знака - 1 байт
// Текущая таблица (1-2-3), целое без знака - 1 байт
// Текущая скорость стабилизации в км/ч, один разряд после запятой без знака - 5 байт
// Текущая скорость в км/ч, один разряд после запятой без знака - 5 байт
// Ошибка скорости в км/ч, один разряд после запятой со знаком - 6 байт
// Ошибка скорости в см/с, целое со знаком - 5 байт
// Ускорение в см/c^2, целое со знаком - 5 байт
// Перемещение привода в %, один разряд после запятой со знаком - 5 байт
// Скорость пользователя в км/ч, один разряд после запятой без знака - 5 байт
// Флаг состояния - 1 байт, целое без знака:
// 0 - Всё OK
// 1 - Power-on Reset Flag
// 2 - External Reset Flag
// 3 - Brown-out Reset Flag
// 4 - Watchdog Reset Flag
// 5 - JTAG Reset Flag
// 6 - Предельное время работы привода
// 7 - Выход за пределы разрешенного диапазона скоростей
выглядят они так:
Код:
 3516;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
 3517;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
 3518;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
 3519;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
 3520;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
 3521;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
 3522;0;2;  0.0;  0.0;   0.0;    0;    0;  0.0; 60.0;0;
Миниатюры:
Нажмите на изображение для увеличения
Название: sch_display_tiny2313.gif
Просмотров: 415
Размер:	16.1 Кб
ID:	36466   Нажмите на изображение для увеличения
Название: DSCN0285-0-00-04-854.jpg
Просмотров: 303
Размер:	23.8 Кб
ID:	36467  
Вложения:
Тип файла: rar display_kk_hex.rar (1.7 Кб, 56 просмотров)
Тип файла: rar firmware_text_v0.1.rar (12.1 Кб, 56 просмотров)

Последний раз редактировалось hardlock; 04.07.2012 в 22:57.
hardlock вне форума  
Непрочитано 05.07.2012, 00:02  
Alex_Sss
Прописка
 
Регистрация: 03.06.2012
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
Alex_Sss на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

gnomon72, Алгоритм выглядит красиво. Только смысла обнулять таймер при каждом импульсе я не вижу ).
Таймер не должен переполниться в течение интервала замера. Или же по прерыванию о переполнении таймера мы можем считать количество переполнений. А лучше - самим таймером 1 считать интервал замера. Тогда получается:
1. Поднимаем флаг запуска прерывания по ICP
2. Выбираем примерную базу замера. Например 100 мсек.
2. Ждем первый фронт
3. Получили 1-й фронт и в прерывании обнуляем таймер1 и запускаем его. Тут же считаем значение таймера для базы замера и записываем это значение в ловушку таймера1. Обнуляем счетчик импульсов.
4. Получили 2-й фронт. Ничего не делаем с таймером, просто инкрементируем счетчик импульсов.
5. Получили 3-й фронт. Ничего не делаем с таймером, просто инкрементируем счетчик импульсов.
....
И т.д. и т.п. продолжаем считать периоды пока база замера не закончилась. Как только значение таймера1 сравнялось со значением в ловушке - получаем прерывание. Но таймер еще не трогаем.
6. Смотрим кол-во периодов. Если 0 - то импульсов не было, измерение не валидно. Если больше - разрешаем прерывание по ICP.
7. Получаем прерывание - последний фронт. Сохраняем значение таймера. Делим его на количество импульсов. Результат - и есть искомый средний период.

Так гораздо меньше ресурсов проца пользуется, но точность наоборот - выше, потому что таймер1 считает сам по себе, без нашего вмешательства.
Alex_Sss вне форума  
Непрочитано 05.07.2012, 00:02  
Alex_Sss
Прописка
 
Регистрация: 03.06.2012
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
Alex_Sss на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

hardlock, Браво! Хорошая работа!!!
Alex_Sss вне форума  
Непрочитано 05.07.2012, 00:57  
gnomon72
Почётный гражданин KAZUS.RU
 
Регистрация: 25.06.2010
Сообщений: 1,223
Сказал спасибо: 13
Сказали Спасибо 176 раз(а) в 123 сообщении(ях)
gnomon72 на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

Сообщение от Alex_Sss Посмотреть сообщение
gnomon72, Алгоритм выглядит красиво. Только смысла обнулять таймер при каждом импульсе я не вижу )...
Так гораздо меньше ресурсов проца пользуется, но точность наоборот - выше, потому что таймер1 считает сам по себе, без нашего вмешательства.
Я описал предполагаемый алгоритм работы штатной процедуры замера периодов, которая скорее всего работает непрерывно и чтобы не получать регулярно прерывание по переполнению таймера имеет резон обнулять его при каждом импульсе, а переполнение получает только, если импульсов долго нет, т.е. замер вышел за пределы нижней границы измерений. Удобно, чтобы выдать ошибку. Как пришло переполнение, значит частота не измеряемая.

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

Последний раз редактировалось gnomon72; 05.07.2012 в 01:12.
gnomon72 вне форума  
Непрочитано 05.07.2012, 01:13  
Alex_Sss
Прописка
 
Регистрация: 03.06.2012
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
Alex_Sss на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

Сообщение от gnomon72 Посмотреть сообщение
У меня по другому сделано.
Я собираю фиксированное количество периодов от начала базы замера не в сумму, а каждый отдельно для дальнейшего их анализа на предмет сильного отклонения периодов отдельных импульсов, чтобы выкидывать заведомо бракованные из последующего усреднения. Соответственно обнулять таймер приходится по каждому фронту, хотя можно просто вычитать из нового значения таймера старое. Но это требует сохранения старого значения и операции двухбайтного вычитания, что получается дольше, чем просто обнулить таймер.
А нужно ли делать сложнее, если можно сделать просто и точно?
Alex_Sss вне форума  
Непрочитано 05.07.2012, 01:15  
gnomon72
Почётный гражданин KAZUS.RU
 
Регистрация: 25.06.2010
Сообщений: 1,223
Сказал спасибо: 13
Сказали Спасибо 176 раз(а) в 123 сообщении(ях)
gnomon72 на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

Сообщение от Alex_Sss Посмотреть сообщение
А нужно ли делать сложнее, если можно сделать просто и точно?
Так ведь проблема то не в том, чтобы померить средний период импульсов за какое то время, а в том, чтобы удалить бракованные периоды от корявых ДС.
Иначе бы и смысла дергаться не было, т.к. штатный замер работает идеально.
gnomon72 вне форума  
Непрочитано 05.07.2012, 01:18  
Alex_Sss
Прописка
 
Регистрация: 03.06.2012
Сообщений: 159
Сказал спасибо: 8
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
Alex_Sss на пути к лучшему
По умолчанию Re: Самодельный круиз-контроль

gnomon72, У меня есть ощущение, что штатный замер измеряет лишь один период. Поэтому так и скачет.
Alex_Sss вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроль приближения/удаления целевого обьекта или аналог proximity Boris_gunner Электроника - это просто 18 25.04.2016 11:52
[Решено] Самодельный пирометр Classic001 Измерительное оборудование 6 27.10.2011 10:52
Самодельный сварочный трансформатор - дополнительная обмотка E_C_C Производственное оборудование 5 01.11.2010 21:02
Контроль целостности передаваемых данных ksd034 Микроконтроллеры, АЦП, память и т.д 4 08.07.2010 21:46
Входной контроль микроконтроллеров TMS320LF2406APZA alnikr Цифровые сигнальные процессоры 8 18.05.2010 14:38


Часовой пояс GMT +4, время: 19:36.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot