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