• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
alvikagal

2-Х Канальный Коммутатор На Pic12F675

458 сообщений в этой теме

alvikagal    37

Сразу скажу, что собирать это устройство нельзя, т.к. нет для него рабочей прошивки. Она в разработке.

Если когда-то появится рабочий вариант, то он будет добавлен в это сообщение с подписью "ПРОШИВКА" и первое предложение будет удалено.

Так, что, если видите красный текст выше, пока не нужно задавать вопросы - "А где рабочая прошивка"?

Решил в целях познания ассемблера написать (громко сказано) программу для 2-х канального коммутатора.

Когда решил перейти на статическую раздачи искры, то сталкнулся с проблемой выбора коммутатора.

Был куплен 133.3774-03 и в дальнейшем переделан на 133.3774-02, но не понравилась его работа и нагрев.

Для начала опишу требования к программе и накидаю начальный алгоритм.

Со временем возможно всё в корне поменяется.

Требования к проекту:

1. Коммутатор должен работать как одноканальный и двухканальный.

2. Схема с минимальным кол-вом деталей и проста к повторению.

3. Есть 2 варианта работы программы. 1 - с обратной связью по току; 2 - зависимость накопления от напряжения борт.сети.

1-ый вариант мне нравится больше.

Алгоритм:
1. Настройка МК.
2. П/п ПУСК. Ждём сигнал на входах каналов.
3. Начинаем отсчёт периода и таймер накопления 6мс. и затем искрим в том же канале.
(будет задержка искры при пуске на 30об. - 0,5гр. на 370 - 6,6гр.)
4. Каждый цикл проверяем какие обороты, если больше 370, то переходим подпрограмму 370.
5. П/п работа. Начинаем считать длительность периода для следующей искры.
6. Включаем таймер накопления 4,5мс. (чтобы не было пропуска искры) и искрим в том же канале.
7. Вычитаем из предидущего периода длительность накопления которое было 4,5мс. и длительность накопления 4,5мс, которое будет
8. Включаем таймер перед накоплением.
9. Включаем таймер накопление 4,5мс. и с каждым отсчётом таймера ждём сигнал на входах каналов.
10. Искрим когда пришёл сигнал.
Когда начал писать программу, то делал её с фиксированым накоплением и сталкнулся с проблеммой при ускорении.
За полуоборот коленвала скорость вращения меняется и время накопления становится не 4,5мс. а меньше или даже не успевает включаться накопление.
Поэтому решил, что с обратной связью по току, можно будет внести поправку на ускорение.
Алгоритм с 5 пункта тогда должен быть таким:
5. П/п 370. Начинаем считать длительность периода для следующей искры.
6. Включаем таймер накопления 4,5мс. (чтобы не было пропуска искры) и искрим в том же канале.
7. Вычитаем из предидущего периода длительность накопления которое было 4,5мс. и длительность накопления 4,5мс, которое будет.
8. Включаем таймер перед накоплением.
9. Включаем накопления и включаем 2-ой счётчик "длителность накопления" ждём сигнал на входах каналов и контролируем ток.
10. Искрим когда пришёл сигнал или ток поднялся до 8А.
11. Если входной сигнал пришёл раньше чем ток поднялся, то включаем 2-ой счётчик "ускорение/замедление" и выставляем флаг "ускорение/замедление".
12. В следующем периоде проверяем флаг "ускорение/замедление" вычитаем 2-ой счётчик "ускорение/замедление".
13. Переходим в п/п РАБОТА.
11. Если ток поднялся раньше чем пришёл сигнал, то искрим и включаем 2-ой счётчик (счётчик поправки на ускорение/замедление) и убираем флаг.
12. В следующем периоде проверяем флаг ускорение/замедление и прибавляем 2-ой счётчик.
13. Переходим в п/п РАБОТА.
14. П/п РАБОТА. Начинаем считать длительность периода для следующей искры.
15. Вычитаем из предидущего периода "длителность накопления".
16. Включаем таймер перед накоплением.
17. Включаем таймер "длителность накопления" и с каждым отсчётом таймера ждём сигнал на входах каналов и контролируем ток.
18. Искрим когда пришёл сигнал или ток поднялся до 8А.
19. Если входной сигнал пришёл раньше чем ток поднялся, то включаем 2-ой счётчик "ускорение/замедление" и выставляем флаг "ускорение/замедление".
20. В следующем периоде проверяем флаг ускорение/замедление вычитаем 2-ой счётчик "ускорение/замедление".
19. Если ток поднялся раньше чем пришёл сигнал, то искрим и включаем 2-ой счётчик "ускорение/замедление" и убираем флаг "ускорение/замедление".
20. В следующем периоде проверяем флаг "ускорение/замедление" и прибавляем 2-ой счётчик "ускорение/замедление".

