Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 10.03.2013, 15:27   #1
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию dsPic33FJ128MC804

Господа, взялся за дипломный проект, модуль управления трехфазным асинхронным двигателем, векторное управление. За основу модуля взят dspic33fj128MC804 из-за наличия в нем 6-ти канального шим, вот сейчас борюсь с настройкой этого кристала, очень много не понятного, долго со всем разбираюсь, но это интересно, в данный момент уже настроен ШИМ, все работает нормаль как показывает MPLAB. Думаю знающим людям не стоит рассказывать что такое векторное управление, ну так вот, величина шим меняеться как и задумано, теперь стоит вопрос в том, как настроить осцилятор, пока слабо понимаю что и как работает в этом кристале. Если есть на этом форуме светлые умы, которые готовы поддержать первые начинания новичка, буду весьма признателен) заранее спасибо. Конкретный вопрос , это назначение регистров управления конфигурации. В данный момент все регистры оформляю в стиле P1DTCON1bits.DTBPS = 0b00; в отдельной функции, но руководитель говорит что проще пользовать макросы настройки, но толком ни чего я не нашел во всемирной сети.
zhaa2 вне форума   Ответить с цитированием
Старый 10.03.2013, 16:24   #2
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
Господа, взялся за дипломный проект, модуль управления трехфазным асинхронным двигателем, векторное управление. За основу модуля взят dspic33fj128MC804 из-за наличия в нем 6-ти канального шим, вот сейчас борюсь с настройкой этого кристала, очень много не понятного, долго со всем разбираюсь, но это интересно, в данный момент уже настроен ШИМ, все работает нормаль как показывает MPLAB. Думаю знающим людям не стоит рассказывать что такое векторное управление, ну так вот, величина шим меняеться как и задумано, теперь стоит вопрос в том, как настроить осцилятор, пока слабо понимаю что и как работает в этом кристале. Если есть на этом форуме светлые умы, которые готовы поддержать первые начинания новичка, буду весьма признателен) заранее спасибо. Конкретный вопрос , это назначение регистров управления конфигурации. В данный момент все регистры оформляю в стиле P1DTCON1bits.DTBPS = 0b00; в отдельной функции, но руководитель говорит что проще пользовать макросы настройки, но толком ни чего я не нашел во всемирной сети.
Код:
void CPU_Init(void)
{
unsigned int delay=25000;
	SRbits.IPL = 0x7;
/*Отключение неиспользуемой периферии*/
//	BFA(BFA_WR,  PMD1, T4MD,  1); 
//	BFA(BFA_WR,  PMD1, T3MD,  1); 
	BFA(BFA_WR,  PMD1, C1MD,  1); 
//	BFA(BFA_WR,  PMD1, AD1MD,  1); 
	BFA(BFA_WR,  PMD2, IC8MD,  1); 
	BFA(BFA_WR,  PMD2, IC7MD,  1); 
	BFA(BFA_WR,  PMD2, IC2MD,  1); 
	BFA(BFA_WR,  PMD2, IC1MD,  1); 
	BFA(BFA_WR,  PMD2, OC4MD,  1); 
	BFA(BFA_WR,  PMD2, OC3MD,  1); 
	BFA(BFA_WR,  PMD2, OC2MD,  1); 
	BFA(BFA_WR,  PMD2, OC1MD,  1); 
	BFA(BFA_WR,  PMD3, CMPMD,  1); 
	BFA(BFA_WR,  PMD3, DAC1MD,  1); 
/*Переключение тактового генератора с FRC  на HSPLL*/
	if ((OSCCONbits.COSC != 3) && ((BFA(BFA_RD,  OSCCON, COSC) != 1)))
	{
		BFA(BFA_WR,  CLKDIV, PLLPRE,  0x2); //Настройка PLL на Fosc=80МГц, при частоте кварца 8МГц (((8/4)*80)/2)
		BFA(BFA_WR,  CLKDIV, PLLPOST,  0x0);
		BFA(BFA_WR,  PLLFBD, PLLDIV,  78);		//
		__builtin_write_OSCCONH(0x3);	//Задание нового тактового генератора (HSPLL)
		__builtin_write_OSCCONL(0x1);	//Запуск переключения тактового генератора
		while ((OSCCONbits.OSWEN) && (OSCCONbits.COSC != 3))
		{
			ClrWdt();
			if ((--delay)) 		//Ожидание завершения переключения тактового генератора
			{
				continue;
			}
			else
			{
				if (BFA(BFA_RD,  OSCCON, COSC) == 0)
				{
					BFA(BFA_WR,  OSCTUN, TUN,  0x17);	//Частота FRC около 8МГц
					BFA(BFA_WR,  CLKDIV, PLLPRE,  0x0); //Настройка PLL для внутреннего FRC на Fosc=80МГц, при частоте FRC 8МГц (((8/2)*40)/2)
					BFA(BFA_WR,  CLKDIV, PLLPOST,  0x0);
					BFA(BFA_WR,  PLLFBD, PLLDIV,  0x26);		//
					__builtin_write_OSCCONH(0x1);	//Задание нового тактового генератора (FRCPLL)
					__builtin_write_OSCCONL(0x1);	//Запуск переключения тактового генератора
					delay=25000;
					while ((BFA(BFA_RD,  OSCCON, OSWEN)) && (BFA(BFA_RD,  OSCCON, COSC) != 1))
					{
						ClrWdt();
						if ((--delay)) 		//Ожидание завершения переключения тактового генератора
						{
							continue;
						}
						else
						{
							asm("RESET");
						}
					}
					break;				
				}
				else
				{
					asm("RESET");
				}
			}
		}
	}
/*Настройка портов*/
	MapingIO();
	LATA = 0x80;			//Установка всех портов в "0"
	LATB = 0x0;				//
	LATC = 0x0;				//
	AD1PCFGL = 0xffff;		//
	ODCA = ODCA_CONFIG;		//Настройка открытых коллектроров портов
	ODCB = ODCB_CONFIG;		//
	ODCC = ODCC_CONFIG;		//
	TRISA = TRISA_CONFIG;	//Настройка направления портов
	TRISB = TRISB_CONFIG;
	TRISC = TRISC_CONFIG;
/*Инициализация прерываний*/
	BFA(BFA_WR,  SR, IPL,  0x7);
	BFA(BFA_WR,  CORCON, IPL3,  0);
	BFA(BFA_WR,  INTCON1, NSTDIS,  0);
	INTCON2 = 0;
}
__________________

