Приветствую! Так как не силен в управлении всяких двигателей решил написать, нужен совет опытных пользователей. 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. Можно ли таким образом регулировать скорость, направление вращения двигателя и насколько такой метод управления верен?

