Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Бытовая и промышленная техника, авто, мото и т.п. » Стабилизатор сетевого напряжения


Стабилизатор сетевого напряжения

Сообщений 1 страница 8 из 8

1

Собрал стабилизатор из латора по этой схеме настроить как положено так и не удалось,
так как корпус и вся обвязка была уже готова решил сделать новые мозги на меге8.
Программа должна работать так:
При первом включении проверяем корректность данных еепром если там мусор то пикаем, если все нормально крутим программу.
Для работы схемы нужно запомнить минимальное и максимальное напряжение, это делается через кнопки одна из которых заведена через инт0
Программа считывает данные с АЦП и включает один из десяти оптопар. Так же на радиатор посажу дс18б20 и по температуре через ШИМ будет управлять вентилятором (эта часть кода не проверена).
Мега тактируется внутренним генератором на 1МГц, обвязка АЦП стандарт: Avcc через 0,1мкф на минус и через 10мкГн на плюс, ADC0 через 0,1 на минус, резистивный делитель 100к/30к (Uin 10V Uout 2.31V).
Основная часть программы хорошо работает если входное напряжение изменяется почти во всем диапазоне ( от 1 до 10В)
При изменении сетевого напряжения с 220в до 175в на измерительной обмотке трансформатора напряжение меняется от 6,2в до 8в
на этом диапазоне оптопары переключаются как попало хотя должны работать нормально. Вот код подскажите что не так.

код

' Стабилизатор напряжения  11,02,3016

$regfile = "m8def.dat"
$crystal = 1000000
$eeprom
Dim W As Word                                               ' Значение АЦП
Dim Q As Byte                                               ' Количество выборок
Dim S As Word                                               ' Сумма выборок
Dim A As Single                                             ' Среднее значение АЦП
Dim Aw As Word
Dim Z As Bit                                                ' Флаг считаной кнопки
Dim P As Single                                             ' Значение ШИМ
Dim Pw As Word
Dim Y As Byte
Dim Errr As Bit                                             ' Флаг ошибки данных EEPROM
Dim Mi As Word                                              ' Переменная минимального напряжения в оперативной памяти
Dim Midata As Eram Word                                     ' Переменная минемального напряжения в eeprom
Dim Ma As Word                                              ' Переменная максимального напряжения в оперативной памяти
Dim Madata As Eram Word                                     ' Переменная максимального напряжения в eeprom
Dim Razdata As Eram Word                                    ' Переменная разности в eeprom
Dim Disdata As Eram Single                                  ' Переменная велечины одной дискреты в eeprom
Dim Raz As Word
Dim Dis As Single
Dim T As Word                                               ' максимально допустимое напряжение

Dim O As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte

Config Portb.7 = Input                                      ' максимальное напряжение
Config Portd.2 = Input                                      ' минимальное напряжение

Config Portd.5 = Output                                     ' LED
Config Portd.3 = Output                                     ' bsn304
Config Portd.0 = Output                                     ' ALARM

Config Portc.5 = Output                                     ' 1
Config Portc.4 = Output                                     ' 2
Config Portc.3 = Output                                     ' 3
Config Portc.2 = Output                                     ' 4
Config Portc.1 = Output                                     ' 5
Config Portb.5 = Output                                     ' 6
Config Portb.4 = Output                                     ' 7
Config Portb.3 = Output                                     ' 8
Config Portb.2 = Output                                     ' 9
Config Portb.0 = Output                                     ' 10

Config Int0 = Falling                                       ' Прерывание по нисходящему фронту
On Int0 Button
Enable Interrupts                                           ' Разрешаем прерывания
Enable Int0
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 8       'F_PWM=244Hz

Config 1wire = Portd.1
Config Adc = Free , Prescaler = Auto , Reference = Internal
Config Watchdog = 2048                                      ' Сброс через 2секунды

Start Adc                                                   ' Запускаем АЦП
Start Watchdog                                              ' Запускаем сторожевого пса
A = 0
P = 0
Errr = 0
T = 0
Pwm1a = 0
Portd.5 = 0
Portd.3 = 0
Portd.0 = 0
'-----------------------------Начало основного цикла----------------------------
Do
Reset Watchdog                                              ' Сбрасываем сторожевого пса
1wreset                                                     ' Проверяем наличее датчика температуры
If Err = 1 Then
'Errr = 1
End If
1wwrite &HCC                                                ' Запрос на считывание данных из DS18B20
1wwrite &H44
Hom:
Mi = Midata                                                 ' Считываем значение Min из EEPROM
Ma = Madata                                                 ' Считываем значение Max из EEPROM
Raz = Razdata                                               ' Считываем значение разности из EEPROM
Dis = Disdata                                               ' Считываем значение одной дискреты из EEPROM
T = Dis * 4                                                 ' Напряжение больше максимального на 4 дискреты
T = T + Ma
If Mi < 1 Or Ma > 1023 Or Mi > Ma Then                      ' Если минемальное или максимальное значение EEPROM неверные
Portd.0 = 1                                                ' ALARM
Waitms 200
Portd.0 = 0
Waitms 100

Goto Hom                                                   ' Считать ошибкой данных EEPROM
End If
S = 0
'----------------------------Среднее арифметическое----------------------------
For Q = 0 To 10                                             '
W = Getadc(0)
S = S + W                                                  '                                                 '
Waitms 100
Next Q                                                     '
A = S / 10                                                 '                                                  '
Aw = Round(a)
'------------- Номер оптопары -----------------------
If Aw >= Mi And Aw <= Ma Then
Pw = Aw - Mi
P = Pw / Dis
Y = Round(p)
End If

If Aw < Mi Then
Y = 0
End If

If Aw > Ma And Aw < T Then
Y = 9
End If

If Aw > T Then
Y = 10
Errr = 1
End If
Reset Watchdog                                              ' Сбрасываем сторожевого пса
'-------------------------------Включаем нужную оптопару----------------------------------
If Y = 0 Then
Set Portc.5
Else
Reset Portc.5
End If

If Y = 1 Then
Set Portc.4
Else
Reset Portc.4
End If

If Y = 2 Then
Set Portc.3
Else
Reset Portc.3
End If

If Y = 3 Then
Set Portc.2
Else
Reset Portc.2
End If

If Y = 4 Then
Set Portc.1
Else
Reset Portc.1
End If

If Y = 5 Then
Set Portb.5
Else
Reset Portb.5
End If

If Y = 6 Then
Set Portb.4
Else
Reset Portb.4
End If

If Y = 7 Then
Set Portb.3
Else
Reset Portb.3
End If

If Y = 8 Then
Set Portb.2
Else
Reset Portb.2
End If

If Y = 9 Then
Set Portb.0
Else
Reset Portb.0
End If
Reset Watchdog                                              ' Сбрасываем сторожевого пса
'--------------Считываем температуру и если надо включем винтелятор--------------
1wreset
1wwrite &HCC
1wwrite &HBE
O = 1wread()
B = 1wread()
If O > 248 Then
O = &HFF - O
B = &HFF - B
E = 2
Else
E = 1
End If
C = O / 16
D = B * 16
C = C + D
If E = 2 Then C = C + 1
If E = 1 And C = 0 Then E = 0
'If E = 2 Then Errr = 1

If C > 40 And C < 44 Then
Pwm1a = 255
Waitms 500
Pwm1a = 185
End If
If C > 45 And C < 49 Then Pwm1a = 190
If C > 50 And C < 54 Then Pwm1a = 195
If C > 55 And C < 59 Then Pwm1a = 205
If C > 60 And C < 64 Then Pwm1a = 215
If C > 65 And C < 69 Then Pwm1a = 225
If C > 70 And C < 74 Then Pwm1a = 235
If C > 75 And C < 79 Then Pwm1a = 245
If C > 80 And C <= 89 Then Pwm1a = 255
If C > 89 Then Errr = 1

If Y >= 0 And Y < 10 And Errr = 0 Then
Portd.3 = 1
Else
Portd.3 = 0                                                 ' Подаем питание на оптопары
Portd.0 = 1
End If

Loop
End
'---------------Подпрограмма прирывания по кнопки-------------------------------
Button:                                                     ' Обработка прерывания по кнопки
Stop Watchdog                                              ' Останавливаем сторожевого пса
Portd.0 = 0
Portd.3 = 0                                                ' Выключаем оптопары
Portd.5 = 1                                                ' зажигаем светодиод
Z = 0                                                      ' Сброс флага удачного считывания
S = 0
For Q = 0 To 10
W = Getadc(0)                                              '
S = S + W                                                  '                                                 '
Waitms 100
Next Q                                                      '
A = S / 10
Mi = Round(a)
Portd.0 = 1                                                 ' ALARM
Waitms 200
Portd.0 = 0
                                                    ' считываем значение АЦП и запоминаем его как минимальное
Do                                                          ' Сохраняем значение минимального напряжения                                          ' Нажата кнопка минимальное напряжение
If Pinb.7 = 0 Then                                         ' Ждем нажатия кнопки максимального напряжения
  Z = 1                                                     ' Нажатие считано
S = 0
For Q = 0 To 10
W = Getadc(0)                                              '
S = S + W                                                  '                                                 '
Waitms 100
Next Q                                                      '

A = S / 10
Ma = Round(a)                                               ' считываем значение АЦП и запоминаем его как максимальное
End If
Loop Until Z <> 0                                           ' Если дребезг помешал вычислению нажатой кнопки, повторяем