Vanizma вне форума   Ответить с цитированием
Старый 10.03.2013, 20:32   #3
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

спасибо большое на многое открыли глаза.
zhaa2 вне форума   Ответить с цитированием
Старый 10.03.2013, 21:15   #4
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Теперь меня интересует возможность в реальном времени управлять работой процессора, то есть через UART передавать данные, почитал данные что находятся в папке с компилятором Диск/папка/MPLAB C30/docs
там есть целый подраздел посвященный UART. Там сплошь одни функции, которые возможно использовать с этим компилятором. Но я плохо понимаю сам смысл работы этого модуля, вот работает у нас процессор, выполняет какую то операцию, и тут я ему отправляю какие то данные, и для обработки этих данных он должен прервать свою работу и обработать эти данные, или я что то не верно понимаю?
На данный момент нет возможности проверить работу процессора изза его отсутсвия, и отсутсвия программатора. Думал может есть какой симулятор, наткнулся на протэус, но такого кристала там не нашел( искал в протеусе 7.7.) может есть такие версии в которых есть такой элемент? Заранее спасибо
zhaa2 вне форума   Ответить с цитированием
Старый 10.03.2013, 21:32   #5
gramp
Member
 
Регистрация: 28.02.2007
Возраст: 34
Сообщений: 51
Вес репутации: 102/40
gramp will become famous soon enoughgramp will become famous soon enough
Отправить сообщение для gramp с помощью ICQ
По умолчанию Re: dsPic33FJ128MC804

Симулятор в MPLAB/MPLAB X, а Proteus из того что есть в либах - бывает косо криво, как повезет.
gramp вне форума   Ответить с цитированием
Старый 10.03.2013, 22:19   #6
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

MPLAB X установлен, но проблема в том что я сейчас пытаюсь определить рабочую частоту программно, а дефолтом у кристалла стоит FRC тактовый генератор(с частотой 7.37 Мгц) , и что бы я не писал одна операция выполняется примерно одинаково, за один промежуток времени, в зависимости от типа операции, можно конечно в настрйоках симулятора посмотреть и настроить частоту, но это уже не то. А весь смысл именно осциллографом посмотреть длину такта. В протеусе что установлен у меня (7.7) есть множество пиков, и чуть чуть 16-ти битных, из серии МС 204 последний. Вот и подумал возможно есть уже протеус и с 804, тот что меня интересует.
zhaa2 вне форума   Ответить с цитированием
Старый 10.03.2013, 22:32   #7
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Код:
/*
 * File:   Test1.c
 * Author: zhaa2
 *
 * Created on 22 ??????? 2013 ?., 11:41
 */

#include <stdio.h>
#include <stdlib.h>
#include <pwm.h>
#include <math.h>
#include <rtcc.h>
#include <uart.h>
#include <p33FJ128MC804.h>


Переменные для рассчета преобразований Парка.
float T0,w0,t,f0,Imax,fi,ia,ib,ic,iA,iB,O,id,iq,vd,vq,vA,vB,va,vb,vc,DCmax,Ta1,Ta2,Ta3,Ta4,Ta5,Ta6,Tb1,Tb2,Tb3,Tb4,Tb5,Tb6,
T021,T022,T023,T024,T025,T026,Uaout,Ubout,Ucout,Uaout1,Ubout1,Ucout1,i;
const float pi= 3.14;




void PODGOT()
{
    ///////////////////////////////////OSCILATOR/////////////
    OSCCONbits.NOSC = 0b001; //Vibiraem FRC c PLL kak osnovnoy
    OSCTUNbits.TUN = 0b000000;//Nastroyka FRC na chastotu 7.37 MHz
    
    CLKDIVbits.PLLPRE = 2; //N1
    PLLFBDbits.PLLDIV = 0b111111111; //M =513
    CLKDIVbits.PLLPOST = 2; //N2
    ///////Fosc = 159 Mhz , Ftcy = Fosc/2 /////////



    
    ///////////////////Nastroyka PWM moduli//////////////////////////////
    P1TMRbits.PTMR = 1000;// Znachenie taimera
    P1TPERbits.PTPER = 1000;//Velichina perioda PWM

    P1SECMPbits.SEVTCMP = 1000;//Katoy to triger specialnix cobitiy
    P1SECMPbits.SEVTDIR = 0;// Napravlenie dly etogo trigerra

    PWM1CON1bits.PMOD1 = 0;//Peazim raboti pary PWM(1 Nezavisimyi, 0 - zavisimy)
    PWM1CON1bits.PMOD2 = 0;
    PWM1CON1bits.PMOD3 = 0;
    PWM1CON1bits.PEN1H = 1;//Vivodi nastroeni kak vivodi PWM
    PWM1CON1bits.PEN1L = 1;//---//---
    PWM1CON1bits.PEN2H = 1;//---//---
    PWM1CON1bits.PEN2L = 1;//---//---
    PWM1CON1bits.PEN3H = 1;//---//---
    PWM1CON1bits.PEN3L = 1;//---//---

    //////////////////////////Obnovlenie///////////////
    PWM1CON2bits.IUE = 1;//Razreshenie obnovleviy
    PWM1CON2bits.OSYNC = 0;//Vixod sinxronizacii
    
    /////////////////////////Upravlenie////////////////
    P1OVDCONbits.POVD1H = 1;//Izmenenieupravleniy
    P1OVDCONbits.POVD1L = 1;//---//---
    P1OVDCONbits.POVD2H = 1;//---//---
    P1OVDCONbits.POVD2L = 1;//---//---
    P1OVDCONbits.POVD3H = 1;//---//---
    P1OVDCONbits.POVD3L = 1;//---//---

    P1OVDCONbits.POUT1H = 1;
    P1OVDCONbits.POUT1L = 1;
    P1OVDCONbits.POUT2H = 1;
    P1OVDCONbits.POUT2L = 1;
    P1OVDCONbits.POUT3H = 1;
    P1OVDCONbits.POUT3L = 1;

    P1TCONbits.PTCKPS = 0b00;//pred delitel
    P1TCONbits.PTOPS = 0b0000; // post delitel
    P1TCONbits.PTMOD = 0b10;//Rezim raboti PWM

    /////////////////Dead-Time////////////////
    P1DTCON1bits.DTBPS = 0b00;//Mashtab mertvogo vremeni dly bloka B
    P1DTCON1bits.DTB = 0b0011;//Velichina Mertvogo vremeni
    P1DTCON1bits.DTAPS = 0b00;//Mashtab mertvogo vremeni dly bloka A
    P1DTCON1bits.DTA = 0b0011;//elichina Mertvogo vremeni

    P1DTCON2bits.DTS3A = 1;//Iz kakogo bloka budet bratisa Dead-Time (1 - B blok)
    P1DTCON2bits.DTS2A = 1;//---//---
    P1DTCON2bits.DTS1A = 1;//---//---
    P1DTCON2bits.DTS3I = 1;//---//---
    P1DTCON2bits.DTS2I = 1;//---//---
    P1DTCON2bits.DTS1I = 1;//---//---


    P1TCONbits.PTEN = 1;//Rareshenie raboti PWM
     ////////////////////////////////////////PWM/////////////////////////////
    
}
void Parc1()
{
    t=i+0.00001;
    f0 =100000;
    w0 = 2*pi*f0;
    Imax =1000;
    T0=1/f0;
    ia=Imax*sin(w0*t );
    ib=Imax*sin(w0*t - 2*pi/3 );
    ic=Imax*sin(w0*t + 2*pi/3 );
    iA= ia;
    iB= (ia+2*ib)/sqrt(3);

    O = w0*t ;

    id = iA*sin( O + pi/2)+iB*sin(O);
    iq = -iA*sin(O) + iB*sin(O+pi/2);

    vd = 0;
    vq = -1000;

    vA= - vd*sin(O)-vq*sin(O + pi/2);
    vB= vd*sin(O + pi/2) - vq * sin(O);

    va = vB;
    vb = (-vB - sqrt(3)*vA)/2;
    vc = (-vB + sqrt(3)*vA)/2;
    DCmax = -vq;

    Ta1 = (sqrt(3)*vA/2)-vB/2 ;
    Ta2 = vB/2 + (sqrt(3)*vA/2);
    Ta3 = vB;
    Ta4 = -Ta1;
    Ta5 = -Ta2;
    Ta6 = -Ta3;
    Tb1 = vB;
    Tb2 = vB/2 -(sqrt(3)*vA/2);
    Tb3 = -(sqrt(3)*vA/2)-vB/2;
    Tb4 = - Tb1;
    Tb5 = - Tb2;
    Tb6 = - Tb3;

    T021 = (DCmax - Ta1 - Tb1)/2;
    T022 = (DCmax - Ta2 - Tb2)/2;
    T023 = (DCmax - Ta3 - Tb3)/2;
    T024 = (DCmax - Ta4 - Tb4)/2;
    T025 = (DCmax - Ta5 - Tb5)/2;
    T026 = (DCmax - Ta6 - Tb6)/2;

    //////////////////////////////////////////////////UAOUT////////////////////
        if (va > 0 && vc > 0)
    {
        Uaout = T021+Tb1;
    }
        if (vb < 0 && vc < 0)
    {
        Uaout = T022+Ta2+Tb2;
    }
        if (va > 0 && vb >0)
    {
        Uaout = T023+Ta3+Tb3;
    }
        if (va < 0 && vc < 0)
    {
        Uaout = T024+Ta4;
    }
        if (vb > 0 && vc > 0)
    {
        Uaout = T025;
    }
        if (va < 0 && vb < 0 )
    {
        Uaout = T026;
    }
    if (Uaout !=T021+Tb1 && Uaout != T022+Ta2+Tb2 && Uaout != T023+Ta3+Tb3 && Uaout != T024+Ta4 && Uaout != T025 && Uaout != T026 )
    {
        Uaout = 0;
    }

    ////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////UBOUT////////////////////
        if (va > 0 && vc > 0)
    {
        Ubout = T021;
    }
        if (vb < 0 && vc < 0)
    {
        Ubout = T022;
    }
        if (va >0 && vb > 0)
    {
        Ubout =T023 + Tb3;
    }
        if (va < 0 && vc < 0)
    {
        Ubout =T024 + Ta4 + Tb4;
    }
        if (vb > 0 && vc > 0)
    {
        Ubout =T025 + Ta5 + Tb5;
    }
        if (va < 0 && vb < 0)
    {
        Ubout = T026 + Ta6 ;
    }
    if ( Ubout != T021 && Ubout != T022  && Ubout != T023 + Tb3  && Ubout !=T024 + Ta4 + Tb4  && Ubout != T025 + Ta5 + Tb5  && Ubout != T026 + Ta6  )
    {
        Ubout = 0;
    }
    ////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////UCOUT////////////////////
        if (va > 0 && vc > 0)
    {
        Ucout = T021 + Ta1 + Tb1;
    }
        if (vb < 0 && vc < 0)
    {
        Ucout = T022 + Ta2;
    }
        if (va > 0 && vb > 0)
    {
        Ucout =T023;
    }
        if (va < 0 && vc < 0)
    {
        Ucout = T024;
    }
        if (vb > 0 && vc > 0)
    {
        Ucout = T025 + Tb5;
    }
        if (va < 0 && vb < 0 )
    {
        Ucout= T026 + Ta6 + Tb6;
    }
    if ( Ucout != T021 + Ta1 + Tb1  && Ucout != T022 + Ta2   && Ucout != T023   && Ucout != T024 && Ucout != T025 + Tb5  && Ucout != T026 + Ta6 + Tb6 )
    {
        Ucout = 0;
    }
    i=i+1.330683;

    return Uaout, Ubout , Ucout ;
}

int main()
{
    
    PODGOT();
    loop:   Parc1();
            PDC1 = Uaout;
            PDC2 = Ubout;
            PDC3 = Ucout;

    goto loop;


while (1);

}
zhaa2 вне форума   Ответить с цитированием
Старый 10.03.2013, 22:33   #8
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Это весь код который есть, может опытным взглядом найдете ошибки, буду очень признателен,
zhaa2 вне форума   Ответить с цитированием
Старый 11.03.2013, 04:01   #9
gramp
Member
 
Регистрация: 28.02.2007
Возраст: 34
Сообщений: 51
Вес репутации: 102/40
gramp will become famous soon enoughgramp will become famous soon enough
Отправить сообщение для gramp с помощью ICQ
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
Это весь код который есть, может опытным взглядом найдете ошибки, буду очень признателен,
А что не работает то? Если переключение тактирования, то мчип советует так:
Код:
__builtin_write_OSCCONH(NewOscillatorValue);
__builtin_write_OSCCONL(NewOscillatorValue);
OSCCONbits.OSWEN =1;

