Страница 1 из 4
Фуоз+lsd на AVR
Добавлено: Вт авг 28, 2012 21:17:34
Sceam73
Дело собственно вот в чем, решил я сделать определенную штуковину, которая имеет название ФУОЗ (автоматически настраивающийся угол опережения зажигания) для мотоцикла, и столкнулся с определенной проблемой, а именно написанием прошивки для него, добросовестно , неполенившись ознакомился с СИ, и даже написал пару незамысловатых программ, успешно вшив их в контроллер, но вот беда, немогу понять, как реализовать необходимые мне потребности программно! В просторах интернета, нашел человека, который сделал то же самое, только насколько я понял, делал все это на ассемблере, и бросив СИ, я побежал учить ассемблер, и тут получилась такая КАША, что аж голова закружилась, розтолкуйте мне пожалуйста, как это реализовать на СИ !
цитирую принцып работы устройства автора
"происходит постоянный опрос входов по замкнутому циклу с частотой 10000000 раз в секунду (кварц 10 МГц.). Как только сектор входит в датчик холла на одном из входов появляется сигнал, программа переходит в подпрограмму где подает питание на один из выходов и включает катушку какогото цилиндра, обнуляет счетный регистр таймера 1 и запускает сам таймер счетчик 1 с предделителем на 64, дожидается выхода сектора, как только он выйдет сигнал исчезает и число до которого досчитал счетчик копируется в двойной регистр X. (так измеряется частота вращения коленвала в данный конкретный момент, по длине импульса). Затем программа добавляет к значению Х регистр r2 (величину отставания, ниже рассмотрим откуда она берется) и ждет когда счетчик досчитает до величины Х, как только это произойдет процессор выключает катушку (происходит искра), выключает таймер счетчик 1, вычитает из Х - r2 (Х становиться таким как был до прибавления) и приступает к следующей, самой важной части: в зависимости от величины регистра X (длины импульса) вычисляет размер отставания для следующей вспышки и помещает его в регистр r2. Затем снова переходит в режим опроса входов. Как только сектор входит во второй датчик холла сигнал появляется на втором входе, программа снова включает уже вторую катушку, обнуляет регистр таймера 1, включает таймер 1 и ждет окончания импульса, по выходу сектора копирует число до которого успел досчитать счетчик в регистр X и прибавляет к нему r2, ожидая пока таймер досчитает до величины X (величина длины импульса с добавлением отставания момента зажигания от момента выхода сектора), как только он досчитает выключает катушку (искра), вычисляет величину отставания для следующей вспышке в зависимости от длинны импульса предыдущей."

Ах да, чуть незабыл, автор использует 2 датчика холла, а я использую всего одну оптопару, что немного упрощает задачу, но темнемение, всеравно непредставляю как это реализовать!
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 07:15:53
BOB51
оптрон в автотехнике не рекомендуется - много различных источников помех

Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 07:41:07
Sceam73
BOB51 писал(а):оптрон в автотехнике не рекомендуется - много различных источников помех

Оптрон ? Вы о чем ?
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 08:23:34
mazda
опиши СВОЮ задачу своими словами с чертежом.
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 11:19:13
Sceam73
Схематически примерно так
время которое мы считываем с таймера равняеться Т
оно считываеться каждый раз заного, при пропаже сигнала
включаем таймер (таймер считает момент от пропажи сигнала до его проявления)
в момент того как сигнал начинаеться, закрываем транзистор
останавливаем таймер, и записываем его в наше Т
как только сигнал пропадает открываем транзистор
запускаем таймер
и тут то начинаеться самое интерестное
По формуле N (Которой я пока не обладаю, но это не столь важно, я пока ее просто не искал)
мы вычесляем Т2 , выглядеть будит это примерно так Т2= Т-N
Для чего это делаеться, для того чтобы закрывать транзистор ДО появления сигнала, а размер этого ДО будит зависить насколько быстро прошел такт двигателя! Тоесть чем быстрее крутиться мотор, тем раньше будит происходить взрыв топлива!
Кстате, если кто то представляет, как все упростить, буду рад выслушать!
Привел пример, откудава береться и пропадает сигнал, стоит вот такая вот бабочка, и обыкновенная оптопара (фототранзистор-диод)
Схема не моя, а автора, моя будит отличаться лишь тем, что вместо датчика холла, будит оптопара, и питание микросхеммы у меня от lm2572t-5
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 13:53:41
Sceam73
И потихоньку пробую разобраться сам, вопросы по ходу моих разборов растут как грибы после дождя!
1)Какой командой включить таймер счетра тактов кварца ?
2)Какой командой считать показания с выше запущеного таймера?
3)Какой командой обнулить таймер
4)Какой фьюз нужно вписать что б подключить функцию таймера в ATmega8t-pu
5)Как задать дейтвие (когда таймер достигает Х значения то....)
пока что вродебы все, в основном вопросы обстоят по таймеру, потому что непосредственно с ним не работал!
Ах да, если в ATmega8 вшить фьюз использования кварца, то в программе уже ненужно указывать частоту ?
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 14:05:09
Engineer_Keen
1)В AVR таймер запускается когда ему задают делитель (прескалер), см биты CS регистров TCCR
2)"IN/LDS регистр,TCNT", в зависимости от конкретного таймера/контроллера, на Сях X=TCNT
3)OUT/STS TCNT,регистр (в котором 0), Си :TCNT=0;
4)фьюзы таймерами не управляет
5)использовать прерывание по совпадению, и в нем это действие задать
Что касается задания частоты кварца, то это зависит от того на чем пишется программа, бывает в настройках, бывает в тексте через какой-нибудь дефайн F=...
Это все есть в даже здешней обучалке, да и вообще, не мешало бы почитать какую-нибудь литературу, потому как судя по этим вопросам, дальше нужно будет целую статью по программированию AVR писать...
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 14:24:06
Sceam73
Большое спасибо за ответы, литературы уже вроди как начитался, разобрался с управлениями портов, условиями и тд и тп, Мне в данной статье важно лишь узнать, реально ли по моему принцыпу работы, сделать программу, или то что я хочу сделать возможно неосуществимо?
Ну и конечно же всплывающие вопросы буду задавать сдесь, в конце с меня отчет что да как получилось ) Грубо говоря, это будит мой 2й проект на микроконтроллере (после мегания светодиодом)

Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 15:36:40
Sceam73
прочитал статью про таймеры, мне их прийдеться использовать 2, один как счетчик для следующего такта, а один как счетчик для подачи сигнала зарание, но проблема в том, что там примеры на ассемблере, напишите пожалуйста 1-2 примера включения счетчиков с предделителем 64 на СИ с пояснением что, и за что отвечает, буду опираться от этих примеров!
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 15:58:13
Engineer_Keen
Я вообще-то на Си не пишу

Смотрите примеры, если там написано на асме:
Код: Выделить всё
LDI (регистр R16...R31),число
OUT РВВ,(регистр R16...R31) или STS РВВ,(регистр R16...R31)
то это равносильно коду на Си
Ну а комментарии в примерах должны быть.
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 20:46:43
Sceam73
Cобственно дело двинулось, уже в голове представляю наброски программы, каша осталась только с регистрами МК, вот еще с ними розберусь, и буду уже пробовать что то творить, на данный момент вроди бы все, если еще какие вопросы появяться, подниму тему из бездны!
Re: Прошу помощи с программой на AVR
Добавлено: Ср авг 29, 2012 21:42:07
Sceam73
До первого вопроса, на который ненашел ответа, вытянул недолго, у меня непонятка с частотой обновления дисплея, может ли дисплей обновляться чаще чем раз в 1 секунду ? (где только не лазил визде писали что 1с ) или это просто такие требования у людей ? И если можно поставить обновление быстрее, то как частота обновления повлияет на работу мк ?
Re: Прошу помощи с программой на AVR
Добавлено: Чт авг 30, 2012 08:39:12
Engineer_Keen
Чет непонятно, откуда тут дисплей взялся... Если дисплей ЖК со своим контроллером - то его нужно обновлять с такой частотой, с какой частотой нужно изменять на нем информацию. Если это светодиодный индикатор с динамической индикацией, то частоту обновления (циферок, а не самой информации) нужно делать от 50-100 Гц.
Re: Прошу помощи с программой на AVR
Добавлено: Чт авг 30, 2012 13:38:05
Sceam73
Собственно для чего я все это переписываю с 0, у меня веть есть готовая прошивка на ассемблере, и я мог бы ее вшить, но я хочу немного подстроить опережение конкретно под свой двигатель, а так же подключить ЛСД, для вывода текущих оборотов, и угла опережения(на данный момент) почему раньше не писал про слд, потому что вопросов по его инициализации небыло, и с выводом информации тоже, поэтому и так сложную схему не стал усложнять еще и лсд!
Re: Прошу помощи с программой на AVR
Добавлено: Чт авг 30, 2012 14:17:55
Engineer_Keen
По-русски тогда все-таки ЖК, а не лсд, лсд - это вообще из другой области

Смысла быстро обновлять информацию именно на ЖК-дисплее нет, цифры будут просто сливаться, поэтому для него 1 секунда - обычное значение, ну минимум 1/4 секунды. Раз используется дисплей (а то еще и кнопочки - потом, для изменения угла), то имеет смысл перерисовать схему с учетом этого, а уже потом за программу браться.
Re: Прошу помощи с программой на AVR
Добавлено: Чт авг 30, 2012 14:25:10
Sceam73
Engineer_Keen писал(а):По-русски тогда все-таки ЖК, а не лсд, лсд - это вообще из другой области

Смысла быстро обновлять информацию именно на ЖК-дисплее нет, цифры будут просто сливаться, поэтому для него 1 секунда - обычное значение, ну минимум 1/4 секунды. Раз используется дисплей (а то еще и кнопочки - потом, для изменения угла), то имеет смысл перерисовать схему с учетом этого, а уже потом за программу браться.
Кнопочки и лсд, это как дополнительный обвес, его я смогу уже сделать и сам, тоесть допаять на ножки мк это непроблема, да и ПОПРАВИТЬ код гораздо проще чем писать его с 0, поэтому, и обращаюсь суда именно для помощи написания самой сложной на мой взгляд части программы, тоесть непосредственно самого опережения!
А по поводу жки, для меня 1/4 секунды, гораздо больше подходит нежели 1 секунда!
Re: Прошу помощи с программой на AVR
Добавлено: Чт авг 30, 2012 17:34:36
phanis
Может не совсем в тему, попробуйте проще для начала, поджигать за 1,5-2 мсек до ВМТ.
Re: Прошу помощи с программой на AVR
Добавлено: Чт авг 30, 2012 20:08:14
Sceam73
phanis писал(а):попробуйте проще для начала, поджигать за 1,5-2 мсек до ВМТ.
такую программу я в силах написать, но толка от нее будит абсолютно 0, вопрос почему ? Да потому что обыконвеннное зажигание механическим образом ставиться 2-2.8 мм до вмт) Тогда присутствие микроконтроллера в этой цепочке станет просто Глупо! Облазив чательно просторы интернета, всетаки нарыл я исходники под АВР на с++(есть в интернете добрые люди), Немного поковыряв их, я понял, что процесс сложнее, чем я думал! Там не обошлось без кинематики, тобишь (длинна шатуна, радиус кривошипа и тд и тп, к счастью для меня с точными науками я розбераюсь лучше чем с гуманитарными

) Вообщем думаю дня так через 3, предоставлю результат, с подключенным ЛСД(и возможно даже кнопочками) для отображение текущих оборотов двигателя, и уоз!
Re: Прошу помощи с программой на AVR
Добавлено: Пт авг 31, 2012 01:04:30
Sceam73
Наткнулся на проблему, которая совершенно не относиться ни к одному разделу электроники, Вообщем дело обстоит так, угол опережения, будит изменяться в зависимости от оборотов двигателя, Но вот в чем проблема, мне нужно высчитать, конкретно для моего двигателя(а двигатель иж ю5)!
Угол опережения програмно будит установлен как ЗАДЕРЖКА, тоесть мне нужно пересчитать, для диапазона оборотов от 1000, до 14000-16000, Может мне кто помоч ?
Длинна шатуна 125
Ход поршня 57.6
Радиус кривошипа 57.6/2=28.8
Re: Прошу помощи с программой на AVR
Добавлено: Пт авг 31, 2012 01:49:12
vitalik_1984
Вот же люди бывают.Так воз там и останется, если его постоянно в разные стороны тянуть.То си, то асм, смотрю еще и алгоритм билдер привели картинку.
1. нужно определить какой язык разработки.
2. нужно определить все таки что вы будете считать 2 мм или градусы, если градусы, то шатуны, поршни и всякая лабуда не повлияют на опережение.
Есть 360 градусов, есть время прохода этих градусов измеренное в тиках таймера.Делим тики на 360 и умножаем на (360 минус угол_опережения).
через полученное значение тиков делаем закрытие транзистора открывать можно на подходе по времени прикинуть когда нужно.
3.Если всегда считать задержку, то еще проще.Посчитали тики оборота, отняли от тиков нужную задержку, воспламенили.
Тем, что предыдущий оборот может немного отличаться от следующего пренебрегаем.
4.Чтобы считать задержку, нужно чтобы двигатель сделал оборот.А потом должен пройти еще один оборот, чтобы сделать искру.
Что то сомневаюсь, что ножкой можно удачно провернуть на два оборота двигатель.Если двигатель на втором обороте остановится, взрыв все равно произойдет, это не есть гут.Так что для запуска можно просто без опережения делать импульсы, а потом уже, когда есть данные для расчета делать как правильно.