Например TDA7294

Форум РадиоКот • Просмотр темы - Программная квадратичная стабилизация мощности с КПД 100%.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 13:05:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Программная квадратичная стабилизация мощности с КПД 100%.
СообщениеДобавлено: Вс май 20, 2018 17:21:12 
Вымогатель припоя
Аватар пользователя

Карма: -25
Рейтинг сообщений: -47
Зарегистрирован: Ср дек 09, 2015 17:02:31
Сообщений: 546
Откуда: Мухосранск
Рейтинг сообщения: 0
Я пока не знаю куда данную тему отнести даже. Давно хотел поднять данную тему.
Хочу предложить простой метод получения стабильной мощности без ОС для линейной и не очень нагрузки. Выкладываю код с отладочной платы для tiny85. Пара замечаний по коду.
Это код отладочный это всё так что там от кучи другие проектов есть что трётся. Суть публикации обсудить данный метод для улучшения и просто поделиться с тем кто не знает.
Данным методом можно стабилизировать мощность паяльника (обычного без термодатчика), обороты двигателя, и кто найдёт применения, я применяю такое решение и для стабилизации яркости фар на автомобиле на обычных ЛН. То есть это получается стабилизатор напряжения с КПД почти 100 но для линейных нагрузок, хотя расчёт можно произвести и для других как двигатель в таком случае нужно убрать 1 строку из кода это переводит регулятор в пропорциональный режим что надо для двигателя. Простота схемы и программы. То есть для любых нагрузок мощность которых определяет среднее значение а не пиковое. Отсутствие компенсации и невозможность возбуда работа в обратно пропорциональном режиме 100%, идеальная реакция, отсутствие отстройки. Возможность ввести ОС по току на моторе для стабилизации оборотов как в магнитофонах, правда низкие частоты ШИМ накладывают хорошее ограничение на реакцию, а высокие снижают эффективность и ставят часто под вопрос такой метод перед DC-DC. Частота ШИМ из ряда достижимых на МК данной серии является в принципе предельной для получения потерь на ключе сравнимых с активными.
Суть метода заключается в расчёте мощности зная нужную U пит и U вых, что мощность это квадрат, он и извлекается из заполнения. Стабилизация на уровне возможностей ADC и ШИМ, 5-15В скачком изменения яркости ЛН не заметно. На tiny85 результат хуже из-за 8бит ШИМ на 10бит намного лучше. Можно получать отрицательную стабилизация при повышении питания мощность будет падать.
Тактовая частота тут не суть важна.
Жду Ваших предложений и критики данного метода. Еще раз напоминаю цель высокий КПД близкий к 100% потери на уровне активных в ключе, компактность, простота реализации, возможность использования уже в существующих системах, широкий диапазон входных значений до 10-100 кратного превышения выхода и выше зависит от ключа. При с ростом перепада значение квантования растёт. Требуется 2 порта МК ШИМ и АЦП.
Схему не ложу специально ибо она тут не нужна тем кто в теме. Ключ и измерение напряжения питания. Конфиг портов узнаешь из программы хотя это всё не важно.
Это только ядро для быстрого теста, для реального использования по любому придётся переписывать. КПД достигается за счёт того что нагрузка выступает в роли интегратора а полупроводники сейчас самые мощные, дроссели стоят в самом нижу по мощности именно этот факт сильно бьёт по размерам и КПД DC-DC, в добавок тут частоты коммутации могут быть сколько угодно низкие допустимы для нагрузки что снижает динамические потери до 0. На днях планирую собрать модуль для компрессора накачки колёс и превратить его в 12-36В против 12.
Код:

$regfile = "attiny85.dat"
$crystal = 10000000
$hwstack = 64
$swstack = 48
$framesize = 48





                 ' generated. Take care that the chip supports all fuse bytes.
                           ' generated. Take care that the chip supports all fuse bytes.
$prog &HFF , &HE2 , &HD5 , &HFF                             ' generated. Take care that the chip supports all fuse bytes.



Const Debugmode = 0
Const Dvcrx = 0
Dim Sd(6) As Word
Dim S(30) As Byte
Dim Tkr(2) As Long                                          'íàïðÿæåíèÿ
Dim Save(11) As Byte
Dim Sk(7) As Integer

Dim Txbit As Bit
Dim Txbit1 As Bit

Dim Skk3 As Bit
Dim Txrf1 As Bit

Dim Frrvc10 As Single

Dim Mig1 As Bit


Declare Sub 1sec
Declare Sub 1msec
Declare Sub 2st                                             'áûñòðîå âûêëþ÷åíèå ïðè ñìåíå ñòàòóñà ïîêà ïðîòåñòèòü êàê òàêòèðîâàòü


                                           'âûêëþ÷åíèå ïðåîáðàçîâàòåëÿ
Declare Sub Uart
Declare Sub 1st
Declare Sub Uart1ms