TimeOutTmp = 0xFFFF;
        while(TimeOutTmp--)
        {
            if(!_OSWEN)
            {
                break;
            }
        }

TimeOutTmp = 0xFFFF;
        while(TimeOutTmp--)
        {
            if(!_CF)
            {
                break;
            }
        }
ну и конфигурационные биты:
тип так:
Код:
_CONFIG2(IESO_OFF & FNOSC_FRCDIV  & WUTSEL_FST & OSCIOFNC_OFF & POSCMOD_NONE & FCKSM_CSECME & IESO_OFF)
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & FWDTEN_OFF &  ICS_PGx2)
ПС: это касательно PIC24FJ64GA002, посмотрел как у себя написано.

Уточните на что жалуетесь
gramp вне форума   Ответить с цитированием
Старый 11.03.2013, 09:34   #10
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

По поводу настройки осцилятора http://ww1.microchip.com/downloads/e...Doc/70216D.pdf. Настройка как я понимаю похожа как МС серии так и для GS,GP серий.
Вот пример того, как я делаю на камне dsPIC33FJ16GS404
Код:
/* Инициализация настроек внутреннего осциллятора */

void init_osc (void)
{
/*******************************************************************************/
/* Настраиваем МК на работу на частоте 40 МГц 								   */
/* Fin=7.37 МГц 															   */
/* Fosc=Fin*M/(N1*N2),Fcy=Fosc/2 											   */
/* Fosc=7.37*(43)/(2*2)=80 МГц  Fcy=40 МГц 									   */
/* где Fosc-частота осциллятора после PLL,Fcy-частота выполнения инструкций МК */
/* Fin-частота осциллятора до PLL 											   */
/* Настраиваем компоненты PLL,в результате чего получаем чатоту Fosc=79,23 МГц */
/* Fosc=Fin*M/(N1*N2) 														   */
/*******************************************************************************/

	PLLFBD = 41; 			             /* M = PLLFBD + 2 */
	CLKDIVbits.PLLPOST = 0;   		     /* N1 = 2 */
	CLKDIVbits.PLLPRE = 0;    		     /* N2 = 2 */
	__builtin_write_OSCCONH(0x01);          
/* Новый осцилятор FRC c PLL NOSC=0x01 */
        __builtin_write_OSCCONL(0x01);          
/* Разрешаем переключение OSWEN=0x01 */   
	while(OSCCONbits.COSC != 0b001){};   
/* Ждем когда новый осциллятор станет FRC c PLL */  
        while(!OSCCONbits.LOCK){};	             /* Ждем включения PLL */  
	
	return;

}
ну и естественно настройки конфигурации, о чем писали выше.
Код:
/* Настраиваем биты конфигурации */

_FOSCSEL(FNOSC_FRC)	  /* Выбираем в качестве начального источника часов МК RC-осциллятор */
_FOSC(OSCIOFNC_OFF & FCKSM_CSECMD & IOL1WAY_OFF)   /* Режима переключения часов МК нет,используем первичный осциллятор*/
_FWDT(FWDTEN_OFF)	 /* Выключить сторожевой таймер */
_FPOR(FPWRT_PWR128) /* Задержка для стабилизации напряжения питания */
_FICD(ICS_PGD1 & JTAGEN_OFF)
grsfan вне форума   Ответить с цитированием
Старый 11.03.2013, 16:15   #11
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Код:
/*
 * File:   Test1.c
 * Author: zhaa2
 *
 * Created on 22 ??????? 2013 ?., 11:41
 */

#include <stdio.h>
#include <stdlib.h>
#include <pwm.h>
#include <math.h>
#include <rtcc.h>
#include <uart.h>
#include <p33FJ128MC804.h>


Переменные для рассчета преобразований Парка.
float T0,w0,t,f0,Imax,fi,ia,ib,ic,iA,iB,O,id,iq,vd,vq,vA,vB,va,vb,vc,DCmax,Ta1,Ta2,Ta3,Ta4,Ta5,Ta6,Tb1,Tb2,Tb3,Tb4,Tb5,Tb6,
T021,T022,T023,T024,T025,T026,Uaout,Ubout,Ucout,Uaout1,Ubout1,Ucout1,i;
const float pi= 3.14;




