Jump to content
Пентагрид

управление БП через оптрон + PIC16F628A

Recommended Posts

Решил собрать источник питания с управлением через PIC16F628A (парой кнопок переключать нужные напряжения). Взял обычный импульсник на 15 В, из обратной связи выдрал TL431, оставил оптрон, его повесил на выход МК. Написал тестовую прошивку: задаётся Vref через VRCON, компаратор сравнивает и выдаёт на оптрон 1 или 0.

Сделал два варианта прошивки: в одном проверка на срабатывание выполняется циклически, в другом - вызов прерывания при реакции компаратора. Оба варианта тестировал в Протеусе (потенциометр и светодиод), работают. На бредборде завёлся только первый (с нагрузкой и без). А с прерыванием не работает: при отсутствии нагрузки выдаёт нужное напряжение, но стоит только подключить нагрузку и даже если рукой коснуться - напряжение падает. С нагрузкой вообще не заводится.

МК питаю отдельно (тлф. зарядка с домотанной вторичкой + 7805). Несколько раз прошёлся по прошивке, не нашёл за что зацепиться. Прошу совета.

Схема

Скрытый текст

5c744667866cf_.thumb.JPG.0f70dc6f63691c6d8b39834f7bfab079.JPG

В коде присутствуют рудименты для кнопок (пока не вводил).

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
 RA2 ничего не подключать!
;MCLR - сброс в ноль

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

#define	up	PORTA,7
#define	down	PORTA,6
#define	sd	PORTA,0

CBLOCK 70h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC


;переход к основной программе
org	0000h
goto	start


;переход к прерыванию
org	0004h
btfsc	CMCON,7	;обработка прерываний (опрос компаратора и вывод ОС)
goto	sd_0
goto	sd_1

sd_0:			;есть накачка
bcf	sd
goto	komp_end

sd_1:			;нет накачки
bsf	sd
goto	komp_end

komp_end:
bcf	PIR1,6

retfie
;конец обработки прерываний


;основная программа - инициализация МК
start:
BCF	INTCON,GIE	;глобальное запрещение прерываний
BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей
CLRF	PORTA		;инициализация PORTA
clrf	PORTB

MOVLW	b'00000101'	;использовать только 2 компаратор
MOVWF	CMCON
BSF	STATUS,RP0	;банк 1 (TRISA, VRCON)
bsf	TRISA,1		;настройка пинов
bcf	TRISA,0


MOVLW	b'11101110'	;включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		;14В (2,92В)
BCF	STATUS,RP0	;банк 0 (порты)
CALL	delay_10mks	;задержка 10 мкс

MOVF	CMCON,F	;чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;сбросить флаг прерываний
BSF	STATUS,RP0	;банк 1
BSF	PIE1,CMIE	;разрешить прерывания от модуля компараторов
BCF	STATUS,RP0	;банк 0
BSF	INTCON,PEIE	;Разрешить прерывания от периферийных модулей
BSF	INTCON,GIE	;Глобальное разрешение прерываний

bsf	STATUS,RP0
movlw	0x00		;PORTB - выход
movwf	TRISB
bcf	STATUS,RP0
;конец инициализации МК
bcf	PIR1,6
;пусковой вызов ОС (без него не заработает до нажатия кнопок up/down)
btfsc	CMCON,7
goto	sd_0_first
goto	sd_1_first

sd_0_first:
bcf	sd
goto	komp_end_first

sd_1_first:
bsf	sd
goto	komp_end_first

komp_end_first:
bcf	PIR1,6
;конец пускового вызова ОС


main:
nop
nop
nop
goto	main



;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return


END

 

 

comp5nop.rar

Share this post


Link to post
Share on other sites

В ассемблере не силен , но за темой буду следить . У самого намечается подобная задача :)


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
start:
BCF	INTCON,GIE	;глобальное запрещение прерываний
BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей

заменить на

start:
clrf	INTCON	;глобальное запрещение прерываний
banksel PIE1	;запретить прерывания от периферийных модулей
clrf    PIE1 ;

какое отношение эта настройка компаратора 

MOVLW	b'00000101'	;использовать только 2 компаратор
MOVWF	CMCON

имеет к внутреннему ИОН? при этой настройке задействованы входы RA1 и RA2 , RA2 и вас в схеме ваапче не задействован.

требование ДШ об устранении несоответствия 

MOVF	CMCON,F	;чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;сбросить флаг прерываний

