Jump to content
NDG

Проблема с OCR0A Attiny13

Recommended Posts

Прошу помощи сообщества в решении такой проблемы.

Имеем 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

Share this post


Link to post
Share on other sites
15 минут назад, NDG сказал:

 //Порты PB0 и PB1 устанавливаем на выход, остальные на вход
    DDRB = 0b00000011;

Дык почему на вход то??? Если:

 

15 минут назад, NDG сказал:

задачей которой стоит формирование ШИМ сигнала, скважность задаём состояние входов PB4 PB3 PB2. 

они должны быть на выход:

DDRB = 0b00011111;

PB0,1 за чем вам нужны, и почему прерывание по сигналу с ноги? (правильно?)  странно как то, надо бы пояснить.

Share this post


Link to post
Share on other sites

Спасибо откликнувшимся.

Выводы PB0 и PB1 это единственные ноги на которые аппаратно завязан выход ШИМ.

 На РВ0 так же завязан INT0, поэтому использовать это прерывание не возможно. Поэтому решил использовать PCIE, который реагирует на изменение состояния порта - поэтому PB4 PB3 PB2 переведены на вход в состояние Pull-Up, что бы слушать шину.

Как только на любой из трех ног измениться состояние с LOW на HIGH, включается обработчик прерывания, в котором считывается, через  PINB, состояние выводов.

Далее выборка и... проблема - значение OCR0A поменялось, а скважность нет. Причём если запихнуть это без SWITCH в обработчик - работает, добавит здесь же условия IF() - работает. Но это же обработчик прерывания - негоже здесь время занимать.

Есть мысль, что всё завязано на двойной буферизации.

Да в Proteus файле я закоротил кнопки - это для эксперимента, забыл убрать.

Edited by NDG
Ошибки в тексте

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Неделя мозгового штурма и задача решена.

Не знаю как это правильно объяснить, но проблема кроется в обработчике прерываний и используемом режиме ШИМ. 

Выяснилось, что обработчику прерывания требуется несколько дополнительных тактов, в течение которых теряются значения  счётчиков . Поэтому грубую работу в лоб пришлось разделить на части  создание пресета скважности - обработка прерывания - расчёт значения пресета  в соответствии с состоянием РВ2 РВ3 РВ4 - установка OCRA0 значением из пресета.

Вот как то так.

Share this post


Link to post
Share on other sites
В 22.12.2017 в 17:28, NDG сказал:

Как только на любой из трех ног измениться состояние с LOW на HIGH, включается обработчик прерывания, в котором считывается, через  PINB, состояние выводов.

А я что то не вижу где фронт задан, на который прерывание срабатывает??? где задано что  "измениться состояние с LOW на HIGH, включается обработчик прерывания"???

Вроде регистром EICRA задается, а он не инициализируется значит = 0!

Value Description
00 The low level of INT0 generates an interrupt request.
01 Any logical change on INT0 generates an interrupt request.
10 The falling edge of INT0 generates an interrupt request.
11 The rising edge of INT0 generates an interrupt request

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

По фронту можно отловить только INT0 на РВ0, а у меня используется PCIE. Это прерывание не настраивается, а только сигнализирует об изменении уровня.

На это прерывание завязаны все оставшиеся порты РВ1-РВ5. Именно поэтому накладывается маска PCMSK.

В случае если ловим прерывание с нескольких портов, через  сдвиг, определяем кто именно вызвал прерывание, и далее что делать .

Ну, а если с одного, то через маску проверяем, что изменилось - LOW -> HIGH или наоборот, и далее что делать.

GIMSK.JPG.fa65eb5eb3e963252dea510dfac50774.JPG

Edited by NDG
Стилистика

Share this post


Link to post
Share on other sites

Вот кусочек кода из другой моей разработки - реально работающей на объекте:

ISR (PCINT0_vect) //Обработчик прерывания PCIE
{
    flag_PCINT = true; //Устанавливаем флаг прерывания ДЛЯ ПРОГРАММЫ 
}