За отправную точку в схеме, хочу повторить схему знаменитого всем автора Шкильменского Владимира.

Это его разработка натолкнула меня на создание коммутатора.

Владимиру огромное спасибо за труд вложенный в области зажигания на МК.

В дальнейшем буду выкладывать куски подпрограмм для обозрения и критики.

Потом с этих подпрограм будет сложена программа.

Надеюсь, что этот проект будет доведён до конца, если не мной, то кем нибудь.

Напомню ещё раз, что этот проект в целях познания программирования на ассемблере, поэтому буду рад любой Вашей помощи.

Схема:

post-149732-0-45599800-1369058125_thumb.gif

Модель:

675U_Kom.rar

Даташит на русском к PIC12F675:

PIC12F629_675.pdf

Расположение выводов:

Проект для MPLAB IDE:

675U_proekt.rar

Вот пару ссылок для ознакомления с подобным.

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

http://mpsz.ru/forum...?do=file&id=680

обсуждение тут: http://mpsz.ru/forum...p?t=643&page=26

Ну что, поехали (не на этом коммутаторе пока)???!!! ;)

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
alvikagal    37

Начало программы:

list p=12f675
#include <p12f675.inc>

__CONFIG _CP_OFF & _CPD_OFF & _WDT_ON & _PWRTE_ON & _BODEN_ON & _INTRC_OSC_NOCLKOUT
;====================================================
#DEFINE OUT_1 GPIO,0 ;ВЫХОД 1.4
#DEFINE OUT_2 GPIO,1 ;ВЫХОД 2.3
#DEFINE IN_1 GPIO,5 ;ВХОД _1
#DEFINE IN_2 GPIO,4 ; ВХОД _2
#DEFINE BANK0 BCF STATUS,RP0 ;ВКЛЮЧЕНИЕ БАНКА 0
#DEFINE BANK1 BSF STATUS,RP0 ;ВКЛЮЧЕНИЕ БАНКА 1
#DEFINE TMR1_ON BSF T1CON,0 ;
#DEFINE TMR1_OF BCF T1CON,0 ;
;================================================
;Определение блока констант.
CBLOCK 0X20
;================================================
Period_Lo ;Текущий период
Period_Hi
PPeriod_Lo_ ;Предидущий период
PPeriod_Hi_
ZADER_Lo ;Таймер перед накоплением
ZADER_Hi
FLAG_
T_NAK_Lo ;Время накопления
T_NAK_Hi
; FLG ;вспом флаги "1/0"
;0 -;ожидание искры/искра была
;1 - пром/самодел ДАД
;2 - рабочие/пусковые обороты
;3 - цикл искрения закончился/нет
;4 - +/- термокоррекция
;5 - +/- октанкоррекция
;6 - замедление/ускорение
;7 - оборот чётный/нечётный
;===============================================
ENDC
;================================================
; Program
Org 0x0000
GOTO START
GOTO START
GOTO START
GOTO START
; INterrupt-Vector
Org 0x0004
RETURN
;========================================================
;ПЕРВОНАЧАЛЬНАЯ НАСТРОЙКА
START
BANK0
CLRF GPIO ;сброс порта
MOVLW B'00000111'
MOVWF CMCON
MOVLW b'00000001' ;такт ТМР1 - 1мксек
MOVWF T1CON
BANK1
MOVLW B'00111100' ;GP2 ,GP4 - ВХОД; GP0,GP1- ВЫХОД
MOVWF TRISIO
MOVLW B'00000100' ;GP0, GP1, GP5, GP4 - ЦИФРОВОЙ IN / OUT
MOVWF ANSEL
CLRWDT ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
CLRF TMR0 ;ОЧИСТКА TMR0
MOVLW B'11101010' ;КОЭФ. ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ 1:4 (Тwdt =18мс*4)
MOVWF OPTION_REG ;ПРЕДДЕЛИТЕЛЬ ПОДКЛЮЧЕН К WDT
CALL 3FF ;КАЛИБРОВКА ТАКТОВОГО ГЕНЕРАТОРА
MOVWF OSCCAL
GOTO Poisk

