Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Блок управления форсунками (помогите с алгоритмом) (Блок управления форсунками (помогите с алгоритмом))
Блок управления форсунками (помогите с алгоритмом)
Володимир Дата: Вт, 02.12.2014, 18:21  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Помогите с алготитмом реализации такой задачи.

Хочу сделать для автомобиля блок управления газовыми форсунками на микроконтролере PIC18F2550. Нужно реализовать четыре независимых входа, и четыре независимых выхода. На каждый вход будет приходить сигнал от бензиновой форсунки в виде логической еденицы длительностю 3-30 мс. Нужно в момент поступления сигнала на вход, подать на выход сначала на время 2,5 мс логическую еденицу для открытия газовой форсунки, а потом подавать сигнал ШИМ для удержания форсунки в открытом состоянии до окончания наличия сигнала на входе. Чето никак не могу придумать как поделить виходной сигнал на (2,5 мс лог.ед)+шим.

В перспективе развития проэкта планируется обработка сигналов АЦП и обмен по апаратному компорту или ЮСБ с комп"ютером.
ЯНДЕКС Дата: 02.12.2014
ivan_fd Дата: Вт, 02.12.2014, 19:17  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 910
Репутация: 50   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline


Цитата
ПОМОГИТЕ С АЛГОРИТМОМ
  Алгоритм Вы уже написали, Вам нужен код. wink
Нужно пробовать, этот PIC может не потянуть 4 ШИМ.


Меня все время преследуют умные мысли...но я быстрее!!!
xvovanx Дата: Вт, 02.12.2014, 22:56  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 276
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Володимир ()
а потом подавать сигнал ШИМ для удержания форсунки в открытом состоянии

А обязателен ли именно ШИМ? Может для удержания хватит и меандра со скважностью 1:1, 1:2 или скажем 1:4. Я понимаю в данном случае изменять скважность (ШИМ) не нужно. А то 4 канала ШИМа сильно напрягут проц, а меандр выдать (в цикле 1/0) сможет даже самый "деревянный" проц.

Сообщение отредактировал xvovanx - Вт, 02.12.2014, 22:57
Володимир Дата: Ср, 10.12.2014, 12:42  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Цитата ivan_fd ()
Нужно пробовать, этот PIC может не потянуть 4 ШИМ.
В этом проце только два канана ШИМ. По ходу вопрос, если на одном порте включить апаратный ШИМ, то по обращению к даному порту мы будем знать в кадый момент какое значение на даном порте, тоесть ноль или еденица. Чтоби порт служил типа задающим генератором, а потом в цикле присваивать значение этого порта другому порту.
Цитата xvovanx ()
А обязателен ли именно ШИМ? Может для удержания хватит и меандра со скважностью 1:1, 1:2 или скажем 1:4. Я понимаю в данном случае изменять скважность (ШИМ) не нужно. А то 4 канала ШИМа сильно напрягут проц, а меандр выдать (в цикле 1/0) сможет даже самый "деревянный" проц.
Да я в принципе изначально так и думал реализовивать задачу. Тоесть организовать цикл в которий вставить паузу размером скажим одна микросекунда для отсчета времени, а потом при поступлении сигнала на вход увеличивать значение переменной до 2500 подавая в это время на выход подавать лог еденицу, а по достижению значения 2500 програмно имитировать на выходе сигнал шим пока на входе присутвует сигнал.

Добавлено (10.12.2014, 12:42)
---------------------------------------------
Подскажите по такому вопросу. Контролер PIC16F876A, если я на порте RC2/CCP1  включу ШИМ, могу ли я использовать порт RC1/CCP2 в качестве выхода. В даташите вроде ограничений на счет этого не нашел, но на всякий пожарный спрошу.

xvovanx Дата: Ср, 10.12.2014, 17:06  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 276
Репутация: 12   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Володимир ()
Подскажите по такому вопросу. Контролер PIC16F876A, если я на порте RC2/CCP1  включу ШИМ, могу ли я использовать порт RC1/CCP2 в качестве выхода. В даташите вроде ограничений на счет этого не нашел

У этого проца два независимых ШИМа, только частота одинакова. Можно использовать с разной скважностью независимо.
Володимир Дата: Пн, 22.12.2014, 09:04  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Просвятите в таком нюансе. Для отсчета времени хочу использовать 16-ти битный таймер, но  один человек который работает с контролерами Амега предупредил меня о таком нюансе.