при инициализации выполнили,  а в прерывании значит это уже делать недада?

Share this post


Link to post
Share on other sites

Вебинар «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок» (27.04.2021)

Компания «Компэл» и Analog Devices приглашают всех желающих 27/04/2021 принять участие в вебинаре, посвященном решениям Analog Devices для гальванической изоляции. В программе вебинара: технологии гальванической изоляции iCoupler, цифровые изоляторы, изолированное питание и технология isoPower, гальванически изолированные интерфейсы (RS-485, CAN, USB, I2C, LVDS) и другое.

Подробнее

11 час назад, IMXO сказал:

требование ДШ об устранении несоответствия

Добавил, не заработало. Перепроверю сам БП, есть подозрения на ШИМку. Буду использовать вариант с прямым подключением выхода компаратора к пину.

 

11 час назад, IMXO сказал:

RA2 и вас в схеме ваапче не задействован

Бит VRCON,6=1 подключает ИОН к RA2, т.е. он идёт на вход компаратора внутри МК.

Share this post


Link to post
Share on other sites

Пружинные клеммники Degson - высокое качество соединения по оптимальной цене!

Пружинные клеммные блоки Degson для монтажа на печатную плату – это простое и надежное соединение, которое позволяет легко решать задачи для различных приложений за счет обширного ассортимента. Клеммники Degson доступны в двух конструктивных исполнениях (торцевой контакт и зажимная клеть), имеют различные направления ввода проводника (45°, 90°, 180°) и обладают широким диапазоном поперечных сечений (0,2…2,5 мм2).

Подробнее

Новое семейство ИП от MEAN WELL мощностью 150, 300, 600 Вт с повышенной перегрузочной способностью

Компания MEAN WELL разработала семейство источников питания номинальной мощностью 150, 300 и 600 Вт с возможностью кратковременной безопасной работы при мощности в 2,5 раза выше номинальной (до 5 секунд). Данное семейство источников питания востребовано в промышленных установках с использованием электродвигателей или с емкостной нагрузкой. Применяя новые источники питания HRP/N можно получить экономический выигрыш.

Подробнее

Это твои опыты показывают. Мои например опыты отличаются от твоих , причем в противоположную сторону .


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
33 минуты назад, artos5 сказал:

причем в противоположную сторону

Получилось что-нибудь работоспособное с прерыванием?

Share this post


Link to post
Share on other sites

Ну естественно , как же без них любимых?))

При помощи прерываний можно из невозможного сделать возможное !


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

Лучше изучай си , он не привязан к архитектуре так как ассемблер . Ассемблер для критичных к исполнению вещей . Через пару лет будут поголовно 32х битки , и о ассемблере мало кто будет вспоминать.  Я и на си успешно решаю много задач. 

1 минуту назад, Пентагрид сказал:

выкладывай

Что именно? У меня много чего на прерываниям есть. И все отлично работает !


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
21 минуту назад, Пентагрид сказал:

работоспособное с прерыванием?

У меня даже где-то есть решение софтово стабилизатора тока на attiny13A


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

Похоже, проблема была в конфигурационных файлах проекта (переносил и компилировал на разных компьютерах) и/или "пусковой ОС". Откатил и написал для прерываний заново (без пусковой ОС), теперь работает.

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

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
;к RA2 ничего не подключать!

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start

ORG	4

btfsc	CMCON,7	;обработка прерываний (опрос компаратора и вывод ОС)
goto	sd_0
goto	sd_1

sd_0:			;есть накачка
bcf	PORTA,0
goto	komp_end

sd_1:			;нет накачки
bsf	PORTA,0
goto	komp_end

komp_end:
MOVF	CMCON,F
bcf	PIR1,6

retfie

start:
BCF	INTCON,GIE	;Глобальное запрещение прерываний
BCF	INTCON,PEIE	;Запретить прерывания от периферийных модулей
CLRF	PORTA		;Инициализация PORTA
clrf	PORTB

MOVLW	b'00000101'	; 2 аналоговых входа
MOVWF	CMCON		; только 2-й компаратор
BSF	STATUS,RP0	; Выбрать Банк 1
bsf	TRISA,1
bcf	TRISA,0

