Перейти к содержанию

Не выходит полностью "закрыть" мосфет при помощи ШИМ Attiny13


-=FISHER=-

Рекомендуемые сообщения

Всех приветствую!

Собрал я незамысловатое устройство, основной задачей которого является является управление полевым транзистором, посредством ШИМ, в зависимости от входных сигналов. Вот принципиальная схема и код:

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

5beda1c74c1ee_.jpg.655c4864cd4a47590bc14b44be000112.jpg

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

#include "main.h"

uint8_t EE_lights EEMEM; //переменные EEPROM	
uint8_t lights, default_lights=200; //перменные для чтения из EEPROM

unsigned char but_down, but_down1, dir=1; 

uint8_t get_button (void)
{
	char code;
	code=PINB & PIN_BUTTON;
	_delay_ms(5);
	if(code!=(PINB & PIN_BUTTON)){return 0;} //если нажатие было неуверенным вернем 0
	else{return PINB & PIN_BUTTON;} //если нажатие было уверенным то вернем 1
}

static flash(void)
{
	while(!get_button()){TCCR0A^=(1<<COM0A1);_delay_ms(100);}
	if(TCCR0A&=~(1<<COM0A1)){TCCR0A|=(1<<COM0A1);}
}

static get_up(void)
{
	if(OCR0A!=0)
	{
		OCR0A--;
	}
		else
		{
			flash();
		}
}

static get_down(void)
{
	if(OCR0A<255)
	{
		OCR0A++;
	}	
}

uint8_t park_light(void)
{
	char code;
	code=PINB & PIN_LIGHTS;
	_delay_ms(5);
	if(code!=(PINB & PIN_LIGHTS)){return 0;}
	else {return PINB & PIN_LIGHTS;}
}

static rise() //функция плавного розжига
{
		if(OCR0A==255) //если ДХО потушены, то
		{
			_delay_ms(DELAY*1000); //ждём...
		}
		while(OCR0A>0) //пока ДХО полностью не разгорятся
		{
			OCR0A--; _delay_ms(3); //плавно розжигаем
		}
}

static down() //функция плавного затухания
{
	if(OCR0A>lights) //если яркость меньше заданной яркости ДХО при включенных габаритах, то
	{
		if(OCR0A==255) //если ДХО совсем погашены, то
		{
			_delay_ms(DELAY*1000); //ждем...
		}
		while(OCR0A>lights) //пока яркость ДХО меньше заданной
		{
			OCR0A--; _delay_ms(3); //плавно розжигаем
		}
	}
	else //иначе
	{
		while(OCR0A<lights) //пока яркость ДХО больше заданной, то
		{
			OCR0A++; _delay_ms(3); //плавно тушим
		}
	}
}

static port_ini(void)
{
	PORTB=0x1C;
	DDRB=0x1;
}
 
static drl_state(uint8_t state)
{
	if(state)
	{
		park_light() ? down() : rise());
	}
	else
	{
		while(OCR0A<255){OCR0A++; _delay_ms(3);} //плавно гасим до нуля
	}
}

static lights_bright(uint8_t state)
{
	if(state)
	{
		dir ? get_up() : get_down();
		but_down1=1;
		lights=OCR0A;
	}
	else{if(but_down1){eeprom_write_byte(&EE_lights, lights);if(dir){dir=0;}else{dir=1;}but_down1=0;}}
}

uint8_t start_conditions(void)
{
	char code;
	code=PINB&ANY_KEY;
	_delay_ms(5);
	if(code!=(PINB&ANY_KEY)){return 0;}
	else {if(code == 0x18){return 1;}else{return 0;}}
}

int main(void)
{
	port_ini();
	pwm_ini();
	lights=eeprom_read_byte(&EE_lights); //читаем во временную переменную из EEPROM значение яркости ДХО 
										 //при включенных габаритах
    while(1)
    {
        drl_state(start_conditions()); //проверка условий для запуска ДХО (ручник, датчик давления масла)
		
		lights_bright(!get_button() && park_light()); //обработка нажатия на кнопку ТОЛЬКО при включенных габаритах
    }
}

 

 

К примеру, если "прижать" контакт BRAKE или OIL LAMP к земле, то МК должен плавно погасить светодиод D1 (который служит только для отладки схемы, а вообще погаснуть должны светодиодные модули подключенные минусом на контакт DRL-) до полного выключения.

Сначала я подумал что беда в инициализации режима ШИМ в таймере, изначально он у меня был настроен так: 

void pwm_ini (void)
{
	TCCR0A |= (1<<WGM00) | (1<<WGM01)//выбираем режим БЫСТРЫЙ ШИМ (FAST PWM)
	| (1<<COM0A1);//выбираем ножку OC0A, устанавливаем на ней 1 при совпадении с регистром OCR0A, 
					//сбрасываем в 0 наверху (OCR0A = 255)
	TCCR0B |= (1<<CS02); //настройка предделителя ШИМ на 256, частота ШИМ равна 31250 Гц = 31,25 кГц
	OCR0A = 0; //по умолчанию светодиод полностью погашен
}

В Протеусе, при такой настройке ШИМ осциллограф показывал некоторые "иголки" при установке значения OCR0A в 0. Я подумал что в этом корень всего зла и решил перенастроить ШИМ вот таким образом:

void pwm_ini (void)
{
	TCCR0A |= (1<<WGM00) | (1<<WGM01)//выбираем режим БЫСТРЫЙ ШИМ (FAST PWM)
	| (1<<COM0A1) | (1<<COM0A0);//выбираем ножку OC0A, устанавливаем на ней 0 при совпадении с регистром OCR0A, 
							//устанавливаем в 1 наверху (OCR0A = 255)
	TCCR0B |= (1<<CS02); //настройка предделителя ШИМ на 256, частота ШИМ равна 31250 Гц = 31,25 кГц
	OCR0A = 255; //по умолчанию светодиод полностью погашен
}

Это помогло, но только в том плане, что в Протеусе пропали "иголки", я со спокойной душой собрал схему "в железе" и с огорчением обнаружил, что в реальности светодиод не гаснет до конца. Вольтметр на ножке PB2 (OC0A), в состоянии когда транзистор должен быть полностью закрыт, показывает напряжение 1,6 мВ (а должно быть ровно 0 В, как я понимаю?) относительно общего минуса. А напряжение, если плюсовой щуп поставить на +12В, а минусовой щуп на сток транзистора показывает 7,09 В. Поэтому я решил что проблема моя не в прошивке, а в схеме устройства. Получается что транзистор закрывается не до конца при установке ШИМ в первом случае OCR0A = 0 и OCR0A = 255 во втором.

 

Внимание вопрос: как мне посредством ШИМ полностью закрыть n-канальный полевой транзистор и тем самым полностью погасить светодиод? Возможно ли с помощью ШИМ до конца закрыть транзистор?

Заранее спасибо!

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

Почему просто не перевести ногу в выход когда светодиод нужно выключить? То есть ШИМом гасите а потом просто порт на 0. Ну хотя бы потому что прерывания с другими прерываниями могут бороться за время и это я думаю уже может повлиять на промежутки между поддержкой 0 на выводе таймера.

Ну и на сколько я знаю полевым транзистором управлять напрямую с МК плохо, я буквально на днях подключал полевик всего на 2 ампера смд, и то сомневался после всех этих статей что нашел))

То есть есть вероятность спалить мк пишут, к тому же если на открытие транзистора подавать 5 вольт то он через себя пропустит меньше до 2х раз, + почему то там потери из за сопротивления :) Вообщем нужно или драйвер добавить для полевика специальный или 2-мя биполярными управлять им, можно одним, схем полно в гугле по запросу "полевой транзистор atmega".

Но не знаю на сколько точна эта инфа :)

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

39 минут назад, -=FISHER=- сказал:

Получается что транзистор закрывается не до конца

1.6мВ не должен открыть мосфет

Можно замерить сопротивление сток - исток. Мож флюс или еще какая хрень попалась.

Вообще инвертирование com должно было помочь, но "иголки" останутся, т.е. шим будет не полные 100%

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

11 час назад, -=FISHER=- сказал:

А напряжение, если плюсовой щуп поставить на +12В, а минусовой щуп на сток транзистора показывает 7,09 В.

А сколько вы ожидали там увидеть? У вас же сток подперт питание +5В, следовательно, 12-5=7. Что вольтметр и показывает.

Да и полевик мощноватый для прямого управления, как мне кажется. Мощнее IRLML2401 я бы не посоветовал напрямую от ножки МК шимить (правда, опыта личного нет - теоретические измышления). Хотя к теме статически запертого состояния транзистора это отношения не имеет.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

54 минуты назад, ARV сказал:

(правда, опыта личного нет - теоретические измышления). Хотя к теме статически запертого состояния транзистора это отношения не имеет.

Хорошо, а тогда теоретически можно ли погасить светодиод, закрыть транзистор полностью средствами ШИМ? Почему же присутствует паразитное свечение?...

12 часа назад, Berg сказал:

Можно замерить сопротивление сток - исток. Мож флюс или еще какая хрень попалась

При обесточенном устройстве?..

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Если светодиод светится лишь чуть чуть , то скорее всего это из-за тока утечки закрытого транзистора. У мощных полевиков он может достигать нескольких десятков микроампер. При таком токе светодиод уже начинает подсвечивать. Зашунтируйте светодиод резистором 0,5-1 ком и посмотрите, что получится.

13 часа назад, -=FISHER=- сказал:

ножке PB2 (OC0A), в состоянии когда транзистор должен быть полностью закрыт, показывает напряжение 1,6 мВ (а должно быть ровно 0 В, как я понимаю?) относительно общего минуса. 

никогда чистого нуля не будет

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

Только что, -=FISHER=- сказал:

Хорошо, а тогда теоретически можно ли погасить светодиод, закрыть транзистор полностью средствами ШИМ? Почему же присутствует паразитное свечение?

Что значит "погасить теоретически"? Да они ПРАКТИЧЕСКИ гасятся в миллионах изделий!

Как всегда, надо отсечь неизвестное, прежде чем бороться с ситуацией. Отсоедините от вывода МК резистор R1 - светодиод будет подсвечиваться? Если будет - транзистор не годный, меняйте. Ну а если не будет - будем думать дальше.

Только что, Sergey-Ufa сказал:

никогда чистого нуля не будет

Чистый и не нужен - "логический" полевик имеет отсечку примерно 2 вольта, все, что меньше, для него "ноль" по сути.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Я не вас просвещал, а топикстартера, которого вы хотели напугать отсутствием нуля :)

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

26 минут назад, -=FISHER=- сказал:

При обесточенном устройстве?..

Да.

А какой ток на нагрузке? Подсвечивается только контрольный светодиод или нагрузка тоже?

R7 не обоснованно низкое сопротивление (470-1к). Я вон сейчас взял светодиод (3мм), держу пальцами, не важно за анод или катод, и вторым выводом касаюсь: общий вывод аудио колонок, общий вывод монитора, корпус светильника, и светодиод слегка светится, а если коснуться корпуса ЛБП то вообще ярко :)

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

1 час назад, ARV сказал:

Чистый и не нужен - "логический" полевик имеет отсечку примерно 2 вольта, все, что меньше, для него "ноль" по сути.

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

1 час назад, Sergey-Ufa сказал:

Зашунтируйте светодиод резистором 0,5-1 ком и посмотрите, что получится.

Зашунтировал отладочный светодиод резистором 1 кОм, теперь он гаснет полностью, а если я нагрузку тоже зашунтирую и она перестанет подсвечиваться, будет ли это грамотным решением моего вопроса?

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

В руководстве по МК написано

Quote

If the OCR0A is set equal to BOTTOM, the output will
be a narrow spike for each MAX+1 timer clock cycle.

тоесть короткие импульсы будут присутствовать обязательно. Используйте Phase Correct PWM Mode в этом режиме не должно быть подсвечивания.

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

22 минуты назад, -=FISHER=- сказал:

будет ли это грамотным решением моего вопроса?

Грамотным будет поставить хотя бы простейший драйвер на паре транзисторов . У полевиков достаточно большая емкость затвора и у контролера просто нехватает мощности чтобы быстро переключить полевик.

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

12 минуты назад, snn_krs сказал:

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

Но такой скважности не должно хватить чтобы открыть полевик

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

Только что, -=FISHER=- сказал:

Зашунтировал отладочный светодиод резистором 1 кОм, теперь он гаснет полностью

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

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

15 hours ago, -=FISHER=- said:

тем самым полностью погасить светодиод?

А если затвор пинцетом на землю, светится?

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

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

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

7 часов назад, musa56 сказал:

Грамотным будет поставить хотя бы простейший драйвер на паре транзисторов . У полевиков достаточно большая емкость затвора и у контролера просто нехватает мощности чтобы быстро переключить полевик.

Ну.. "большая" - понятие растяжимое.. Если 460 с емкостью более 4 тыр и зарядом за 2 сотни, то да..(это все про гейт). А тысяча пФ на сотнях кГ ворочается на ура.

В поисках работы..

Looking for job

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

Господа, наконец-то добрался до паяльника, ситуация следующая:

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

Отсоедините от вывода МК резистор R1 - светодиод будет подсвечиваться?

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

В 15.11.2018 в 23:17, Berg сказал:

Можно замерить сопротивление сток - исток.

Когда впаян то 6,2 кОм, а если снять и мерить на столе, то мультиметр показывает обрыв.

9 часов назад, Armenn сказал:

А если затвор пинцетом на землю, светится?

Всё равно светится.

 

Ваши выводы? Косяк на плате? Но слишком уж четко, ровно 6.2 кОм, если снять мосфет, то показания при замере на контактных площадках стока и истока не меняются....

Если снимаю R7 то мультиметр и на плате начинает показывать обрыв...

Изменено пользователем -=FISHER=-

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

В общем господа, видимо был косяк на плате. Сейчас снял шунт у отладочного светодиода и все светодиоды стали тухнуть до конца))) всем спасибо простите мою глупость пожалуйста :D

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

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

Через паршивый флюс утечка?

Видимо была "сопля"

Мы все учились по-немногу, чему-нибудь и как-нибудь...

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

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...