Задался идеей сделать устройство для проверки и снятия характерисик блков управления двигателей. Для этого необходимо сэмитировать сигнал от дотчика частоты вращения. В оригинале он такого вида: диск с 60 зубцами, из которых два спилено. Т. е. за один оборот выдаётся 58 импульсов и две паузы. Сложность возникла вот в чём: для задачи частоты вращения с некоторой дискретностью неоходимо мнять длительность импульса, а она к частоте относится как 1/х . Я планировал менять кнопками "+" и "-" переменную, задающую время, но как при этом сделать, чтобы частота менялась каждый раз на +/- 50(100) об/мин? вот тут я что-то в тупике(пока). Можть у кого какая умная мысль по этому поводу возникнет?
Сложность возникла вот в чём: для задачи частоты вращения с некоторой дискретностью неоходимо мнять длительность импульса, а она к частоте относится как 1/х . Я планировал менять кнопками "+" и "-" переменную, задающую время, но как при этом сделать, чтобы частота менялась каждый раз на +/- 50(100) об/мин? вот тут я что-то в тупике(пока).
Возможно подойдёт такой алгоритм - подпрограмма формирует на линии порта последовательность импульсов 58+2 (если конечно в это время не требуется выполнять другие операции). Кнопками + и - соответственно определяется кол-во обращений к подпрограмме, кратные 50 и 10 и ещё константа, определяющая длительность импульса и паузы (период) в подпрограмме . На само кол-во обращений нужно будет назначить нужное кол-во РОН. Хотя если брать дискретность 100, то максимальная ИМХО частота для двигателя не более 7-8 тысяч. Значит 70-80 кликов, а если быть точнее меньше (частота оборотов ХХ - не менее 500), значит хватит и одного регистра. Это так, на вскидку, может есть варианты получше и проще.
Пост N: 19
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
0
Отправлено: 15.01.09 18:28. Заголовок: не совсем понял, как..
не совсем понял, как меняться будет время периода, например при 6000об это 160мкс, а при 500 об 20 мс, при этом разница в 100 об 5900-6000 по времени периода 2.8 мкс, а 500 - 600 об по времени 3.3 мс?
Отправлено: 15.01.09 22:15. Заголовок: Очень далек от этого..
Очень далек от этого. Но почему не воспользоваться табличным чтением. Т.е. кнопками по таблице выбираются (переключаются, можно с шагом) нужные параметры для конкретного нужного момента. Таблицу можно заранее расчитать и заполнить. Недавно делал по таблице, измерение сопротивления датчика охлаждения, с преобразованием в градусы, точность 1,5 градуса. Сопротивление очень не линейно и не равномерно.
Пост N: 20
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
0
Отправлено: 15.01.09 22:34. Заголовок: вот это уже идея, вы..
вот это уже идея, высчитать время для каждого значения частоты и считывать из таблицы. ещё на ум пришло менять время как придётся с наименьшим шагом, а частоту выводить на индикатор, и смотреть, что наустанавливал.
Отправлено: 15.01.09 23:05. Заголовок: А почему и нет. Если..
А почему и нет. Если удобно. Кстати меня тоже подталкивают к изготовлению мобильного прибора автомеханика. С двумя или одной функциями. -сканер неисправностей -иммитатор датчиков Но надо сначала разобраться, какие здесь принципы.
Пост N: 21
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
0
Отправлено: 15.01.09 23:37. Заголовок: Для жигулей(всех) - ..
Для жигулей(всех) - простейший адаптер к компу, программ целая куча - идеальный вариант Импорт - плохо, но весь - ЕЛМ сканнер(только моторы, выдаёт коды неиспр.) - дешевле купить - от 50$, остальное круто, но дорого и узкоспециализированно. Например Мерседес - цена прибора от 1500, но может всё. Исключение - VWи Ауди - там тоже можно адаптром с компом мног что сделать. Вопрос что надо - можть что посоветую.
Пост N: 57
Зарегистрирован: 12.02.07
Откуда: Беларусь, Гомель
Рейтинг:
0
Отправлено: 16.01.09 00:06. Заголовок: Mehanikl пишет: она ..
Mehanikl пишет:
цитата:
она к частоте относится как 1/х
Я считаю что здесь нужен другой подход: надо привязаться к оборотам в минуту (количеству импульсов в минуту), а далее при разработке программы отталкиваться от этого. Тогда можно будет изменять обороты с любой дискретностью.
Пост N: 22
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
0
Отправлено: 16.01.09 00:35. Заголовок: это был бы идеальный..
это был бы идеальный вариант, надо подумать... например, при смене числа оборотов высчитывать длительность импульса, сохраняя её до следующей смены числа оборотов
Пост N: 23
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
0
Отправлено: 16.01.09 01:20. Заголовок: был в своё время про..
был в своё время проект, что то типа диагностического прибора-маршрутного компьютера на Атмеl http://hass-dodgev.narod.ru/, но я бы посоветовал всё же адаптер к компу, что даёт возможность полноценной диагностики, замены прошивок, их редактирования и к тому же проще и более универсален в смысле применяемости. Если всё же этим заинтерисуетесь,описанием и ПО поделюсь.
Пост N: 1
Зарегистрирован: 28.01.10
Откуда: Россия, Рязань
Рейтинг:
0
Отправлено: 28.01.10 01:20. Заголовок: Эмулятор
здравствуйте форумчане, на данный момент столкнулся с проблемой создания эмулятора сигнала ДПКВ по ДХ на PIC16F84. Скорее всего контроллер придётся поменять на другой, из-за нехватки частоты. Мотор пятицилиндровый, сигнал с датчика холла имеет форму прямоугольных импульсов. Необходимо на выходе получить сигнал 60 и 2 пропуска, за один оборот коленвала (5 ДХ = 120 ДПКВ, т.е фактически умножитель частоты на 24). В программе использовался алгоритм деления на 24. В силу дискретности получаемых величин, использования кварца 10 МГц и 8 битных регистров, получил сильное ограничение по оборотам. Рабочий диапазон получился от 100 об/мин до 2500 об/мин. при этом сигнал меняет свою частоту дискретно и примерно через каждые 200-300 об/мин, т.е. всего 10 величин генерируемых частот.
Исходники могу выложить, но собственно вопрос у меня таков: Как в пиках работать с дробными числами и вообще возможно ли это на ассемблере? Заранее спасибо.
Пост N: 142
Зарегистрирован: 20.10.08
Откуда: Россия, Горно-Алтайск
Рейтинг:
0
Отправлено: 28.01.10 04:34. Заголовок: Что мешает вам испол..
Что мешает вам использовать МК с частотой 20 МГц, где для указанной задачи можно задействовать модуь ССР (конечно же не 84) . С дробными числами в пиках работать можно.
Пост N: 1093
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
3
Фото:
Отправлено: 28.01.10 08:17. Заголовок: WinNT пишет: Как в ..
WinNT пишет:
цитата:
Как в пиках работать с дробными числами и вообще возможно ли это на ассемблере?
А как же, естественно возможно... Если нужна большая точность, то без чисел с плавающей запятой не обойтись... Если точность не особо играет роль, то используйте целочисленную арифметику. Здесь вариантов масса, например в один байт целую часть, в другой дробную, можно просто перемножать дроби как целые, затем ставить точку где необходимо... Но в любом случае одним байтом не обойтись, самый минимум два байта, для ПЗ вообще минимум три... Смысл работы с дробными числами в том, как их интерпретировать, а вариантов интерпретации масса...
Эммм интересно. Просто у меня счёт времени полупериода по входу лежит в интервале 0,004с (6000 об/мин) до 0,25с (100 об/мин), а прерывание по переполнению таймера происходит через каждые 204.8мкс. Таким образом при 6000 об/мин произойдёт всего 19 переполнений (это и есть полупериод на входе). Теперь мне нужно поделить полупериод на 24, и результат получается 0. Вот я и не знаю что делать. Либо контроллер быстрее чтобы прерываний минимум 60-80 происходило за время 0,004с, либо как-то тут делить научится с дробями и считать их также. Например 19/24=0,792, где 0,792 - полупериод генерируемого импульса, т.е. через каждые 0,792 прерывания мне нужно инвертировать сигнал на выходе. как лучше поступить? А вообще это мой первый проект, так что особо не критикуйте =))
Задался идеей сделать устройство для проверки и снятия характерисик блков управления двигателей.
Это для того, чтобы можно было в статическом режиме проверять работу двигателя, или ещё с какой целью? А если инжектор, мозги не будут заплёвывать цилиндры бензином?
Отправлено: 28.01.10 13:48. Заголовок: Ну я имел ввиду как ..
Ну я имел ввиду как лучше поступить. Я замеряю время полупериода датчика холла за счёт количества прерываний по переполнению таймера. Так вот это время получается слишком маленькое для целочисленного деления на 24 и результат очень не точный. Генерация происходит инвертированием сигнала на выходе через каждое X/24 прерывание. X - полупериод ДХ. Как вот мне разделить на 24 и при этом инвертировать сигнал на выходе например через каждое 0,5 прерывание. Под силу ли эта задача моему контроллеру?
Пост N: 1094
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
3
Фото:
Отправлено: 28.01.10 14:57. Заголовок: WinNT пишет: Ну я и..
WinNT пишет:
цитата:
Ну я имел ввиду как лучше поступить. Я замеряю время полупериода датчика холла за счёт количества прерываний по переполнению таймера. Так вот это время получается слишком маленькое для целочисленного деления на 24 и результат очень не точный.
Думается мне данный подход принципиально не верный... Зачем так тогда делать? И результат у вас получается очень не точный, потому что происходит слишком мало прерываний! Отсюда путь решения проблемы, либо используйте не количество прерываний, а их общую длительность за время полупериода, т.е. Просто складывайте 255+255+255+...+х при последнем измерении, либо настройте таймер так, чтобы прерываний происходило больше... Т.о. увеличьте делимое и будет полный порядок. Даже если произойдет только одно прерывание то вполне можно поделить на 24... Вопросы есть?
Отправлено: 28.01.10 17:11. Заголовок: Алексей пишет: Дума..
Алексей пишет:
цитата:
Думается мне данный подход принципиально не верный... Зачем так тогда делать? И результат у вас получается очень не точный, потому что происходит слишком мало прерываний! Отсюда путь решения проблемы, либо используйте не количество прерываний, а их общую длительность за время полупериода, т.е. Просто складывайте 255+255+255+...+х при последнем измерении, либо настройте таймер так, чтобы прерываний происходило больше... Т.о. увеличьте делимое и будет полный порядок. Даже если произойдет только одно прерывание то вполне можно поделить на 24... Вопросы есть?
Я тоже так думал, но как потом генерировать сигнал? Предположим получили мы 19 прерываний, это соответствует числу 4864, затем делим 4864/24=203 - это получается суммарный полупериод нового импульса... и что с ним делать? Мне же нужно знать именно сам полупериод, чтобы генерировать, а число 203, это как раз и есть 0,79-ая часть от одного прерывания. Скорость повторений прерываний я увеличить тоже не могу. 10МГц - максимум предделитель 0. Если вот только попробовать пользоваться текущим значением самого таймера... чтобы узнать сколько 1/255 долей прерывания выполнилось, т.е. использовать его для более точного подсчёта... но что-то в голову ничего не лезет :( ну вот 0,79 часть прерывания, это есть как раз тот момент когда таймер достигнет числа 203... Эмммм.... всю прогу придётся переписывать. интересно даже будет ли работать =) а то я уже 5 версий перепробовал... то сигнал обрывается, то инверсия через раз не происходит.. Можете посоветовать материал для этого ассемблера чтобы математические операции описаны были ну и там всякие интерпретации 16 бит, дробей и т.д?
Можете посоветовать материал для этого ассемблера чтобы математические операции описаны были ну и там всякие интерпретации 16 бит, дробей и т.д?
Такого материала нет, я сам в свое время обрыскивал интернет в поисках, но мало чего нашел, пришлось доходить самостоятельно... Есть только на сайте микрочипа библиотека для работы с плавающей запятой, там есть все что нужно, но числа минимум 3 байта, два под мантиссу, один под степень... WinNT пишет:
цитата:
ну вот 0,79 часть прерывания, это есть как раз тот момент когда таймер достигнет числа 203...
Ну значит 203 это и есть в вашем случае интерпретация числа 0,79... WinNT пишет:
цитата:
Я тоже так думал, но как потом генерировать сигнал?
Вам виднее как... Вариантов масса, можно просто использовать программный счетчик, можно таймер задействовать, можно попробовать СССР модуль задействовать... Если не укладываетесь в нужный отрезок, можно поделить ведь и не только на 24, в конце концов можно по таблице выбирать необходимое значения в зависимости от результата деления... И вообще зачем делить??? В конце концов можно подобрать коэффицент деления прямо при подсчете и прямо в прерываниях если вернуться к началу... Можно подобрать коэффицент деления предделителя так, чтобы во всем диапазоне таймер не переполнялся... Если досчитывать предделитель, то результат будет 16 битным, должно хватить... Хватит??? WinNT пишет:
цитата:
интересно даже будет ли работать =) а то я уже 5 версий перепробовал...
Если грамотно подойти, любая программа будет работать... Куда она денется с подводной то лодки? WinNT пишет:
цитата:
Мне же нужно знать именно сам полупериод, чтобы генерировать, а число 203, это как раз и есть 0,79-ая часть от одного прерывания
Отправлено: 28.01.10 20:25. Заголовок: Алексей пишет: Хват..
Алексей пишет:
цитата:
Хватит???
Конечно хватит.
Алексей пишет:
цитата:
А 203 чем вас не устраивает???
Ну просто я не знаю как мне в подпрограмме генератора досчитывать до этого числа. Это же меньше по времени чем одно прерывание. 1) допустим к тому времени как запустится ПП генератора, TMR0 будет уже равен 168. 2) Ждём (зацикливаемся) пока TMR0=203 3) произведём инверсию сигнала. 4) Ждём снова только теперь уже не 203, а 203+203-255=151 (причём за это время произойдёт прерывание и результат может быть уже не 203) 5) опять инвертируем 6) Теперь ждём 151+203-255=99 7) инвертируем 8) ждём 99+203-255=47 9) инвертируем ............................ .......и вдруг.......... ............................ n1) 60+203-255=8 - это уже ждать нельзя, т.к ПП прерывания ну никак не может выполнится за 8 тактов. Т.О. когда перейдём в ПП генерации TMR0 к примеру уже станет 25, а мы ждём 8. Что-то вообще ничего не выходит. Мои силы заканчиваютя=))) Пик меня победил в очередной раз.
Пост N: 120
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
1
Отправлено: 28.01.10 23:14. Заголовок: Да в общем-то я имит..
Да в общем-то я имитатор всё-же сделал, работает на ура, правда значения оборотов не все точны. (проблема деления), выложу в обмен в выходной ближайший.
Пост N: 129
Зарегистрирован: 31.01.08
Откуда: SU, Москва
Рейтинг:
1
Отправлено: 09.02.10 16:04. Заголовок: Изначально делал для..
Изначально делал для снятия карт зажигания/топлива с серийных мозгов, но потом несколько раз использовал для ремонта и наладки : остальные датчики достаточно просто имитируются - переменными резисторами. И можно запустить мозги "на столе". Конечно, в повседневной работе необходимости в этом устройстве не ощущается.
Все даты в формате GMT
3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет