Фуоз+lsd на AVR

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Фуоз+lsd на AVR

Сообщение Sceam73 »

Дело собственно вот в чем, решил я сделать определенную штуковину, которая имеет название ФУОЗ (автоматически настраивающийся угол опережения зажигания) для мотоцикла, и столкнулся с определенной проблемой, а именно написанием прошивки для него, добросовестно , неполенившись ознакомился с СИ, и даже написал пару незамысловатых программ, успешно вшив их в контроллер, но вот беда, немогу понять, как реализовать необходимые мне потребности программно! В просторах интернета, нашел человека, который сделал то же самое, только насколько я понял, делал все это на ассемблере, и бросив СИ, я побежал учить ассемблер, и тут получилась такая КАША, что аж голова закружилась, розтолкуйте мне пожалуйста, как это реализовать на СИ !

цитирую принцып работы устройства автора
"происходит постоянный опрос входов по замкнутому циклу с частотой 10000000 раз в секунду (кварц 10 МГц.). Как только сектор входит в датчик холла на одном из входов появляется сигнал, программа переходит в подпрограмму где подает питание на один из выходов и включает катушку какогото цилиндра, обнуляет счетный регистр таймера 1 и запускает сам таймер счетчик 1 с предделителем на 64, дожидается выхода сектора, как только он выйдет сигнал исчезает и число до которого досчитал счетчик копируется в двойной регистр X. (так измеряется частота вращения коленвала в данный конкретный момент, по длине импульса). Затем программа добавляет к значению Х регистр r2 (величину отставания, ниже рассмотрим откуда она берется) и ждет когда счетчик досчитает до величины Х, как только это произойдет процессор выключает катушку (происходит искра), выключает таймер счетчик 1, вычитает из Х - r2 (Х становиться таким как был до прибавления) и приступает к следующей, самой важной части: в зависимости от величины регистра X (длины импульса) вычисляет размер отставания для следующей вспышки и помещает его в регистр r2. Затем снова переходит в режим опроса входов. Как только сектор входит во второй датчик холла сигнал появляется на втором входе, программа снова включает уже вторую катушку, обнуляет регистр таймера 1, включает таймер 1 и ждет окончания импульса, по выходу сектора копирует число до которого успел досчитать счетчик в регистр X и прибавляет к нему r2, ожидая пока таймер досчитает до величины X (величина длины импульса с добавлением отставания момента зажигания от момента выхода сектора), как только он досчитает выключает катушку (искра), вычисляет величину отставания для следующей вспышке в зависимости от длинны импульса предыдущей."
Изображение

Ах да, чуть незабыл, автор использует 2 датчика холла, а я использую всего одну оптопару, что немного упрощает задачу, но темнемение, всеравно непредставляю как это реализовать!
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Прошу помощи с программой на AVR

Сообщение BOB51 »

оптрон в автотехнике не рекомендуется - много различных источников помех 8)
Реклама
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

BOB51 писал(а):оптрон в автотехнике не рекомендуется - много различных источников помех 8)

Оптрон ? Вы о чем ?
Аватара пользователя
mazda
Потрогал лапой паяльник
Сообщения: 382
Зарегистрирован: Сб фев 18, 2012 14:50:22

Re: Прошу помощи с программой на AVR

Сообщение mazda »

опиши СВОЮ задачу своими словами с чертежом.
я его в гугл на дрц прогнал, вы знаете, пи-када нет.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

Схематически примерно так
время которое мы считываем с таймера равняеться Т
оно считываеться каждый раз заного, при пропаже сигнала
включаем таймер (таймер считает момент от пропажи сигнала до его проявления)
в момент того как сигнал начинаеться, закрываем транзистор
останавливаем таймер, и записываем его в наше Т
как только сигнал пропадает открываем транзистор
запускаем таймер
и тут то начинаеться самое интерестное
По формуле N (Которой я пока не обладаю, но это не столь важно, я пока ее просто не искал)
мы вычесляем Т2 , выглядеть будит это примерно так Т2= Т-N
Для чего это делаеться, для того чтобы закрывать транзистор ДО появления сигнала, а размер этого ДО будит зависить насколько быстро прошел такт двигателя! Тоесть чем быстрее крутиться мотор, тем раньше будит происходить взрыв топлива!
Кстате, если кто то представляет, как все упростить, буду рад выслушать!

Привел пример, откудава береться и пропадает сигнал, стоит вот такая вот бабочка, и обыкновенная оптопара (фототранзистор-диод)
Схема не моя, а автора, моя будит отличаться лишь тем, что вместо датчика холла, будит оптопара, и питание микросхеммы у меня от lm2572t-5
Вложения
Схема 1 датчик.JPG
(97.08 КБ) 970 скачиваний
Moduljator.jpg
(20.73 КБ) 897 скачиваний
Реклама
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

И потихоньку пробую разобраться сам, вопросы по ходу моих разборов растут как грибы после дождя!
1)Какой командой включить таймер счетра тактов кварца ?
2)Какой командой считать показания с выше запущеного таймера?
3)Какой командой обнулить таймер
4)Какой фьюз нужно вписать что б подключить функцию таймера в ATmega8t-pu
5)Как задать дейтвие (когда таймер достигает Х значения то....)
пока что вродебы все, в основном вопросы обстоят по таймеру, потому что непосредственно с ним не работал!
Ах да, если в ATmega8 вшить фьюз использования кварца, то в программе уже ненужно указывать частоту ?
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помощи с программой на AVR

Сообщение Engineer_Keen »

1)В AVR таймер запускается когда ему задают делитель (прескалер), см биты CS регистров TCCR
2)"IN/LDS регистр,TCNT", в зависимости от конкретного таймера/контроллера, на Сях X=TCNT
3)OUT/STS TCNT,регистр (в котором 0), Си :TCNT=0;
4)фьюзы таймерами не управляет
5)использовать прерывание по совпадению, и в нем это действие задать
Что касается задания частоты кварца, то это зависит от того на чем пишется программа, бывает в настройках, бывает в тексте через какой-нибудь дефайн F=...
Это все есть в даже здешней обучалке, да и вообще, не мешало бы почитать какую-нибудь литературу, потому как судя по этим вопросам, дальше нужно будет целую статью по программированию AVR писать...
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

Большое спасибо за ответы, литературы уже вроди как начитался, разобрался с управлениями портов, условиями и тд и тп, Мне в данной статье важно лишь узнать, реально ли по моему принцыпу работы, сделать программу, или то что я хочу сделать возможно неосуществимо?
Ну и конечно же всплывающие вопросы буду задавать сдесь, в конце с меня отчет что да как получилось ) Грубо говоря, это будит мой 2й проект на микроконтроллере (после мегания светодиодом) :)))
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

прочитал статью про таймеры, мне их прийдеться использовать 2, один как счетчик для следующего такта, а один как счетчик для подачи сигнала зарание, но проблема в том, что там примеры на ассемблере, напишите пожалуйста 1-2 примера включения счетчиков с предделителем 64 на СИ с пояснением что, и за что отвечает, буду опираться от этих примеров!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помощи с программой на AVR

Сообщение Engineer_Keen »

Я вообще-то на Си не пишу :dont_know: Смотрите примеры, если там написано на асме:

Код: Выделить всё

LDI (регистр R16...R31),число
OUT РВВ,(регистр R16...R31) или STS РВВ,(регистр R16...R31)

то это равносильно коду на Си

Код: Выделить всё

РВВ=число

Ну а комментарии в примерах должны быть.
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

Cобственно дело двинулось, уже в голове представляю наброски программы, каша осталась только с регистрами МК, вот еще с ними розберусь, и буду уже пробовать что то творить, на данный момент вроди бы все, если еще какие вопросы появяться, подниму тему из бездны!
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

До первого вопроса, на который ненашел ответа, вытянул недолго, у меня непонятка с частотой обновления дисплея, может ли дисплей обновляться чаще чем раз в 1 секунду ? (где только не лазил визде писали что 1с ) или это просто такие требования у людей ? И если можно поставить обновление быстрее, то как частота обновления повлияет на работу мк ?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помощи с программой на AVR

Сообщение Engineer_Keen »

Чет непонятно, откуда тут дисплей взялся... Если дисплей ЖК со своим контроллером - то его нужно обновлять с такой частотой, с какой частотой нужно изменять на нем информацию. Если это светодиодный индикатор с динамической индикацией, то частоту обновления (циферок, а не самой информации) нужно делать от 50-100 Гц.
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

Собственно для чего я все это переписываю с 0, у меня веть есть готовая прошивка на ассемблере, и я мог бы ее вшить, но я хочу немного подстроить опережение конкретно под свой двигатель, а так же подключить ЛСД, для вывода текущих оборотов, и угла опережения(на данный момент) почему раньше не писал про слд, потому что вопросов по его инициализации небыло, и с выводом информации тоже, поэтому и так сложную схему не стал усложнять еще и лсд!
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Прошу помощи с программой на AVR

Сообщение Engineer_Keen »

По-русски тогда все-таки ЖК, а не лсд, лсд - это вообще из другой области :)))
Смысла быстро обновлять информацию именно на ЖК-дисплее нет, цифры будут просто сливаться, поэтому для него 1 секунда - обычное значение, ну минимум 1/4 секунды. Раз используется дисплей (а то еще и кнопочки - потом, для изменения угла), то имеет смысл перерисовать схему с учетом этого, а уже потом за программу браться.
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

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

Кнопочки и лсд, это как дополнительный обвес, его я смогу уже сделать и сам, тоесть допаять на ножки мк это непроблема, да и ПОПРАВИТЬ код гораздо проще чем писать его с 0, поэтому, и обращаюсь суда именно для помощи написания самой сложной на мой взгляд части программы, тоесть непосредственно самого опережения!
А по поводу жки, для меня 1/4 секунды, гораздо больше подходит нежели 1 секунда!
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Прошу помощи с программой на AVR

Сообщение phanis »

Может не совсем в тему, попробуйте проще для начала, поджигать за 1,5-2 мсек до ВМТ.
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

phanis писал(а):попробуйте проще для начала, поджигать за 1,5-2 мсек до ВМТ.

такую программу я в силах написать, но толка от нее будит абсолютно 0, вопрос почему ? Да потому что обыконвеннное зажигание механическим образом ставиться 2-2.8 мм до вмт) Тогда присутствие микроконтроллера в этой цепочке станет просто Глупо! Облазив чательно просторы интернета, всетаки нарыл я исходники под АВР на с++(есть в интернете добрые люди), Немного поковыряв их, я понял, что процесс сложнее, чем я думал! Там не обошлось без кинематики, тобишь (длинна шатуна, радиус кривошипа и тд и тп, к счастью для меня с точными науками я розбераюсь лучше чем с гуманитарными :))) ) Вообщем думаю дня так через 3, предоставлю результат, с подключенным ЛСД(и возможно даже кнопочками) для отображение текущих оборотов двигателя, и уоз!
Аватара пользователя
Sceam73
Встал на лапы
Сообщения: 86
Зарегистрирован: Вт авг 28, 2012 21:07:09

Re: Прошу помощи с программой на AVR

Сообщение Sceam73 »

Наткнулся на проблему, которая совершенно не относиться ни к одному разделу электроники, Вообщем дело обстоит так, угол опережения, будит изменяться в зависимости от оборотов двигателя, Но вот в чем проблема, мне нужно высчитать, конкретно для моего двигателя(а двигатель иж ю5)!
Угол опережения програмно будит установлен как ЗАДЕРЖКА, тоесть мне нужно пересчитать, для диапазона оборотов от 1000, до 14000-16000, Может мне кто помоч ?
Длинна шатуна 125
Ход поршня 57.6
Радиус кривошипа 57.6/2=28.8
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Прошу помощи с программой на AVR

Сообщение vitalik_1984 »

Вот же люди бывают.Так воз там и останется, если его постоянно в разные стороны тянуть.То си, то асм, смотрю еще и алгоритм билдер привели картинку.

1. нужно определить какой язык разработки.
2. нужно определить все таки что вы будете считать 2 мм или градусы, если градусы, то шатуны, поршни и всякая лабуда не повлияют на опережение.
Есть 360 градусов, есть время прохода этих градусов измеренное в тиках таймера.Делим тики на 360 и умножаем на (360 минус угол_опережения).
через полученное значение тиков делаем закрытие транзистора открывать можно на подходе по времени прикинуть когда нужно.

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

4.Чтобы считать задержку, нужно чтобы двигатель сделал оборот.А потом должен пройти еще один оборот, чтобы сделать искру.
Что то сомневаюсь, что ножкой можно удачно провернуть на два оборота двигатель.Если двигатель на втором обороте остановится, взрыв все равно произойдет, это не есть гут.Так что для запуска можно просто без опережения делать импульсы, а потом уже, когда есть данные для расчета делать как правильно.
В поисках истины человек развивается.
Ответить

Вернуться в «Периферия»