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

Изменение Скважности Шима


evgesha53

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

Привет всем.Ни кто не подскажет примерный код,или алгоритм?

Задача вот такая.

Возможно-ли как нибудь реализовать изменение скважности или частоты следования импульсов,с одного разряда порта мк.?Если мк не имеет АЦП.На СИ

.Микроконтроллер семейства TINY/

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

Спасибо.

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Вот подробно разжевано как сделать ШИМ и как изменить его параметры - http://forum.roboclub.ru/IPBoard/index.php?showtopic=266

Но само-сабой не получится, надо читать и изучать.

АЦП для вашей задачи не нужен.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Спасибо большое.Я там читал.

Извиняюсь,за невнятность.Управление,должно производиться одним пином.Плавное изменение.

Например переменным резистором.Скорее наверное тема об аналоговом компараторе.

Извиняюсь.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

где-то была в инете схема для ПИКа "4 канальное пропорциональное радиоуправление" или что-то типа того. Там как раз тот принцип применялся, о котором ты говоришь. И исходники были, которые мона перделать под авер. Поищи, а то я искал, не нашел, видать сегодня не мой день)))

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

В целом-то надо наверное операторы которые в цикл вписать надо.Ну включу я компаратор.А толку.Как всё это плавно-то сделать.На выходе компаратора один бит.нуль,или один.Ну можно поменять со скважности например 70% на 50% и всё?Может он как-то включается на переключение туда обратно.Чтоб плавно 10-20-30 итд...

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

А как ты собираешься измерять напряжение с переменного резистора без аппаратного АЦП одним выводом?

В любом случае тебе прийдётся измерять входную аналоговую величину, для этого нужно делать АЦП, и одним выводом можно будет обойтись только в случае использования внешнего АЦП с однопроводным интерфейсом( посмотри у Далласа ).

Пока ты жив, надежда есть.

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

АЦП все которые в CVR с библиотеками бешеных денех стоят.Может кто нить ткнёт носом ,где написано как подружить не сложный однополярный внешний ацп с тинкой?Может по шине,SPI но это я без библиотеки с исходником не справлюсь.Или тинку с АЦП покупать,не хочется.У меня 2313 ящик.

Ищу нифига не наищу никак.Пойду спать,уже третий час ночи.

Всем спасибо.

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

Плавную регулировку можно организовать используя вход счетчика/таймера, а внешний генератор для счетчика собрать на 555 с плавной регулировкой. Таким образом можно обойтись без АЦП, кроме того можно сделать индикацию, правда, делать такое для регулировки скважности, мягко говоря, глупо, так как сам генератор на 555 мс. уже является генераторов с регулируемой скважностью, а для других целей, где требуется плавная регулировка, при отсутствии АЦП, вполне приемлемо. Если не ограничиваться только одним входом для регулировки (откуда такое ограничение), то красивее всего на энкодере, правда он и намного дороже (можно выпаять с неисп. магнитолы).

АЦП все которые в CVR с библиотеками бешеных денех стоят.Может кто нить ткнёт носом ,где написано как подружить не сложный однополярный внешний ацп с тинкой?Может по шине,SPI но это я без библиотеки с исходником не справлюсь.Или тинку с АЦП покупать,не хочется.У меня 2313 ящик.

Ошибаетесь, мс AVR с АЦП стоять недорого (напр. ATMEGA8), а использовать АЦП несложно и в ассемблере. Использовать внешний АЦП стоит лишь в том случае, если нужна точность >10 разрядов, что требуется в радиолюбительской практике крайне редко.

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

loox ну ,а если не ограничиваться одним входом,то как примерно?

А не покажете ,где почитать как это сделать на т-счётчике 555.Какая разница,глупо не глупо.Он будет регулировать мощность,а мк управлять всем остальным например.

Использовать внешний АЦП стоит лишь в том случае, если нужна точность >10 разрядов, что требуется в радиолюбительской практике крайне редко.

