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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Разное » Управление BLDC двигателем


Управление BLDC двигателем

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

1

Приветствую! Так как не силен в управлении всяких двигателей решил написать, нужен совет опытных пользователей. BLDC двигатель с напряжением питания 310В, для управления взял сборку IRAMX16UP60A. МК взял Atmega2560, т.к. у него есть 3х канальный ШИМ. ШИМ настроен с разрядностью 9 бит и режимом Phase Correct, частота ~11кГц. Bootstrap конденсаторы поставил на 4,7мкФ.
В процессе изучения наткнулся вот на такой Application Note, по которому алгоритм и сделал. AN1916

Код:
$regfile = "m2560def.dat"
$crystal = 11059200
$swstack = 48
$hwstack = 48
$framesize = 48

Config Portf.1 = Output
Iram_enable Alias Portf.1
Iram_enable = 0

Config Porte.3 = Output                                     'High IN1
Config Porte.4 = Output                                     'High IN3
Config Porte.5 = Output                                     'High IN2

Config Porth.3 = Output                                     'Low IN2
Config Porth.4 = Output                                     'Low IN1
Config Porth.5 = Output                                     'Low IN3

Low_in1 Alias Porth.4
Low_in2 Alias Porth.3
Low_in3 Alias Porth.5
Low_in1 = 1
Low_in2 = 1
Low_in3 = 1

Config Pink.0 = Input                                       'U Phase Hall Sensor
Config Pink.2 = Input                                       'V Phase Hall Sensor
Config Pink.1 = Input                                       'W Phase Hall Sensor

Config Pinb.6 = Input
Reverse Alias Pinb.6
Set Pinb.6

Tccr3a = &B11111110
Tccr3b = &B00000001
Tccr3c = &B00000000

Dim Pwm_max As Word
Pwm_max = 150

Enable Interrupts

Iram_enable = 1

Do
    Hall_sensors.0 = Pink.1
    Hall_sensors.1 = Pink.2
    Hall_sensors.2 = Pink.0

    If Reverse = 0 Then
       Select Case Hall_sensors
          Case 3 : Ocr3a = 0 : Ocr3c = Pwm_max : Ocr3b = 0 : Low_in1 = 0 : Low_in2 = 1 : Low_in3 = 1
          Case 2 : Ocr3a = 0 : Ocr3c = Pwm_max : Ocr3b = 0 : Low_in1 = 1 : Low_in2 = 1 : Low_in3 = 0
          Case 6 : Ocr3a = Pwm_max : Ocr3c = 0 : Ocr3b = 0 : Low_in1 = 1 : Low_in2 = 1 : Low_in3 = 0
          Case 4 : Ocr3a = Pwm_max : Ocr3c = 0 : Ocr3b = 0 : Low_in1 = 1 : Low_in2 = 0 : Low_in3 = 1
          Case 5 : Ocr3a = 0 : Ocr3c = 0 : Ocr3b = Pwm_max : Low_in1 = 1 : Low_in2 = 0 : Low_in3 = 1
          Case 1 : Ocr3a = 0 : Ocr3c = 0 : Ocr3b = Pwm_max : Low_in1 = 0 : Low_in2 = 1 : Low_in3 = 1
       End Select
    Else
       Select Case Hall_sensors
          Case 3 : Ocr3a = Pwm_max : Ocr3c = 0 : Ocr3b = 0 : Low_in1 = 1 : Low_in2 = 0 : Low_in3 = 1
          Case 1 : Ocr3a = Pwm_max : Ocr3c = 0 : Ocr3b = 0 : Low_in1 = 1 : Low_in2 = 1 : Low_in3 = 0
          Case 5 : Ocr3a = 0 : Ocr3c = Pwm_max : Ocr3b = 0 : Low_in1 = 1 : Low_in2 = 1 : Low_in3 = 0
          Case 4 : Ocr3a = 0 : Ocr3c = Pwm_max : Ocr3b = 0 : Low_in1 = 0 : Low_in2 = 1 : Low_in3 = 1
          Case 6 : Ocr3a = 0 : Ocr3c = 0 : Ocr3b = Pwm_max : Low_in1 = 0 : Low_in2 = 1 : Low_in3 = 1
          Case 2 : Ocr3a = 0 : Ocr3c = 0 : Ocr3b = Pwm_max : Low_in1 = 1 : Low_in2 = 0 : Low_in3 = 1
       End Select
    End If
Loop
End


Нижние ключи я просто включаю и выключаю, пока без ШИМ, т.к. не смог добиться синхронной работы Timer3 и Timer4. Можно ли таким образом регулировать скорость, направление вращения двигателя и насколько такой метод управления верен?

0

2

Что вы делаете таймерами 3,4 ?

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

не смог добиться синхронной работы

Чем выражено?

0

3

Генерирую трехканальный ШИМ для управления входами Logic Input High Side Gate Driver - Phase 1,2,3(Таймер 3) и Logic Input Low Side Gate Driver - Phase 1,2,3(Таймер 4) сборки IRAMX16UP60A. Нужны 6 синфазных сигнала ШИМ, в режиме Phase Correct каждый из таймеров генерируют трехканальный синфазный ШИМ для своих выходов ОС3А,В,С и ОС4А,В,С, но ШИМ сигнал таймера4 отстает, поэтому пока просто решил включать и выключать входы Logic Input Low Side Gate Driver - Phase 1,2,3 без ШИМ.

0

4

Нужно смотреть ДШ есть ли режим синхронизации.

0

5

Я пока оставил трехканальный ШИМ на таймере 3. Насколько алгоритм управления, который написан в коде верен?

0

6

Да любой код имеет право на жизнь, тем более если работает)  для повышения КПД  нужно  использовать угол опережения чтоб вектора были под 90'  у вас заводской дпт с встроенными датчиками? В реале я так понимаю не запускали.

0

7

Да BLDC с датчиками холла. В реале запускал, работает. Хотел учесть все нюансы, т.к. сборка IRAMX16UP60A у меня одна и не хочется ее спалить.

0

8

Лучше смотреть в сторону Xmega, там есть всё необходимое для BLDC моторов, и АЦП и ЦАП c диф.входами/выходами и синус на аппаратном уровне и таймеров куча и синхронизация таймеров через канал события на аппаратном уровне возможна.
Если просто крутить, то может использовать вот такое - IR2133 ?

0

9

Atmega2560 под рукой были. Внутри IRAMX16UP60A стоит контроллер IR21365 + 6 ключей. Меня интересует вот что, можно ли контролировать скорость вращения ротора с помощью алгоритма, который я выложил в первом посте?

0

10

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

.....можно ли контролировать скорость вращения ротора с помощью алгоритма, который я выложил в первом посте?

Я не понял как инициализировали таймеры, ведь частота ШИМ может быть выше возможно допустимой.
Может проще блок DATA использовать? Если всё 8 битное, то работать будет быстро.
Тут кстати кто-то уже на форуме блок DATA с сигналом синуса выкладывал.

0

11

ШИМ настроен с разрядностью 9 бит и режимом Phase Correct. Частота ШИМ постоянная ~11кГц. С синусом как-то очень сложно получается. Можно ли менять скорость вращения просто меняя скважность ШИМ?

0

12

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

Можно ли менять скорость вращения просто меняя скважность ШИМ?

В вашем варианте только так и надо, если асинхронник то частотой. Если надо синус могу скинуть.

0

13

Было бы здорово. Спасибо огромное!

0


Вы здесь » Программирование ATMEL в BASCOM. » Разное » Управление BLDC двигателем