Настройку МК и переменные немного позже нужно будет подправить.

Оставил TMR0 его планиру использовать для счётчика "ускорение/замедление", но нужно будет с ним разобраться.

П/программа пуска.

Ждём спад в общем канале:

Poisk
CLRWDT
BTFSC IN_1
GOTO $-1
BANK0
CLRF TMR1H;сброс счётчика периода
CLRF TMR1L
CLRWDT
BTFSC IN_2
GOTO Channel_1
GOTO Channel_2

Я так думаю, что лучше для подсчёта периода использовать TMR1?

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sachma2009    58

Че то пока одни непонятки. Нужно бы хоть вкратце: назначение. Что хотим заполучить?

Для чего на входе сигналы складываем, чтобы на выходе их опять разделить?

Изменено пользователем sachma2009

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    155

Здравствуйте все!

Не ожидал новой темы, право слово. Но раз уж началась, покашляю немного и здесь.

Есть пару предложений по схеме.

А именно, сделать раздельные входы для каждого из каналов, раз уж коммут позиционируется как двухканальный.

Второе предложение: уменьшить сопротивление датчика тока катухи хотя бы вдвое. Что благотворно скажется на холодном зимнем пуске при слабом аккуме, когда каждый вольт батареи на счету. А на ДТ при 7...8А тока завалится 0,7...0,8В - многовато, как с моей колокольни. Мысль и предложение, в принципе, не моё. Но я ёё поддерживаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

При пуске не планировал вообще контролировать ток. Просто нормированное накопление 6мс. до 370 оборотов. Ток будет даже немного меньше, чем 8А раза в 2 наверно.

С пуском наверно будет самое сложно разобраться, поэтому решил пока его не трогать, а сразу перейти к рабочей программе. Возможно делаю не правильно, но считатю, что главное разобраться с ускорением и с замедлением. Тут для меня появились сложности.

Насчёт каналов, просто у меня эта схема собрана и на ней смогу проверять на авто.

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

Сообщении №2 подправил.

А именно, сделать раздельные входы для каждого из каналов, раз уж коммут позиционируется как двухканальный.

Я думал над таким вариантом и пришёл к выводу, что код программы будет короче, если объединить каналы и считать только в одном.

Второе предложение: уменьшить сопротивление датчика тока катухи хотя бы вдвое. Что благотворно скажется на холодном зимнем пуске при слабом аккуме, когда каждый вольт батареи на счету. А на ДТ при 7...8А тока завалится 0,7...0,8В - многовато, как с моей колокольни. Мысль и предложение, в принципе, не моё. Но я ёё поддерживаю.

До какого сопротивления уменьшить? 0,01Ом.?

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sachma2009    58
До какого сопротивления уменьшить? 0,01Ом.?

