这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » 关于DSP定时器

共10条 1/1 1 跳转至

关于DSP定时器

助工
2009-05-26 09:48:03     打赏
做电机驱动需要六路PWM输出,但是只有3个通用寄存器,怎么解决呢,PWM分3对,每对互逆,解决方法除了换芯片还有其他的吗?



关键词: 关于     定时器    

助工
2009-05-26 13:18:17     打赏
2楼

用定时器应该也能实现PWM波吧


高工
2009-05-26 18:36:16     打赏
3楼
直接用定时器做吧,即使只有一个定时器也是可以实现六路PWM的。
将定时周期设为最小步进时间,然后在中断中用软件方法实现PWM

菜鸟
2009-05-26 20:57:57     打赏
4楼
学习

高工
2009-06-01 21:06:56     打赏
5楼

请看下列代码。定时周期设为最小步进时间,PWM_Hignt[6]为6路PWM的高电平保持时间,PWM0_PIN~PWM5_PIN 为6路PWM输出的IO口,改成DSP方式写。这里假设6路PWM的周期和初相相同,如果不同,使用6个comCnt,并赋不同初值即可。就是酱紫,有什么疑问再商量。

unsigned char PWM_Hignt[6];

void TimerInterruptFun()
{
 static unsigned char comCnt;
 
 if( comCnt<MAXCNT )
       comCnt++;
 else
        comCnt = 0;
 
 if( comCnt<PWM_Hignt[0] )
         PWM0_PIN = 1;
 else
         PWM0_PIN = 0;
  
 if( comCnt<PWM_Hignt[1] )
         PWM1_PIN = 1;
 else
         PWM1_PIN = 0;
  
 if( comCnt<PWM_Hignt[2] )
         PWM2_PIN = 1;
 else
         PWM2_PIN = 0;
  
 if( comCnt<PWM_Hignt[3] )
         PWM3_PIN = 1;
 else
         PWM3_PIN = 0;
  
 if( comCnt<PWM_Hignt[4] )
         PWM4_PIN = 1;
 else
         PWM4_PIN = 0;
 
 if( comCnt<PWM_Hignt[5] )
         PWM5_PIN = 1;
 else
         PWM6_PIN = 0; 
}


助工
2009-06-02 11:21:33     打赏
6楼

万分谢谢Jason_Zhang,研究中 


高工
2009-06-02 12:53:07     打赏
7楼
其实PWM可以认为是一个占空比可调的分频电路。所以使用FPGA的分频思想,对一个快时钟计数,计到一定值,输出翻转即可

助工
2009-06-04 17:12:14     打赏
8楼

不错,这种思想值得学习


菜鸟
2009-09-29 09:13:42     打赏
9楼
把定时器时间定的比较短,用软件实现吧 一个定时器就够用了

菜鸟
2009-10-04 16:39:03     打赏
10楼
用软件实现吧

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]