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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Управление тиристорным мостом "звезда-Ларионова"


Управление тиристорным мостом "звезда-Ларионова"

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

1

Доброго времени суток!

Помогите пожалуйста реализовать управление тиристорным мостом по схеме "звезда-Ларионова". Столкнулся с проблеммой подачи импульса на тиристор в моему коду после пересечения "0" по прерыванию INT0 происходит выдержка времени если чуть-чуть приоткрывать тиристор то все это время контроллер занят этим на обработку других строк программы боюсь у него не останется времени. Может кто сталкивался с такой задачей или имеет кусок кода или структурную схему, алгоритм программы.
В конечном итоге необходимо менять частоту вращения ДПТ НВ путем изменения напряжения якоря Uя.
Имеется:
ATmega8,
LCD 16*1,
мост "звезда-Ларионова",
оптосимистор MOC3021M для гальванической развязки,
шунт 0.075В, 100А
ДПТ НВ - 440В, 100А, НВ - 440В

0

2

Юзай таймер! после пересечения подавай управляющий сигнал, присваивай необходимую длинну импульса таймеру  и запускай таймер. В подпрограмме прерывания таймера - отключай сигнал и останавливай таймер. вроде все. а если тупо ставить задержку, то посмотри из скрина https://upforme.ru/uploads/0000/25/b8/2573-2-f.jpg сколько процессорного времени у тебя между красными пиками!

0

3

Есть ли у кого код для аналоговой клавиатуры на один пин?

0

4

с использованием АЦП?

0

5

Или какие есть способы управления LCD и клавиатурой 3*3 подключенной к одному порту?

0

6

Civil
да именно с использованием АЦП

0

7

всё есть
всё работает

вот кнопки на АЦП: http://pic-avr.narod.ru/stend/Button_ADC.GIF
Используя джампер "But/ADC" и четыре блока джамперов мы изменяем схему подключения этих четырёх кнопок.
Если установить перемычку "But/ADC" в левое положение и на всех четырёх блоках джамперов в верхнее, то мы получим схему из четырёх кнопок, замыкаемых на "общий" провод - Gnd.
Если же установить перемычку "But/ADC" в правое положение и на всех четырёх блоках джамперов в нижнее, то мы получим схему "аналоговой" клавиатуры - нажатие кнопок создает различное напряжение на выводе "ADC" разъема "Buttons/ADC".
http://pic-avr.narod.ru/opisanie.htm

вот про симистор:
я использую таймер для работы с симистором
задаю "яркость" лампочки, данные - в таймер
как только переход через ноль - таймер пошел считать
всё.

Код:
'---------------------------------------------------------------------------------------------
Dimmer_modul:                 ' --------------    УПРАВЛЕНИЕ   ДИММЕРОМ    --------------------------
   ' Reset Watchdog
    If Level_dimmer = 0 Then
          Dimmer_on = 0
          Disable Ovf1
        Else
          Dimmer_on = 1
            If Level_dimmer < 8 Then Enable Ovf1
    End If

     If Level_dimmer > 7 Then
      ' Dimmer_delay_w = &HFFFC   ' Ярко горит  - 230v
       Disable Ovf1
       Dimmer_out = 1
       Level_dimmer = 8       ' <<<<<<<<<<<<<<<<<<<<<<<<  ограничитель
     End If

  If Level_dimmer = 1 Then Dimmer_delay_w = 56700       '  Тускло горит  - 25v
  If Level_dimmer = 2 Then Dimmer_delay_w = 57600       '  51v
  If Level_dimmer = 3 Then Dimmer_delay_w = 58100       '  78v
  If Level_dimmer = 4 Then Dimmer_delay_w = 58500       '  85v
  If Level_dimmer = 5 Then Dimmer_delay_w = 59200       '  149v
  If Level_dimmer = 6 Then Dimmer_delay_w = 60000       '  105v
  If Level_dimmer = 7 Then Dimmer_delay_w = 61000       '  179v

  Waitus 950
Return

''===============
Ovf1_my:
   If Dimmer_on = 1 Then
            Dimmer_out = 1
            Waitus 90
            Dimmer_out = 0
      Else
            Dimmer_out = 0
   End If
Return

 ' ===============   Обработка прерывания по изменению на INT 0   ==================
Z_cross_int:
    Timer1 = Dimmer_delay_w
     Z_cross_f = 1
Return

0

8

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

Код:
Pot = Getadc(5)

If Pot < 130 Then
   Pots = -100 : Lcd Chr(6) ; Chr(6) ; Chr(6) ; "   "
