Serega4789 Опубликовано 30 апреля, 2022 Поделиться Опубликовано 30 апреля, 2022 Добрый день! нужно реализовать программный шим 3 канала частотой 16.66 период 60мкс пауза 10мкс и 3прерывания для кнопок. Есть наработки подобной проги на ассемблере хотя бы реализация шима? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 30 апреля, 2022 Поделиться Опубликовано 30 апреля, 2022 а че так скромно, всего 17кГц, сразу закладывайтесь на 100..200кГц програмнного ШИМа , самое оно будет. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Serega4789 Опубликовано 1 мая, 2022 Автор Поделиться Опубликовано 1 мая, 2022 мне надо импульс на трансорматор подавать 3 шт тр для управления тиристорами . Делал внешний генератор и схему управления норм работает, но громоздко получается. 21 час назад, IMXO сказал: а че так скромно, всего 17кГц, сразу закладывайтесь на 100..200кГц програмнного ШИМа , самое оно будет. 50мкс длина импульса 10мкс пауза 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Serega4789 Опубликовано 1 мая, 2022 Автор Поделиться Опубликовано 1 мая, 2022 n++; if (n> 4){PORTB |= 1<<5;}else{PORTB &= ~(1<<5);} if(n==10){n=0;} так делал ,не получается выдержать паузу 10 мкс 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serega4789 Опубликовано 3 мая, 2022 Автор Поделиться Опубликовано 3 мая, 2022 проблемы прерываниями! В режиме прерваний по порту B нормально работает только PORTB 4 , остальные срабатывают через 2 события . Прерывание и опрос например В7 вкл порт В2 срабатвает через 2 раза если увеличить частоту мк или снизить частоту прерываний (10гц) то норм. Делал в flowcode так бстрее 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 3 мая, 2022 Поделиться Опубликовано 3 мая, 2022 28 минут назад, Serega4789 сказал: В режиме прерваний по порту B нормально работает только PORTB 4 , остальные срабатывают через 2 события . вы пишите чушь. прерыванию абсолютно фиолетово по какому выводу прошло изменение состояния по 4, 5, 6, 7 или любой их комбинации, прерывание будет сгенеривовано. прерывание может быть потеряно: 1. если состояние пина поменялось на исходное до прочтения порта и сброса флага 2. если проводятся несколько чтений порта (последовательное чтение отдельных пинов) между которыми произошло изменение состояния. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serega4789 Опубликовано 4 мая, 2022 Автор Поделиться Опубликовано 4 мая, 2022 Позже скину схему в протеусе и проект программы. Проект диммер два канала с управлением пачкой импульсов. Т. К есть только прерывания на порт В0 и по всему порту логика такая: Ловлю прерывания по portB В прерывании опрос pB4 и pb7 В зовисимости какой из них 1 ка Взвожу флаг F1или F2, В ЦЫКЛЕ основной программы По флагам F1-2 вкл таймер открытия тиристора, после запуск пачки импульсов 400мкс Время вкл 50мкс выкл 10мкс Сброс флагов F1 или F2 Ноги импульсов PB3 и Pb2 По каналу прерывание РВ4 импульс РВ2 все хорошо импульсы строго по прерыванию, а по другому каналу 2 раза по прерыванию затем 2 пропуска. Отключал один из каналов из программы все равно такая ерунда,может протеус виноват так частенько бывает 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serega4789 Опубликовано 4 мая, 2022 Автор Поделиться Опубликовано 4 мая, 2022 (изменено) архив Новая папка.zip Новая папка.zip Изменено 4 мая, 2022 пользователем Serega4789 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serega4789 Опубликовано 5 мая, 2022 Автор Поделиться Опубликовано 5 мая, 2022 (изменено) Значит послесработки прерывания сигнал уходит в ноль до того как будет опрошен. Подскажите, если в инициализации я один из портов B4 или 7, например 4выставлю на вход а 7 выход Прерывание порт В вектор int4 ->когда сработает прерывание на заведамо включено м на вхот порту В4 я врублю флаг F1 , переведу В4 на выход В7 на вх Вектор поменяю на int 7 и Затем F2=1 так по кругу гонять прерывания, Это будет корректно? Изменено 5 мая, 2022 пользователем Serega4789 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Serega4789 Опубликовано 11 мая, 2022 Автор Поделиться Опубликовано 11 мая, 2022 #include <xc.h> #define _XTAL_FREQ 4000000 // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (Power-up Timer is enabled) #pragma config CP = OFF // Code Protection bit (Code protection disabled) //-------------------------------------------- #include <stdio.h> //------------------------------------------------ unsigned int F1_count=0,F2_count=0,stop_count1=0,stop_count2=0; unsigned int x1=1,x2=0; unsigned int FLA=0,FLB=0; unsigned char dimmer=20;//65 unsigned char F1,F2; //unsigned char pvm1=0,pvm2=0,n=0; unsigned char start=0; unsigned char count_dimmer=0; //unsigned int FLB=0; //------------------------------------------------ void interrupt high_isr (void) //void interrupt isr(void) { PORTBbits.RB6 = 1; PORTBbits.RB6 = 0; if(x1 ) //proverka konkretnogo port x1 ili x2 { if (RB4==1 && FLA==0 ) { FLA=1; //PORTBbits.RB2 = 1; //PORTBbits.RB2 = 0; } } if(x2 ) { if (RB7==1 && FLB==0 ) { FLB=1; //PORTBbits.RB3 = 1; //PORTBbits.RB3 = 0; } } if(start==1){ if (FLA && RB4==0) {x1=0; x2=1;F1=1;} if (FLB && RB7==0) {x2=0; x1=1;F2=2;} } if (RBIF) {RBIF=0; } // flag int } //------------------------------------------------ void main() { TRISB = 0x91; TRISA = 0x7; PORTBbits.RB2 = 0; PORTBbits.RB3 = 0; PORTBbits.RB5 = 0; PORTBbits.RB6 = 0; PORTBbits.RB1 = 0; PORTBbits.RB0 = 0; INTEDG = 1; //rising edge //INTEDG = 0; //falling edge //OPTION_REG=0xc0; OPTION_REG = 0b01000000; RBIF = 0; RBIE = 1; GIE = 1; while(1) { //............................................................................ if (RB0==1) { start=0; } else { start=1; } if (start==0) { x1=0; x2=1; F1_count=0; F2_count=0; FLA=0; FLB=0;dimmer=20; count_dimmer=0; PORTBbits.RB5 = 0; PORTBbits.RB6 = 0; } else { PORTBbits.RB5 = 1; } //............................................................................ if(start==1) { //.................................... if(F1) { if(F1_count!=dimmer){F1_count++;} if(F1_count==dimmer) { PORTBbits.RB2 = 1;//620mks pchka /50 =12 ugol 400 edinic 180 grad __delay_us ( 60 ); //380 minim znachenie dimmer PORTBbits.RB2 = 0; __delay_us ( 10 ); PORTBbits.RB2 = 1; __delay_us ( 50 ); PORTBbits.RB2 = 0; __delay_us ( 10 ); PORTBbits.RB2 = 1; __delay_us ( 50 ); PORTBbits.RB2 = 0; __delay_us ( 10 ); PORTBbits.RB2 = 1; __delay_us ( 50 ); PORTBbits.RB2 = 0; __delay_us ( 10 ); PORTBbits.RB2 = 1; __delay_us ( 50 ); PORTBbits.RB2 = 0; __delay_us ( 10 ); F1=0; F1_count=0; FLA=0; } } //........................................ if(F2) { if(F2_count!=dimmer){ F2_count++; } if(F2_count==dimmer) { PORTBbits.RB3 = 1; __delay_us ( 60 ); PORTBbits.RB3 = 0; __delay_us ( 10 ); PORTBbits.RB3 = 1; __delay_us ( 50 ); PORTBbits.RB3 = 0; __delay_us ( 10 ); PORTBbits.RB3 = 1; __delay_us ( 50 ); PORTBbits.RB3 = 0; __delay_us ( 10 ); PORTBbits.RB3 = 1; __delay_us ( 50 ); PORTBbits.RB3 = 0; __delay_us ( 10 ); PORTBbits.RB3 = 1; __delay_us ( 50 ); PORTBbits.RB3 = 0; __delay_us ( 10 ); F2=0; F2_count=0; FLB=0; //...razgon.............................. /* if (start) { if(dimmer!=1){if(count_dimmer!=10){count_dimmer++;}else{count_dimmer=0;dimmer--;}}else{PORTBbits.RB6 = 1;} } */ //................... }//if(F2_count==dimmer) } }//start /* if (n< pvm1){PORTBbits.RB2 = 1;}else{PORTBbits.RB2 = 0;} if (n< pvm2){PORTBbits.RB3 = 1;}else{PORTBbits.RB3 = 0;} if(n==6){n=0;} */ } } //------------------------------------------------ более менее стабильно работает в протеусе, теперь в железе проверить надо 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
korsaj Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 Мы писали мы писали - наши пальчики устали. А что писали не понятно. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
korsaj Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 Сделайте прерывание каждые 10 мкС, в прерывании инкрементируйте счетчик, при его равенстве 5 меняйте состояние пина порта, а при 6 еще и обнуляйте его. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
BARS_ Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 В 01.05.2022 в 08:06, Serega4789 сказал: 3 шт тр для управления тиристорами А какой смысл гнать ШИМ на тиристоры? Один фиг они не закроются, пока ток не опустится ниже порога удержания... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Lexter Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 59 минут назад, BARS_ сказал: какой смысл гнать ШИМ на тиристоры? Вообще-то управление тиристоров импульсами - распространённый способ, для снижения мощности в цепи управления. Они прекрасно открываются короткими импульсами, но нет гарантии, что откроются от одного. Тут ведь надо, чтобы ещё и достаточное напряжение на тиристоре было в наличии. Поэтому управляют пачкой импульсов, перекрывающих по ширине зону неопределённости. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
BARS_ Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 Тогда вообще непонятно, нафига автор такие сложности выдумывает, когда у данного МК есть аппаратный ШИМ. 6 минут назад, Lexter сказал: Тут ведь надо, чтобы ещё и достаточное напряжение на тиристоре было в наличии. Ну так ведь можно привязаться к началу полупериода 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Lexter Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 3 часа назад, BARS_ сказал: привязаться к началу полупериода Вот в этом месте обычно и возникают проблемы при управлении одним импульсом. Детектор перехода через ноль сработает, но неизвестно, хватит ли напряжения в сети в этот момент для открытия тиристора. При напряжении на нём около нуля-то он не защёлкнется. Делать задержку с запасом - терять начальную часть синусоиды, мощность до 100% регулироваться не будет. Поэтому дают пачку импульсов, за время которой напряжение гарантированно нарастёт до уровня, при котором тиристор откроется. А откроется он по тому импульсу пачки, при котором напряжение будет достаточным, т.е. максимально возможно близко к началу полупериода. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 1 час назад, Lexter сказал: за время которой напряжение гарантированно нарастёт до уровня, при котором тиристор откроется. Причем здесь вообще напряжение?! У тиристора есть "ток удержания" - минимальный ток при котором тиристор остается в открытом состоянии. Если по завершении импульса открытия на гейте , ток протекающий через тиристор не превысит ток удержания тиристор закроется 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Lexter Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 44 минуты назад, IMXO сказал: Причем здесь вообще напряжение?! При чём здесь вообще закрывание тиристора? Речь идёт об его открывании в начале полупериода сетевого напряжения. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 12 мая, 2022 Поделиться Опубликовано 12 мая, 2022 Тиристору абсолютно ровно где открываться: в начале, в середине, или в конце полупериода. Открывается он : при подаче управляющего тока на переход гейт-катод, и останется открытым до тех пор пока не будет снят управляющий ток с перехода гейт-катод или ток через переход анод-катод не станет меньше тока удержания тиристора. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.