А почему не применять (и в подобных схемах) стандартные шунты?

На измерительных выводах падение U при номинальном токе всегда будет 75 mv.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

На мой взгляд схема очень проста, можно собрать даже навесом, лишь бы МК был жёстко закреплён.

Не хотелось бы усложнять.

Нужно сначала попробовать отточить программу, посмотреть, что из этого выйдет, если будет стоять преграда схемотехники, то тогда уже изменять схему.

Токоизмерительное сопротивление можно будет и позже поменять на меньше, чтобы улучшить программу, но сейчас пока не чего даже на схему прошить и проверить.

Нужны мысли по самой программе и алгоритму.

Подправить выложенный код настройки МК и поиска спада, чтобы можно было идти дальше.

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    155

До какого сопротивления уменьшить? 0,01Ом.?

Не-е, я ж писал " вдвое", то есть до 0,05ом. При таком сопротивлении падение на ДТ будет не таким уж большим. И в то же время эту напругу можно будет отследить то ли АЦП, то ли компаратором.

Кстати, ещё одно замечание. Я его нигде не высказывал, но раз уж открылась тема целевая - высскажу здесь. Формировать нормированное время накопления не совсем айс, особенно для низкоомных катух и контролировать напругу на ДТ посредством АЦП (относительно низкоскоростное устройство в среднем семействе ПИК) тоже не внушает недоверия - нужно угадать с моментом замера.

Насчёт стандартных шунтов. Падение на нём совсем уж маловато. При 10-амперном шунте на нём завалится 75мВ, так? Дискретность АЦП при 8-битном замере = 0, 0195В. Таким образом, при 10А тока АЦП покажет 3...4 единицы/дискреты. Плюс/минус ошибки при замере - в результате выходная длительность может значительно исказиться. Конечно, можно использовать все 10-бит АЦП, тогда прога "растянется".

В общем, надо анализировать и размышлять.

Изменено пользователем IGO61

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sachma2009    58

Насчёт стандартных шунтов. Падение на нём совсем уж маловато. При 10-амперном шунте на нём завалится 75мВ, так?

В общем, надо анализировать и размышлять.

Так. Это если размышлять в привычном (для шунта) применении. У нас все во много (по времени) раз короче,

поэтому и шунты нужно применять с перегрузом в два, а то и в четыре раза и больше. Не (допустим) 100А, а только 10А.

Соответственно и падение на нем получится в два, в четыре или в десять раз больше .

Изменено пользователем sachma2009

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Вот в принципе программа пуска:

list	 p=12f675		
#include <p12f675.inc>	

__CONFIG _CP_OFF & _CPD_OFF & _WDT_ON & _PWRTE_ON & _BODEN_ON & _INTRC_OSC_NOCLKOUT
;====================================================
#DEFINE OUT_1 GPIO,0 ;ВЫХОД 1.4
#DEFINE OUT_2 GPIO,1 ;ВЫХОД 2.3
#DEFINE IN_1 GPIO,5 ;ВХОД _1
#DEFINE IN_2 GPIO,4 ; ВХОД _2
#DEFINE BANK0 BCF STATUS,RP0 ;ВКЛЮЧЕНИЕ БАНКА 0
#DEFINE BANK1 BSF STATUS,RP0 ;ВКЛЮЧЕНИЕ БАНКА 1
#DEFINE TMR1_ON BSF T1CON,0 ;
#DEFINE TMR1_OF BCF T1CON,0 ;
;================================================
;Определение блока констант.
CBLOCK 0X20
;================================================
Period_Lo ;Текущий период
Period_Hi
PPeriod_Lo_ ;Предидущий период
PPeriod_Hi_
ZADER_Lo ;Таймер перед накоплением
ZADER_Hi	
FLAG_
T_NAK_Lo ;Время накопления
T_NAK_Hi
; FLG ;вспом флаги "1/0"
;0 -;ожидание искры/искра была
;1 - пром/самодел ДАД
;2 - рабочие/пусковые обороты
;3 - цикл искрения закончился/нет
;4 - +/- термокоррекция
;5 - +/- октанкоррекция
;6 - замедление/ускорение
;7 - оборот чётный/нечётный
;===============================================
ENDC
;================================================
; Program
Org 0x0000
GOTO START
GOTO START
GOTO START
GOTO START
; INterrupt-Vector
Org 0x0004
RETURN
;========================================================
;ПЕРВОНАЧАЛЬНАЯ НАСТРОЙКА
START
BANK0
CLRF GPIO	 ;сброс порта
MOVLW B'00000111'
MOVWF CMCON
MOVLW b'00000001' ;такт ТМР1 - 1мксек
MOVWF T1CON
BANK1
MOVLW B'00111100' ;GP2 ,GP4 - ВХОД; GP0,GP1- ВЫХОД
MOVWF TRISIO
MOVLW B'00000100' ;GP0, GP1, GP5, GP4 - ЦИФРОВОЙ IN / OUT
MOVWF ANSEL
CLRWDT	 ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
CLRF	 TMR0				 ;ОЧИСТКА TMR0
MOVLW B'11101010'	 ;КОЭФ. ДЕЛЕНИЯ ПРЕДДЕЛИТЕЛЯ 1:4 (Тwdt =18мс*4)
MOVWF OPTION_REG ;ПРЕДДЕЛИТЕЛЬ ПОДКЛЮЧЕН К WDT
CALL	 3FF					 ;КАЛИБРОВКА ТАКТОВОГО ГЕНЕРАТОРА
MOVWF OSCCAL
GOTO Poisk
;*************************************************************************
;настройка после всех видов сброса контроллера			
; режим запуска двигателя и выход двигателя в режим менее 450 об/мин
;*************************************************************************	
Poisk
CLRWDT
BANK0
CLRF TMR1H;сброс счётчика периода
CLRF TMR1L
BTFSC IN_1
GOTO $-1
BTFSC IN_2
GOTO Channel_1
GOTO Channel_2
Channel_2
BSF OUT_2
BANK0
CLRF TMR1H;сброс счётчика периода
CLRF TMR1L
TMR1_ON
CLRWDT
MOVLW 0x09
MOVWF T_NAK_Hi
MOVWF T_NAK_Lo ; время накопления 4,5мс
DECFSZ T_NAK_Lo
GOTO $-1
DECFSZ T_NAK_Hi
GOTO $-3
BCF OUT_2
GOTO Poisk
Channel_1
BSF OUT_1
BANK0
CLRF TMR1H;сброс счётчика периода
CLRF TMR1L
TMR1_ON
CLRWDT
MOVLW 0x09
MOVWF T_NAK_Hi
MOVWF T_NAK_Lo ; время накопления 4,5мс
DECFSZ T_NAK_Lo
GOTO $-1
DECFSZ T_NAK_Hi
GOTO $-3
BCF OUT_1
GOTO Poisk
;++++++++++++++++++++++++
ORG H'03FF'
retlw H'C0'
ORG H'2100'
	 DE "2-х канальный коммутатор на PIC12F675 20.05.13 alvikagal с регулировкой тока "
	 END

Добавил в первый пост проект для MPLAB IDE.

Пока работает накопление 6мс. по спаду, т.е. задержка искры при пуске.

Игорь и все кто помогает советом, я Вас внимательно слушаю, просто пока направлен на внедрение алгоритма, который описал (он крутится в голове и его нужно реализовать, т.к. понимаю его) и не могу пока переключится на детальный разговор.

Теперь нужно написать п/программу работы.

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    155

Возможно я не прав, но я не встречал НШ меньше 10А. В случае 10-амперного стандартного шунта на нём и завалится 75мВ при 10 амперах.

Можно сделать "ход конём" - использовать НШ 10А, а АЦП перенастроить на "правое выравнивание", после замера считывать младший байт результата из МК, тогда дискретность будет в 4 раза выше. Не 0,0195В, а 0,004875мВ. А это уже кое-что. И точность не пострадает - ну это так мысли вслух, такого я ещё не пробовал с АЦП.

Изменено пользователем IGO61

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sachma2009    58

Есть и меньше 10А, но это не важно. Просто, в принципе, их можно применять даже с перегрузом.

Мощности рассеивания хватит выше крыши.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    155

По П/П пуска в №10.

Для перехода в рабочий режим нужно как-то сохранять измеренный период для его дальнейшей обработки. Пока таймер крутится "сам на себя", периодически сбрасываясь. Команда "GOTO Channel_2" - пустая, не несёт никакой смысловой и физической нагрузки, так как следом за ней и следует П/П "Channel_2".

Ещё одна "пустая команда" в настройках МК - "CLRF TMR0". Так как мы работаем в "Банке 1", то произойдёт очистка не таймера, а регистра "OPTION_REG". И сразу за этой командой следует процедура загрузки в тот же регистр "OPTION_REG" настроечной константы.

Пока как-то так. Не много критики с моей стороны?

Для компенсации выкладываю архив со своими наработками одноканального коммутатора из темы "ФУОЗ+ДПКВ". Там не всё, но кое-что.

675_kom.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

По П/П пуска в №10.

Для перехода в рабочий режим нужно как-то сохранять измеренный период для его дальнейшей обработки. Пока таймер крутится "сам на себя", периодически сбрасываясь. Команда "GOTO Channel_2" - пустая, не несёт никакой смысловой и физической нагрузки, так как следом за ней и следует П/П "Channel_2".

Да, я ещё добавлю команды сохранения счётчика TMR1 и проверку на обороты.

Просто пока проверял настройку МК и запуск программы.

Спасибо Игорь.

CLRF TMR0 можно удалить?

Я его в будущем хотел использовать как второй таймер, для ускорения/замедления.

Можно конечно и по одному таймеру считать вычитая разницу.

Посмотрел твой исходник, мне пока ещё сложно понимать не подписание команды.

Так что я долго вникать буду.

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Пока в пуске будет так:

Channel_1
BSF OUT_1
MOVF TMR1L,W;длительность периода
MOVWF Period_Lo ;сохранить в переменную
MOVF TMR1H,W
MOVWF Period_Hi
BANK0
CLRF TMR1H;сброс счётчика периода
CLRF TMR1L
TMR1_ON
CLRWDT
MOVLW 0x09
MOVWF T_NAK_Hi
MOVWF T_NAK_Lo ; время накопления 4,5мс
DECFSZ T_NAK_Lo
GOTO $-1
DECFSZ T_NAK_Hi
GOTO $-3
BCF OUT_1
GOTO Poisk

Изменено пользователем alvikagal

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    155

Если планируешь в дальнейшем использовать "таймер 0", команда очистки всё равно пустая. Причин две.

1).Команда " CLRF TMR0" находится в банке 1, а должна быть в нулевом.

2).Если TMR0 тактируется внутренним генератором, то таймер нельзя остановить - он считает постоянно. А перед началом замера в нужное время его можно сбросить/очистить. Вот тогда-то и надо ставить в/у команду.

Да, в моём исходнике коментов почти нет - это был промежуточный этап для сбора наработок. Чтоб можно было двигаться дальше.

Изменено пользователем IGO61

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Игорь, ты TMR1 сделал делитель 8

MOVLW B'00110100' ;ТАКТ ТМ1=Fcc/8

MOVWF T1CON

Я сделал 1:1

Счётчика TMR1 на малых оборотах не хватает. Если 1:1, то это 65535 мкс, а 30 оборотов - 1000мс.

Если брать делитель счётчика 1:8, то 524280 мкс.

