Блок управления форсунками (помогите с алгоритмом)
|
|
Володимир |
Дата: Вт, 02.12.2014, 18:21 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Помогите с алготитмом реализации такой задачи.
Хочу сделать для автомобиля блок управления газовыми форсунками на микроконтролере PIC18F2550. Нужно реализовать четыре независимых входа, и четыре независимых выхода. На каждый вход будет приходить сигнал от бензиновой форсунки в виде логической еденицы длительностю 3-30 мс. Нужно в момент поступления сигнала на вход, подать на выход сначала на время 2,5 мс логическую еденицу для открытия газовой форсунки, а потом подавать сигнал ШИМ для удержания форсунки в открытом состоянии до окончания наличия сигнала на входе. Чето никак не могу придумать как поделить виходной сигнал на (2,5 мс лог.ед)+шим.
В перспективе развития проэкта планируется обработка сигналов АЦП и обмен по апаратному компорту или ЮСБ с комп"ютером.
|
|
|
|
ivan_fd |
Дата: Вт, 02.12.2014, 19:17 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата ПОМОГИТЕ С АЛГОРИТМОМ Алгоритм Вы уже написали, Вам нужен код. Нужно пробовать, этот PIC может не потянуть 4 ШИМ.
|
|
|
|
xvovanx |
Дата: Вт, 02.12.2014, 22:56 | Сообщение # 3 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
328
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 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 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
328
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
Цитата Володимир ( ) Подскажите по такому вопросу. Контролер PIC16F876A, если я на порте RC2/CCP1 включу ШИМ, могу ли я использовать порт RC1/CCP2 в качестве выхода. В даташите вроде ограничений на счет этого не нашел У этого проца два независимых ШИМа, только частота одинакова. Можно использовать с разной скважностью независимо.
|
|
|
|
Володимир |
Дата: Пн, 22.12.2014, 09:04 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Просвятите в таком нюансе. Для отсчета времени хочу использовать 16-ти битный таймер, но один человек который работает с контролерами Амега предупредил меня о таком нюансе.
Цитата К стати не зыбывай если что при работе с 2-х байтовыми переменными нужно запрещать прерывания, чтоб не случилось что одна функция взяла старший бит, следущим тактом другая функция изменила младший и первой функции к примеру может достатся число вместо 255 или 256 число 0. Справедливо ли такое для контролеров ПИК, или ПротонБейсик знает о таком нюансе и знает как это обойти.
|
|
|
|
dimitriy-bc |
Дата: Пн, 22.12.2014, 09:46 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Лучше прерывания запретить. Я делаю именно так. Или если переменная напрямую связанна с прерываниями, действия с ней поместить в прерывания.
Сообщение отредактировал
dimitriy-bc - Пн, 22.12.2014, 09:50
|
|
|
|
Володимир |
Дата: Вт, 30.12.2014, 15:39 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 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 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Володимир, Это все можно посмотреть в Протеусе, я про сколько тактов.
А на счет, как лучше, то сначала внимательно изучите что делает оператор Div32, и над какими числами он работает. И что по Вашему делает выражение X0=X3>>1024 ?
|
|
|
|
Володимир |
Дата: Ср, 31.12.2014, 11:42 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Цитата ivan_fd ( ) И что по Вашему делает выражение X0=X3>>1024 ? Извиняюсь, исправил, должно быть X0=X3>>2 тоесть делим на 1024
|
|
|
|
dimitriy-bc |
Дата: Ср, 31.12.2014, 18:48 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Точно, томрможу что-то, нужно смещать на 10, но вопрос всеравно остается окрытым.
|
|
|
|
dimitriy-bc |
Дата: Пт, 02.01.2015, 12:52 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
150
Замечания:
±
На сайте с 19.03.2012
Статус:
Offline
|
Володимир, если Вас интересует время, то в программе назначаете одну ногу как выход. Устанавливаете на ней единицу перед началом действия, и в ноль по окончании действия. Запускаете протеус. К указанной ноге подключаете осциллограф и определяете затраченное время по осциллографу. Как-то так.
|
|
|
|
ivan_fd |
Дата: Пт, 02.01.2015, 15:47 | Сообщение # 14 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Я уже говорил, что в Протеусе все можно посмотреть. И не надо назначать никакие ноги, если это одна операция. И так видно за какое время она исполняется.
А на счет, что лучше, сдвиг будет работать быстрее, чем деление - это можно посмотреть в самом ассемблерном файле.
|
|
|
|
swq25 |
Дата: Чт, 08.01.2015, 11:14 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
16
Замечания:
±
На сайте с 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
|
|
|
|