int main(void)

    Init_mail();
    while (1)
    {
        if (flag_PCINT == true)
        {
            if (start_flag == false)
            {
                Button_Block;
                Rele; Wait;
                //Если состояние PORTB1 LOW, то реле не сработало
                if (!Port_HIGH) led_error (2); 
                else Contact; Wait;
                //Если состояние PORTB1 HIGH, то контактор не сработал
                if (Port_HIGH) led_error (2); 
                else { start_flag = true; flag_PCINT = false; } //Сбрабываем флаги
            }
            else if (start_flag == true)
                {
                    Rele; Wait; LED_Off;
                    start_flag = false; flag_PCINT = false;
                }
        }    

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Павел Лопатин
      Добрый день!
      Подскажите, пожалуйста, можно ли вынести переменный резистор 16K1-B10K, L20KC, 10 кОм с ШИМ регулятора на отдельную плату? 
      Какие провода лучше использовать? На какое расстояние можно вынести (длина провода) и изменятся ли от этого характеристики? (все-таки, как я понимаю, появится дополнительное сопротивление от провода)
      ШИМ покупной в RDC2-0024 - фото и схема в аттаче
      DOC002726141.pdf
    • By Kirillius Labutin
      Добрый день!
      Имеется готовый лазерный модуль с драйвером (стабилизатор тока и, наверное, напряжения). 
      Хочу регулировать яркость лазера с помощью ШИМ с МК, гугл сказал что лучший вариант - шунтирование лазера. Но драйвер устроен таким образом, что в нём с питанием напрямую не связан ни "+" ни земля лазера. Набросал такую схемку, чтобы реализовать это через оптопару.

      Внимание, вопрос)
      1. Заработает ли такая схема?
      2. Какой посоветуете транзистор Q1 и оптопару? Макс. напряжение в цепи - 5В, ток - 0.5А Я думаю что-нибудь вроде IRLL014TRPBF
      3. Какой выбрать номинал резистора R1 для разряда Q1? Частота ШИМ планируется в районе 1кгц.
    • By SigmA
      Доброго времени суток всем. Для своей новой жены захотелось мне сделать сердечко на 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); } } }  
    • By mr_smit
      Вынес то что не получается в упрощенной форме в отдельный проект. Среда разработки CooCox 1.7.8, микроконтроллер STM32F103C8T6.
      Нужно раз в ~100 мсек формировать на ножке МК, например,такую последовательность:

      Стартовую длительность формирует таймер, в первом же своем прерывании по совпадению активирует DMA и дальше уже DMA по запросу таймера загружает значение CCR из массива. Что то похожее на управление светодиодами WS2812B. То что я сочинил выдает на пин:

      Но только один раз при первом вызове. При последующих вызовах данные из массива выдаются без первоначальной длительности в 150 мкс.
      Не могу найти ошибку. 
       
      #include <stm32f10x.h> #include <stm32f10x_conf.h> #include <stm32f10x_gpio.h> #include <stm32f10x_rcc.h> #include <stm32f10x_tim.h> #include <stm32f10x_dma.h> GPIO_InitTypeDef PIN; TIM_TimeBaseInitTypeDef TIM_Config; TIM_OCInitTypeDef TIM_OCConfig; DMA_InitTypeDef DMA_Setting; uint8_t Test_Buf[] = {15,30,30,30,15}; void delay_ms(uint32_t ms) { volatile uint32_t nCount; RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq (&RCC_Clocks); nCount = (RCC_Clocks.HCLK_Frequency/10000)*ms; for (; nCount != 0; nCount--); } void Init_GPIO(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); PIN.GPIO_Pin = GPIO_Pin_11; // PA11 -> TIM1 Channel4 PIN.GPIO_Mode = GPIO_Mode_AF_PP; PIN.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &PIN); } void Init_TIM_Transmit(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); TIM_TimeBaseStructInit(&TIM_Config); // настройки по дефолту TIM_Config.TIM_Prescaler = 72-1; // Запускаем таймер на тактовой частоте 1 MHz (72000000/(72-1)) TIM_Config.TIM_Period = 150-1; // Период - 150 мкс TIM_Config.TIM_ClockDivision = 0; // частоту дополнительно не делим TIM_Config.TIM_CounterMode = TIM_CounterMode_Up; // считаем вверх TIM_TimeBaseInit(TIM1, &TIM_Config); // Инициализируем TIM1 TIM_OCStructInit(&TIM_OCConfig); // настройки по дефолту TIM_OCConfig.TIM_OCMode = TIM_OCMode_PWM1; // Конфигурируем как ШИМ (выравнивание по границе) TIM_OCConfig.TIM_OutputState = TIM_OutputState_Enable; // Включаем выход TIM_OCConfig.TIM_Pulse = 0; // CCR до старта пока нулевой TIM_OCConfig.TIM_OCPolarity = TIM_OCPolarity_High; // Полярность TIM_OCConfig.TIM_OCIdleState = TIM_OCIdleState_Reset; // состояние выхода по совпадению CCR (сброс) TIM_OC4Init(TIM1, &TIM_OCConfig); // Инициализируем 4-й выход таймера, это PA11 TIM_ARRPreloadConfig(TIM1,ENABLE); // Предзагрузка периода (ARR) TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable); // Предзагрузка длины импульса CCR 4-го канала // (даем досчитать до конца и только потом значение меняется на новое) TIM_DMACmd(TIM1,TIM_DMA_CC4,DISABLE); // выключаем пока запрос к DMA от таймера TIM1 по достижении CCR) TIM_CtrlPWMOutputs(TIM1, ENABLE); // включаем выходы (это только для TIM1) TIM_CCxCmd(TIM1,TIM_Channel_4,TIM_CCx_Enable); // разрешаем таймеру управлять выводом PA11 TIM_ITConfig(TIM1, TIM_IT_CC4, DISABLE); // запрещаем пока таймеру генерировать прерывание по совпадению NVIC_EnableIRQ(TIM1_CC_IRQn); // разрешаем прерывания TIM_Cmd(TIM1, DISABLE); // Выключаем таймер (пока ждем) } void TIM1_CC_IRQHandler(void) // прошло 130 мкс { if (TIM_GetITStatus(TIM1, TIM_IT_CC4) != RESET) { // по совпадению TIM_ClearITPendingBit(TIM1,TIM_IT_CC4); // сбрасываем флаг прерывания TIM1 по совпадению } NVIC_EnableIRQ(TIM1_CC_IRQn); // выключаем прерывания от таймера TIM_ITConfig(TIM1, TIM_IT_CC4, DISABLE); // TIM1->ARR = 40-1; // устанавливаем период 40 мкс TIM1->CCR4 = Test_Buf[0]; // ширину из массива для следующего импульса DMA1_Channel4->CNDTR = 4; // длина данных для DMA на 1 меньше т.к. уже установили выше 1 элемент TIM_DMACmd(TIM1,TIM_DMA_CC4,ENABLE); // разрешаем таймеру делать запрос к DMA по совпадению CCR DMA_Cmd(DMA1_Channel4, ENABLE); // включаем DMA } void Init_DMA(void) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); // включаем тактирование DMA1 DMA_Setting.DMA_PeripheralBaseAddr = (uint32_t) &TIM1->CCR4; // куда копировать DMA_Setting.DMA_MemoryBaseAddr = (uint32_t) &Test_Buf[1]; // что копировать DMA_Setting.DMA_DIR = DMA_DIR_PeripheralDST; // копируем в периферию (Peripheral Destination, точка назначения - периферия) DMA_Setting.DMA_BufferSize = 0; // количество передаваемых данных DMA_Setting.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // адрес периферии постоянный DMA_Setting.DMA_MemoryInc = DMA_MemoryInc_Enable; // адрес в памяти увеличиваем DMA_Setting.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; // периферия 16 бит DMA_Setting.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // массив 8 бит DMA_Setting.DMA_Mode = DMA_Mode_Normal; // режим обычный DMA_Setting.DMA_Priority = DMA_Priority_Medium; // приоритет средний DMA_Setting.DMA_M2M = DMA_M2M_Disable; // MemoryToMemory откл. DMA_Init(DMA1_Channel4, &DMA_Setting); // TIM1_CH4 относится к 4-му каналу DMA1 DMA_ITConfig(DMA1_Channel4, DMA_IT_TC, ENABLE); // настраиваем прерывание по окончанию передачи NVIC_EnableIRQ(DMA1_Channel4_IRQn); // включаем прерывания от 4-го канала DMA1 DMA_Cmd(DMA1_Channel4, DISABLE); // пока выключаем 4-ый канал DMA1 } void DMA1_Channel4_IRQHandler(void) // закончили передавать { if (DMA_GetITStatus(DMA1_IT_TC4) != RESET) { // по совпадению DMA_ClearITPendingBit(DMA1_IT_TC4); // сбрасываем флаг прерывания DMA1 Channel4 transfer complete } if (TIM_GetITStatus(TIM1, TIM_IT_CC4) != RESET) { // по совпадению TIM_ClearITPendingBit(TIM1,TIM_IT_CC4); // сбрасываем флаг прерывания TIM1 на всякий случай } TIM1->ARR = 150-1; // вновь настраиваем на период 150 мкс TIM1->CCR4 = 0; // и ждем следующею передачу TIM1->CNT = 0; // TIM_DMACmd(TIM1,TIM_DMA_CC4,DISABLE); // всё выключаем DMA_Cmd(DMA1_Channel4, DISABLE); // TIM_Cmd(TIM1, DISABLE); // TIM_ITConfig(TIM1, TIM_IT_CC4, DISABLE); // TIM_CCxCmd(TIM1,TIM_Channel_4,TIM_CCx_Disable); } int main(void) { Init_GPIO(); Init_TIM_Transmit(); Init_DMA(); delay_ms(1000); while(1) { TIM1->CCR4 = 130-1; // до включения линия удерживается в 0 (CCR=0) TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE); TIM_CCxCmd(TIM1,TIM_Channel_4,TIM_CCx_Enable); TIM_Cmd(TIM1, ENABLE); delay_ms(100); } }  
      TEST_TIM_DMA.zip
  • Сообщения

    • WeatherLink ISOLATOR. По сути удлинитель-изолятор интерфейса RS232. Расстояние до 12м.  Насчет скорости не скажу, станция работала на 9600. 1000р  
    • Считаете количество транзисторов, забиваете в поиск " телеграфный ключ на восьми транзисторах" и на четвертой картинке видим: Совсем думать разучились. Или не начинали.
    • ATMEGA324PA это если надо 20МГц как у Пика, а так любой из Ардуинки, но опять же, смотря какая задача стоит, а не просто замена, там и разводка другая и своя прошивка.   А если надо прям почти почти то AT89S4051.
    • Какая то жуткая история - что то хрюкает, что то тихонечко играет назло... Всё, что можно посоветовать - найти настоящего мастера, пусть он будет и незнакомый, лишь бы соображал... а вот самому лучше туда не лезть.
    • Здравствуйте, схему нет, есть два готовых устройства одно которое уже управляет двигателем за счёт изменения входного напряжения на управляющий контакт в пределах от 1.81 до 1.73 ,выполнено на микросхеме tl594c и второе устройство с ЛСД дисплеем отображающие частоту вращения кулера и с функцией сигнализации при достижении запрограммированной температуры при достижении которой открывается полевой транзистор. Вот эти два устройства соединить так чтобы на управляющий контакт  первого устройства приходило 1.81 вольт что можно обеспечить делителем напряжения , потом при достижении запрограммированной температуры сработает второе устройство откроется полевой транзистор и пропустит через себя напряжения  которое изменит напряжения 1.81 вольт на входе первого устройства на 1.73 вольта, вот описания схемы как это можно организовать? Помогите пожалуйста!
    • Я даже не заметил, что там есть 128Кгц. Это получается,что при такой тактовой частоте и при делителе 1024,  одна секунда будет 125 тиков? Я правильно понимаю?
    • Здравствуйте. Сломалась с большим БАХом индукционная плита, при вскрытии было установлено: сгорел предохранитель печатный,  диодный мост и 4 транзистора RJH60T4 (у 2х пробит диод сток-исток (одно плечо), другое вроде целое. Купил диодный мост, выпаял транзисторы включил плиту через лампу. Лампа светит, плита кнопками управляется. Включил без лампы тотже результат. Купил на али транзисторы впаял, через лампу . Плита включилась в дежурном режиме  лампочка горит, поставил кастрюлю включил левую нижнюю панель, плита пощелкала реле и выдала ошибку е6. Выпаял драйверы TPL350 заменил (али), как проверить не знаю. Включил через лампу ошибка е6 пропала, лампа светит. Включил плиту Плита периодически включается (реле щелкают)  и пищит, панель при этом гаснет лампа горит или в пол накала или полностью. (посуда на плите).  Включил панель верхнюю правую, тоже самое но в какой-то период или после предыдущего опыта сгорает транзистор (пробивается диод) и плита стала писать 9.99kW.  Купил транзисторы в Чип и Дипе RJH60F5  включил через чайник, плита щелкнула реле при этом посуда тоже щелкнула, как при нагреве, нагрева не ощутил выключил. Затем включил еще раз плита ругнулась и появилась знакомая ошибка 9.99kW. Проверил транзисторы. Диоды пробит на первом. Есть осциллограф САГА , но я не успеваю ни чего померить. Как смоделировать работу плиты чтобы померить импульсы на затворах? Изучил https://manualzz.com/doc/1335640/siemens-ei645ec11-repair-manual https://www.mikrocontroller.net/topic/221192
  • Покупай!

×
×
  • Create New...