Нужно флаг переполнения поднимать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Вернее проверять переполнение BTFSS PIR1,TMR1IF;переполн?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    155

Если при делителе 1:1 переполняется счётчик - сделай делитель побольше (максимум для ПИКа - 1:8). Но на 30об/мин таймер всё равно переполнится.

Флаг переполнения TMR1 поднимется сам при медленном вращении и переполнении счётчика. Его нужно обработать по своему усмотрению и перед началом следующего замера сбросить програмно (он сам не сбрасывается). Не сильно упирайся в 30об/мин - это жесткАч. Легче будет строить программу от примерно 60об/мин и выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Пока только таким образом получилось сохранять таймер и проверять обороты:

START
   BANK0
CLRF GPIO	   ;сброс порта
MOVLW B'00000111'
MOVWF   CMCON
MOVLW B'00110100' ;ТАКТ ТМ1=Fcc/8=8мкс
MOVWF T1CON
BANK1 
MOVLW B'00111100'   ;GP2 ,GP4 -  ВХОД;  GP0,GP1-  ВЫХОД
MOVWF TRISIO
MOVLW B'00000100'    ;GP0, GP1, GP5, GP4 -  ЦИФРОВОЙ   IN / OUT
MOVWF    ANSEL
CLRWDT    ;ОЧИСТКА ПРЕДДЕЛИТЕЛЯ И WDT
MOVLW B'10000011'   ; 
MOVWF OPTION_REG  ;
CALL	   3FF					   ;КАЛИБРОВКА ТАКТОВОГО ГЕНЕРАТОРА
MOVWF   OSCCAL
   BANK0
CLRF TMR1H ;сброс счётчика периода
CLRF TMR1L
TMR1_ON
GOTO Pusk
;*************************************************************************		  
; режим запуска двигателя
;*************************************************************************	   
Pusk
CLRWDT
BTFSC  IN_1
GOTO $-2
BTFSC  IN_2
GOTO Channel_1
GOTO Channel_2
Channel_1
BSF  OUT_1
MOVF TMR1L,W  ;длительность периода
MOVWF Period_Lo ;сохранить в переменную
MOVF TMR1H,W
MOVWF Period_Hi
TMR1_OF
   BANK0
CLRF TMR1H ;сброс счётчика периода
CLRF TMR1L
BCF PIR1,TMR1IF;сброс флага переполн.
TMR1_ON
MOVLW 0x09
MOVWF T_NAK_Hi
MOVWF T_NAK_Lo   ;время накопления 6мс 
DECFSZ T_NAK_Lo
GOTO $-1
DECFSZ T_NAK_Hi
GOTO $-3
BCF  OUT_1
MOVF Period_Hi,W	   
SUBLW 0x25				  ;370 об/мин			  
BTFSC STATUS,C
GOTO Rabota
GOTO Pusk

Правильно ли сделал эту часть?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Делаю переход с пускового режима в работу.

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

Что-то не выходит правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
lukinov    51

Если по спаду накопление и искра. То будет задержка на время накопления. Мне кажется нужно как коммутатор по фронту накопление, по спаду искра. Но если длительность ВУ импульса будет больше времени накопления то будет греться транзистор и катушка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alvikagal    37

