Добавить форум Lasers.fonarevka.ru в Избранное ×
LASERS.FONAREVKA.RU - Всё о лазерах и лазерной технике  

Вернуться   Форум Lasers.fonarevka.ru > Лаборатория > Питание лазеров > Драйверы для Синих ЛД > В разработке
Забыли пароль? Регистрация
Темы с вашим участием Новые сообщения Сообщения за день

  • Бесплатные розыгрыши призов
  • Для гостей форума
  • Пожертвования (Donate)
На форуме ежемесячно проходят бесплатные розыгрыши призов для зарегистрированных и активно общающихся форумчан. Вы можете выиграть не только различные лазерные указки и другое лазерное оборудование, но и фонарики, зарядные устройства, аккумуляторы и другие аксессуары известных брендов, а также фонари и компоненты от известных кастомщиков и мелкосерийных производителей. Также разыгрываются и другие призы, такие как мультитулы, ножи, рюкзаки и другое снаряжение. Все проходящие розыгрыши призов являются действительно абсолютно бесплатными для самих участников, т.к. все расходы берут на себя организаторы (т.е. владельцы данного форума) и сами спонсоры, которые предоставляют тот или иной приз для наших розыгрышей призов. Форумчане не несут никаких имущественных рисков, связанных с участием в данных розыгрышах (т.е. вы ничего не оплачиваете и ничем не рискуете). Вам достаточно нажать кнопку "Принять участие" и ждать результата!

На данный момент проходит 1 розыгрыш призов.

1. Зарядное устройство XTAR XP4 Panzer + 2 аккумулятора Panasonic NCR18650B 3400 мАч

Рекомендуем Вам подписаться на тему (оптимальнее с уведомлением на ваш E-mail), где публикуется информация о новых розыгрышах призов.
Подробная информация по ссылке
Искренне рады видеть Вас на нашем независимом проекте о лазерах и лазерной технике!

Что Вам даст регистрация на нашем проекте:


- Возможность участия во всевозможных акциях, конкурсах и лотереях постоянно проходящих на форуме
- Возможность пользоваться скидками и бонусами, которые предоставляют различные популярные магазины специально для наших форумчан
- Возможность побывать в роли тестеров новейших разработок в области лазерной техники и их комплектующих
- Возможность неограниченного доступа к закрытой технической информации и некоторым интересным разделам форума

и много других приятных привилегий

Искренне надеемся, что Вам у нас понравится!
Если вы хотите финансово поддержать работу проекта LASERS.FONAREVKA.RU, будем искренне благодарны!
Даже самая малая сумма поможет дальнейшему развитию и прогрессу нашего с вами уже общего проекта.


Ответ
Просмотров в теме 8568   Ответов в теме 30   Подписчиков на тему 1   Добавили в закладки 0
Опции темы
Старый 13.02.2013, 23:51   21
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Платный? На такое я натыкаюсь впервые. Скачал, спасибо . Поюзаю, на первый взгляд действительно свежая версия...
INFERION вне форума   Ответить с цитированием Вверх
Старый 14.02.2013, 00:35   22
}|{B@N
Научный сотрудник
 
Регистрация: 07.05.2010
Последняя активность: 25.08.2017 19:18
Сообщений: 784
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Так он был изначально платный) Просто так сложилось что необходимости в лекарствах нет.
}|{B@N вне форума   Ответить с цитированием Вверх
Старый 14.02.2013, 19:15   23
Mason
Лазеростроитель
 
Аватар для Mason
 
Регистрация: 19.11.2010
Последняя активность: 27.09.2016 18:51
Адрес: Украина
Сообщений: 567
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

я пытался доказать что реально существует 6я версия , а в нете есть куча репаков петерки, в архиве да реально 6я версия но както странно легкая она портативная версия типа? значит не полно функционал? моя версия крывовато немного русифицирована
__________________
RED< 380мвт(на реконструкции)
GREEN < 50мвт(SDLaser 302)
VIOLET < 140мвт
RGB < 1000мвт(в разработке)
Mason вне форума   Ответить с цитированием Вверх
Старый 14.02.2013, 20:28   24
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Она лёгкая потому что нет макросов, справки и всяких файликов с пользовательскими настройками. Это никак не мешает. Макросы у меня всё равно свои, а настраивать я всё равно буду по-своему. Вот справки нет, это плохо, да...
INFERION вне форума   Ответить с цитированием Вверх
Старый 14.02.2013, 21:32   25
}|{B@N
Научный сотрудник
 
Регистрация: 07.05.2010
Последняя активность: 25.08.2017 19:18
Сообщений: 784
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Справку нашел на ргхосте, ссылка с казуса.
http://rghost.ru/43257265
проверил-работает если запускать через прогу.
Ну и темы с форумов: казус радиокот изи
Там есть много других билдов как справки так и проги, если что-то не заработает
}|{B@N вне форума   Ответить с цитированием Вверх
Старый 15.02.2013, 22:15   26
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Первый драйвер ушел в фонарь на CREE XM-L. Посмотрим что практика покажет. 18650 никак не хочет вытягивать 2A режим, на ампере нагрузку держит. Много теряется на пружинках и т.п.
Параллельно конденсатору на RESET пришлось допаять резистор на 1М, и ёмкость уменьшить до микрофарада. Не знаю как у Fonarik'а без этого резистора нормально разряжает конденсатор, у меня МК полностью отключает лапу от каких-либо цепей при отсутствии питания. Ощутимая задержка из-за конденсаторов на питании, нужно придумать как их форсированно разряжать, иначе сильно кратковременное переключение питания режим не переключает, хотя не сильно напрягает...
Ещё я сделал вывод, что от идеи совмещения обоих кнопок лучше отказаться, и вернутся к предыдущей - использовать заднюю, только если передняя замкнута на момент подачи питания. Это поможет нормально вкорячить драйвер в фонарь с гнездом под зарядку, т.к. там разъём замыкает на массу контакт, когда штекер не торчит, и разрешает тем самым драйверу включатся. Иначе ток потечёт не только на аккумулятор, но и в обход задней кнопки на драйвер, что у меня и произошло...
Алгоритм уменьшения мощности при просадке напряжения нужно допиливать. На макс мощности не успевает сбросить ток, перезагружается. Ускорять - значит добавлять шуму в режиме ограничения, что визуально неприятно. Буду думать, время ещё есть... Больше всего в этой ситуации мешает переключение режимов при перезагрузке, т.к. МК не объяснить что сработал его супервизор, а не полностью пропало питание. При этом изнашивается EEPROM (хотя там и так ресурса на сотни миллионов циклов).


Попробовал Srint Layout 6 - лажа. Косметический ремонт провели, да. Лагать стал меньше на семёрке. Ничего интересного не добавилось, а вот часто используемую мною функцию взяли и заменили каким-то гавном с удвоением шага сетки (я о клавише Shift). Облазил настройки, не нашел как включить классический режим. Лучше бы они динамический шаг сетки под масштаб сделали, чем вырезали такую полезную функцию, заменив её какой-то рамкой вокруг дорожек. Была раньше возможность вообще не парится с соблюдением геометрии дорог, которые вообще не привязаны к сетке. Зажал шифт и у тебя дорога сама стремится принять правильную форму, положив на сетку. А теперь что? Вот вам индикатор, а вы сами корячтесь, выравнивая всё. Я не любитель вязать по сетке, она здорово ограничивает. В 5-й версии можно ровно всё ложитъ вообще без сетки, волшебной клавишей Shift, а тут решил один только транзистор поменять и уже тонна мата и потраченного времени, т.к. красиво всё уложить в пару движений не получается. Сижу я и дальше на 5-й, благо она ни чем не уступает абсолютно, кроме минимального шага сетки, пропадания полосы прокрутки и всплывающих подсказок, если окно развёрнуто. Однако оно того стоит...

А вот многим людям, как я понимаю, новая версия вполне по вкусу. Правда один не знал о волшебной кнопочке в 5-ке и не привык к ней, а один знал, но не обратили внимание, что она не только привязывает аналогично кнопке "автозахват", которую теперь не нажмёшь именно тогда, когда в ней появляется необходимость...
В общем кто как привык в нём работать. Я привык работать удобно и быстро, чего в 6-й версии лишили...

P.S. Может это ограничения бесплатной версии? Иначе я этот стёб разработчиков не понимаю. Тролли Жирные. Они бы ещё убрали кнопку "линия"...


Вот ещё одно фото прототипа:
Нажмите на изображение для увеличения
Название: P2234422.JPG
Просмотров: 525
Размер:	1.12 Мб
ID:	9539
16мм, заводские практически такие же (там только полевики по-меньше)...
А вот для сравнения драйвер с eBay рядом:
Нажмите на изображение для увеличения
Название: P2234425.JPG
Просмотров: 562
Размер:	1.56 Мб
ID:	9540
Ну, вернее что от него осталось ...
Это к вопросу о "небыло места для контактных площадок и защиты от переполюсовки". У меня почему-то всё влезло, было бы желание...

EEPROM реализована. Ячейки нагружаются равномерно, одна запись - один бит. Стирание раз в 8 записей, битые блоки (блок размером 4 бита) игнорируются, если с ними нельзя ничего сделать. При полном износе EEPROM (около 400 млн. записей) используется регистр общего назначения, способный хранить информацию без питания несколько часов. Короче убить драйвер износом EEPROM проблематично...
Осталось научить подстроечник крутить всё, что в данный момент активно...

[Исправлено: INFERION, 24.02.2013 в 15:36].
INFERION вне форума   Ответить с цитированием Вверх
Старый 24.02.2013, 18:01   27
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

И так. Вот исходник демки:
Код:
	.INCLUDE "tn44adef.inc"

;Векторы прерываний

	rjmp	RESET
	reti
	reti				;PCINT0
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	reti
	set				;Over0
	reti
	reti
	reti
	reti
	reti



;====================================================================
;Конфигурация:

RESET:	Ldi	R16, HIGH(RAMEND-19)	;инициализация стека
	out	SPH, R16
	Ldi	R16, LOW(RAMEND-19)
	out	SPL, R16

	ldi	R16, 0b01000000		;Подтягивание
	out	PORTA, R16

	ldi	R16, 0b00111000
	out	DDRA, R16

	ldi	R16, 0b00001110		;Подтягивание
	out	PORTB, R16
	ldi	R16, 0b00000101		;Выходы
	out	DDRB, R16

	ldi	R16, 0b10000000		;Отключить аналоговый компаратор
	out	ACSR, R16
	ldi	R16, 0b10000111		;Выключить цифровые входные буферы
	out	DIDR0, R16

	ldi	R16, 0b00100001		;Измерение Vcc
	out	ADMUX, R16
	ldi	R16, 0b00010000		;ADLAR=1
	out	ADCSRB, R16
	ldi	R16, 0b10000011		;ADEN, тактовая clk/8
	out	ADCSRA, R16

	ldi	R16, 0b00000001		;Включение Over0
	out	TIMSK0, R16
	ldi	R16, 0b11000011		;Fast PWM inverting mode
	out	TCCR0A, R16
	ldi	R16, 0b00000001		;Запуск таймера0, clk/1
	out	TCCR0B, R16

	ldi	ZH, HIGH(RAMEND+1)	;Очистить ОЗУ
	ldi	ZL, LOW(RAMEND+1)
	ldi	R16, 19			;Количество очищаемых ячеек
upclr:	st	-Z, R1
	dec	R16
	brne	upclr

	ldi	ZH, HIGH(RAMEND-11)
	ldi	ZL, LOW(RAMEND-11)
	ser	R16
	st	Z+, R16			;Записать Toncomp (C)
	st	Z+, R16
	clr	R15

	sei				;Разрешить прерывания



;--------------------------------------------------------------------
;Задняя кнопка:

	in	R17, MCUSR
	clr	R18
	rjmp	eeloop
rdeelp:	inc	R18
	cpi	R18, 247		;EEEND
	brcs	eeloop
	rjmp	eeend
eeloop:	sbic	EECR, EEPE
	rjmp	eeloop
	out	EEARL, R18		;Прочитать байт из EEPROM
	sbi	EECR, EERE
	in	R16, EEDR
	cpi	R16, 0x00
	breq	rdeelp			;Прочитать следующий, если 0x00

	cpi	R16, 0b11111111
	breq	pwr1
	cpi	R16, 0b01111111
	breq	pwr2
	cpi	R16, 0b00111111
	breq	pwr3
	cpi	R16, 0b00011111
	breq	pwr4
	cpi	R16, 0b00001111
	breq	pwr1
	cpi	R16, 0b00000111
	breq	pwr2
	cpi	R16, 0b00000011
	breq	pwr3
	cpi	R16, 0b00000001
	breq	pwr4
	rjmp	rdeelp			;Прочитать следующий при ошибке

pwr1:	sbrc	R17, EXTRF
	rjmp	pwr1ld
	rcall	pwrup
	rjmp	pwr2ld
pwr1ld:	ldi	R16, 254
	rjmp	pwrout

pwr2:	sbrc	R17, EXTRF
	rjmp	pwr2ld
	rcall	pwrup
	rjmp	pwr3ld
pwr2ld:	ldi	R16, 252
	rjmp	pwrout

pwr3:	sbrc	R17, EXTRF
	rjmp	pwr3ld
	rcall	pwrup
	rjmp	pwr4ld
pwr3ld:	ldi	R16, 250
	rjmp	pwrout

pwr4:	sbrc	R17, EXTRF
	rjmp	pwr4ld
	rcall	pwrup
	rjmp	pwr1ld
pwr4ld:	ldi	R16, 248
	rjmp	pwrout


pwrup:	lsr	R16			;Сохранить следующий режим
	mov	R25, R16
	clr	R19
	ldi	R17, 0b00100100		;Write Only, EEMPE
newrt:	out	EEDR, R16
	out	EEARL, R18
	cli
	out	EECR, R17
	sbi	EECR, EEPE
	sei
pwrlp:	sbic	EECR, EEPE
	rjmp	pwrlp
	sbi	EECR, EERE
	in	R17, EEDR
	cp	R17, R16
	brne	pwrer
	tst	R16
	breq	eeclr
	ret
pwrer:	ldi	R17, 0b00000100		;Erase and Write, EEMPE
	clr	R20
	out	EEDR, R20
	cli
	out	EECR, R17
	sbi	EECR, EEPE
	sei
pwrlp1:	sbic	EECR, EEPE
	rjmp	pwrlp1
	rjmp	adrinc
eeclr:	ser	R16
	ldi	R17, 0b00010100		;Erase Only, EEMPE
adrinc:	cpi	R19, 247		;LPEND
	brcs	ewlpok
	ret
ewlpok:	inc	R18
	inc	R19
	cpi	R18, 247		;EEEND
	brcs	newrt
	clr	R18
	rjmp	newrt


eeend:	in	R17, MCUSR		;Резервная память
	mov	R16, R25
	rjmp	pwr1r
pwr0r:	swap	R16
	andi	R16, 0b00001111
	breq	pwrr

pwr1r:	cpi	R16, 0b00001111
	brne	pwr2r
pwrr:	sbrc	R17, EXTRF
	rjmp	pwr1lr
	ldi	R25, 0b00000111
	rjmp	pwr2lr
pwr1lr:	ldi	R16, 254
	rjmp	pwrout

pwr2r:	cpi	R16, 0b00000111
	brne	pwr3r
	sbrc	R17, EXTRF
	rjmp	pwr2lr
	ldi	R25, 0b00000011
	rjmp	pwr3lr
pwr2lr:	ldi	R16, 252
	rjmp	pwrout

pwr3r:	cpi	R16, 0b00000011
	brne	pwr4r
	sbrc	R17, EXTRF
	rjmp	pwr3lr
	ldi	R25, 0b00000001
	rjmp	pwr4lr
pwr3lr:	ldi	R16, 250
	rjmp	pwrout

pwr4r:	cpi	R16, 0b00000001
	brne	pwr0r
	sbrc	R17, EXTRF
	rjmp	pwr4lr
	ldi	R25, 0b00001111
	rjmp	pwr1lr
pwr4lr:	ldi	R16, 248


pwrout:	out	EEARL, R16		;Загрузить ток с EEPROM
	sbi	EECR, EERE
	in	R18, EEDR
	inc	R16
	out	EEARL, R16
	sbi	EECR, EERE
	in	R19, EEDR

	ldi	ZH, HIGH(RAMEND-15)
	ldi	ZL, LOW(RAMEND-15)
	st	Z+, R18			;Записать Irefmax
	st	Z+, R19
	ldi	R17, 0x00
	ldi	R16, 0x01
	ldi	ZH, HIGH(RAMEND-5)
	ldi	ZL, LOW(RAMEND-5)
	st	Z+, R16			;Записать Iref
	st	Z+, R17

	clr	R7			;Заряд выходной ёмкости
	clr	R8
	clt
psuplp:	rcall	rccomp
pausup:	brtc	pausup
	clt
	sbis	GPIOR0, 0
	rjmp	psuplp
	sbi	PORTB, 0		;Запустить преобразователь



	;R8:R7	 - Ton
	;R15	 - Ton_error
	;R25	 - Резервная память режимов
	;R26	 - 
	;R27	 - 
	;R28	 - 
	;R29	 - Счётчик основного цикла

	;RAMEND-1	- temperature
	;RAMEND-3	- 
	;RAMEND-5	- Iref
	;RAMEND-7	- VccLoad
	;RAMEND-9	- 
	;RAMEND-11	- Toncomp
	;RAMEND-13	- Irefdamped
	;RAMEND-15	- Irefmax
	;RAMEND-17	- 
	;RAMEND-18	- 



;--------------------------------------------------------------------
;Спящий режим:

main:	brtc	main			;Тупим в цикле сихронизации
	clt

	clr	R16
	ldi	ZH, HIGH(RAMEND-5)	;Проверка условий
	ldi	ZL, LOW(RAMEND-5)
	ld	R18, Z+			;Загрузить Iref
	ld	R19, Z+
	cp	R18, R16
	cpc	R19, R16
	brne	run

	cbi	PORTB, 0		;Остановить преобразователь
	cbi	ADCSRA, 7		;Выключить АЦП
loop:	ldi	R17, 0b10110000
	ldi	R16, 0b10110100		;BOD Sleep, Sleep, режим Power-down, BOD Sleep Enable
	cli
	out	MCUCR, R16
	out	MCUCR, R17		;BOD Sleep, Sleep, режим Power-down
	sei
	SLEEP
	rjmp	loop

run:	sbi	ADCSRA, 6
	rcall	rccomp



;--------------------------------------------------------------------
;Напряжение питания (показания АЦП при максимальном токе нагрузки):

vccld:	ldi	R29, 9
pause5:	brtc	pause5
	clt
	dec	R29
	breq	lpout2
	sbi	ADCSRA, 6
	rcall	rccomp
	rjmp	pause5

lpout2:	in	R18, ADCL		;Записать данные АЦП в буфер
	in	R19, ADCH
	ldi	R16, 0b10100010		;Запуск измерения температуры
	out	ADMUX, R16
	sbi	ADCSRA, 6

	subi	R18, 0xC0		;Порог 3,1V
	sbci	R19, 0x5A
	brcc	subvok
	clr	R18
	clr	R19
subvok:	lsl	R18			;x32
	rol	R19
	brcs	mulovr
	lsl	R18
	rol	R19
	brcs	mulovr
	lsl	R18
	rol	R19
	brcs	mulovr
	lsl	R18
	rol	R19
	brcs	mulovr
	lsl	R18
	rol	R19
	brcc	mulvok
mulovr:	ser	R18
	ser	R19

mulvok:	ldi	ZH, HIGH(RAMEND-7)
	ldi	ZL, LOW(RAMEND-7)
	ld	R16, Z+			;Загрузить VccLoad
	ld	R17, Z+

	clr	R22
	cp	R16, R18		;Сглаживание
	cpc	R17, R19
	breq	equalv
	brcc	morevl

	mov	R20, R18
	mov	R21, R19
	sub	R20, R16
	sbc	R21, R17
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	cp	R20, R22
	cpc	R21, R22
	brne	okdnvl
	inc	R20
okdnvl:	add	R16, R20
	adc	R17, R21
	rjmp	equalv

morevl:	mov	R20, R16
	mov	R21, R17
	sub	R20, R18
	sbc	R21, R19
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	cp	R20, R22
	cpc	R21, R22
	brne	okupvl
	inc	R20
okupvl:	sub	R16, R20
	sbc	R17, R21

equalv:	st	-Z, R17			;Записать VccLoad
	st	-Z, R16

	rcall	rccomp



;--------------------------------------------------------------------
;Температура

	ldi	R29, 5
pause6:	brtc	pause6
	clt
	dec	R29
	breq	temp
	sbi	ADCSRA, 6
	rcall	rccomp
	rjmp	pause6

temp:	in	R23, ADCL		;Записать данные АЦП в буфер
	in	R24, ADCH
	ldi	R16, 0b10101101		;Измерение Iout
	out	ADMUX, R16
	sbi	ADCSRA, 6

	sbic	EECR, EEPE
	rjmp	tnordy
	ldi	R16, 247		;Загрузить порог
	out	EEARL, R16
	sbi	EECR, EERE
	in	R17, EEDR
	clr	R16
	sec				;+256
	ror	R17			;x64
	ror	R16
	lsr	R17
	ror	R16

	sub	R23, R16
	sbc	R24, R17
	brcc	subtok
	clr	R23
	clr	R24
subtok:	clr	R22			;x64
	lsr	R24
	ror	R23
	ror	R22
	lsr	R24
	ror	R23
	ror	R22
	tst	R24
	breq	multok
	ser	R22
	ser	R23

multok:	ldi	ZH, HIGH(RAMEND-1)
	ldi	ZL, LOW(RAMEND-1)
	ld	R18, Z+			;Загрузить температуру
	ld	R19, Z+

	clr	R24
	cp	R22, R18		;Сглаживание
	cpc	R23, R19
	breq	equalt
	brcc	moretd

	mov	R20, R18
	mov	R21, R19
	sub	R20, R22
	sbc	R21, R23
	lsl	R20			;/256
	rol	R21
	brcc	okdnt1
	ser	R21
	rjmp	okdnt2
okdnt1:	brne	okdnt2
	inc	R21
okdnt2:	sub	R18, R21
	sbc	R19, R24
	rjmp	equalt

moretd:	sub	R22, R18
	sbc	R23, R19
	lsl	R22			;/256
	rol	R23
	brcc	okupt1
	ser	R23
	rjmp	okupt2
okupt1:	brne	okupt2
	inc	R23
okupt2:	add	R18, R23
	adc	R19, R24

equalt:	st	-Z, R19			;Записать температуру
	st	-Z, R18
tnordy:	rcall	rccomp



;--------------------------------------------------------------------
;Сглаживание Irefmax

pauseD:	brtc	pauseD
	clt
	sbi	ADCSRA, 6

	ldi	ZH, HIGH(RAMEND-15)
	ldi	ZL, LOW(RAMEND-15)
	ld	R18, Z+			;Загрузить Irefmax
	ld	R19, Z+
	ld	R20, Z+			;Загрузить Irefdamped
	ld	R21, Z+

	ldi	R16, 0
	ldi	R17, 1
	cp	R18, R20
	cpc	R19, R21
	brcs	refdwn

	mov	R22, R20		;Irefdamped/64
	mov	R23, R21
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	cp	R22, R16
	cpc	R23, R17
	brcc	dmpok1
	mov	R23, R17

dmpok1:	add	R20, R22
	adc	R21, R23
	cp	R18, R20
	cpc	R19, R21
	brcc	rfupok
	mov	R20, R18
	mov	R21, R19
	rjmp	rfupok

refdwn:	mov	R22, R20		;Irefdamped/16
	mov	R23, R21
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	lsr	R23
	ror	R22
	cp	R22, R16
	cpc	R23, R17
	brcc	dmpok2
	mov	R23, R17

dmpok2:	sub	R20, R22
	sbc	R21, R23
	brcc	overok
	clr	R20
	clr	R21
overok:	cp	R20, R18
	cpc	R21, R19
	brcc	rfupok
	mov	R20, R18
	mov	R21, R19

rfupok:	st	-Z, R21			;Записать Irefdamped
	st	-Z, R20


	ldi	ZH, HIGH(RAMEND-1)	;Ограничение по температуре
	ldi	ZL, LOW(RAMEND-1)
	ld	R16, Z+			;Загрузить температуру
	ld	R17, Z+
	ser	R18
	ser	R19
	sub	R18, R16
	sbc	R19, R17
	cp	R18, R20
	cpc	R19, R21
	brcc	trfok
	mov	R20, R18
	mov	R21, R19
;	sbi	PORTA, 5

trfok:	ldi	ZH, HIGH(RAMEND-7)	;Ограничение по напряжению питания
	ldi	ZL, LOW(RAMEND-7)
	ld	R16, Z+			;Загрузить VccLoad
	ld	R17, Z+
	ser	R18
	ser	R19
	sub	R18, R16
	sbc	R19, R17
	cp	R18, R20
	cpc	R19, R21
	brcc	vrfok
	mov	R20, R18
	mov	R21, R19
;	sbi	PORTA, 5

vrfok:	ldi	ZH, HIGH(RAMEND-5)
	ldi	ZL, LOW(RAMEND-5)
	st	Z+, R20			;Записать Iref
	st	Z+, R21

	rcall	rccomp



;--------------------------------------------------------------------
;ОС по макс. току:

pause3:	brtc	pause3
	clt

	in	R23, ADCL		;Записать данные АЦП в буфер
	in	R24, ADCH
	sbi	ADCSRA, 6

	ser	R29

curfb1:	sbic	PINB, 0			;CТАБИЛИЗАЦИЯ
	rjmp	pwmon			;Сбросить прогресс,
	clr	R7			;если преобразователь отключен
	clr	R8
	rjmp	iout1

pwmon:	ldi	ZH, HIGH(RAMEND-5)
	ldi	ZL, LOW(RAMEND-5)
	ld	R16, Z+			;Загрузить Iref
	ld	R17, Z+

	clr	R20
	cp	R23, R16
	cpc	R24, R17
	brcs	loTon

	sub	R23, R16		;Tonnom-=(Iout-Iref)/32
	sbc	R24, R17
	lsr	R24			;/32
	ror	R23
	lsr	R24			;/16
	ror	R23
	lsr	R24			;/8
	ror	R23
	lsr	R24			;/4
	ror	R23
	lsr	R24			;/2
	ror	R23
	cp	R23, R20
	cpc	R24, R20
	brne	mod11
	inc	R23
mod11:	sub	R7, R23
	sbc	R8, R24
	brcc	iout1
	clr	R7			;Клиппинг ОС (КЗ)
	clr	R8
	ldi	ZH, HIGH(RAMEND-15)
	ldi	ZL, LOW(RAMEND-15)
	st	Z+, R7			;Записать мощность
	st	Z+, R7
	cbi	PORTB, 0		;Остановить преобразователь
	rjmp	iout1


loTon:	sub	R16, R23		;Tonnom+=(Iref-Iout)/32
	sbc	R17, R24
	lsr	R17			;/32
	ror	R16
	lsr	R17			;/16
	ror	R16
	lsr	R17			;/8
	ror	R16
	lsr	R17			;/4
	ror	R16
	lsr	R17			;/2
	ror	R16
	cp	R16, R20
	cpc	R17, R20
	brne	mod21
	inc	R16
mod21:	add	R7, R16
	adc	R8, R17
	brcc	iout1
	ser	R16			;Клиппинг ОС (перегрузка)
	mov	R7, R16
	mov	R8, R16

iout1:	dec	R29
	brne	crmxlp
	rcall	rccomp
	rjmp	main

crmxlp:	rcall	rccomp
pause4:	brtc	pause4
	clt
	in	R23, ADCL		;Записать данные АЦП в буфер
	in	R24, ADCH
	cpi	R29, 1
	brne	llcmax
	ldi	R16, 0b00100001		;Запуск измерения Vcc
	out	ADMUX, R16
llcmax:	sbi	ADCSRA, 6
	rjmp	curfb1



;--------------------------------------------------------------------
;Расширитель разрядности с компенсацией ("прямая связь"):

rccomp:	ldi	ZH, HIGH(RAMEND-11)
	ldi	ZL, LOW(RAMEND-11)
	ld	R16, Z+			;Загрузить Toncomp (C)
	ld	R17, Z+
	mov	R18, R7			;Ton (FB)
	mov	R19, R8

	clr	R22
	cp	R16, R18		;Компенсация RC-цепи (T=1,33ms)
	cpc	R17, R19
	brcs	locap

	mov	R20, R16		;Ton=C-(C-FB)*32
	mov	R21, R17
	sub	R20, R18
	sbc	R21, R19
	lsl	R20
	rol	R21
	brcs	xmin
	lsl	R20
	rol	R21
	brcs	xmin
	lsl	R20
	rol	R21
	brcs	xmin
	lsl	R20
	rol	R21
	brcs	xmin
	lsl	R20
	rol	R21
	brcs	xmin	
	mov	R18, R16
	mov	R19, R17	
	sub	R18, R20
	sbc	R19, R21
	brcc	xok1
xmin:	clr	R18
	clr	R19

xok1:	clr	R20			;Сигма-дельта модулятор PWM
	add	R15, R18
	rol	R20
	add	R20, R19
	out	OCR0A, R20

	mov	R20, R16		;C-=(C-Ton)/32
	mov	R21, R17
	sub	R20, R18
	sbc	R21, R19
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	lsr	R21
	ror	R20
	sub	R16, R20
	sbc	R17, R21

	cp	R20, R22
	cpc	R21, R22
	brne	rcout
	sbi	GPIOR0, 0		;Установить бит готовности ШИМ
	rjmp	rcout


locap:	sub	R18, R16		;Ton=(FB-C)*32+C
	sbc	R19, R17
	lsl	R18
	rol	R19
	brcs	xmax
	lsl	R18
	rol	R19
	brcs	xmax
	lsl	R18
	rol	R19
	brcs	xmax
	lsl	R18
	rol	R19
	brcs	xmax
	lsl	R18
	rol	R19
	brcs	xmax
	add	R18, R16
	adc	R19, R17
	brcs	xmax
	cpi	R19, 0xFF
	brcs	xok2
xmax:	ser	R19
	clr	R18

xok2:	clr	R20			;Сигма-дельта модулятор PWM
	add	R15, R18
	rol	R20
	add	R20, R19
	out	OCR0A, R20

	sub	R18, R16		;C+=(Ton-C)/32
	sbc	R19, R17
	lsr	R19
	ror	R18
	lsr	R19
	ror	R18
	lsr	R19
	ror	R18
	lsr	R19
	ror	R18
	lsr	R19
	ror	R18
	add	R16, R18
	adc	R17, R19

	cp	R18, R22
	cpc	R19, R22
	brne	rcout
	sbi	GPIOR0, 0		;Установить бит готовности ШИМ

rcout:	st	-Z, R17			;Записать Toncomp (C)
	st	-Z, R16
	ret




	.eseg				;EEPROM
	.db	255
	.org	247
	.db	109			;Температура (44LSB=25гр., 0,857гр. LSB)
	.db	0x00,0x32		;Мощность 4  (2mA LSB x64)
	.db	0x00,0x19		;Мощность 3
	.db	0x80,0x0C		;Мощность 2
	.db	0x40,0x06		;Мощность 1

Для любителей поковырять подобные схемы. Хекс и т.п. специально не даю, т.к. код кинул не для тупого копирования, а для стимулирования изучения МК, да и вообще возможности запилить эту схему для фонарика или синего ЛД. Это урезанная версия. В ней нет индикатора, модуляции, передней кнопки и подстроечника, но как стабилизатор тока с переключением режимов задней кнопкой - полноценный. В коде могут попадаться огрызки от полноценной версии (коментарии на отсутствующих прерываниях, неиспользуемые ячейки ОЗУ и т.п.)
Не забудьте прошить EEPROM перед подключением нагрузки, а-то ток в 0xFFFF (>2A) не к добру...
Узел ограничения тока под глубокий разряд батареи иногда не справляется и девайс перезагружается. Подобная перезагрузка оценивается как переключение режима, поэтому проблема для севшей батареи vs ресурса EEPROM актуальна...
С этого момента я забиваю на этот код и возвращаюсь к старшей версии, т.к. всё что мне тут надо было отработать - отработал...
Если возникнут вопросы - задавайте.

Получил печатные платы:
Нажмите на изображение для увеличения
Название: P3014426.JPG
Просмотров: 532
Размер:	1.47 Мб
ID:	9674Нажмите на изображение для увеличения
Название: P3014427.JPG
Просмотров: 523
Размер:	1.43 Мб
ID:	9675Нажмите на изображение для увеличения
Название: P3014430.JPG
Просмотров: 542
Размер:	1.13 Мб
ID:	9676
На ЛД у хобби ноги всего 2мм длинной, а цанги требуют 3мм. Да и регулятор тока не предусмотрен, вместо него узел для переключения фокуса, который пока что интересен только мне. Платы будут переделываться, но сначала придётся "куда-то" деть эти. Возможность подкрутить ток я в программе оставлю, подстроечник желающие могут допаять на время настройки, а с выводами посмотрим, может 2мм и хватит, иначе придётся наращивать...

P.S. Ждём посылку с Farnell...

[Исправлено: INFERION, 10.03.2013 в 19:59].
INFERION вне форума   Ответить с цитированием Вверх
Старый 10.03.2013, 20:00   28
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Тьху, в предыдущий пост уже текст не лезет, доредактировался. Оказывается максимум можно писать 20000 символов, придётся новый пост создавать...

Слепил алгоритм для подстроечника наконец-то. Теперь все 10 параметров можно удобно настраивать. Для входа в режим программирования нужно "пошуршать" подстроечником, как только он заметит вмешательство - индикатор покажет своим цветом один из 9-ти настраиваемых режимов, в зависимости от состояния передней кнопки (активного в этот момент режима). Дальше нужно будет нащупать ползунком загруженный уровень настраиваемого параметра, как только ползунок будет рядом - вспыхнет желтый и подстроечник начнёт в наглую крутить параметр. Дальше по прибору или на глаз настраиваем, нажатие на кнопку запишет (если получится) значение в EEPROM на своё место. Если всё нормально - вспыхнет зелёный (сразу же после нажатия), иначе красный (ошибка, EEPROM в помойку), или вообще ничего (если не произошел захват, вход в режим программирования и т.п.). У подстроечника не всегда есть упор, да и иногда хочется быть уверенным в том, что значение выставлено до упора максимальное или минимальное, поэтому индикатор горит красным и синим, соответственно, на максимальном (по часовой) и минимальном (против часовой) уровнях.
Теперь подробнее о параметрах. Всего в драйвере 4 режима, все равноправные. Переключаются либо "задней кнопкой", либо передней. У передней логика хитрая, её можно зафиксировать. Вот когда она зажата - настраивается ток текущего режима (то же справедливо и для выбранного через заднюю кнопку режима), а когда зафиксирована - настраивается заполнение (ШИМ), в пределах 3...100%. Минимальный ток, в паузах который, 20мА. Этот порог нужен для шустрой работы ОС при модуляции. Если прощёлкать все 4 режима и таким образом попасть на новый виток - активируется настройка температуры (9-й параметр), теперь подстроечник может настроить ограничение в пределах 40...95 градусов. Тут удобнее на глаз наверное, хотя можно подогреть и нащупать положение, при котором ток начнёт ограничиваться. Должен заметить, что порог зависит от тока, на минимальном он будет градусов на 10 выше. На самом деле на пороге ток только начинает ограничиваться с максимального значения, и до нуля его прижмёт только спустя градусов 10... 10-й параметр не хранится в EEPROM и загружается с подстроечника при включении. Он задаёт временные интервалы кнопки в пределах 0,06...0,6с. Лично мне наиболее комфортные задержки 0,1...0,2с, как на мышке...
Шкала у подстроечника нелинейная, мелкие значения он крутит медленнее для более комфортной настройки небольших значений, хотя всё равно его шорох умудряется пробиться через фильтры, так что осторожнее с ним и с наводками с пальцев через отвёртку без пластмассовой ручки. Хоть там и тонна фильтров стоит на пути, всё равно осторожность не помешает...

Короче:
1. Включили интересующий нас режим (нажали соответствующее число раз на кнопку), отпустили быстро кнопку, чтоб она зафиксировалась. Начинаем крутить подстроечник - индикатор что-то там показывает, нам главное нащупать яркую желтую вспышку. Нащупали - крутим на максимум (пока красный не загорится), жмём на кнопку - вспыхивает зелёный и всё тухнет (вырубается, если нажали не два раза, иначе включится следующий режим). Мы только что выставили заполнение на максимум, это заметно будет по противному мерцанию, которое пропадёт...
2. Включили снова этот режим, но кнопку держим. Крутим - желтая вспышка - выставляем интересующий нас ток - отпускаем кнопку - зелёная вспышка и всё потухло. Настроили ток...
3. Нам нужно небольшое заполнение, чтоб синий ЛД мог дать стабильные 5мВт. До этого мы выставили ток в 300мА, ток зажигания синего 200мА и здорово гуляет (поэтому 205мА выставить не получится). У нас 100мА полезного тока, это около 100мВт. Значит нам требуется заполнение 5%, выполняем 1-е действие и выкручиваем интересующий нас средний ток по показаниям амперметра (если мультиметр не умеет мерить заполнение). Если во время паузы у нас 20мА, а в импульсе 300мА, то мультиметр должен показать (300мА/(100/5%))+(20мА/(100/(100-5%))=300*0,05+20*0,95=34мА. Как видим тут и экономия существенная получается, ненужно гонять в холостую ток зажигания.

Индикатор автоматически компенсирует просадку батареи, если заполнение не 100%, однако на 100% ОС в теории работает стабильнее (меньше слепых зон при переключении с одного тока на другой и отсутствие переходных процессов). Благо для каждого режима есть выбор...

На днях соберу испытательный стенд, который промеряет КПД и уровень пульсаций при сильных помехах по питанию. Потом попытаюсь им убить какой-нибудь слабый ЛД, естественно помехами по питанию. Блин, 96,4% памяти занято (из 4кБ), а я ещё не всё влепил. Опять придётся заниматься байтовылизыванием...
Ещё попробую всё таки втулить дифференциальное звено в ОС, чтоб скомпенсировать срез АЦП на 4кГц. Думаю хуже не будет. А-то дискретизации хватает на 16кГц, но встроенный усилитель режет на 4-х. Индикатор тоже думаю допилить, вернуть все анимации (добавить красную на перегрев и чёрную на разряд). Эх, придётся ужимать код...
Есть предложения, или может возражения?..
INFERION вне форума   Ответить с цитированием Вверх
Старый 10.03.2013, 22:28   29
ABA
Модератор
 
Аватар для ABA
 
Регистрация: 25.02.2010
Последняя активность: 11.09.2013 18:36
Адрес: Москва СВАО
Сообщений: 2054
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

На платах при покупке режимы уже будут настроены? (если да то какие)
Есть ли ограничение по максимальному току? (если нет то при настройке режимов легко спалить ЛД, к примеру, если он А -130)
ABA вне форума   Ответить с цитированием Вверх
Старый 10.03.2013, 22:55   30
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Я могу залить в EEPROM любые режимы, это легко делается. Что попросишь, то и залью, дальше уже сам подстроечником докрутишь, если что не понравится...

Ограничено 2A, можно твикнуть до 3A допаиванием шунта, но я схему рассчитывал на 2A. Спалить можно что угодно, если руки кривые. У драйвера недостаточно мозгов, чтоб определить это. Осторожно крутить надо, и желательно на левой нагрузке...
-------------
Реализовал всё-таки устойчивость задней кнопки к перебоям питания из-за севшего аккума. Теперь драйвер спокойно отличит перезагрузку из-за высаженного аккума от перезагрузки из-за кратковременного выключения питания. Да и жесткий рестарт теперь маловероятен, т.к. защита успевает сбросить ток, даже если максимальный режим резко включить на севшей батарее. На случай если всё-таки произойдёт клиппинг защиты (к примеру голый светодиод на плате прогревает её слишком быстро, и защита сбрасывает ток до нуля, но затем спокойно выруливает) стоит таймаут в 10 секунд. Раньше драйвер сразу выключался (нефиг мол работать, если не получается обеспечить корректную работу), а теперь ждёт 10 секунд пока защиты расчехляться. "Градусник" за это время спокойно находит подходящий режим, а "вольтметр" гораздо шустрее, ему и пол секунды хватает...
За индикатор вроде не писал. Теперь при "перегреве" анимирует красным, при глубоком разряде - чёрным (просто мигать начинает тем цветом, что заряд отображает). Если всё нормально, как и раньше - белым с вдвое меньшей скоростью. Максимальный приоритет у чёрного, ниже у красного, белый вообще не будет "говорить" мол всё в порядке, если работает одна из двух первых анимашек (ваш К.О.), однако если произойдёт клиппинг ОС (слишком высоковольтная нагрузка, тяга на максимум, а ток всё равно ниже нормы), то даже при перегреве и переразряде не будет ни одной анимации. Если же попытаться вытянуть с драйвера более низкое напряжение за то, которое он способен выдать (схемотехника ограничивает минимальное напряжение) - ему придётся послать вас в далёкое пешее и прилечь отдохнуть. Некоторые физ. вмешательства в работающий драйвер тоже не останутся незамеченными. Так если принудительно вырубить преобразователь - МК тут же это заметит и сбавит тягу, чтоб в случае ВНЕЗАПНОГО включения преобразователя свести последствия к минимуму. В общем-то на каждое непонятное событие оно что-то, но сделает. Или решит что можно прикрутить тягу и немного подождать, или что нужно как можно быстрее всё глушить, или вообще продолжать работать в том же духе...

Так вот, программа вылизана, а ещё целых 58 (!) байт свободных (аж 29 инструкций), а я уже не знаю что ещё туда можно добавить. Фантазия закончилась...
В общем посылка с Фарнела уже в Киеве, скоро будет у меня. Соберу полноценный драйвер на заводских печатках и буду его мучить цифроосциллом и грязным питанием...

[Исправлено: INFERION, 12.03.2013 в 09:00].
INFERION вне форума   Ответить с цитированием Вверх
Старый 20.03.2013, 23:15   31
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Финальные изменения:
- Добавил Дифференциальное звено в токовую ОС, теперь это ПИД-регулятор. Грязь с питания не пролазит ни под каким предлогом, остались только слепые зоны по 0,5мс каждые 17мс, но с ними справляется RC-фильтр, да и попасть в этот момент сильной помехой тяжело даже специально, не то что случайно. ОС рассчитана под дифференциальное сопротивление нагрузки >0,3Ом, более низкоомная приведёт к возбуждению, если питание 5V и ток максимален...
- Схема немного изменила свой вид:
Нажмите на изображение для увеличения
Название: Драйвер.png
Просмотров: 546
Размер:	88.3 Кб
ID:	9793
Пин Debug показывает активность программы (среднее значение покажет загрузку ядра) и переключается на вход (начинает дёргать подтяжкой), если какая-то функция израсходовала больше ресурсов, чем ей было отведено (покажет узкое место, вызывающее тормоза)...
- Изменил алгоритм записи в EEPROM режима, теперь EEPROM пытается перезаписаться, даже если в ней сплошной мусор. Раньше предполагалось, что если там мусор, значит все ячейки битые, т.к. до этого в них не удалось ничего записать. Однако принесли мне этот фонарик - перебои питания засрали EEPROM, хоть он был жив, и драйвер перестал работать (на тот момент ещё не была реализована альтернативная память)...

Выкладываю парочку осциллограмм со своего какашкового осциллографа:
Нажмите на изображение для увеличения
Название: P3204438.JPG
Просмотров: 512
Размер:	185.5 Кб
ID:	9801Нажмите на изображение для увеличения
Название: P3204439.JPG
Просмотров: 439
Размер:	163.5 Кб
ID:	9802
На первой 5мс/Дел., на второй 0,2мс/Дел. По вертикали - 20мВ/Дел. Сигнал снят с шунта (около 30мОм в сумме), питание - ATX БП, 5V линия. Нагрузка - массив китайских 1W светодиодов (падение 3,8V, дифф. сопр. 0,7Ом)...
Осциллограф кривой, слева скорость луча выше, чем справа...

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

Я считаю конструкцию законченной, дальнейшая разработка, надеюсь, прекращена. Дальнейшее обсуждение в СОСЕДНЕЙ ветке.

[Исправлено: INFERION, 21.03.2013 в 18:51].
INFERION вне форума   Ответить с цитированием Вверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Universal Driver - TPS63020.Support 445nm 1.5a. 3.7v LI-ION ECCOsea Универсальные 72 25.08.2017 15:09
Драйвер на связке МК + D class amplifier INFERION В разработке 0 28.03.2013 22:27
Обзор драйвера на TPS63020 с eBay (1.7A FMT V2) INFERION Драйверы для Синих ЛД 10 08.12.2012 19:41
Farnel TPS63020 Кому ннн-ннада? ECCOsea Групповые покупки товара 12 03.07.2011 19:56
Предварительные данные по закупке tps63020 ECCOsea Групповые покупки товара 61 24.08.2010 17:49


Текущее время: 15:15. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot
Template-Modifications by TMS

Copyright ©2010 - 2015, Hobbi.TV & FONAREVKA.RU.

Если Вы не являетесь правообладателем того или иного контента размещенного на форуме (фото/видео/текст),
то при любом использовании материалов форума необходимо получить письменное разрешение
на использование того или иного материала у администрации форума.

При использовании материалов форума ссылка на Lasers.fonarevka.ru обязательна.

Украинский портАл CATALOG.METKA.RU
Каталог webplus.info Каталог сайтов Zabor.com