Полезная информация


асинхронный двигатель и контроллер

Автор Dtolok, 26 Дек. 2015 в 00:34

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

on4ip

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

Dtolok

после отключения модуля PWM идет импульс только по нижнему ключу - верхний закрыт - откуда дерется не пойму

on4ip

Осциллограммы есть? Ну лечить без фото даже кашпировский не мог
В жизни все не так, как на самом деле.

Dtolok

видео 1е когда мотор работает после нажатия кнопки 4 и 2е после нажатия кнопки 5
case 4:
                    if (!uGF.bit.RunMotor )
                    {
                        Lcd_Out(2,1,"START");
                        uGF.Word = 0;                   // clear flags
                        //DebounceDelay();
                        uGF.bit.RunMotor = 1;               //then start motor

                        // Run the motor
                        uGF.bit.ChangeMode = 1;
                        uGF.bit.OpenLoop = 1;
                        //PTCON = 0x8000;         // Enable PWM for center aligned operation
                    }
                break;
           
                case 5 :
                    if (uGF.bit.RunMotor )
                    {
                        //PTCON = 0x0000;         // Disable PWM for center aligned operation
                       // DebounceDelay();
                        // Switch between open and closed loop
                        uGF.bit.ChangeMode = 1;
                        uGF.bit.OpenLoop = ! uGF.bit.OpenLoop;
                        Lcd_Out(1,3,"stop");
                        Lcd_Out(2,1,"STOP ");
                        uGF.bit.RunMotor = 0;               //then start motor
                    }
                break;

on4ip

Ну я не знаю как в ПИК.
При включении все ножки входы.
При инициализации подтяжек сначала нужно установить подтяжки, потом выполнить инициализацию ножек на выходы. В противном случае на моем TMS выходы звенят.
В жизни все не так, как на самом деле.

Dtolok

инициализация модуля

// ============= Motor PWM ======================

    // Center aligned PWM.
    // Note: The PWM period is set to dLoopInTcy/2 but since it counts up and
    // and then down => the interrupt flag is set to 1 at zero => actual
    // interrupt period is dLoopInTcy
    PTCON = 0x0000;

PHASE1 = LOOPTIME_TCY;
PHASE2 = LOOPTIME_TCY;
PHASE3 = LOOPTIME_TCY;
PTPER = 2*LOOPTIME_TCY+1;

PWMCON1 = 0x0204; // Enable PWM output pins and configure them as
PWMCON2 = 0x0204; // complementary mode
PWMCON3 = 0x0204;

//I/O pins initially controlled by GPIO
IOCON1 = 0;
IOCON2 = 0;
IOCON3 = 0;

//configure deadtime
DTR1 = 0x0000;
DTR2 = 0x0000;
DTR3 = 0x0000;

ALTDTR1 = DDEADTIME; // 700 ns of dead time
ALTDTR2 = DDEADTIME; // 700 ns of dead time
ALTDTR3 = DDEADTIME; // 700 ns of dead time


FCLCON1 = 0x3;     //Fault disabled
FCLCON2 = 0x3;     //Fault disabled
FCLCON3 = 0x3;     //Fault disabled

PTCON2 = 0x0000; // Divide by 1 to generate PWM

    PDC1 = MIN_DUTY;   // Initialise the duty registers
    PDC2 = MIN_DUTY;
    PDC3 = MIN_DUTY;

IPC23bits.PWM1IP = 4; // PWM Interrupt Priority 4
IPC23bits.PWM2IP = 4; // PWM Interrupt Priority 4
IPC24bits.PWM3IP = 4; // PWM Interrupt Priority 4
IFS5bits.PWM1IF=0; // Clearing the PWM Interrupt Flag
IEC5bits.PWM1IE=0; // Enabling the PWM interrupt

    //PTCON = 0x8000;         // Enable PWM for center aligned operation

//I/O pins controlled by PWM
IOCON1 = 0xC000;
Delay(100);     // Adding this delay allows enough time for high-ESR-type C61 to recover
IOCON2 = 0xC000;
Delay(100);     // Adding this delay allows enough time for high-ESR-type C61 to recover
IOCON3 = 0xC000;

    // SEVTCMP: ??????????? ??????????? ?????????? ??????? ?????
    //???? ????????? ADC ????????????? ???????????? ????? PWM: 0 ???????? ? ???????
SEVTCMP = 0;

// ============= ADC - Measure Current & Pot ======================
    // ADC setup for simultanous sampling on
    //      CH0=AN13, CH1=AN0, CH2=AN1, CH3=AN2.
    // Sampling triggered by PWM and stored in signed fractional form.

    // Signed fractional (DOUT = sddd dddd dd00 0000)
    AD1CON1bits.FORM = 3;   
AD1CON1bits.SSRC = 3;
AD1CON1bits.SSRCG = 0;
    // Simultaneous Sample Select bit (only applicable when CHPS = 01 or 1x)
    // Samples CH0, CH1, CH2, CH3 simultaneously (when CHPS = 1x)
    // Samples CH0 and CH1 simultaneously (when CHPS = 01)
    AD1CON1bits.SIMSAM = 1; 
    // Sampling begins immediately after last conversion completes.
    // SAMP bit is auto set.
    AD1CON1bits.ASAM = 1; 


    AD1CON2 = 0;
    // Samples CH0, CH1, CH2, CH3 simultaneously (when CHPS = 1x)
    AD1CON2bits.CHPS = 2; 


    AD1CON3 = 0;
    // A/D Conversion Clock Select bits = 6 * Tcy
    AD1CON3bits.ADCS = 6; 


/* ADCHS: ADC Input Channel Select Register */
    AD1CHS0 = 0;
    // CH0 is AN13 for POT
    AD1CHS0bits.CH0SA = 3;
    // CH1 positive input is AN0, CH2 positive input is AN1, CH3 positive input is AN2
    AD1CHS123bits.CH123SA = 0;

    /* ADCSSL: ADC Input Scan Select Register */
    AD1CSSL = 0;

    // Turn on A/D module
    AD1CON1bits.ADON = 1;

// Wait until first conversion takes place to measure offsets.
Delay(100);

    //Fault enabled
    FCLCON1 = 0x00FD;  //Fault enabled Fault SRC - Fault 32
FCLCON2 = 0x00FD;  //Fault enabled Fault SRC - Fault 32
FCLCON3 = 0x00FD;  //Fault enabled Fault SRC - Fault 32
return;
}

еще до включения модуля на верхних ключах появляется импульс

Добавлено 01 Март 2016 в 14:53

это уже после инициализации самого МК ... инициализирую PWM - проблема вылазит.

on4ip

PHASE1 = LOOPTIME_TCY; Если это регистр сравнения то он должен быть равен половине счетчика
тоесть поделить на 2. Как мне кажется тут значние равно максимуму счетчика при счетет вверх, ну и получается он открывает нижние транзисторы, а потом задание от системы управления обновляется на нулевые.
Но могу ошибаться тут контролелр не знаю.
В жизни все не так, как на самом деле.

Dtolok


on4ip

Если у вас CenterAligned PWM то долшен быть меандр при нулевом задании сейчас походе что задние максимально.
В жизни все не так, как на самом деле.

Dtolok

так чем остановить - отключить прерывание?

Dtolok

выяснил откуда сигнал - при стопе - МК выдает на нижние или верхние ключи высокий уровень - HCPL формирует т.к. не включено питание FAULT и по какой то причине (может умер один драйвер) идет сигнал на ключ (померял - на один - остальные высокий уровень без сигнала). епть...

Dtolok

разобрался - при отключении модуля PWR PTEN - выводы переходят в подчинение порта и управляются по LATx , т.е после отключения нужно перевести их в состояние "0" командой LATx = 0x0000

Dtolok

MPLAB - как задать прерывание? авто имена есть в нем?

Dtolok

так как все таки правильно?

void __attribute__((__interrupt__,__auto_psv__(__irq__( 52)))) MyIRQ(void);

Dtolok

с прерыванием разобрался - вылезла другая проблема! при включении мотора срабатывает FAULT моментально... вроде как задержку можно сделать а с другой стороны - а вдруг правильно?

Dtolok

причем заметил - когда силовая часть подключена к сети - FAULT моментально срабатывает - а когда заряжен конденсатор на диодном мосте при отключенном сетевом проводе - двигатель стартует и останавливается(сел кондер) -FAULT не выскакивает!

on4ip

У вас бездатчик же? Как вы параметры двигателя учли в прграмме?
В жизни все не так, как на самом деле.

Dtolok

у меня есть  userfail в котором проставляются данные на двигатель. мне кажется проблема в входном конденсаторе