void PODGOT()
{
    ///////////////////////////////////OSCILATOR/////////////
    OSCCONbits.NOSC = 0b001; //Vibiraem FRC c PLL kak osnovnoy
    OSCTUNbits.TUN = 0b000000;//Nastroyka FRC na chastotu 7.37 MHz
    
    CLKDIVbits.PLLPRE = 2; //N1
    PLLFBDbits.PLLDIV = 0b111111111; //M =513
    CLKDIVbits.PLLPOST = 2; //N2
    ///////Fosc = 159 Mhz , Ftcy = Fosc/2 /////////



    
    ///////////////////Nastroyka PWM moduli//////////////////////////////
    P1TMRbits.PTMR = 1000;// Znachenie taimera
    P1TPERbits.PTPER = 1000;//Velichina perioda PWM

    P1SECMPbits.SEVTCMP = 1000;//Katoy to triger specialnix cobitiy
    P1SECMPbits.SEVTDIR = 0;// Napravlenie dly etogo trigerra

    PWM1CON1bits.PMOD1 = 0;//Peazim raboti pary PWM(1 Nezavisimyi, 0 - zavisimy)
    PWM1CON1bits.PMOD2 = 0;
    PWM1CON1bits.PMOD3 = 0;
    PWM1CON1bits.PEN1H = 1;//Vivodi nastroeni kak vivodi PWM
    PWM1CON1bits.PEN1L = 1;//---//---
    PWM1CON1bits.PEN2H = 1;//---//---
    PWM1CON1bits.PEN2L = 1;//---//---
    PWM1CON1bits.PEN3H = 1;//---//---
    PWM1CON1bits.PEN3L = 1;//---//---

    //////////////////////////Obnovlenie///////////////
    PWM1CON2bits.IUE = 1;//Razreshenie obnovleviy
    PWM1CON2bits.OSYNC = 0;//Vixod sinxronizacii
    
    /////////////////////////Upravlenie////////////////
    P1OVDCONbits.POVD1H = 1;//Izmenenieupravleniy
    P1OVDCONbits.POVD1L = 1;//---//---
    P1OVDCONbits.POVD2H = 1;//---//---
    P1OVDCONbits.POVD2L = 1;//---//---
    P1OVDCONbits.POVD3H = 1;//---//---
    P1OVDCONbits.POVD3L = 1;//---//---

    P1OVDCONbits.POUT1H = 1;
    P1OVDCONbits.POUT1L = 1;
    P1OVDCONbits.POUT2H = 1;
    P1OVDCONbits.POUT2L = 1;
    P1OVDCONbits.POUT3H = 1;
    P1OVDCONbits.POUT3L = 1;

    P1TCONbits.PTCKPS = 0b00;//pred delitel
    P1TCONbits.PTOPS = 0b0000; // post delitel
    P1TCONbits.PTMOD = 0b10;//Rezim raboti PWM

    /////////////////Dead-Time////////////////
    P1DTCON1bits.DTBPS = 0b00;//Mashtab mertvogo vremeni dly bloka B
    P1DTCON1bits.DTB = 0b0011;//Velichina Mertvogo vremeni
    P1DTCON1bits.DTAPS = 0b00;//Mashtab mertvogo vremeni dly bloka A
    P1DTCON1bits.DTA = 0b0011;//elichina Mertvogo vremeni

    P1DTCON2bits.DTS3A = 1;//Iz kakogo bloka budet bratisa Dead-Time (1 - B blok)
    P1DTCON2bits.DTS2A = 1;//---//---
    P1DTCON2bits.DTS1A = 1;//---//---
    P1DTCON2bits.DTS3I = 1;//---//---
    P1DTCON2bits.DTS2I = 1;//---//---
    P1DTCON2bits.DTS1I = 1;//---//---


    P1TCONbits.PTEN = 1;//Rareshenie raboti PWM
     ////////////////////////////////////////PWM/////////////////////////////
    
}
void Parc1()
{
    t=i+0.00001;
    f0 =100000;
    w0 = 2*pi*f0;
    Imax =1000;
    T0=1/f0;
    ia=Imax*sin(w0*t );
    ib=Imax*sin(w0*t - 2*pi/3 );
    ic=Imax*sin(w0*t + 2*pi/3 );
    iA= ia;
    iB= (ia+2*ib)/sqrt(3);

    O = w0*t ;

    id = iA*sin( O + pi/2)+iB*sin(O);
    iq = -iA*sin(O) + iB*sin(O+pi/2);

    vd = 0;
    vq = -1000;

    vA= - vd*sin(O)-vq*sin(O + pi/2);
    vB= vd*sin(O + pi/2) - vq * sin(O);

    va = vB;
    vb = (-vB - sqrt(3)*vA)/2;
    vc = (-vB + sqrt(3)*vA)/2;
    DCmax = -vq;

    Ta1 = (sqrt(3)*vA/2)-vB/2 ;
    Ta2 = vB/2 + (sqrt(3)*vA/2);
    Ta3 = vB;
    Ta4 = -Ta1;
    Ta5 = -Ta2;
    Ta6 = -Ta3;
    Tb1 = vB;
    Tb2 = vB/2 -(sqrt(3)*vA/2);
    Tb3 = -(sqrt(3)*vA/2)-vB/2;
    Tb4 = - Tb1;
    Tb5 = - Tb2;
    Tb6 = - Tb3;

    T021 = (DCmax - Ta1 - Tb1)/2;
    T022 = (DCmax - Ta2 - Tb2)/2;
    T023 = (DCmax - Ta3 - Tb3)/2;
    T024 = (DCmax - Ta4 - Tb4)/2;
    T025 = (DCmax - Ta5 - Tb5)/2;
    T026 = (DCmax - Ta6 - Tb6)/2;

    //////////////////////////////////////////////////UAOUT////////////////////
        if (va > 0 && vc > 0)
    {
        Uaout = T021+Tb1;
    }
        if (vb < 0 && vc < 0)
    {
        Uaout = T022+Ta2+Tb2;
    }
        if (va > 0 && vb >0)
    {
        Uaout = T023+Ta3+Tb3;
    }
        if (va < 0 && vc < 0)
    {
        Uaout = T024+Ta4;
    }
        if (vb > 0 && vc > 0)
    {
        Uaout = T025;
    }
        if (va < 0 && vb < 0 )
    {
        Uaout = T026;
    }
    if (Uaout !=T021+Tb1 && Uaout != T022+Ta2+Tb2 && Uaout != T023+Ta3+Tb3 && Uaout != T024+Ta4 && Uaout != T025 && Uaout != T026 )
    {
        Uaout = 0;
    }

    ////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////UBOUT////////////////////
        if (va > 0 && vc > 0)
    {
        Ubout = T021;
    }
        if (vb < 0 && vc < 0)
    {
        Ubout = T022;
    }
        if (va >0 && vb > 0)
    {
        Ubout =T023 + Tb3;
    }
        if (va < 0 && vc < 0)
    {
        Ubout =T024 + Ta4 + Tb4;
    }
        if (vb > 0 && vc > 0)
    {
        Ubout =T025 + Ta5 + Tb5;
    }
        if (va < 0 && vb < 0)
    {
        Ubout = T026 + Ta6 ;
    }
    if ( Ubout != T021 && Ubout != T022  && Ubout != T023 + Tb3  && Ubout !=T024 + Ta4 + Tb4  && Ubout != T025 + Ta5 + Tb5  && Ubout != T026 + Ta6  )
    {
        Ubout = 0;
    }
    ////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////UCOUT////////////////////
        if (va > 0 && vc > 0)
    {
        Ucout = T021 + Ta1 + Tb1;
    }
        if (vb < 0 && vc < 0)
    {
        Ucout = T022 + Ta2;
    }
        if (va > 0 && vb > 0)
    {
        Ucout =T023;
    }
        if (va < 0 && vc < 0)
    {
        Ucout = T024;
    }
        if (vb > 0 && vc > 0)
    {
        Ucout = T025 + Tb5;
    }
        if (va < 0 && vb < 0 )
    {
        Ucout= T026 + Ta6 + Tb6;
    }
    if ( Ucout != T021 + Ta1 + Tb1  && Ucout != T022 + Ta2   && Ucout != T023   && Ucout != T024 && Ucout != T025 + Tb5  && Ucout != T026 + Ta6 + Tb6 )
    {
        Ucout = 0;
    }
    i=i+1.330683;

    return Uaout, Ubout , Ucout ;
}