Тогда как по напряжению,или ещё как,например регулировать обороты асинхронного мотора.?

Это возможно на тини 2313.?

Ошибаетесь, мс AVR с АЦП стоять недорого (напр. ATMEGA8), а использовать АЦП несложно и в ассемблере

Мк с АЦП,да.А сами микросхемы АЦП,они-же все с сумасшедшей выборкой.

Мегу я пока вообще не знаю.

Я с огромным удовольствием обошёлся бы без АЦП.Но как?

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

...Ну так покажи людям, как это делается.

Думаю, Borisov_E не будет против если я объясню принцип: для измерения напряжения нужны два пина (один из них вход компаратора), таймер, внешняя rc-цепочка и logic level полевик. Примерная схема:

post-20311-1264325322_thumb.png

Работает просто:

1. В исходном состоянии полевик открыт - конденсатор разряжен

2. Запираем полевик и сразу запускаем таймер

3. Через некоторое время срабатывает компаратор. В обработчике его прерывания (лучше вообще захват, если МК позволяет) останавливаем таймер и запоминаем тики. Отключаем компаратор и таймер чтобы не мешали.

4. В основном цикле по известной зависимости (зная параметры RC-цепочки, время нарастания напряжения до определенного порога) находим искомое напряжение.

Разумеется параметры цепочки и частоту тактирования таймера нужно подобрать, чтобы минимизировать погрешность вычисления напряжения в определенных пределах при разумном времени измерения. Но ничего сверхъестественного в этом нет - работать будет. Единственное что - это два пина нужно, а не один...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Спасибо,в принципе понятно.Масса пересчётов.С пинами уже хрен-бы сними.Нет ничего попроще,чтоб в зависимости от входящего напряжения,происходили изменения.

Это наверное всё как-то на таймере надо сооружать.

Есть-же такие преобразователи,напряжение-частота.Может на нём,что-то никто не пробовал,или мне попробовать?

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

Нет ничего попроще,чтоб в зависимости от входящего напряжения,происходили изменения...

Так и при использовании АЦП изменения будут происходить только после обработки результатов измерения - тот же цикл, тоже сравнение только быстрей. Тут также, гоняете по циклу и все. За секунду 5-10 раз опросить можно. ИМХО, вполне достаточно...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

...находим искомое напряжение... в определенных пределах...

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

...Единственное что - это два пина нужно, а не один...

Это тоже верно. Я бы усовершенствовал этот метод таким образом( нужен ещё один пин :unsure: )

смотрите схему во вложении.

Заряжаем конденсатор до максимального опорного напряжения, затем закрываем ключ и запускаем счётчик, и ждём прерывание от компаратора. Такой метод позволит измерять меньшие напряжения.

sch1.pdf

Пока ты жив, надежда есть.

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

Мдяя... чел написал не от балды ...

Зато измерения будут от балды. Или уровни лог.0 и лог.1 хорошо детерминированы?..

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

Вобщем,решил взять два пина,что делать?Наверное изначально глупо было проектировать на одном.Всё усложнилось сильнее,чем я думал.

Так-как мк tiny2313,имеется возможность встроенного ШИМ, нашёл исходник,правда на мегу,надо разобраться,чтоб на тнку встала.

#include <mega16.h>

#include <delay.h>

// Declare your global variables here

void main(void)

{

// Declare your local variables here

// Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=P State0=P

PORTA=0x03;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T

PORTB=0x00;

DDRB=0x08;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTD=0x00;

DDRD=0x00;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: 125,000 kHz

// Mode: Fast PWM top=FFh

// OC0 output: Non-Inverted PWM

TCCR0=0x6B;

TCNT0=0x00;

OCR0=0x00;

while (1)

{

// Place your code here

if((PINA.0==0)&(OCR0!=0xff)) // увеличивать пока не достигло максиума

{

delay_ms(10); // задержка 10 мс.

OCR0+=1; //увеличиваем заполнение

}

if((PINA.1==0)&(OCR0!=0x00)) // уменьшать пока не достигло миниума

{

delay_ms(10); // задержка 10 мс.

OCR0-=1; //уменьшаем заполнение

}

};

}