Это просто переход. В работе будет искра по спаду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • Ребята, помогите прикрутить регулятор тока. Перепробовал кучу вариантов, но, видимо, упускаю что-то. Уже прям сил нет с ним бороться...
    • Неправильно выразился насчёт "сломать". Убрать из схемы R7 недостаточно: оставшиеся элементы моста мешают получить "полновесные" хар-ки УНЧ без моста. Уж убирать - так убирать: удалить R7, замкнуть L1 и уменьшить до нуля ёмкость С1. Тогда ЭТО будет похоже на глубокоосный усь. Согласны? Тогда и "цифирки" станут лучше. Ну а если учесть, что в реальной конструкции С1>>0, то... ...это таки да... А можно даже подобрать С1 по какому-либо критерию "похожести" на какую-либо конкретную конструкцию для более объективного сравнения результатов моделирования. Критерием может служить, например, частота первого полюса.
    • Доброго времени суток! Помогите пжста разобраться с перегоревшей плойкой! При визуальном осмотре заметил что перетёрся провод, в следствии чего произошло КЗ, и выгорели дорожки на верхней плате (фото №1), Вопрос: 1) Могу ли я с помощью мультиметра проверить исправность элементов не выпаивая их ?! ( фото №2 правая часть) Вопрос  2) Могу ли я востоновить выгоревшие дорожки с помощью тонкого  провода ?! Вопрос 3) Не могу снять нижнюю плату, боюсь сломать (фото №1) что бы перпаять белый замкнутый провод, как быть ?!
    • Приветствую всех! Подскажите кто сталкивался с микросхемой H2012Q sot123 6, Что оно такое и даташит бы на нее
    • А чего такая фотка маленькая? Нужно было еще полкомнаты захватить в кадр.
    • Фигня это все. Крепко сожмите щупы клещей руками. В большинстве случаев они емкость вплоть до 10мкФ покажут. Впрочем, как и Ц4354М1.

      У конденсаторов важнее не емкость смотреть, а состояние контакта между пластинами и выводами внутри корпуса. Т.е. паразитное сопротивление, которое называется ESR или ЭПС. Мало того, сопротивление это не локальное (точечное), а зачастую еще и распределенное по объему. Распределенное сопротивление проявляется как сильная зависимость емкости от частоты. Никакой тестер или клещи этих эффектов никак не увидят. А повышенное сопротивление – это источник нагрева. Вот почему многие конденсаторы кипят, раздуваются и взрываются. Есть даже такой жаргон – «беременный электролит».

      Иными словами, емкость может быть нормальная, а контакт между пластинами или выводами – плохой. Потеря емкости – это уже запущенный случай, когда корпус конденсатора совсем разгерметизировался и весь электролит высох (вытек, испарился). Поэтому, как ни странно это звучит, у конденсаторов, прежде всего, нужно мерить не емкость, а сопротивление. Только специализированные приборы покажут проблемы на начальной стадии.

      А тестер должен быть дешевым. DT830 – самый оптимальный вариант. Цена до 400 рублей. Потерять, сжечь, утопить не жалко. В 95% случаев высокая точность измерения вообще не нужна. В оставшихся 5% случаев нужно применять «транзистор – тестер». Второй тестер должен иметь амперметр переменного тока. Я взял М890. Т.е. приборов нужно несколько штук. Как правило, комплект приборов обойдется значительно дешевле, а отказ прибора не слишком сильно ударит по карману.

      Порядок покупки приборов примерно следующий.
      1. DT830.
      2. Транзистор – тестер.
      3. M890, M320. Смотря какие интересы появились.
      4. Е7-15, АКИП-6108 или подобный.
      5. Цифровой осциллограф. DSO5102 напрямую из Китая вполне нормально.

        Это местная накрутка за шильдик. И вообще это уже 4-ый шаг. Ищи на Ali аналог. Как он выглядит ты теперь знаешь.
      АКИП 6109 возьми. Вполне обойдешься без замера на 100кГц.
      Е7-15 за 7700рублей предлагают. Он и получше АКИПа будет, т.к. может постоянную составляющую подавать.
    • Все конденсаторы, за исключением второго фото, слева. Коричневый, с пропИлом и надписью "ARC", которая, подсказывает, что это - искровой разрядник. вы как их искали - по фото анфас и профиль что-ли?  Диоды с черной+бордовой полосками - LL4148, аналог 1N4148. Диоды с другой окраской, могут оказаться как стабилитронами (испытание на обратное напряжение), так и Шоттки (проверить Uf). Более-менее точный ответ даст даташит, если вы его угадаете.