Цитата
К стати не зыбывай если что при работе с 2-х байтовыми переменными нужно запрещать прерывания, чтоб не случилось что одна функция взяла старший
бит, следущим тактом другая функция изменила младший и первой функции к
примеру может достатся число вместо 255 или 256 число 0.

Справедливо ли такое для контролеров ПИК, или ПротонБейсик знает о таком нюансе и знает как это обойти.
dimitriy-bc Дата: Пн, 22.12.2014, 09:46  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Лучше прерывания запретить. Я делаю именно так. Или если переменная напрямую связанна с прерываниями, действия с ней поместить в прерывания.
Сообщение отредактировал dimitriy-bc - Пн, 22.12.2014, 09:50
Володимир Дата: Вт, 30.12.2014, 15:39  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

От прериваний отказался. Подскажите, сколько нужно тактов МК чтобы умножить 32-битное число на 16-ти битное.

В плане скорости как лучше поступить?

Dim X0 As Word
Dim X1 As Word
Dim X2 As Word
Dim X3 As DWord
..........
X3=X1*X2
X0=X3>>10

Или

Dim X0 As Word
Dim X1 As Word
Dim X2 As Word
Dim X3 As Word
..........
X3=X1*X2
X0=Div32 1024

Сообщение отредактировал Володимир - Чт, 01.01.2015, 11:57
ivan_fd Дата: Ср, 31.12.2014, 11:19  |                                                                                                                Сообщение # 9
Группа: Модераторы
Ранг:  Специалист
Сообщений: 910
Репутация: 50   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Володимир, Это все можно посмотреть в Протеусе, я про сколько тактов.

А на счет, как лучше, то сначала внимательно изучите что делает оператор Div32,
и над какими числами он работает. 
И что по Вашему делает выражение X0=X3>>1024 ?


Меня все время преследуют умные мысли...но я быстрее!!!
Володимир Дата: Ср, 31.12.2014, 11:42  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Цитата ivan_fd ()
И что по Вашему делает выражение X0=X3>>1024 ?
Извиняюсь, исправил, должно быть X0=X3>>2 тоесть делим на 1024
dimitriy-bc Дата: Ср, 31.12.2014, 18:48  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Цитата Володимир ()
Извиняюсь, исправил, должно быть X0=X3>>2 тоесть делим на 1024
 X0=X3>>1 как по мне, это делим на 2 
 X0=X3>>2 делим на 4 
 X0=X3>>3 делим на 8
Володимир Дата: Чт, 01.01.2015, 11:58  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 85
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Точно, томрможу что-то, нужно смещать на 10, но вопрос всеравно остается окрытым.
dimitriy-bc Дата: Пт, 02.01.2015, 12:52  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Володимир, если Вас интересует время, то в программе назначаете одну ногу как выход. Устанавливаете на ней единицу перед началом действия, и в ноль по окончании действия. Запускаете протеус. К указанной ноге подключаете осциллограф и определяете затраченное время по осциллографу. Как-то так.
ivan_fd Дата: Пт, 02.01.2015, 15:47  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 910
Репутация: 50   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Я уже говорил, что в Протеусе все можно посмотреть. И не надо назначать никакие ноги, если это одна операция. И так видно за какое время она исполняется.

А на счет, что лучше, сдвиг будет работать быстрее, чем деление - это можно посмотреть в самом ассемблерном файле.


Меня все время преследуют умные мысли...но я быстрее!!!
swq25 Дата: Чт, 08.01.2015, 11:14  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 0   ±
Замечания:   ±
На сайте с 09.11.2011

Статус: Offline

Позвольте  вставлю свои пять копеек , т.к. тема пересекается с моими интересами.
1.Процессор я бы выбрал например из семейства 18F47J53 - четыре таймера\8-16 бит\ ,
семь! PWM, UART , USB  на борту .
2.Связь с компом через RS-485 , т.е со стороны пика - например ST485 , со стороны компа адаптер USB-RS485 - таким образом решить комплексную проблему : длина шнурка - скорость обмена - помехи .
Танцы с   USB перенести на самый последний этап разработки .
3. Использовать только аппаратный шим ,  т.к. во время программного процессор ничего больше не делает.
4. Прерывания надо использовать ,-   реальные события необходимо вовремя отрабатывать.

Хотелось бы выяснить алгоритм работы устройства и перейти к вопросам проектирования, а вопросы  смещения и деления сейчас не к месту.

Сообщение отредактировал swq25 - Пт, 09.01.2015, 05:25
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Блок управления форсунками (помогите с алгоритмом) (Блок управления форсунками (помогите с алгоритмом))
Страница 1 из 212»
Поиск: