Jump to content

Search the Community

Showing results for tags 'PWM'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube

Blogs

There are no results to display.

There are no results to display.

Marker Groups

  • Пользователи форума

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Found 45 results

  1. Здравствуйте. Пишу потому, что нахожусь в тупике, в принципе наметки движееия вперед есть, но нужен совет опытного человека. Приобрел китайский лазер для самодельного гравера. Вот он разобранный Когда нужно жарить на всю, программа подает сигнал на вывод pwm и он жарит, без проблем. А вот интересная программа ribs которая играет уровнем мощности выдает нечеткие размытые и недожженые контуры. Беру осциллограф и иду по цепи. На разъёме шим разные и меняющиеся по форме сигналы, на лазерном диоде равномерные пики, меняется только их амплитуда. На входе стоит микросхема шестиножечная, маркировка спилена, затем мощный транзистор тоже со спиленной маркировкой и два диода тоже нонейм теперь. И самое интересное на клемах к лазерному диоду запаяны два конденсатора в паралель. Так и должно быть? И если кто знает, подскажите как организовать нормальный шим. Кстати амплитуда на лазерном диоде составила 3.8 вольта. Второй день уже бьюсь, сначала думал слишком быстрая подача, но даже на минимальной скорости лазер не жжет до черна, а в программе lasergrbl на впятеро больше скорости прорезал неплохие канавки. Фото обратной стороны с конденсаторами.
  2. Доброго времени суток всем. Для своей новой жены захотелось мне сделать сердечко на atmega8, с кучей эффектов и т.д. Так вот, разные мигалки-переключалки св-диодов я написал, использовал delay. Но мне этого стало мало и я решил подключить шим программный. Отдельно от всей программы шим работает как нужно, так же и переключалки работают отдельно от шим, но вот когда я соединяю это всё воедино то работает только шим и не переходит дальше по коду.Я так понимаю, что таймеры и delay вместе работать не могут? Но если могут, то как? #include <mega8.h> #include <delay.h> #define GREEN PORTC.1=PORTC.2=PORTC.3=PORTC.0 unsigned char i, s,; unsigned char green=255; unsigned char green_b; //переменные, для буферизации значений скважности ШИМ unsigned char count; //переменная- счетчик вызовов обработчика прерываний unsigned char temp=1; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { count++; if (count == 0){ //если счетчик переполнился и принял значение 0 green_b = green; GREEN = 1; } if (green_b == count) { GREEN = 0;} } void main(void) { PORTC=0x0F; //конфигурируем порт DDRC=0x0F; TCCR0=0x01; //настраиваем таймер TCNT0=0x00; TIMSK=0x01; //разрешаем генерацию прерывания по переполнению таймера T0 #asm("sei") //глобально разрешаем прерывания while (1) { for (i=0;i<3;i++) { if (temp==1) {if (green < 255) green += 1; else temp = 2;} if (temp==2) {if (green > 0) green -= 1; else temp = 1;} delay_ms(1000); }; s=7; for (i=0;i<=s;i++) { PORTC.0=1; delay_ms(200); PORTC.0=0; PORTC.1=1; delay_ms(200); PORTC.1=0; PORTC.2=1; delay_ms(200); PORTC.2=0; PORTC.3=1; delay_ms(200); PORTC.3=0; } for (i=0;i<=s;i++) { PORTC.3=1; delay_ms(200); PORTC.3=0; PORTC.2=1; delay_ms(200); PORTC.2=0; PORTC.1=1; delay_ms(200); PORTC.1=0; PORTC.0=1; delay_ms(200); PORTC.0=0; } for (i=0;i<=s;i++) { PORTC.3=1; delay_ms(200); PORTC.2=1; delay_ms(200); ; PORTC.1=1; delay_ms(200); PORTC.0=1; delay_ms(200); PORTC.3=0; delay_ms(200); PORTC.2=0; delay_ms(200); PORTC.1=0; delay_ms(200); PORTC.0=0; delay_ms(200); } for (i=0;i<=s;i++) { PORTC.0=1; delay_ms(200); PORTC.1=1; delay_ms(200); ; PORTC.2=1; delay_ms(200); PORTC.3=1; delay_ms(200); PORTC.0=0; delay_ms(200); PORTC.1=0; delay_ms(200); PORTC.2=0; delay_ms(200); PORTC.3=0; delay_ms(200); } for (i=0;i<=s;i++) { PORTC=0x01; delay_ms(200); PORTC=0x02; delay_ms(200); PORTC=0x04; delay_ms(200); PORTC=0x08; delay_ms(200); PORTC=0x09; delay_ms(200); PORTC=0x0A; delay_ms(200); PORTC=0x0C; delay_ms(200); PORTC=0x0D; delay_ms(200); PORTC=0x0E; delay_ms(200); PORTC=0x0F; delay_ms(200); PORTC=0x07; delay_ms(150); PORTC=0x0B; delay_ms(200); PORTC=0x03; delay_ms(250); PORTC=0x05; delay_ms(300); PORTC=0x09; delay_ms(350); PORTC=0x01; delay_ms(400); PORTC=0x02; delay_ms(200); PORTC=0x04; delay_ms(200); PORTC=0x08; delay_ms(200); PORTC=0x00; delay_ms(200); } for (i=0;i<=5;i++) { PORTC=0x0f; delay_ms(100); PORTC=0x00; delay_ms(100); PORTC=0x0f; delay_ms(100); PORTC=0x00; delay_ms(100); PORTC=0x0f; delay_ms(100); PORTC=0x00; delay_ms(150); PORTC=0x0f; delay_ms(300); PORTC=0x00; delay_ms(100); PORTC=0x0f; delay_ms(300); PORTC=0x00; delay_ms(100); PORTC=0x0f; delay_ms(300); PORTC=0x00; delay_ms(150); PORTC=0x0f; delay_ms(100); PORTC=0x00; delay_ms(100); PORTC=0x0f; delay_ms(100); PORTC=0x00; delay_ms(100); PORTC=0x0f; delay_ms(100); PORTC=0x00; delay_ms(1000); } } }
  3. Позвонил мне как-то старый друг и попросил совета - чем ему запитать старую детскую железную дорогу PIKO. Посоветовать ему просто купить древний блок питания FZ-1 показалось мне скучным, и я решил набросать что-то функционально похожее с помощью модуля Arduino и подручных деталей. Задача свелась к реверсивному ШИМ регулированию маленького электродвигателя от переменного резистора - для этой цели он представляется мне удобнее, чем энкодер. По резистору легко визуально и тактильно определить центральное положение “выключено”, и его положение очень просто считывать через АЦП. Я быстро набросал скетч со стандартным переводом аналогового сигнала в ШИМ для моста, собрал макет и начал испытания. Мне сразу не понравилось, как регулируется нагрузка - особенно в самом начале из-за моего аналогового датчика положения. Тогда я подумал - а сделаю я дискретное регулирование, даром что датчик аналоговый. Мне наверняка хватит десяти ступеней регулирования “вперёд” и столько же “назад”, а для чёткого перехода между ступенями я введу небольшой гистерезис. Написать лаконичный скетч получилось только после того, как я “разменял” логику на данные, забив нужные мне границы переходов между состояниями в массивы. Полезные функции вроде выставления резистора в центральное положение для начала работы и защита от короткого замыкания в нагрузке вписались в скетч также органично. Переходы между ступенями регулирования получились отличные, в нужный диапазон легко попасть движком переменного резистора. Схема очевидная - мост для двигателя, индикация и управляющий переменный резистор с линейной характеристикой. ШИМ подаётся только на нижние ключи моста Т5, Т6. Верхние ключи Т3, Т4 открываются в зависимости от нужного направления вращения. Светодиоды LED1, LED2 можно использовать для индикации направления вращения. Светодиод индикатора - комбинированный (красный + зелёный), он показывает режим работы схемы: зелёный моргает - инициализация, ожидание среднего положения регулятора. зелёный горит постоянно - нормальная работа красный моргает - превышение рабочего тока или короткое замыкание, требуется устранить причину и перевести регулятор в среднее положение. При указанной величине R3 0.33 Ом порог срабатывания защиты около 0.6 А. Его можно уменьшить - транзисторы моста выдержат нагрузку до 2А, но тогда им понадобится теплоотвод. К сожалению друг мой от этой схемы отказался, так что печатная плата не разрабатывалась. Тестирование на макетной плате (см. видео) дало хороший результат. Надеюсь, эти решения смогут кому-то пригодиться. Рабочий скетч: PIKO_discrete.ino (можно смотреть обычным текстовым редактором) Видео работающего макета: https://disk.yandex.ru/client/disk/Видео?idApp=client&display=normal&groupBy=none&order=1&sort=name&view=list&typeClustering=geo&action=null&idAlbum=undefined&dialog=slider&idDialog=%2Fdisk%2FВидео%2F00138.mp4
  4. myhhyk

    Timer1 PWM AtMega8A

    .include "m8adef.inc" .cseg main1: LDI R16,Low(RAMEND) ; тут стэк инициализирую OUT SPL,R16 ; LDI R16,High(RAMEND) OUT SPH,R16 ldi r20,1 reset: ldi r16,$02;--ICR1H значение $222 при заданом режиме счетчик должен считать до $222 и сбрасывать в ноль ldi r17,$22;--ICR1L OUT ICR1H,r16;--выводим сначала старший байт, как учили OUT ICR1l,r17;--затем младший ldi r16,$1;---OCR1AH при значении $1AA должен менять пин OCR1A ldi r17,$AA;--OCR1AL OUT OCR1AH,r16;--старший OUT OCR1AL,r17;--и младший ldi r17,$82;--TCCR1A режим такой: WGM-1110 COM-10 ldi r16,$19;--TCCR1B OUT TCCR1B,r16 OUT TCCR1A,r17 ldi r16,$FF OUT DDRB,r16;-- порт б на выход main:;--должны получать шим rjmp main Здравствуйте, помогите пожалуйста. Хочу сделать плавное включение светодиода с помощью ШИМа и Timer1,чтобы плавненько было. Устанавливаю WGM 1110 т.е. быстрый шим и со счетом до ICR1, а счетчик считает почему то до $1ff и потом начинает уменьшать счет до нуля, т.е. как будто я выбрал режим WGM 0110 быстрый ШИМ 9 бит. Пробовал всякие разные комбинации. На значения COM не обращаю пока, он просто меняет момент срабатывания пина, мне нужно, чтобы я мог задавать до скольки считать, потом чтобы в ноль счетчик сбрасывался и менялось состояние пина по OCR1A.В общем принцип работы Timer2, только чтобы счет был больше. Помогите плиз :*) Ах да, AtMega8A микроконтроллер.
  5. Всем привет! Дано: Контроллер подсветки рабочей зоны кухни, реализованный на Tiny 13A. Светодиодная лента длиной 2,3 метра, led 5050, 120 светодиодов/метр. Принципиальная схема устройства ниже: Код прошивки: #include <tiny13.h> #include <delay.h> int triggered = 0; int ontimer = 0; void main(void) { // Input/Output Ports initialization // Port B initialization // Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=Out DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0); // State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=0 PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 37,500 kHz // Mode: Fast PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Disconnected // Timer Period: 6,8267 ms // Output Pulse(s): // OC0A Period: 6,8267 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (0<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; while (1) { if (PINB.1==1) { triggered = 1; ontimer = 60; }; if (ontimer > 0) { ontimer--; } else { triggered = 0; }; if (triggered) { if (OCR0A<255) { OCR0A++; }; } else { if (OCR0A>0) { OCR0A--; }; }; delay_ms(10); } } Возникшая проблема: Греется полевой транзистор при работе. Изначально поискав информацию на данную проблему, начал прикидывать. Смотрим график зависимости пропускаемого тока стока (ID )от приложенного напряжения затвор-сток (VGS), при температуре окруж. среды 25 градусов: ID = 14 А (2,3 метра светодиодной ленты не могут столько кушать, по крайней мере я такую не видел). Было предположение что частота переключения ШИМ высокая - отсюда транзистор в не определенном состоянии = нагрев. Рассчитал макс. частоту так: Rg = 100 Ом, Vgs = 5V Заряд затвора: Qiss = Ciss * Vgs = 1800pF * 5v = 9nC Скрость нарастания: S = Rgate * Qiss = 100Ohm * 9nC = 0.009mV*sec Время на открытие или закрытие транзистора: t=S / Vgs = 0.002mV*sec * 3.2v = 4.5uSec Период - это открытие + закрытие: T = t + t = 4.5uSec + 4.5uSec = 9uSec Максимальная частота переключения: F < 1 / T = 1 / 9uSec = 111KHz Ток через затвор (G) и цифровой выход Tiny 13A: I = Qiss / t = 2mA Максимальный выходной ток GPIO у Tiny 13A 40.0mA 2mA < 40.0mA Выставил частоту ШИМ на 37,5 кHz. Вуаля - при подключении 1м светодиодной ленты (тестировал на обрезке), нагрева нет. Но как только подключил все 2,3 метра - транзистор стал снова спустя время греться, аж дотронуться не возможно. Захотел померить ток, который потребляет 1 метр ленты, проверить продавца. Потребление 1 метра ленты оказалось вместо заявленных 600 мА, все 1,85 А, причем заметил странную вещь - ток начал возрастать спустя время на сотые доли и дошел до 1,9 А. Дальше ждать не стал. Режим амперметра в мультиметре сломался? Далее подумал что слишком большая мощность рассеивается на транзисторе. Если учесть то, что при открытом транзисторе, его переход можно представить в виде линейного резистора с маленькой величиной сопротивления, можно рассчитать рассеиваемую мощность на транзисторе: Смотрим сопротивление транзистора в открытом состоянии при VGS = 5В : RDS(on) = 0.18 Ом P1 = 1,9*1,9*0,18 = 0,65 Вт. (1 метр св.ленты). Раз мы взяли потребление 1 метра ленты 1, 9 А, тогда 2,3 метра потребляют = 4,4 А. (Теперь не уверен в своем мультиметре). P2=4.4*4.4*0.18 = 3.5 Ватт - довольно таки многовато я думаю. В общем: Правильно ли я делаю расчеты? Что упустил? Как снизить нагрев транзистора, без применения вентиляторов и здоровенных радиаторов? Есть вариант замены светодиодной ленты на что нибудь поменьше жрущее (60 светодиодов/ метр например), но в будущем еще много раз придется сталкиваться с полевиками, хотелось бы разобраться .
  6. Здравствуйте, уважаемые пользователи сайта "ПАЯЛЬНИК". Мне очень необходима Ваша квалифицированная помощь в разработке устройства контроля параметров ветрогенераторной установки. В общем объеме устройство должно выполнять 5 основных функций: 1. Заряд аккумуляторных батарей 48В 200Ач. 2. Стабилизация оборотов ветроколеса. 3. Сброс излишка энергии на 4 или 6 нагревательных ТЭНОВ по 24В каждый, с поочерёдным их включением по мере увеличения излишка энергии. 4. Контроль напряжения сети с переключение в аварийный режим (работа на инвертор). 5. Вывод информации на LCD и организация меню пользователя. В качестве микроконтроллера буду использовать ATMega16. Для заряда АКБ и для работы на ТЭНы планирую использовать 2 канала. Каждый из каналов будет состоять из TL494 + драйвер + два MOSFETа в режиме полумоста с обратными связями по напряжению и току + LC-фильтр. Каналы будут управляться микроконтроллером двумя портами ШИМ через RC-фильтры. Для индикации планирую использовать символьный LCD 20x2. Логику работы устройства вижу так: С одной из фаз 3-х фазного ветрогенератора снимаем показания частоты, запоминаем. Проводим повторный замер и сравниваем с предыдущим. Если частота растёт добавляем нагрузку на колесо с помощью управления каналами АКБ и (или) ТЭНов. Если частота падает - уменьшаем нагрузку. Постоянно выполняем замер напряжения и тока по 2-м каналам и выводим значения на дисплей. Как только аккумулятор достигает заряженного состояния, переходим в режим работы с ТЭНами и включаем 1-й ТЭН при максимальной скважности, следим за оборотами, регулируем нагрузку и т.д. 2,3,4-й ТЭНы. Кто может что добавить или посоветовать? Интересует всё от начала и до конца: советы, схемные решения, помощь в расчёте выходного дросселя, оптимизация и т.д. Всё изготовленное мною будет иметь подробный фотоотчёт до самого конца, пока устройство не будет на 100% завершено. Все схемы и исходники будут доступны. По сути мы можем вместе создать устройство, необходимое очень многим людям. Заранее всем спасибо!!!
  7. Здравствуйте, дорогие форумчане, хочу задать вопрос знающим людям. Нашел в интернете схему управления вентилятором при помощи драйвера вот по схеме приведенной на рисунке. Что про нее скажете, какие замечания? Сколькими вентиляторами можно управлять по такой схеме взяв в расчет то что сила тока одного примерно 120-200 мА ? Ваше мнение очень важно, так как я хочу транзисторы заказать в китае, а ждать месяц, чтобы в итоге спаять нерабочее барахло тот еще резон... Заранее спасибо
  8. Если какая-нибудь профессиональная литература на русском, в которой приводились бы сведения о преимуществах симметричной ШИМ, областях применения?
  9. Приветствую дорогое сообщество, прошу помощи в реализации проекта- дрифт трайка для детворы, а именно в создании контроллера для мотор-колеса управляемого с ардуино. Сам трайк я построил еще летом, и тогда использовал дешевый китайский контроллер для запуска двигателя, вот пробный заезд как видно из видео, мне необходимо отталкиваться чтобы стартануть, это происходит из за отсутствия датчиков холла, и мой вес ему трудно сдернуть с места чтобы потом понимать куда крутиться колесо и уже его дальше крутить. С того времени было решено построить свой контроллер для управления, а также был сделан апгрейд колеса и встроены датчики холла. Так как времени было всегда в обрез, занимался мало этим делом, но вот, праздники и можно малость поработать. Для начала подключил датчики холла к ардуине, убедился что прилетают все данные и написал простую программу по вращению колеса. Данная программа работает без проблем с моторчиком от сдрома - проверенно, прилагаю... //throttle const int analogInPin1 = 22; //hall input int hall_sensor_a = 7; int hall_sensor_b = 2; int hall_sensor_c = 4; //Motor setup const int a_motor_lout = 3; const int a_motor_pwm_hout = 9; const int b_motor_lout = 6; const int b_motor_pwm_hout = 11; const int c_motor_lout = 10; const int c_motor_pwm_hout = 5; void setup(){ // Serial.begin(9600); pinMode(a_motor_lout, OUTPUT); pinMode(a_motor_pwm_hout, OUTPUT); pinMode(b_motor_lout, OUTPUT); pinMode(b_motor_pwm_hout, OUTPUT); pinMode(c_motor_lout, OUTPUT); pinMode(c_motor_pwm_hout, OUTPUT); pinMode(hall_sensor_a, INPUT); pinMode(hall_sensor_b, INPUT); pinMode(hall_sensor_c, INPUT); } void loop(){ /* int A; A = 11111; Serial.println(digitalRead(7)); Serial.println(digitalRead(2)); Serial.println(digitalRead(4)); Serial.println(A); */ while(1){ int val = analogRead(analogInPin1); val = constrain(val, 211, 830); int thLevel = map(val, 211, 830, 50, 0); if ( thLevel <= 45){ // int thLevel = 0; delay(thLevel); if (digitalRead(hall_sensor_a)==1 && digitalRead(hall_sensor_b)==0 && digitalRead(hall_sensor_c)==1){ digitalWrite(a_motor_pwm_hout,1);digitalWrite(a_motor_lout,0);digitalWrite(c_motor_lout,0); digitalWrite(b_motor_pwm_hout,0);digitalWrite(b_motor_lout,1);digitalWrite(c_motor_pwm_hout,0); delay(thLevel);} else { if (digitalRead(hall_sensor_a)==0 && digitalRead(hall_sensor_b)==0 && digitalRead(hall_sensor_c)==1){ digitalWrite(a_motor_lout,0);digitalWrite(c_motor_pwm_hout,0);digitalWrite(c_motor_lout,1); digitalWrite(b_motor_pwm_hout,0);digitalWrite(b_motor_lout,0);digitalWrite(a_motor_pwm_hout,1); delay(thLevel);} else { if (digitalRead(hall_sensor_a)==0 && digitalRead(hall_sensor_b)==1 && digitalRead(hall_sensor_c)==1){ digitalWrite(c_motor_pwm_hout,0);digitalWrite(b_motor_lout,0);digitalWrite(a_motor_lout,0); digitalWrite(b_motor_pwm_hout,1);digitalWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,1); delay(thLevel);} else { if (digitalRead(hall_sensor_a)==0 && digitalRead(hall_sensor_b)==1 && digitalRead(hall_sensor_c)==0){ digitalWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_pwm_hout,0);digitalWrite(a_motor_lout,1); digitalWrite(b_motor_lout,0);digitalWrite(c_motor_lout,0);digitalWrite(b_motor_pwm_hout,1); delay(thLevel);} else { if (digitalRead(hall_sensor_a)==1 && digitalRead(hall_sensor_b)==1 && digitalRead(hall_sensor_c)==0){ digitalWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_pwm_hout,1);digitalWrite(c_motor_lout,0); digitalWrite(b_motor_lout,0);digitalWrite(a_motor_lout,1);digitalWrite(b_motor_pwm_hout,0); delay(thLevel);} else { if (digitalRead(hall_sensor_a)==1 && digitalRead(hall_sensor_b)==0 && digitalRead(hall_sensor_c)==0){ digitalWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,0);digitalWrite(b_motor_pwm_hout,0); digitalWrite(b_motor_lout,1);digitalWrite(a_motor_lout,0);digitalWrite(c_motor_pwm_hout,1); delay(thLevel);} }}}}} } else{ digitalWrite(a_motor_pwm_hout,0);digitalWrite(c_motor_lout,0);digitalWrite(b_motor_pwm_hout,0); digitalWrite(b_motor_lout,0);digitalWrite(a_motor_lout,0);digitalWrite(c_motor_pwm_hout,0); }}} далее имеются в руках только N-channel мосфеты STP75NF75 которые решил завести с помощью драйвера HIP4086 нарисовал схему, вытравил плату, так как не очень удобно было к его ногам прицепиться(хотя пытался), пытаюсь запустить, а он не подает жизни :(. На двух выходах драйвера к мосфетам всегда высокий уровень(+12), и что бы я не подавал на входы, все молчит. Ранее когда пытался завести похожее но на базе транзисторов, то хоть мотор ногами дергал, но не крутился, а сейчас вообще тишина. Ни мосфеты, ни другие элементы на плате не греются. Не могу ума приложить что не так тут и как проверить еще... Буду признателен за любые комментарии.
  10. Всем доброго дня, Начинаю изучать STM32. Запустил пример http://www.avislab.com/blog/stm32-timer-pwm/ в котором при нажатии двух кнопок увеличивается и уменьшается яркость на ножке PB6 все работает. Хотел переключить ШИМ на другую ножку в 28 строке поменял GPIO_Pin_6 на GPIO_Pin_7 переключил светодиод на PB7 код не работает. Подскажите что я не правильно делаю?
  11. Имеется микроконтроллер dsPIC30F5011. Хочу реализовать на нём ШИМ через Output Compare Module, так как у этого модуля есть как раз режим PWM. Всё проинициализировал, задал период и коэффициент заполнения ШИМ (duty cycle - 50%), выбрал Timer2. На соответствующей ноге тыкаюсь осциллографом, ничего нет. Не могу понять в чём проблема. Вроде по даташиту настроил правильно. #define PERIOD_PWM 12484 #define PERIOD_PWM_div2 6242 WriteTimer2 (0); OpenTimer2 (T2_ON & T2_GATE_OFF & T2_IDLE_STOP & T2_PS_1_8 & T2_32BIT_MODE_OFF & T2_SOURCE_INT, PERIOD_PWM); ConfigIntTimer2 (T2_INT_PRIOR_5 & T2_INT_ON); OpenOC3(OC_IDLE_STOP & OC_TIMER2_SRC & OC_PWM_FAULT_PIN_ENABLE, PERIOD_PWM, PERIOD_PWM_div2); ConfigIntOC3(OC_INT_PRIOR_0 & OC_INT_ON); void __attribute__((interrupt, auto_psv)) _T2Interrupt(void) { IFS0bits.T2IF = 0; // Clear Timer interrupt flag Nop(); } void __attribute__((interrupt, auto_psv)) _OC3Interrupt(void) { IFS1bits.OC3IF = 0; // Clear interrupt flag } dsPic30F5011-5013.pdf
  12. Прошу помощи сообщества в решении такой проблемы. Имеем Attiny13 задачей которой стоит формирование ШИМ сигнала, скважность задаём состояние входов PB4 PB3 PB2. Загвоздка в том, что не могу заставить тиньку сменить скважность, несмотря на то, что на прерывание по состоянию входов реагирует, значения в OCR0A заносит. Маленькое замечание в железе не делал, только в Proteus. Код: #define F_CPU 9600000 #include <avr/io.h> #include <avr/eeprom.h> #include <avr/interrupt.h> volatile bool SetMode_flag = false; volatile char Select_Mode = 0; //------------------------------------------------- void PWM_init() { //Порты PB0 и PB1 устанавливаем на выход, остальные на вход DDRB = 0b00000011; //Входные порты PINB0 и PINB1 в HIGH, остальные в Pull-UP PORTB = 0b00111111; //Разрешаем прерывания PCINT1 - по изменению вывода GIMSK |= (1<<PCIE); //Накладываем маску на выводы PCMSK |= (1<<PINB4) |(1<<PINB3) |(1<<PINB2); //Запрещаем все прерывания пo совпадению и переполнению TIMSK0 = 0x00; //Устанавливаем режим работы таймера в режиме ШИМ с фазовой коррекцией TCCR0A |= (1<<COM0A1) |(1<<COM0B1) |(0<<WGM01) |(1<<WGM00); TCCR0B |= (1<WGM02); //Предделитель частоты уставливаем clk\1024 или приблизительно 18Гц // Fclk_I/O //Fpcpwm = -------- (N предделитель 1, 8, 64, 256, 1024) // N *510 TCCR0B |= (1<<CS02) |(0<<CS01) |(1<<CS00); //Обнуляем счётный регистр TCNT0 = 0x00; } //------------------------------------------------- ISR (PCINT0_vect) { SetMode_flag = true; // Устанавливаем флаг события Select_Mode = (PINB >> 2); //Сохраняем значение со сдвигом младших разрядов } //------------------------------------------------- int main(void) { PWM_init(); sei(); while (1) { if (SetMode_flag) { switch ( Select_Mode ) { case 0: OCR0A = 0; break; // ШИМ выключен case 1: OCR0A = 40; break; //Скважность 15% case 2: OCR0A = 80; break; //Скважность 30% case 3: OCR0A = 120; break; //Скважность 45% case 4: OCR0A = 150; break; //Скважность 60% case 5: OCR0A = 180; break; //Скважность 75% case 6: OCR0A = 210; break; //Скважность 90% case 7: OCR0A = 255; break; //Включен постоянно default: break; } SetMode_flag = false; //Сбрасывем флаг } } } main.cpp PWM neew.pdsprj
  13. Здравствуйте. Делаю ночник с плавно меняющимися цветами, в корпусе недорогого светильника, который включается в полной темноте. Включение/отключение реализовал через фоторезистор и составной транзистор. Для МК atMega8 в DIP-корпусе места в корпусе уже впритык. Думал напрямую к пинам подключить RGB-светодиод, но, внезапно, обнаружил, что они у меня с общим анодом. На макетной плате собрал с 3-мя транзисторами, работает. Но можно ли обойтись без транзисторов? Это дополнительные 6 элементов... Сейчас задам, возможно, сумасшедший вопрос, но если подключить светодиод катодами к пинам, а анод на +5 вольт ? Будет ли это работать как обратный сигнал ШИМ (т.е. при скважности 10%, обратная величина - 90%)? Или это просто загубит МК?
  14. Здравствуйте! Ткните пожалуйста носом начинающего, как в Arduino IDE настроить частоту ШИМ. Работаю с STM32F103, функции analogWrite(*); pwmWrite(*); Этими функциями задаю номер порта и коэффициент заполнения.
  15. Добрый день. На ногу МК извне подается ШИМ. По условию задачи этот ШИМ может иметь только две длительности высокого уровня - Т1 и Т2 мс (соответственно если измерить эти длительности, то это будет N1 и N2 отсчетов). Далее, если детектируется длительность T1, то нужно выполнять функцию func1, а если длительность T2 - то func2. Пример: пусть в начальный момент у нас МК детектирует T1. Далее пользователь что-то сделал (на переключатель нажал), длительность импульса стала T2. В этот момент надо, чтобы произошло прерывание. Снова пользователь нажал (вернул переключатель в начальное положение). Длительность стала снова T1. В этот момент надо, чтобы произошло прерывание. Если измерять ШИМ с помощью таймеров, то будет генерироваться прерывание. Таким образом основная программа будет выполняться прерывно, пока ШИМ вовсе не исчезнет. Можно ли как-нибудь детектировать длительность ШИМ где-нибудь в фоновом режиме, чтобы основная программа работала непрерывно? А если длительность вдруг изменится, то вот тут уже пусть сработает какое-нибудь прерывание.
  16. Добрый день. Возникла необходимость регулировать обороты DC двигателя 12V 100W, собрал схему, подобную этой: Питаю от сетевого трансформатора через диодный мост. И лампы L1 у меня нет. Столкнулся со следующей проблемой: при подключении небольшой нагрузки (резистор 100 ом) схема работает корректно, напряжение на резисторе меняется от 2 до 14 вольт. Но как только я подключаю более мощную нагрузки (лампочку 55ватт или электродвигатель) на C3 у меня откуда-то появляется напряжение в 45 вольт, U2 уходит в защиту и U1 отключается. Почитал в инетике что параллельно мосфету и нагрузке ставят защитные диоды. Я добавил диоды шоттки но ничего не изменилось. Что я делаю не так? Подскажите пожалста. В конечном виде моя схема выглядит так:
  17. Добрый вечер. Интересует шим диммер для ардуино с использованием nosfet транзистора и диодного моста 20-40 ампер. На буржуйских форумах встречаются такие диммеры для освещения до 1-3 ампер. Так как начинающий радиолюбитель, пока не могу точно определить номиналы деталей. Вот примеры схем: 1 , 2 , 3 есть ещё интересный пример.
  18. Приветствую! Кто знает, подскажите, возможно ли использовать PWM контроллер для заряда Li-ion банок собранных на 12В? По умолчанию везде кислотные АБ. Или нужен дополнительный контроллер заряда? А может быть есть специальные контроллеры? Задача простая. Хочу использовать вот такой солнечный модуль: и получить USB для зарядки девайсов
  19. Здравствуйте. Я новичок в приборостроении. Появилась у меня необходимость в контроллере заряда аккумуляторных батарей. Вместо покупки готового изделия я решил изготовить своё. Т.к. развожу плату в первый раз, то имею некоторые сомнения по поводу правильности произведённых мной действий. Помогите их развеять, или направьте к правильному решению. Контроллер состоит из корпуса, экрана, датчика тока(модульный), датчиков напряжения, трёх кнопок, трёх контактных колодок, преобразователя-стабилизатора на 5v(1А) и ардуины нано. Разведённая мной схема: Схема не окончательная, некоторые моменты монтажа не учтены. Меня в частности интересует мнение по поводу выполненного делителя напряжения(4 резистора подряд). Так же интересует верно ли разведены массы. Например в делителе использована самая грязная масса. Это сильно плохо, или лучше как то переделать? Дополню. Размер корпуса(отмечен белым на схеме) от края до края: 95ммX95мм Колодки: Первая контактная колодка - ввод(24V,5A макс). Вторая колодка - регулируемый шимом вывод. Третья колодка - подключение доп устройств(просто ключ, 1A макс).
  20. Всем привет! Я на форуме новичок, но скорей всего задержусь)) Проблема вот в чем. Прислал мне мой знакомец схему, как собрать плавное управление эл.магнитной муфтой центрального дифференциала. Схема не особо мудрёная, он даже запчастей мне дал, типа, "на, братан, собирай!") Только вот беда, почему-то работать адекватно это не хочет даже с лампочкой, к машине я даже подходить пока боюсь) Уже голову сломал себе и ему, что не так. Вдруг вы поможете, товарищи? Выкладываю схемы, что он прислал и что в итоге я наваял. Надеюсь, все подписал) Муфта потребляет порядка 7-8А, должна управляться в диапазоне 0-12В
  21. Я верно понимаю, что вектор для прерывания по достижению счетчиком PWM значения TOP совпадает с вектором для переполнения этого же счетчика?
  22. Здравствуйте. У друга сгорело зарядное . На данный момент я имею диодный мост , тиристор, и силовой трансформатор. У меня завалялся IGBT транзистор с током К-Э до 40 ампер, Транзистор FGH40N60. Я подумал что можно применить его в качестве ключа и управлять и с помощью ШИМ. Шим успешно собран на 555 и работает на 1 Кгц. Сильно повышать частоту ? и как управлять выходом с 555 транзистором IGBT. Скажу сразу, что я пробовал выход открытого коллектора подтянутый к V+ 10ком., управление транзистором через резистор 100-1000ом , потом поставил перед ним два комплиментарных транзистора биполярных на которые подал выход открытого коллектора подтянутый к питанию . Результат один - очень сильный нагрев и просаживание выхода на тока менее 3 ампер. Во время экспериментов доставшийся IGBT я конечно же сжег( подскажите , имеет ли смысл такое управление током на одном транзисторе +PWM и как управлять IGBT с помощью 555.
  23. Подскажите, как рассчитать параметры элементов сглаживающего фильтра (L1, C1, C2), зная частоту (период) ШИМ, мощность (ток) нагрузки и напряжение питания?
  24. Тема посвящена контроллеру подсветки приборной панели, опубликованному в этой статье. Принимаю предложения по развитию данного устройства, критику, и прочее.
  25. О подключении мощной нагрузки к Arduino через MOSFET-транзистор. Управление вентилятором при помощи ШИМ. Увеличение частоты ШИМ на Arduino. Создание простой системы управления кулером в зависимости от температуры (применен сенсор DS18B20) Работа с DS18B20 Статьи про ШИМ Таблица значений регистров для повышения частоты ШИМFAN_PWM.zip FAN_Temperature.zip OneWire.zip irl3705n.pdf 4_Wire_PWM_Spec.pdf
×
×
  • Create New...