完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
想用EVA发出四路独立的SPWM波,PWM,1PWM3,PWM5已经有波形,Debug时T1CMPR也能观察到寄存器值变化,但是就是输出引脚T1CMP没有波形,求大神帮解决!!万分感激!!
|
|
相关推荐
1个回答
|
|
程序如下 //规则采样法SPWM的输出
#include "DSP281x_Device.h" #include "system.h" #include "stdio.h" #include "math.h" #include "float.h" #define NX 68 #define PI 3.1415925 float M=0.6; int k0=0,h1=0; double a[NX]; double b[NX];//后加 //void zkb(); interrupt void eva_T1UFINT_ISR(void); unsigned int n=0; unsigned int x=0; float q,l,j,m,y; void main(void) { InitSysCtrl(); //系统初始化 DINT; //禁止全局中断 IER=0x0000; IFR=0x0000; EALLOW; GpioMuxRegs.GPAMUX.all = 0xFFFF; // EVA PWM 1-6 pins 0x00FF GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6=1; EDIS; InitPieCtrl(); InitPieVectTable(); EALLOW; //设置中断向量表 PieVectTable.T1UFINT=&eva_T1UFINT_ISR; EDIS; IER|=M_INT2; //开中断2 PieCtrlRegs.PIEIER2.bit.INTx6=1; //开通用定时器1下溢中断 ////////设置正弦表//////////// while (n<=NX) { q=(n+0.75); //为消除偶次偕波,减少谐波角度出发,选择从A相3/4周期进行采样 q=q*2*PI; q/=69; j=sin(q); l=3000*(1+M*j);//M为调制比 //计算占空比表达式 //if(l>=187&l<=1687)(此处网友设置为错误的) if(l>=1200&l<=4800) a[n]=l; else { if(l>4800) a[n]=4800; else a[n]=1200; } n=n+1;} while (x<=NX) { q=(x+0.75); //为消除偶次偕波,减少谐波角度出发,选择从A相3/4周期进行采样 q=q*2*PI; q/=69; y=sin(q); //后加 m=3000*(1+M*(y+0.3));//后加 //if(l>=187&l<=1687)(此处网友设置为错误的) if(m>=1740&m<=5340) b[x]=m; else { if(m>5340) b[x]=5340; else b[x]=1740; } x=x+1; } ////////////////////////////// ///init_eva /////////////////////////////// EvaRegs.ACTRA.all=0x0666; //EvaRegs.DBTCONA.all = 0x0000; // Disable deadband EvaRegs.COMCONA.all = 0xa600; //使能比较操作 EvaRegs.EVAIMRA.all=0x0200; //EVAIMRA(EVA的中断屏蔽寄存器A).T1UIINT(通用定时器1的下溢中断使能) EvaRegs.EVAIMRB.all=0x0000; EvaRegs.EVAIMRC.all=0x0000; EvaRegs.EVAIFRA.all=0xffff;//EVAIFRA(EVA的中断标志寄存器.T1UIINT(通用定时器1的下溢中断标志) EvaRegs.EVAIFRB.all=0xffff;//写1 EvaRegs.EVAIFRC.all=0xffff; EvaRegs.CMPR1=0; //初始化寄存器的值 EvaRegs.CMPR2=0; EvaRegs.CMPR3=0; //EvaRegs.T1CMPR =0; // EvaRegs.GPTCONA.all=0x0041; //周期必须大于最大的正弦表格值 EvaRegs.T1PR = 6000; // Timer1 period PWM载波周期为 65536个定标的定时器时钟周期 //EvaRegs.T1PR = 0xffff; //EvaRegs.T1CNT = 937; // Timer1 counter EvaRegs.T1CNT = 1500;//1500 //EvaRegs.T1CON.all = 0x0b4e; // 选择模式产生PWM波10 //EvaRegs.T1CON.all = 0x0b4e; EvaRegs.T1CON.all = 0x08ce; //EvaRegs.T1CON.bit.TECMPR =1; //EvaRegs.GPTCONA.bit.T1PIN=1; //EvaRegs.T1CON.bit.TECMPR=1; EINT; // return; /////////////////////////// //EvaRegs.T1CON.all=EvaRegs.T1CON.all|0x0040; //启动定时器1 for(;;); } interrupt void eva_T1UFINT_ISR(void) // EV-A { int h2; int flag; flag=(EvaRegs.EVAIFRA.all)&0x0200; //T1UFINT中下益中断标志位置1 if(flag!=0x0200) { EINT; return; } else { if(k0<=NX) { h1=k0+34; //B相表达式 if(h1>=68) h1=h1-68; h2=k0+33; //C相表达式 if(h2>=404)h2=h2-404; EvaRegs.CMPR1=a[k0]; EvaRegs.CMPR2=a[h1]; //更新比较寄存器2的值 EvaRegs.T1CMPR =a[h1];//后加 EvaRegs.CMPR3=b[k0]; //更新比较寄存器3的值 k0=k0+1; } else { k0=0; } } EvaRegs.EVAIMRA.bit.T1UFINT=1; //清除中断屏蔽标志 EvaRegs.EVAIFRA.bit.T1UFINT=1; //清楚中断使能标志 PieCtrlRegs.PIEACK.all=0x0002; //响应同组中断 EINT; //开全局中断 } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
2465 浏览 0 评论
696 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
2900 浏览 0 评论
3666 浏览 1 评论
1209 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 08:58 , Processed in 0.690422 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号