int main()
{
    
    PODGOT();
    loop:   Parc1();
            PDC1 = Uaout;
            PDC2 = Ubout;
            PDC3 = Ucout;

    goto loop;


while (1);

}
Когда запускаю этот код, у меня на выходах шим, на ногах PWMxH идет нормальный шим, меняющийся со временем, а на ногах PWMxL просто 0, а должен быть инверсный сигнал, и не могу понять почему, режим проде выбран правильно
Код:
P1TCONbits.PTMOD = 0b10;//Rezim raboti PWM
Разрешение на обновление включено
Код:
PWM1CON2bits.IUE = 1;//Razreshenie obnovleviy
Может глюк самого симулятора?
zhaa2 вне форума   Ответить с цитированием
Старый 11.03.2013, 16:33   #12
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

И да всем спасибо, за помошь, сам бы дня три еще ковырялся) Еще для процедуры преобразования интересует реальное время, но когда я буду знать тактовую частоту, можно будет запустить какой нить таймер, и им считать, верно? Хотя в дата шите читал что есть RTCC модуль реального времени, думал может им воспользоваться? если да то как?)
zhaa2 вне форума   Ответить с цитированием
Старый 12.03.2013, 08:50   #13
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Попробуй в качестве симулятора использовать Simulator Logic Analyzer. Он очень хорошо и качественно отображает ШИМ сигналы. Для этого сначала выбери Debbuger->Select Tool->MPLAB SIM, а затем View->Simulator Logic Analyzer. В появившемся окне выбери нужные каналы для отображения. Ну а потом запусти симуляцию. Если все правильно настроил, то увидишь результат.
grsfan вне форума   Ответить с цитированием
Старый 12.03.2013, 08:54   #14
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
И да всем спасибо, за помошь, сам бы дня три еще ковырялся) Еще для процедуры преобразования интересует реальное время, но когда я буду знать тактовую частоту, можно будет запустить какой нить таймер, и им считать, верно? Хотя в дата шите читал что есть RTCC модуль реального времени, думал может им воспользоваться? если да то как?)
У тебя в этом камне два 32-битных таймера можешь вполне их использовать для отсчета промежутков времени. Я например так и делаю, правда промежутки не очень большие (примерно 4 сек).
Хотя может я не совсем правильно понял зачем тебе нужно знать реальное время и что ты под этим имеешь ввиду.

Последний раз редактировалось grsfan; 12.03.2013 в 08:55. Причина: добавить
grsfan вне форума   Ответить с цитированием
Старый 12.03.2013, 19:03   #15
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

grsfan, вы все правильно поняли, я настраиваю кристалл на рабочую частоту 80 МГц, и после зная сколько раз тикнул счетчик могу в любой момент узнать сколько времени прошло(умножив на длительность одного цикла), а 4 секунды более чем достаточно, просто в коде что я приводил выше, есть функции зависящие от времени, и так как строить зависимости как в маткаде не удасться, приходиться считать для каждого из моментов дискретно. именно для этого и нужна эта переменная времени. Она позволит навечно зациклить эти расчеты. Что даст требуемый вариант. Только вот скажу честно, я так и не смог запустить эти таймеры, один P1TMR я использую для 6-ти канального шима, к нему путь заказан. Остается еще пара если я правильно понимаю, я так и не смог найти регистр, в котором будет храниться количество "тиков" этого таймера, что бы умножать это число на время одного машинного цикла.
zhaa2 вне форума   Ответить с цитированием
Старый 12.03.2013, 19:54   #16
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
grsfan, вы все правильно поняли, я настраиваю кристалл на рабочую частоту 80 МГц, и после зная сколько раз тикнул счетчик могу в любой момент узнать сколько времени прошло(умножив на длительность одного цикла), а 4 секунды более чем достаточно, просто в коде что я приводил выше, есть функции зависящие от времени, и так как строить зависимости как в маткаде не удасться, приходиться считать для каждого из моментов дискретно. именно для этого и нужна эта переменная времени. Она позволит навечно зациклить эти расчеты. Что даст требуемый вариант. Только вот скажу честно, я так и не смог запустить эти таймеры, один P1TMR я использую для 6-ти канального шима, к нему путь заказан. Остается еще пара если я правильно понимаю, я так и не смог найти регистр, в котором будет храниться количество "тиков" этого таймера, что бы умножать это число на время одного машинного цикла.
По поводу таймеров. Таймер для ШИМ ты можешь использовать только для ШИМ каналов, это даже хорошо, потому что они совершенно независимы от других модулей контроллера.
Но у тебя в этом камне может быть аж пять (!) 16-ти битных таймера или один 16-битный и два 32-битных таймера. Вот 32-битные таймеры ты и можешь использовать. Если посмотреть в даташит http://ww1.microchip.com/downloads/e...doc/70291d.pdf то на стр.198 описано как можно настроить 32-битные таймеры на работу. Завтра с работы могут скинуть код на 32-битный таймер как сделано у меня, насколько я вижу регистры совершенно одинаковые. Ну можешь сам пока поразмыслить. Вот ссылка http://ww1.microchip.com/downloads/e...Doc/70205D.pdf. В этой ссылке описание работы с таймерами для всех dsPICов, есть примеры настройки таймеров как 16-ти битных так и 32-ти битных.
grsfan вне форума   Ответить с цитированием
Старый 12.03.2013, 20:49   #17
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Был бы примного благодарен за пример кода с работы. Заранее спасибо.
zhaa2 вне форума   Ответить с цитированием
Старый 13.03.2013, 08:39   #18
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
Был бы примного благодарен за пример кода с работы. Заранее спасибо.
Вот пример инициализации таймера
Код:
/* Инициализация 32-битного таймера */

