Перейти к содержанию
    

TMS320F2812 реализация ШИМ

Здравствуйте. Тут возникла у меня необходимость реализовать ШИМ на данном камне от TI. Нашёл пример у них на сайте но он весь какой-то непонятный и компилироваться не хочет. С DSP раньше дела никогда не имел, а тут курсовую как раз дали такую что ШИМ надо реализовать и сроки поджимают уже. Может быть у кого-нибудь есть готовый пример как это сделать? :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Вроде на работе должен быть проект готовый с ШИМ, только боюсь он будет понятен не более, чем техасовский пример. Буду там завтра - посмотрю. А Вы бы написали пока, что пытались делать, что не работает, где не компилируется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок. В общем проблема у меня на данный момент заключается в том что при компиляции композер не видит один файл (DSP281х_Device.h) и в итоге при компиляции половина С-файлов просто не компилируется. Что интересно часть файлов он компилирует а часть нет. Проект прикрепляю к этому сообщению:

ev_pwm.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выкладываю свой проект с рабочим ШИМ-ом. Код не бог весть какой, ногами не бить - один из первых проектов, зато есть комментарии.

 

Извиняюсь, что забыл выложить вчера. Дел много, по этой же причине не посмотрел Ваш проект и просто выкладываю свой рабочий. Добавлю, что он написан для 2811 - номера пинов, отмеченных в комментариях могут не совпадать с пинами для 2812. В остальном должно работать аналогично.

UM6_ram.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/********************************************************************

* User’s source file

********************************************************************/

 

#define CNTRL_ADDR_DEF 1

#define CNTRL_ADDR_ALL_DEF 10

 

#define NEW_CONTROLER 1

 

 

 

#include "DSP281x_Device.h"

#include "RS485.h"

#include "bios_dsp.h"

#include "tests.h"

#include "flash_tools.h"

#include "big_dsp_module.h"

#include "spise2p.h"

#include <math.h>

 

#include <stdio.h>

#include <stdlib.h>

 

 

#define pi 3.1415926535897932384626433832795

 

 

//interrupt void ReadCom(void);

 

 

unsigned int MassCom[16];

 

 

 

//void Par(int p,int yy=1)

//{ int Otvet;

 

// Otvet=p+yy;

 

 

//}

 

 

/*interrupt void ReadCom(void)

{ int ll;

EALLOW;

for(ll=0;ll<=15;ll++)

 

MassCom[ll]=SciaRegs.SCIRXBUF.all;

SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;

SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;

//SciaRegs.SCIFFRX.bit.RXFIFORESET=1;

 

PieCtrlRegs.PIEACK.all|=0x100;

EDIS;

} */

 

interrupt void Shim(void)

{

 

float Skvagnost,ShirImp;

float ii;

long i,Periud;

 

Periud=(120000000/1200)/2.0;

 

// for(i=1;i<=360;i++)

 

if(++i>359) i=0;

{

 

ii=i*pi/180;

 

Skvagnost=(sin(ii*50)+1)/2 * Periud;

 

ShirImp=Skvagnost;

EvaRegs.CMPR1=ShirImp;//регистр компоратора

EvaRegs.CMPR2=ShirImp;//регистр компоратора

EvaRegs.CMPR3=ShirImp;//регистр компоратора

 

 

}

EvaRegs.EVAIFRA.bit.T1PINT=1; //сбросить флаг прерывания периуд таймера

EALLOW;

PieCtrlRegs.PIEACK.all=102;//PIEACK_GROUP2; //подвердить прерывание

EDIS;

}

 

 

 

 

 

int x=2;

int y=7,i;

int poln,z;

int mass[10];

struct massTest

{int h[10],w[10]}p;

 

 

 

 

 

//int &znak=orig;

 

void main(void)

{

 

 

InitSysCtrl();

 

 

 

//setup_oper_line();

setup_leds_line();

DINT; //выключить прерывания в процессоре

InitPieCtrl();

IER = 0x0000; //выключить группу прерываний в процессоре

IFR = 0x0000; //сбросить флаги прерываний

InitPieVectTable();

 

EALLOW;

//PieVectTable.RXAINT = &ReadCom; //ссылка на процедуру по приходу прирывания

PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //включить группу прерываний переферии Pie

PieCtrlRegs.PIEIER9.bit.INTx1=1; //включить девятое прерывание на приём из порта А

PieCtrlRegs.PIEIER2.bit.INTx4=1; //прерывание от таймера шима включить

PieVectTable.T1PINT=&Shim; //ссылка на процедуру обработки прерывания по таймеру вектор прерывания

//PieCtrlRegs.PIEIER9.bit.INTx2=1;

IER=0x102; //включить девятое прерывание в процессоре и второе

EINT; //включить прерывание в процессоре

EDIS;

 

i=0;

 

 

 

 

 

 

 

EDIS;

 

 

//DINT; //выключить прерывания в процессоре

 

// IER = 0x0000; //выключить группу прерываний в процессоре

// IFR = 0x0000; //сбросить флаги прерываний

 

 

 

 

EALLOW;

GpioMuxRegs.GPAMUX.all=0x3f; //включаем перефирию шим А 6 пин

EDIS;

 

Periud1=(120000000/1200)/2.0;

EvaRegs.EVAIMRA.bit.T1PINT=1; //разрешить прерывание от таймера по периуду

EvaRegs.T1PR=Periud1; //периуд таймера одной пары линей

EvaRegs.T1CMPR=0x3C00;// ширина импульса

EvaRegs.T1CNT=0x0000;//счётчик

EvaRegs.T1CON.all=0x1042;//регистр контроля таймера

EvaRegs.ACTRA.all=0x0666;//выбор уровня канала

EvaRegs.DBTCONA.all=0x0000;//зона нечювствительности

EvaRegs.COMCONA.all=0xA600;//регист контроля компоратора

EvaRegs.EVAIFRA.bit.T1PINT=1; //сброс флага прерывания по таймеру шима

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...