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
    • Обсуждение материалов с сайта
    • Competition 2019
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
  • Товары и услуги
  • Разное
  • Переделки's ATX->ЛБП
  • Переделки's разные темы
  • Киловольты юмора's Юмор в youtube
  • Радиолюбительская доска объявлений exDIY's Надежность и группы продавцов

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 44 results

  1. Доброго времени суток всем. Для своей новой жены захотелось мне сделать сердечко на 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); } } }
  2. Позвонил мне как-то старый друг и попросил совета - чем ему запитать старую детскую железную дорогу 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
  3. 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 микроконтроллер.
  4. Всем привет! Дано: Контроллер подсветки рабочей зоны кухни, реализованный на 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 светодиодов/ метр например), но в будущем еще много раз придется сталкиваться с полевиками, хотелось бы разобраться .
  5. Если какая-нибудь профессиональная литература на русском, в которой приводились бы сведения о преимуществах симметричной ШИМ, областях применения?
  6. Здравствуйте, дорогие форумчане, хочу задать вопрос знающим людям. Нашел в интернете схему управления вентилятором при помощи драйвера вот по схеме приведенной на рисунке. Что про нее скажете, какие замечания? Сколькими вентиляторами можно управлять по такой схеме взяв в расчет то что сила тока одного примерно 120-200 мА ? Ваше мнение очень важно, так как я хочу транзисторы заказать в китае, а ждать месяц, чтобы в итоге спаять нерабочее барахло тот еще резон... Заранее спасибо
  7. Всем доброго дня, Начинаю изучать STM32. Запустил пример http://www.avislab.com/blog/stm32-timer-pwm/ в котором при нажатии двух кнопок увеличивается и уменьшается яркость на ножке PB6 все работает. Хотел переключить ШИМ на другую ножку в 28 строке поменял GPIO_Pin_6 на GPIO_Pin_7 переключил светодиод на PB7 код не работает. Подскажите что я не правильно делаю?
  8. Имеется микроконтроллер 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
  9. Прошу помощи сообщества в решении такой проблемы. Имеем 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
  10. Здравствуйте! Ткните пожалуйста носом начинающего, как в Arduino IDE настроить частоту ШИМ. Работаю с STM32F103, функции analogWrite(*); pwmWrite(*); Этими функциями задаю номер порта и коэффициент заполнения.
  11. Добрый день. На ногу МК извне подается ШИМ. По условию задачи этот ШИМ может иметь только две длительности высокого уровня - Т1 и Т2 мс (соответственно если измерить эти длительности, то это будет N1 и N2 отсчетов). Далее, если детектируется длительность T1, то нужно выполнять функцию func1, а если длительность T2 - то func2. Пример: пусть в начальный момент у нас МК детектирует T1. Далее пользователь что-то сделал (на переключатель нажал), длительность импульса стала T2. В этот момент надо, чтобы произошло прерывание. Снова пользователь нажал (вернул переключатель в начальное положение). Длительность стала снова T1. В этот момент надо, чтобы произошло прерывание. Если измерять ШИМ с помощью таймеров, то будет генерироваться прерывание. Таким образом основная программа будет выполняться прерывно, пока ШИМ вовсе не исчезнет. Можно ли как-нибудь детектировать длительность ШИМ где-нибудь в фоновом режиме, чтобы основная программа работала непрерывно? А если длительность вдруг изменится, то вот тут уже пусть сработает какое-нибудь прерывание.
  12. Добрый день. Возникла необходимость регулировать обороты DC двигателя 12V 100W, собрал схему, подобную этой: Питаю от сетевого трансформатора через диодный мост. И лампы L1 у меня нет. Столкнулся со следующей проблемой: при подключении небольшой нагрузки (резистор 100 ом) схема работает корректно, напряжение на резисторе меняется от 2 до 14 вольт. Но как только я подключаю более мощную нагрузки (лампочку 55ватт или электродвигатель) на C3 у меня откуда-то появляется напряжение в 45 вольт, U2 уходит в защиту и U1 отключается. Почитал в инетике что параллельно мосфету и нагрузке ставят защитные диоды. Я добавил диоды шоттки но ничего не изменилось. Что я делаю не так? Подскажите пожалста. В конечном виде моя схема выглядит так:
  13. Приветствую дорогое сообщество, прошу помощи в реализации проекта- дрифт трайка для детворы, а именно в создании контроллера для мотор-колеса управляемого с ардуино. Сам трайк я построил еще летом, и тогда использовал дешевый китайский контроллер для запуска двигателя, вот пробный заезд как видно из видео, мне необходимо отталкиваться чтобы стартануть, это происходит из за отсутствия датчиков холла, и мой вес ему трудно сдернуть с места чтобы потом понимать куда крутиться колесо и уже его дальше крутить. С того времени было решено построить свой контроллер для управления, а также был сделан апгрейд колеса и встроены датчики холла. Так как времени было всегда в обрез, занимался мало этим делом, но вот, праздники и можно малость поработать. Для начала подключил датчики холла к ардуине, убедился что прилетают все данные и написал простую программу по вращению колеса. Данная программа работает без проблем с моторчиком от сдрома - проверенно, прилагаю... //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), и что бы я не подавал на входы, все молчит. Ранее когда пытался завести похожее но на базе транзисторов, то хоть мотор ногами дергал, но не крутился, а сейчас вообще тишина. Ни мосфеты, ни другие элементы на плате не греются. Не могу ума приложить что не так тут и как проверить еще... Буду признателен за любые комментарии.
  14. Добрый вечер. Интересует шим диммер для ардуино с использованием nosfet транзистора и диодного моста 20-40 ампер. На буржуйских форумах встречаются такие диммеры для освещения до 1-3 ампер. Так как начинающий радиолюбитель, пока не могу точно определить номиналы деталей. Вот примеры схем: 1 , 2 , 3 есть ещё интересный пример.
  15. Приветствую! Кто знает, подскажите, возможно ли использовать PWM контроллер для заряда Li-ion банок собранных на 12В? По умолчанию везде кислотные АБ. Или нужен дополнительный контроллер заряда? А может быть есть специальные контроллеры? Задача простая. Хочу использовать вот такой солнечный модуль: и получить USB для зарядки девайсов
  16. Здравствуйте. Я новичок в приборостроении. Появилась у меня необходимость в контроллере заряда аккумуляторных батарей. Вместо покупки готового изделия я решил изготовить своё. Т.к. развожу плату в первый раз, то имею некоторые сомнения по поводу правильности произведённых мной действий. Помогите их развеять, или направьте к правильному решению. Контроллер состоит из корпуса, экрана, датчика тока(модульный), датчиков напряжения, трёх кнопок, трёх контактных колодок, преобразователя-стабилизатора на 5v(1А) и ардуины нано. Разведённая мной схема: Схема не окончательная, некоторые моменты монтажа не учтены. Меня в частности интересует мнение по поводу выполненного делителя напряжения(4 резистора подряд). Так же интересует верно ли разведены массы. Например в делителе использована самая грязная масса. Это сильно плохо, или лучше как то переделать? Дополню. Размер корпуса(отмечен белым на схеме) от края до края: 95ммX95мм Колодки: Первая контактная колодка - ввод(24V,5A макс). Вторая колодка - регулируемый шимом вывод. Третья колодка - подключение доп устройств(просто ключ, 1A макс).
  17. Здравствуйте. Делаю ночник с плавно меняющимися цветами, в корпусе недорогого светильника, который включается в полной темноте. Включение/отключение реализовал через фоторезистор и составной транзистор. Для МК atMega8 в DIP-корпусе места в корпусе уже впритык. Думал напрямую к пинам подключить RGB-светодиод, но, внезапно, обнаружил, что они у меня с общим анодом. На макетной плате собрал с 3-мя транзисторами, работает. Но можно ли обойтись без транзисторов? Это дополнительные 6 элементов... Сейчас задам, возможно, сумасшедший вопрос, но если подключить светодиод катодами к пинам, а анод на +5 вольт ? Будет ли это работать как обратный сигнал ШИМ (т.е. при скважности 10%, обратная величина - 90%)? Или это просто загубит МК?
  18. Всем привет! Я на форуме новичок, но скорей всего задержусь)) Проблема вот в чем. Прислал мне мой знакомец схему, как собрать плавное управление эл.магнитной муфтой центрального дифференциала. Схема не особо мудрёная, он даже запчастей мне дал, типа, "на, братан, собирай!") Только вот беда, почему-то работать адекватно это не хочет даже с лампочкой, к машине я даже подходить пока боюсь) Уже голову сломал себе и ему, что не так. Вдруг вы поможете, товарищи? Выкладываю схемы, что он прислал и что в итоге я наваял. Надеюсь, все подписал) Муфта потребляет порядка 7-8А, должна управляться в диапазоне 0-12В
  19. Я верно понимаю, что вектор для прерывания по достижению счетчиком PWM значения TOP совпадает с вектором для переполнения этого же счетчика?
  20. Здравствуйте. У друга сгорело зарядное . На данный момент я имею диодный мост , тиристор, и силовой трансформатор. У меня завалялся IGBT транзистор с током К-Э до 40 ампер, Транзистор FGH40N60. Я подумал что можно применить его в качестве ключа и управлять и с помощью ШИМ. Шим успешно собран на 555 и работает на 1 Кгц. Сильно повышать частоту ? и как управлять выходом с 555 транзистором IGBT. Скажу сразу, что я пробовал выход открытого коллектора подтянутый к V+ 10ком., управление транзистором через резистор 100-1000ом , потом поставил перед ним два комплиментарных транзистора биполярных на которые подал выход открытого коллектора подтянутый к питанию . Результат один - очень сильный нагрев и просаживание выхода на тока менее 3 ампер. Во время экспериментов доставшийся IGBT я конечно же сжег( подскажите , имеет ли смысл такое управление током на одном транзисторе +PWM и как управлять IGBT с помощью 555.
  21. Подскажите, как рассчитать параметры элементов сглаживающего фильтра (L1, C1, C2), зная частоту (период) ШИМ, мощность (ток) нагрузки и напряжение питания?
  22. О подключении мощной нагрузки к Arduino через MOSFET-транзистор. Управление вентилятором при помощи ШИМ. Увеличение частоты ШИМ на Arduino. Создание простой системы управления кулером в зависимости от температуры (применен сенсор DS18B20) Работа с DS18B20 Статьи про ШИМ Таблица значений регистров для повышения частоты ШИМFAN_PWM.zip FAN_Temperature.zip OneWire.zip irl3705n.pdf 4_Wire_PWM_Spec.pdf
  23. Не могу разобраться с таймерами 2313. Мне нужен ШИМ на любой ножке. И что бы его можно было изменять кнопками(внешнее прерывание). А я даже не могу сделать просто ШИМ. На ATmega8 как-то всё проще. Помогите пожалуйста. //ATtiny2313A #include <avr/io.h> #include <avr/interrupt.h> void preset(void)//Функция преднастройки { DDRB |= 0xFF; DDRD |= 0x00; PORTD |= 0xFF; MCUCR |= (1«ISC01)|(0«ISC00)|(1«ISC11)|(0«ISC10); GIMSK |= (1«INT1)|(1«INT0); TIMSK |= (1«OCIE0A); TCCR0A |= (1«COM0A1)|(1«COM0A0)|(0«WGM01)|(1«WGM00); TCCR0B |= (0«WGM02)|(1«CS02)|(0«CS01)|(1«CS00); sei(); } ISR (INT1_vect)//++ { } ISR (INT0_vect)//-- { } int main(void) { preset(); while(1) { OCR0A =0x66; } } Что с кодом не так?
  24. В этой теме ждём всех интересующихся интерфейсами АВР. Например мне интересно как организовать USB.
  25. unk2k

    Atmega88 - 10 Pwm

    Доброго времени суток, Уважаемые! Имею задачу сделать 10 ШИМ со следующими характеристиками: — Кол-во шагов 1000 — Минимальная длинна импульса 10us — Максимальная длинна импульса 1000us — Тактовая чистота 100Hz Решать задачу я принялся через 8-ми битный таймер. Вот пример кода // Atmega88PU #include <avr/io.h> #define F_CPU 8000000 #include <avr/interrupt.h> #include <util/delay.h> void configure_pwm() { TIMSK0 |= (1 << TOIE0); // Enable overflow interrupt TCCR0A |= (1<<WGM00) | (1<<WGM01); TCCR0B |= (1<<CS00); // divide by as is sei(); } int main(void) { configure_pwm(); for (; { continue; } } volatile uint8_t pwm_speed[4] = {0}; volatile uint8_t pwm_pin[4] = {PORTC4, PORTD2, PORTD4, PORTD6}; volatile uint8_t * pwm_port[] = {&PORTC, &PORTD, &PORTD, &PORTD}; volatile uint8_t counter = 0x0; ISR(TIMER0_OVF_vect) { if (counter == 0xFF) { counter = 0x0; for (int i=0;i<=4;i++) { if (pwm_speed[i] != 0x00) { *pwm_port[i] |= (1 << pwm_pin[i]); } } return; } for (int i=0;i<=4;i++) { if (pwm_speed[i] == counter) { *pwm_port[i] |= (0 << pwm_pin[i]); } } counter++; } Ввиду того что новичок в С и в AVR то имею ряд вопросов: 1) Правильно ли я делаю? 2) Не будет ли отжирать 99.9% процесорного времени данная конструкция ? 3) Как делать правильно?
×
×
  • Create New...