MOVLW	b'11101001'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 1,88В (9В)
			; установить VR<3:0>=6
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний
BSF	STATUS,RP0	;Выбрать банк 1
BSF	PIE1,CMIE	;Разрешить прерывания от модуля компараторов
BCF	STATUS,RP0	;Выбрать банк0
BSF	INTCON,PEIE	;Разрешить прерывания от периферийных модулей
BSF	INTCON,GIE	;Глобальное разрешение прерываний

bsf	STATUS,RP0
movlw	0x00
movwf	TRISB
bcf	STATUS,RP0


komp2_pusk:			;проверка компаратора 2
btfsc	CMCON,7
goto	sd2_0_pusk
goto	sd2_1_pusk

sd2_0_pusk:
bcf	PORTA,0
goto	manolo

sd2_1_pusk:
bsf	PORTA,0
goto	manolo

manolo:
nop
nop
nop
goto	manolo

;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

 

Вариант с циклической проверкой. Надёжно работает с нагрузкой и без, подключением и отключением в процессе работы. Без нагрузки напряжение гуляет в пределах 1 В,  с нагрузкой -- стабильно. Похоже, придётся вывести его в подпрограмму и вызывать везде, где только возможно зацикливание (опрос кнопок и т.п.).

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
;к RA2 ничего не подключать!

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start



start:
BCF	INTCON,GIE	;Глобальное запрещение прерываний
BCF	INTCON,PEIE	;Запретить прерывания от периферийных модулей
CLRF	PORTA		;Инициализация PORTA
clrf	PORTB

MOVLW	b'00000101'	; 2 аналоговых входа
MOVWF	CMCON		; только 2-й компаратор
BSF	STATUS,RP0	; Выбрать Банк 1
bsf	TRISA,1
bcf	TRISA,0

MOVLW	b'11101001'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 1,88В (9В)
			; установить VR<3:0>=6
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний
;BSF	STATUS,RP0	;Выбрать банк 1
;BSF	PIE1,CMIE	;Разрешить прерывания от модуля компараторов
;BCF	STATUS,RP0	;Выбрать банк0
;BSF	INTCON,PEIE	;Разрешить прерывания от периферийных модулей
;BSF	INTCON,GIE	;Глобальное разрешение прерываний

bsf	STATUS,RP0
movlw	0x00
movwf	TRISB
bcf	STATUS,RP0


komp2:			;проверка компаратора 2
btfsc	CMCON,7
goto	sd2_0
goto	sd2_1

sd2_0:
bcf	PORTA,0
goto	komp2

sd2_1:
bsf	PORTA,0
goto	komp2


;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

 

comp666interrupt.rar

comp777cycle.rar

Share this post


Link to post
Share on other sites
2 минуты назад, Пентагрид сказал:

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

Какое зацикливание?? Сделайте все на прерываниях и будет все на автомате работать!


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites
1 минуту назад, artos5 сказал:

будет все на автомате работать

Без нагрузки вырубается. Надо подобрать холостую нагрузку в разумных пределах потребления.

Share this post


Link to post
Share on other sites
4 минуты назад, Пентагрид сказал:

Надо подобрать холостую нагрузку

Так надо цеплять нагрузочный резистор , порядка 51 - 100 Ом при 12в питании .

 

Так вырубаться не должно ! Будут колебания , но вырубаться ничего не должно :) что то не так или с кодом инициализации или с алгоритмом реализации стабилизатора / обратной связи .


Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Share this post


Link to post
Share on other sites

@artos5 , ради стабильности можно и 50 Ом. Похоже, мне придётся опять вернуться к варианту с прерыванием.

 

Пока тестировал вариант с кнопками и циклическим опросом. Запуск с Vref=0, потом можно переключать кнопками вверх/вниз с шагом 1 В. Без нагрузки всё норм, но с нагрузкой работает только начиная с 9 В, ниже вольтметр не показывает, трансформатор пищит с одной периодичностью. Это похоже на постоянный сброс? Каково Ваше мнение о причинах такой лажи на низких напряжениях?

Скрытый текст

;4 MHz
;компаратор 2 - -RA1, +RA2, выхRA0
;RA7-up, RA6-down
 RA2 ничего не подключать!

list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

#define	sd	PORTA,0
#define	up	PORTA,7
#define	down	PORTA,6

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start


;ИНИЦИАЛИЗАЦИЯ МК
start:
clrf	INTCON
banksel	PIE1
clrf    PIE1
banksel PORTA
;BCF	INTCON,GIE	;глобальное запрещение прерываний
;BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей
CLRF	PORTA		;инициализация портов
clrf	PORTB

MOVLW	b'00000101'	; 2 аналоговых входа
MOVWF	CMCON		; только 2 компаратор
BSF	STATUS,RP0
bsf	TRISA,1	;вход -
bsf	TRISA,6	;вход down
bsf	TRISA,7	;вход up
bcf	TRISA,0	;выход оптрон
movlw	0x00
movwf	TRISB

MOVLW	b'11100000'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 0В (0В)
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний



;ОСНОВНОЙ РАБОЧИЙ ЦИКЛ
knopka_up:		;метка работы с кнопкой UP
call	sd_os
btfss	up		;проверка факта нажатия UP
goto	wait_up
goto	knopka_down

wait_up:			;проверка факта отжатия UP
call	sd_os
btfss	up
goto	wait_up
goto	inc_vrcon

inc_vrcon:			;повышение Vref
bsf	STATUS,RP0

btfss	VRCON,0		;проверка потолка Vref=1111
goto	inc_vrcon_in
btfss	VRCON,1
goto	inc_vrcon_in
btfss	VRCON,2
goto	inc_vrcon_in
btfss	VRCON,3
goto	inc_vrcon_in
goto	inc_vrcon_out

inc_vrcon_in:		;повысить Vref (потолок не достигнут)
INCF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_down

inc_vrcon_out:		;не повышать Vref (потолок достигнут)
bcf	STATUS,RP0
goto	knopka_down


knopka_down:		;метка работы с кнопкой DOWN
call	sd_os
btfss	down		;проверка факта нажатия DOWN
goto	wait_down
goto	knopka_up

wait_down:			;проверка факта отжатия DOWN
call	sd_os
btfss	down
goto	wait_down
goto	dec_vrcon

dec_vrcon:			;понизить Vref (плинтус не достигнут)
bsf	STATUS,RP0

btfsc	VRCON,0		;проверка плинтуса Vref=0000
goto	dec_vrcon_in
btfsc	VRCON,1
goto	dec_vrcon_in
btfsc	VRCON,2
goto	dec_vrcon_in
btfsc	VRCON,3
goto	dec_vrcon_in
goto	dec_vrcon_out

dec_vrcon_in:		;понизить Vref (плинтус не достигнут)
DECF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_up

dec_vrcon_out:		;не понижать Vref (плинтус достигнут)
bcf	STATUS,RP0
goto	knopka_up





;подпрограмма ОС
sd_os:			;проверка компаратора 2
btfsc	CMCON,7
goto	sd_0
goto	sd_1
sd_0:			;нет накачки
bcf	sd
goto	sd_end
sd_1:			;есть накачка
bsf	sd
goto	sd_end
sd_end:
MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний
return





;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

Пока буду проверять:

1. качество питания МК;

2. опять вариант с непосредственным подключением выхода компаратора к пину.

 

Схема

Скрытый текст

5c781de7aaad5_.thumb.JPG.8b1532c196ccfc4cc14f6f1eb839ec0a.JPG

 

Edited by Пентагрид

Share this post


Link to post
Share on other sites

Применил все рекомендации, скомпилировал и испробовал с десяток разных вариантов, в т.ч. с прямым подключением выхода компаратора. Наблюдения:

1. без нагрузки стабильно держит весь диапазон;

2. под нагрузкой 30 Ом напряжение держит с 9 В;

3. под нагрузкой 240 Ом держит весь диапазон подрагивая, стабильно держит с 10-11 В.

 

Решил, что при малых напряжения сказываются факторы:

1. качество питания ИОН (однако запитал от кроны через 7805, и всё осталось как прежде);

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

Share this post


Link to post
Share on other sites

Удалось постепенно снизить порог стабильной работы до 6 В (электролит. 22 мкФ параллельно R4, керам. 100 нФ между верхним концом R3 и точкой ИОН RA2, напряжение ОС берётся не с диода, а с нагрузки).

Share this post


Link to post
Share on other sites

@РадиоНастройщик , делитель рассчитал из того, чтобы нижний диапазон Vref=0...3,13 укладывался в 0...15 В. Стабилитрон пока убрал.

Испытания провожу при прямом выходе CMOUT2=RA4T0CKI, код к нему -- просто инициализация + циклы чтения кнопок +/- 1 В.

Укажите на сомнительные моменты, буду внимателен и попытаюсь перекроить.

Скрытый текст