Raz = Ma - Mi                                               ' Вычисляем разность между максимальной и минемальным напряжении
Dis = Raz / 9                                               ' Вычисляем значение одной дискреты
Midata = Mi                                                 ' Сохраняем в EEPROM значение минемального напряжения
Madata = Ma                                                 ' Сохраняем в EEPROM значение максимального напряжения
Razdata = Raz                                               ' Сохраняем в EEPROM значение разности между напряжениями
Disdata = Dis                                               ' Сохраняем в EEPROM значение одной дискреты                                               
Portd.0 = 1                                                 ' ALARM
Waitms 200
Portd.0 = 0
Waitms 500
Portd.0 = 1                                                 ' ALARM
Waitms 200
Portd.0 = 0
Waitms 500
Portd.5 = 0                                                 ' Тушим светодиод
Start Watchdog                                              ' Запускаем сторожевого пса
Gifr = 64                                                   ' Сброс флага прерывания
Return

0

2

Всем откликнувшимся спасибо :)
Оказалось все просто, при использовании внутреннего ИОНа ногу Aref нужно подключить через конденсатор 0,1мкф на землю.

0

3

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

http://s2.uploads.ru/t/JqYQU.jpg
http://s7.uploads.ru/t/tGDE5.jpg
http://s3.uploads.ru/t/mSEav.jpg
http://s3.uploads.ru/t/C9YMz.jpg
http://s7.uploads.ru/t/thp4o.jpg
http://s3.uploads.ru/t/JpUD2.jpg

0

4

boida написал(а):

спалил два симистора

Тиристоры, симисторы + трансформаторы - не дружат, будут гореть постоянно.

0

5

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

0

6

Главное что бы два симистора не включились одновременно - что и произошло.
Симистор с запасом 2,5 от максимальной нагрузки открывается оптопарой с детектором перехода через ноль.

0

7

Ух ты, как так ухитриться то можно. Кстати с симисторами будут проблемы и крутые потому что их не получится закрыть когда пригорит, вот те и защита! А при скачке нужно отключение когда попадёт. Кстати пробивает напругой, ты в курсе какая выброс самоиндукции у такого транса? Для защиты нужна автономная работа, что бы могла отключившись от сети следить, у меня ни раз бывало 380В в сети, один стаб фирменный сгорел, UPS ясно такое предусматривают им пофиг.
Учти скачок может быть когда угодно и провал тоже, за этим надо программно следить. Нафиг дроссель на опорник ни разу не ставил, шум 1LSB.
Следить гистирезис сколько? Тут такой момент если у тебя попадёт вблизи переключения то само может получится  Шаг очень мелкий будет дурить что не есть по само что нинаесть.
Измеряй в программе, подавай на АЦП сигнал с выпрямителя не с фильтром НЧ в районе нескольких кило. Это метод очень жопинский, устрой источник с высоким сопротивлением у тебя всё заглючит нафиг. Для точности надо плавную регулировку. Кому то схему опубликовать надо а кому то результат нужен, в реальности всё по другому. 20В куда более правильно избежишь глюков.
В сети напругу 3-5В плавает с частотой 0.3-1Гц так что вот те реальность, как в деревне измерил напругу в сети мультиметр так и не остановился всё на 8-10В прыгал и все эти скачки по ЛН даже видно.

Отредактировано RadioHAM-433 (2016-03-07 05:24:14)

0

8

boida написал(а):

Собрал стабилизатор из латора по этой схеме настроить как положено так и не удалось,
так как корпус и вся обвязка была уже готова решил сделать новые мозги на меге8.
Программа должна работать так:
При первом включении проверяем корректность данных еепром если там мусор то пикаем, если все нормально крутим программу.
Для работы схемы нужно запомнить минимальное и максимальное напряжение, это делается через кнопки одна из которых заведена через инт0
Программа считывает данные с АЦП и включает один из десяти оптопар. Так же на радиатор посажу дс18б20 и по температуре через ШИМ будет управлять вентилятором (эта часть кода не проверена).
Мега тактируется внутренним генератором на 1МГц, обвязка АЦП стандарт: Avcc через 0,1мкф на минус и через 10мкГн на плюс, ADC0 через 0,1 на минус, резистивный делитель 100к/30к (Uin 10V Uout 2.31V).
Основная часть программы хорошо работает если входное напряжение изменяется почти во всем диапазоне ( от 1 до 10В)
При изменении сетевого напряжения с 220в до 175в на измерительной обмотке трансформатора напряжение меняется от 6,2в до 8в
на этом диапазоне оптопары переключаются как попало хотя должны работать нормально. Вот код подскажите что не так.

     1.Выводы трансформатора нужно математически правильно наматывать
Имею в виду вольтаж. В вашем случае вольтаж будет такой
  U0=0,00
  U1=180,00
  U2=188,27
  U3=196,92
  U4=205,98
  U5=215,45
  U6=225,36
  U7=235,72
  U8=246,57
  U9=257,92
  U9=269,80
    2. Для контроля нужно измерять переменное напряжение true rms
    3. Чтобы надежно работал тиристорная схема мне нужно было на него потратить 300 стo лет опыта и чтобы надежно работало  семисторная схема, 700 сот лет  опыта  %-)

0


Вы здесь » Программирование ATMEL в BASCOM. » Бытовая и промышленная техника, авто, мото и т.п. » Стабилизатор сетевого напряжения