Else
   If Pot < 260 Then
      Pots = -10 : Gosub S1 : Lcd Chr(6) ; Chr(6) ; "   "
   Else
      If Pot < 390 Then
         Pots = -1 : Gosub S2 : Lcd Chr(6) ; "   "
      Else
         If Pot < 570 Then
            Pots = 0 : Gosub S4 : Gosub S2
         Else
            Gosub S2 : Lcd Chr(5)                           ' 2 spaces to all
            If Pot < 700 Then
               Pots = 1 : Gosub S2
            Else
               Lcd Chr(5)
               If Pot < 830 Then
                  Pots = 10 : Gosub S1
               Else
                  Pots = 100 : Lcd Chr(5)
               End If
            End If
         End If
      End If
   End If
End If

0

9

Спасибо буду разбираться

0

10

'Аналоговая 4 кнопочная клавиатура на порту PC0

$regfile = "m8def.dat"
$crystal = 1000000
'$sim

Dim Adctemp As Word , Adcchannel As Byte , Adcvolt As Single , C As Byte , D As Byte , E As Byte , F As Byte

Config Lcd = 16 * 2
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'если Internal то на Aref 2,56в
Start Adc                                                   'если Avcc то на Aref=Avcc=5,05в
Cursor Off Noblink
Do
Cls
Adcchannel = 0                                             'читаем A/D значения с канала 0
Adctemp = Getadc(adcchannel)
'Adcvolt = 0.0025 * Adctemp                                'если на Aref 2,56v
Adcvolt = 0.00493164 * Adctemp                             'если на Aref 5v
Lcd "V " ; Adcvolt
Waitms 10

If Adcvolt > 0.9 And Adcvolt < 1.1 Then C = 1        'условие какая переменная будет равна 1
If Adcvolt > 1.9 And Adcvolt < 2.1 Then D = 1
If Adcvolt > 2.9 And Adcvolt < 3.1 Then E = 1
If Adcvolt > 3.9 And Adcvolt < 4.1 Then F = 1

Lowerline
Lcd "C" ; C ; " D" ; D ; " E" ; E ; " F" ; F
C = 0
D = 0
E = 0
F = 0
Waitms 10
Loop

Отредактировано Альберт (2011-10-02 20:51:15)

0

11

Кнопки 1,2,4,5,7,8 работают но инокда выводится не то , что надо видимо сбивается или помеха (в симуляторе тоже самое), при нажатии кнопок пальцем вообще постоянные сбои (цифры не из заданного диапазона), а на кнопки 3,6,9 вообще не реагирует, хотя в симуляторе работает. Кто знает как это лечится? С аналоговой клавиатурой понадежней будет, но пока плата вытравленна под вариант с использованием функции Getkbd() и LCD на одном порту.

'Для использования Getkbd() и LCD на одном порту, надо RS, E дисплея посадить на вывода не задействованные в Getkbd() т.е. на другой порт
'LCD нужно сконфигурировать в настройках Настройки-Компилятор-ЖКИ и установить ножки в соответствии со схемой: E-PORTD.0,RS-PORTD.1, DB7-PORTB.0, DB6-PORTB.1, DB5-PORTB.2, DB4-PORTB.3

$regfile = "m8def.dat"
$crystal = 1000000
'$sim

Config Lcd = 16 * 2
Config Kbd = Portb , Debounce = 100

Dim Key As Byte , Keyr As Byte
Cursor Off Noblink
Cls
Do
  Waitms 1
  Keyr = Getkbd()
  If Keyr <> 16 Then Gosub Gotkey
Loop

Gotkey:
  Ddrb = 255
  Waitms 1
  Cls
  Key = Lookup(keyr , Dta)
  Lcd "Key" ; Key
  Lowerline
  Lcd "Keyr" ; Keyr
  Ddrb = 0
  Waitms 1
Return

Dta:
Data 2 , 4 , 6 , 31 , 1 , 3 , 5 , 71 , 7 , 8 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 4

0

12

вот куски реально работающей программы = измеряет напряжение после делителя

Код:
...
Config Portc = Input : Portc = 0
Config Adc = Single , Prescaler = Auto , Reference = Avcc : Start Adc
...

' ==============    Измеряем напряжение в канале    ================================

...

 Izmerim_volt_1:
   Volts = Getadc(0)          ' Измеряем напряжение в канале 0
   Shift Volts , Right , 2    ' Превращаем 12 бит в 8 бит, в 1 байт
   Data_1 = Low(volts)        '  Слово в байт преобразуем

0

13

Кто нибудь подключал дисплей от Siemens A52 к AVR на Bascom? Поделитесь пожалуйста мыслями.

0

14

LPH7906 ?

0


Вы здесь » Программирование ATMEL в BASCOM. » Периферия » Управление тиристорным мостом "звезда-Ларионова"