;4 MHz внутренний
;RA7-up, RA6-down
;компаратор 1	-RA0, outRA3 (не используется, вход на землю)
;компаратор 2	-RA1, outRA4 (используется, СД к Vdd)
 +RA2 ничего не подключать!



list	p = 16f628a
#include <p16f628a.inc>

__CONFIG   _CP_OFF & DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_OFF & _INTOSC_OSC_NOCLKOUT 

#define	up	PORTA,7
#define	down	PORTA,6

CBLOCK 20h
Reg_1	:1
Reg_2	:1
Reg_3	:1
ENDC

ORG	0
goto	start


;ИНИЦИАЛИЗАЦИЯ МК
start:
clrf	INTCON
banksel	PIE1
clrf	PIE1
banksel	PORTA
;BCF	INTCON,GIE	;глобальное запрещение прерываний
;BCF	INTCON,PEIE	;запретить прерывания от периферийных модулей
CLRF	PORTA		;инициализация портов
clrf	PORTB

MOVLW	b'00000110'	; оба компаратора, прямые выходе C1-RA3, C2-RA4
MOVWF	CMCON		; только 2 компаратор
BSF	STATUS,RP0
bsf	TRISA,0
bsf	TRISA,1
bcf	TRISA,3
bcf	TRISA,4
bsf	TRISA,2
bsf	TRISA,6
bsf	TRISA,7


MOVLW	b'11100000'	; включитьVREF, RA2, нижн.диап., 
MOVWF	VRCON		; 0В (0В)
BCF	STATUS,RP0	; Выбрать Банк0
CALL	delay_10mks	; задержка 10 мкс

MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
BCF	PIR1,CMIF	;Сбросить флаг прерываний



;ОСНОВНОЙ РАБОЧИЙ ЦИКЛ
knopka_up:		;метка работы с кнопкой UP
;call	sd_os
btfss	up		;проверка факта нажатия UP
goto	wait_up
goto	knopka_down

wait_up:			;проверка факта отжатия UP
;call	sd_os
btfss	up
goto	wait_up
goto	inc_vrcon

inc_vrcon:			;повышение Vref
bsf	STATUS,RP0

btfss	VRCON,0		;проверка потолка Vref=1111
goto	inc_vrcon_in
btfss	VRCON,1
goto	inc_vrcon_in
btfss	VRCON,2
goto	inc_vrcon_in
btfss	VRCON,3
goto	inc_vrcon_in
goto	inc_vrcon_out

inc_vrcon_in:		;повысить Vref (потолок не достигнут)
INCF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_down

inc_vrcon_out:		;не повышать Vref (потолок достигнут)
bcf	STATUS,RP0
goto	knopka_down


knopka_down:		;метка работы с кнопкой DOWN
;call	sd_os
btfss	down		;проверка факта нажатия DOWN
goto	wait_down
goto	knopka_up

wait_down:			;проверка факта отжатия DOWN
;call	sd_os
btfss	down
goto	wait_down
goto	dec_vrcon

dec_vrcon:			;понизить Vref (плинтус не достигнут)
bsf	STATUS,RP0

btfsc	VRCON,0		;проверка плинтуса Vref=0000
goto	dec_vrcon_in
btfsc	VRCON,1
goto	dec_vrcon_in
btfsc	VRCON,2
goto	dec_vrcon_in
btfsc	VRCON,3
goto	dec_vrcon_in
goto	dec_vrcon_out

dec_vrcon_in:		;понизить Vref (плинтус не достигнут)
DECF	VRCON,1
BCF	STATUS,RP0
CALL	delay_10mks
goto	knopka_up

dec_vrcon_out:		;не понижать Vref (плинтус достигнут)
bcf	STATUS,RP0
goto	knopka_up





;подпрограмма ОС
;sd_os:			;проверка компаратора 2
;btfsc	CMCON,7
;goto	sd_0
;goto	sd_1
;sd_0:			;нет накачки
;bcf	sd
;goto	sd_end
;sd_1:			;есть накачка
;bsf	sd
;goto	sd_end
;sd_end:
;MOVF	CMCON,F	;Чтение CMCON для устранения несоответствия
;BCF	PIR1,CMIF	;Сбросить флаг прерываний
;return





;подпрограммы задержек
delay_10mks:
movlw	.3
movwf	Reg_1
decfsz	Reg_1,F
goto	$-1
return

END

 

 

Edited by Пентагрид

Share this post


Link to post
Share on other sites
7 минут назад, РадиоНастройщик сказал:

он просто не успевает зажигаться

Как это решить при прямом подключении компаратора? Оригинальные схемы на TL431 обеспечивают гарантированное зажигание?

Share this post


Link to post
Share on other sites

@РадиоНастройщик , всё дело оказалось в самопитании ШИМки, она берётся с того же трансформатора (обмотка Vtx). На малом коэффициенте заполнения напряжения Vcc не хватает, и ШИМка переходит в режим постоянного перезапуска, отчего и скачет вых. напряжение хаотически.

Проверил с временным питанием от "дежурки" (тлф. зарядки с домотанной вторичкой на 13 В, от которой питается МК через 7805). На её трансформатор  намотаю ещё обмотку тонким проводом и будет изолированное питание для ШИМки.

scrn1.png.dfb787ef1b00491f37a132b1e1070b6f.png

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

  • Similar Content

    • By redo
      Здравствуйте всем! Мой опыт в схемах совсем 0, прошу о помощи в составлении схемы для подключения дхо + стабилизатор, при включении габаритов или ближнего света чтобы дхо отключалось. Желательно сделать не через реле, а через плату с минимально необходимыми элементами. Всем Спасибо!
    • By Обычный Человек
      Микроконтроллер ATmega328p, внешний кварц 16МГц. Компилятор avr-gcc с оптимизацией O1

      Написал код для управление шаговым двигателем. Работает так: требуемая скорость задается переменной STP1_ReqSpeed, дальше с частотой 100Гц срабатывает таймер TIM0, который высчитывает с какой частотой надо подавать сигналы на вход шагового драйвера. TIM1 работает в режиме частотно импульсной модуляции и по прерыванию меняет значение пина на противоположное.

      Управление работает, скорость регулируется, но по какой то причине случаются пропуски шагов. Чаще всего во время ускорения. Количество пропусков от 0 до 4, обычно 2-3, длятся 32мс.

      Из кода вырезал неиспользуемое. Заменить прерывания на аппаратный ШИМ возможности нет. Как убрать эти пропуски?
      Осциллограммы:
       
       
    • By Don Ali
      У меня беда небольшая, ремонтировал стабилизатор напряжения с входом от трансформаторной катушки 26,5в, выходом 12в, выпаял микросхему и на рынке купил новую(M2576T), старую на рынке без левых мыслей выбросил... Впаял, произошел взрыв конденсатора 2200мкф на 25в, измерил напряжение выдаёт 30в, понимаю что не та установлена и мне продана микросхема, а какая стояла перед этим не знаю... Схемы на стабилизатор в интернете нет, производители стабилизатора не отвечают....
      В чем разница M2576T-adj и M2576T
      На рынке посчитали, что они одинаковы по выводу вольтажу...
      Стабилизирующий прибор "Гейзер-3"

    • By Egor Orehov
      На чём основана работа компаратора с фиксированной зоной входного напряжения? Объясните пожалуйста, как в данном случае работает компаратор, непонятен сам ход работы. Также был проведён опыт, но преподаватель сказал, графики не верные, может подскажете, где ошибка и в чём вообще она заключается.
       



    • By dim165
      День добрый. То ли я ворчливый и старый стал, то ли чего-то не понимаю... Гляньте, пожалуйста вы, может поясните. Смотрите: Есть вот такой регулятор напряжения (Фото 1) Используется сие чудо для стабилизации напряжения в китайских мопедах. Все вроде понятно, но... стоп, погодите-ка, получается, при превышении порогового напряжения обмотки генератора тупо коротятся друг на друга?! Серьезно?! И так до следующего полупериода, пока он не захлопнет тиристоры, а затем, если не изменятся условия, снова КЗ? Ладно, откинем в сторону, смотрим другую схему (Фото 2). Справа все понятно, опорное напряжение, 2 транзюка, которые открываются при превышении порога, стоп, что?! При привышении порога 2 тиристора открываются и в зависимости от того, на каком контакте положительный полупериод коротят его на массу?! Да что-б их... Окей, подумал я и полез смотреть инет. И что же я увидел? (Фото 3) Окей, мощность ограничена паяльником, а "лишнее" мы коротим тиристором, но, все равно, блин, коротим! Да и немного не понял, он закрывается за счет того что после моста у нас пульсирующее напряжение, т.е добавить конденсатор по питанию и тиристр будет постоянно открыт? Ну гениально, че  



×
×
  • Create New...