Только не пойму,у тинки, OCR0 тот-же регистр.

Изменено пользователем evgesha53
Научитесь правильно использовать теги форума. Wowa.
Ссылка на комментарий
Поделиться на другие сайты

Сделал ШИМ с фазовой коррекцией для 2313Tiny.

Подскажите пожалуйсто, где оптимально правильно расположить код управления скважностью.

В цикле while ,или в процедуре прерывания.?

/*****************************************************
Chip type               : ATtiny2313
AVR Core Clock frequency: 4,000000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 32
*****************************************************/

#include <tiny2313.h>
#include <delay.h>

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if((PIND.0==0)&(OCR0A!=0xff)) // увеличивать пока не достигло максиума 
  { 
    delay_ms(10); // задержка 10 мс. 
    OCR0A+=1; //увеличиваем заполнение 
  } 
                if((PIND.1==0)&(OCR0A!=0x00)) // уменьшать пока не достигло миниума 
                  { 
                   delay_ms(10); // задержка 10 мс. 
                   OCR0A-=1; //уменьшаем заполнение         
                  }
}


void main(void)
{

CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


PORTB=0xFF;  // все разряды сконфигурированы как выводы
DDRB=0xFF;

PORTD=0x7F;  // все разряды сконфигурированы как входы и подтянуты.
DDRD=0x00;

TCCR0A=0xC1; //частота 15,625 khz.
TCCR0B=0x04; //Включён ШИМ с фазовой коррекцией PCPWM-режим до FF
TCNT0=0x00;  // OC0A выход(PORTB.2)инвертированный ШИМ
OCR0A=0x00;  // OC0B выход отключен
OCR0B=0x00;

TIMSK=0x02; //инициализация прерываний

ACSR=0x80;

#asm("sei") // разрешение прерываний

while (1)
     {
     // Place your code here

     };
}

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

Забудте раз и на всегда здержки в прерываниях !!! Используйте таймер, настроеный на те-же 10 мс. для уменьшения/увеличения скважности. Обработчик прерывания должен быть максимально коротким !

Добавьте програмный флаг (переменную), указывающий на то, что должно происходить со скважностью (+ или -), и в обработчике его проверяйте. В основном цикле заюзайте АЦП (или иной способ оцифровки) и рулите програмными флагами.

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

Извините,за несообразительность.

Просто я подумал,можно-же перенести программу регулировки в цикл while а обработку прерывания оставить пустой.

А процессор будет останавливать ход выполнения программы с задержкой delay в процедуре прерывания?

То-есть процедура прерывания станет на 10мс длиннее?Вообще прерывание должно происходить по любому,а потом вернуться по указателю стека.

С задержкой . Уберём функцию delay .И настроим второе прерывание по таймеру на 10 мс допустим Т1 по совпадению с регистром OCR1A.Как оно работать будет?Какую переменную ввести?. В какой обработке прерывания что находиться будет.?

Вобщем я запутался.

Если появится свободное время,помогите пожалуйста примером кода с комментарием.

Спасибо.

#include <tiny2313.h>
void wait1(void)


      { 
       TCNT1=0;
      while (TCNT1<100) {};  //процедура задержки
      }


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

}


void main(void)
{

CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif


PORTB=0xFF;  // все разряды сконфигурированы как выводы
DDRB=0xFF;

PORTD=0x7F;  // все разряды сконфигурированы как входы и подтянуты.
DDRD=0x00;

TCCR0A=0xC1; //частота 15,625 khz.
TCCR0B=0x04; //Включён ШИМ с фазовой коррекцией PCPWM-режим до FF
TCNT0=0x00;  // OC0A выход(PORTB.2)инвертированный ШИМ
OCR0A=0x00;  // OC0B выход отключен
OCR0B=0x00;

TCCR1A=0x00; //настройки таймера T1
TCCR1B=0x05;

TIMSK=0x02; //инициализация прерываний

ACSR=0x80;

#asm("sei") // разрешение прерываний

while (1)
     {
     if((PIND.0==0)&(OCR0A!=0xff)) // увеличивать пока не достигло максиума 
  { 
  wait1 (); // задержка . 
    OCR0A+=1; //увеличиваем заполнение 
  } 
                if((PIND.1==0)&(OCR0A!=0x00)) // уменьшать пока не достигло миниума 
                  { 
                  wait1 (); // задержка . 
                   OCR0A-=1; //уменьшаем заполнение         
                  }
     };
}

Так правильно будет???И вопрос актуален.Если это правильно,-код регулировки в цикле while правильно?Или он в процедуре прерывания должен быть,или пофигу?

А как правильно рассчитать задержку?Если TCNT=100?

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

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

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

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

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

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

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

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

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

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

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

    • Ваш ОУ NE5532P. подделка, на Али небось брали? 100руб ведро?   Он и их и режет.))
    • Вон справа от разьёма второй такой же, а он исправный? Почему решили что он неисправный? А сравнить их прозвонкой? А со схемой их включения разобрались? А ничего не сделав
    • Ясен красен, что фуфел. Вертеть надыть диск, либо совместно, ибо магнитное поле, созданное магнитом, оному не принадлежит, статично. Сиречь - флуктуация. П.С. ТРЕТИЙ ЗАКОН ЧИЗХОЛМА: Любые ваши предложения обязательно истолкуют иначе, чем вы их имеете в виду.
    • Земляная мекка, она же звезда работает лучше всего.
    • Попросил сотрудник отремонтировать фонарь со сгоревшей микросхемой заряда TP4056. Снял её с платки ломаного зарядника, поставил. Работает. Если заряд литиевого аккумулятора восстановил, то вот питание светодиодов оказалось сверхпримитивным - через одноваттные токоограничительные резисторы, что не совсем комильфо. И даже совсем не комильфо. В своё время затарился линейными стабилизаторами тока CN5711 (регулируемый до 1,5 А) и AMC7135 (фиксированный на 350 мА). Решил запитать пятиваттный светодиод фары Cree первым из них, с током 800 мА и одноваттный светодиод общей подсветки вторым. Фото дорожек платы после установки драйверов. AMC7135 обведен красным овалом, а CN5711 - зелёным. По центру вверху - замененная TP4056. Особых проблем с их монтажом не встретил, кроме единственной, решение которой и составило суть данного поста.  А именно: поскольку драйверы линейные, то они греются и монтировать их следует к медному теплоотводному полигону. Которого взять неоткуда. Поэтому применил старую наработку по пистонированию переходных отверстий на противоположную сторону платы латунными пистонами из Поднебесной диаметром 1 мм. Получилось два "массива" близко расположенных пистонов, к которым и были подпаяны "подбрюшья" драйверов. Обведены овалами соответствующих цветов. А уже к ним подпаяны медные "флажки", вырезанные из 0,3 мм шинки, бывшей вторичной обмоткой какого-то импульсного трансформатора (в красном овале). При длительной работе (более 10 минут) нижний "флажок" (красный) тёплый, а верхний (зелёный) горячий, но рука терпит. AMC7135.PDF CN5711.PDF
    • Гость Михаил
      Добрый день! Собрал данный фонокорректор на монтажной плате по схеме на первой странице на ОУ NE5532P. Стабилизированное питание +-12В. Голова ММ. Заработал сразу и звучит хорошо но есть несколько вопросов. Какой уровень шума у данного фонокорректора? При подключении питания он шумит сильнее чем встроенный в ресивер фонокорректор на ОУ AN6558F. Какие детали могут влиять на повышенный уровень? Все детали подобраны по номиналам схемы но не хватает высоких частот. Что можно изменить в схеме что бы немного их поднять?
×
×
  • Создать...