Declare Sub Setchda(byval Dd As Byte , Byval Dd1 As Byte)   'ëîãè÷åñêîå âêëþ÷åíèå
Declare Sub Loadk                                           'ëîãè÷åñêàÿ çàãðóçêà

Declare Sub Leeprom(byval Dd As Byte)
Declare Sub Uarttxrmt                                       'òàêòèðîâàíèå òàéìåðíîé ÷àñòè uart ñ 1ìñ
Declare Sub Uarttx


Declare Function Loaduartadr(byval Nlen As Byte) As Byte
Declare Sub Uartdata()
Declare Sub Tx(byval Dub As Byte)
'Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portd.6 , Rs = Portd.4
#if Debugmode = 1
Declare Sub Eepromstring(byval Dfrse As String * 24)
#endif
'Config Adc = Single , Reference = Aref
Config Adc = Single , Prescaler = 32 , Reference = Internal_1.1

Start Timer0

Config Watchdog = 4096
Config Timer1 = Timer , Prescale = 64



Config Timer0 = Pwm , Prescale = 1 , Clear Timer = 1 , Compare B = Clear , Compare B Pwm = Clear Up

Start Timer1


Start Timer0

Start Adc



Config Pinb.2 = Input
Config Pinb.3 = Input
Config Portb.4 = Input

Config Portb.0 = Output


Greenled Alias Portb.0

Call Leeprom(0)

Start Watchdog

Compare0b = 0

Do





  'If Timer1 >= 156 Then                                     '1 ìñ
   '  Timer1 = 0
    ' Sd(6) = Sd(6) + 1


        Sd(2) = Getadc(2)
        'Sd(3) = Sd(2) + Sd(3)
      '  S(1) = S(1) + 1
     '   If S(1) > 5 Then
        ' Sd(2) = Sd(3) / S(1)
         If Sd(2) > Save(2) Then
           Frrvc10 = Sd(2) / Save(2)
           Frrvc10 = Frrvc10 * Frrvc10 'для двигателя это операция не нужна, мотор не линейная нагрузка.
        '

           Frrvc10 = 255 / Frrvc10
           Sd(4) = Frrvc10
           Sd(4) = 255 - sd(4)
           Sd(4) = Sd(4) / Save(3)
           Frrvc10 = Frrvc10 - Sd(4)
           Compare0b = Frrvc10

           Greenled = 0
         Else
           Greenled = 1
           Compare0b = 255
         End If
      '  S(1) = 0
      '  Sd(3) = 0
     ' End If
      Reset Watchdog


'  End If




Loop
End

 'ÿ÷åéêè EEPROM 0 êîðåðêöèÿ ÷àñòîòû 10ÌÃö, 1 çíà÷åíèå ñòàáèëèçàöèè äëÿ òåñòà, 2 êîýôôèöåíò êîððåêöèè äëÿ ëèíåéíûõ íàãðóçîê 40-60 êàê ïðàâèëî. Ïðè ïîíèæåíèè ñòàáèëèçàöèÿ ñòàíîâèòñÿ îòðèöàòåëüíîé, â îñíîâíîì êîððåêöèÿ íåëèíåéíîñòè ADC.


Sub Leeprom(byval Dd As Byte)                               '0 âîññòàíîâèòü, 1 çàïèñàòü

    Dim Skk(4) As Byte
    Skk(2) = 11
   'Dim Lpr1 As Integer
    Skk(1) = 1

    Readeeprom S(11) , 0
    Osccal = S(11)

    Select Case Dd
        Case 0
            Readeeprom Skk(3) , 0
            For Skk(3) = 1 To Skk(2) Step 1

                Readeeprom Save(skk(3)) , Skk(3)            'ñîñòîÿíèå
               ' If Save(skk(1)) >= 255 Then Save(skk(1)) = 0       'çàùèòà îò ïóñòûé ÿ÷åéêè
              '  If Save(skk(1)) = 255 And Skk(4) = 255 Then Save(skk(1)) = 0
               ' Skk(1) = Skk(1) + 1
           Next

          'Uartid = "RF"

          For Sk(2) = 496 To 501 Step 1
             Readeeprom Skk(1) , Sk(2)
             If Skk(1) > 9 Then
                Skk(1) = 0
                Writeeeprom Skk(1) , Sk(2)
             End If
             'Uartid = Uartid + Str(skk(1))
          Next
        '  Uartid = Uartid + "|"
          If Save(1) > 5 Then Save(1) = 1
        Case 1

            For Skk(3) = 1 To Skk(2) Step 1

                Readeeprom Skk(4) , Skk(3)
                If Save(skk(3)) <> Skk(4) Then
                   Writeeeprom Save(skk(3)) , Skk(3)        'ñîñòîÿíèå
                End If
              ' Skk(1) = Skk(1) + 1
           Next

    End Select


End Sub



Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y