void init_Timer32 (void)
{

	T3CONbits.TON = 0; /* Остановить любые операции с 16 разрядным таймером Т2 */
	T2CONbits.TON = 0; /* Остановить любые операции с 16/32 разрядным таймером Т3 */
	T2CONbits.T32 = 1; /* Разрешить работу 32 разрядного таймера */
	T2CONbits.TCS = 0; /* Выбрать тактирование внутренним часами с частотой FOSC/2 */
	T2CONbits.TGATE = 0; 
	T2CONbits.TCKPS = 0b01; /* Коэффициентпредделения 1:8 */

	TMR3 = 0x00; /* Обнуляем регистры TMR2 и TMR3*/
	TMR2 = 0x00;

	PR3 = 0x131;    /* Устанавливам значение, после которого происходит прерывание по таймеру Т3 */
	PR2 = 0x2D00;	/* Хотим 4 сек - > 1/(Fcy/8)=0,2 мкс длительность одного отсчета таймера - > 4/0,2*10^-6=20*10^6 отсчетов тамера Т3 или 0х1312D00 */

	IPC2bits.T3IP = 6; /* Устанавливаем приоритет для прерывания по таймеру Т3 */
	IFS0bits.T3IF = 0; /* Обнуляем флаг прерывания по таймеру T3*/
	IEC0bits.T3IE = 1; /* Разрешаем прерывания по таймеру Т3 */

	return;
}
Как только натикает твой таймер какое-то время, сразу же возникнет прерывание и уже в обработчике прерывания сделаешь что хочешь. Да кстати, у меня Fcy=40MHz.
Ну и тело обработчика на всякий случай.
Код:
void __attribute__((__interrupt__, no_auto_psv)) _T3Interrupt(void)
{
/* тут пишешь что хочешь сделать */
	IFS0bits.T3IF = 0;
}
grsfan вне форума   Ответить с цитированием
Старый 13.03.2013, 13:25   #19
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Вот , заработало) спасибо, но я все это дело подстроил под стандартнй RC осцилятор, на 7.37 Мгц, не могу подключить PLL, когда включаю камень просто уходит в сброс, делаю вот так
Код:
_FWDT(FWDTEN_OFF)
int main()
{
    long int i,a;
    a=10;
    //настраиваю ноги как обычне а не выходы шим
    PWM1CON1bits.PEN1H = 0;//Vivodi nastroeni kak vivodi PWM
    PWM1CON1bits.PEN1L = 0;//---//---
    PWM1CON1bits.PEN2H = 0;//---//---
    PWM1CON1bits.PEN2L = 0;//---//---
    PWM1CON1bits.PEN3H = 0;//---//---
    PWM1CON1bits.PEN3L = 0;//---//---
    TRISBbits.TRISB14 = 0;//выводы настроены на выход
    TRISBbits.TRISB15 = 0;
    PORTBbits.RB15 = 0;

    //запись данных для PLL что бы достичь 80 Мгц
    PLLFBD = 41;                    // M=43-2 - mnogitel FAPCH
    CLKDIVbits.PLLPOST = 0;     // N1=2 - Postdelitel
    CLKDIVbits.PLLPRE = 0;         // N2=2 - Preddelitel
    //проверка уже в контроллере, записались ли данные, если нет то переход на метку
        if (PLLFBD != 41  )
        {
            goto loop2;
        }
        if (CLKDIVbits.PLLPOST !=0b00)
        {
            goto loop2;
        }
        if (CLKDIVbits.PLLPRE !=0b0000)
        {
            goto loop2;
        }
    
        //Включение PLL, пробовал записывать в регистр OSCCON через команду OSCCONbits.NOSC = 1, вообще запись не происходила, пришлось воспользоваться след функциями, просто не совсем понимаю чем они отличаються.
        __builtin_write_OSCCONH(1); //OSCCONbits.NOSC = 0b001;
        __builtin_write_OSCCONL(1); //OSCCONbits.OSWEN = 0b1;
        //опять же проверка
        if (OSCCONbits.NOSC != 0b000)
        {
            PORTBbits.RB14=1;
        }
    //и в скоре после выполнения этих команд просто перезагружеться проц, на источнике питания наблюдаю постоянные скачки напряжения в приеделах 1 вольта.
    while (1)
    {
    for (i=0;i<a;i++)
    {
        PORTBbits.RB15 = 1;
        
    }
    for (i=0;i<a;i++)
    {
        PORTBbits.RB15 = 0;
        
    }
    };
    loop2:
    PWM1CON1bits.PEN1H = 0;//Vivodi nastroeni kak vivodi PWM
    PWM1CON1bits.PEN1L = 0;//---//---
    PWM1CON1bits.PEN2H = 0;//---//---
    PWM1CON1bits.PEN2L = 0;//---//---
    PWM1CON1bits.PEN3H = 0;//---//---
    PWM1CON1bits.PEN3L = 0;//---//---
    TRISBbits.TRISB14 = 0;
    TRISBbits.TRISB15 = 0;
    while(1)
    {
    PORTBbits.RB15=1 ;
    }
    loop3:
    while (1)
    {
    PORTBbits.RB14 =1 ;
    }
        while (1);


}
zhaa2 вне форума   Ответить с цитированием
Старый 13.03.2013, 13:36   #20
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Ты хочешь работать на внутреннем RC осциляторе 7,37 МГц, если так то сделай как я писал раньше.
Код:
void init_osc (void)
{
/*******************************************************************************/
/* Настраиваем МК на работу на частоте 40 МГц 								   */
/* Fin=7.37 МГц 															   */
/* Fosc=Fin*M/(N1*N2),Fcy=Fosc/2 											   */
/* Fosc=7.37*(43)/(2*2)=80 МГц  Fcy=40 МГц 									   */
/* где Fosc-частота осциллятора после PLL,Fcy-частота выполнения инструкций МК */
/* Fin-частота осциллятора до PLL 											   */
/* Настраиваем компоненты PLL,в результате чего получаем чатоту Fosc=79,23 МГц */
/* Fosc=Fin*M/(N1*N2) 														   */
/*******************************************************************************/

	PLLFBD = 41; 				/* M = PLLFBD + 2 */
	CLKDIVbits.PLLPOST = 0;   	        /* N1 = 2 */
	CLKDIVbits.PLLPRE = 0;    		/* N2 = 2 */
	__builtin_write_OSCCONH(0x01);    /* Новый осцилятор FRC c PLL         NOSC=0x01 */
        __builtin_write_OSCCONL(0x01);    /* Разрешаем переключение OSWEN=0x01 */   
        while(OSCCONbits.COSC != 0b001){};/* Ждем когда новый осциллятор станет FRC c PLL */  
        while(!OSCCONbits.LOCK){};	      /* Ждем включения PLL */  
	
	return;

}
не надо вот этих if-ов (которые ты используешь для проверки), этот код приводиться в качестве примера в даташите на осцилятор, так что используй его и все будет ок. Во всяком случае у меня все работает.
grsfan вне форума   Ответить с цитированием
Старый 13.03.2013, 19:23   #21
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Да вы правы, все работает, причина была в том что я только начинаю работать с электроникой, токо потребление у камня 70 мВ а я ему 10 давал, он заводился, но при подключении PLL напряжение просидало, и проц уходил в сброс, потом снова запускался и снова уходил,как всегда все было по моей вине.
zhaa2 вне форума   Ответить с цитированием
Старый 13.03.2013, 21:24   #22
grsfan
Member
 
Регистрация: 14.01.2011
Адрес: Ленинград
Сообщений: 89
Вес репутации: 145/26
grsfan will become famous soon enoughgrsfan will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
Да вы правы, все работает, причина была в том что я только начинаю работать с электроникой, токо потребление у камня 70 мВ а я ему 10 давал, он заводился, но при подключении PLL напряжение просидало, и проц уходил в сброс, потом снова запускался и снова уходил,как всегда все было по моей вине.
Не надо впадать в уныние Все получиться.
Если будут вопросы - пиши.
grsfan вне форума   Ответить с цитированием
Старый 14.03.2013, 18:47   #23
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Так пользуясь вашей добротой, хотел бы узнать по больше о работе шим, в этом камне. Разобрался в том что там два модуля, 1-й и второй, 1-й для управления двигателями, второй, просто шим двух канальный. Так вот пока меня не особо интересует второй, больше первый. вот мой код с поясненийми что я делаю
Код:
//void PODGOT_PWM()
//{
//
    ///////////////////Nastroyka PWM moduli//////////////////////////////
    P1TMRbits.PTMR = 1980;// Znachenie taimera
    P1TPERbits.PTPER = 1980;//Velichina perioda PWM

    P1SECMPbits.SEVTCMP = 0;//Katoy to triger specialnix cobitiy
    P1SECMPbits.SEVTDIR = 0;// Napravlenie dly etogo trigerra

    PWM1CON1bits.PMOD1 = 0;//Peazim raboti pary PWM(1 Nezavisimyi, 0 - nevisimy)
    PWM1CON1bits.PMOD2 = 0;
    PWM1CON1bits.PMOD3 = 0;
    PWM1CON1bits.PEN1H = 1;//Vivodi nastroeni kak vivodi PWM
    PWM1CON1bits.PEN1L = 1;//---//---
    PWM1CON1bits.PEN2H = 1;//---//---
    PWM1CON1bits.PEN2L = 1;//---//---
    PWM1CON1bits.PEN3H = 1;//---//---
    PWM1CON1bits.PEN3L = 1;//---//---

    //////////////////////////Obnovlenie///////////////
    PWM1CON2bits.IUE = 1;//Razreshenie obnovleviy
    PWM1CON2bits.OSYNC = 0;//Vixod sinxronizacii

    /////////////////////////Upravlenie////////////////
    P1OVDCONbits.POVD1H = 1;//Izmenenieupravleniy
    P1OVDCONbits.POVD1L = 1;//---//---
    P1OVDCONbits.POVD2H = 1;//---//---
    P1OVDCONbits.POVD2L = 1;//---//---
    P1OVDCONbits.POVD3H = 1;//---//---
    P1OVDCONbits.POVD3L = 1;//---//---

    P1OVDCONbits.POUT1H = 1;
    P1OVDCONbits.POUT1L = 1;
    P1OVDCONbits.POUT2H = 1;
    P1OVDCONbits.POUT2L = 1;
    P1OVDCONbits.POUT3H = 1;
    P1OVDCONbits.POUT3L = 1;

    P1TCONbits.PTCKPS = 0b00;//pred delitel
    P1TCONbits.PTOPS = 0b0000; // post delitel
    P1TCONbits.PTMOD = 0b10;//Rezim raboti PWM

   /////////////////Dead-Time////////////////
    P1DTCON1bits.DTBPS = 0b00;//Mashtab mertvogo vremeni dly bloka B
    P1DTCON1bits.DTB = 0b0011;//Velichina Mertvogo vremeni
    P1DTCON1bits.DTAPS = 0b00;//Mashtab mertvogo vremeni dly bloka A
    P1DTCON1bits.DTA = 0b0011;//elichina Mertvogo vremeni

    P1DTCON2bits.DTS3A = 1;//Iz kakogo bloka budet bratisa Dead-Time (1 - B blok)
    P1DTCON2bits.DTS2A = 1;//---//---
    P1DTCON2bits.DTS1A = 1;//---//---
    P1DTCON2bits.DTS3I = 1;//---//---
    P1DTCON2bits.DTS2I = 1;//---//---
    P1DTCON2bits.DTS1I = 1;//---//---

    P1TCONbits.PTEN = 1;//Rareshenie raboti PWM

     ////////////////////////////////////////PWM/////////////////////////////

}
zhaa2 вне форума   Ответить с цитированием
Старый 14.03.2013, 19:35   #24
zhaa2
Member
 
Регистрация: 10.03.2013
Возраст: 27
Сообщений: 77
Вес репутации: 100/18
zhaa2 will become famous soon enoughzhaa2 will become famous soon enough
По умолчанию Re: dsPic33FJ128MC804

Извинияюсь что коментарии странслитом, MPLAB X все надписи на русском зыке превращает в "?????????? ????", ну так вот, в принцепе работает, но вопросы,
У шима есть таймер
Код:
P1TMRbits.PTMR = 1980;// Znachenie taimera
этим битом мы задаем его величину, как я понимаю это то значение, которое становиться эталоном, с которым сравниваеться период который хранится в
Код:
P1TPERbits.PTPER = 1980;//Velichina perioda PWM
если я не прав поправте, просто понаписал чего то, вроде работает но меня это не устраивает.
Далее идет вопрос, встречается понятие Time-Base , это начало работы? потому что по другому понять Базовое время, я пока не могу понять.
Так же в регистре
Код:
P1TPERbits.PTPER = 1980;//Velichina perioda PWM
хрониться период шим, в даташите по формуле посчитал формула примерно PTPER=Ftcy/Fpwm*PxTMR*Prescaler*2 Частоту шима брал 20 кГц, как в даташите написано, но что то связи так и не уловил между этими значениями, хотелось бы человеческого объсянения. Заранее спасибо.
zhaa2 вне форума   Ответить с цитированием
Старый 14.03.2013, 19:48   #25
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: dsPic33FJ128MC804

Цитата:
Сообщение от zhaa2 Посмотреть сообщение
Извинияюсь что коментарии странслитом, MPLAB X все надписи на русском зыке превращает в "?????????? ????"
в свойствах проекта кодировку выбрать нужно правильную
__________________

Vanizma вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подтяжка входов в dsPIC33FJ128MC804 d-f-m Продукция MICROCHIP 4 27.06.2010 20:02


Часовой пояс GMT +3, время: 21:21.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot