智能车制作
标题:
看PWM波形求教
[打印本页]
作者:
aihao12345
时间:
2013-5-21 17:29
标题:
看PWM波形求教
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
void PLL(void)
{
CLKSEL_PLLSEL=0;//选择系统时钟来自晶振
PLLCTL_PLLON=1;//开启锁相环
SYNR=0x40|0x04;//设置fvco=80M; SYNR=4;REFDIV=1; fvco=2*fosc*(SYNPIV+1)/(REFDIV+1)=80M
REFDV=0x80|0x01; //fref=fosc/(REFDIV+1)=16/2=8M处于6~12M之间所以REFDV的前两位是10
_asm(nop);
_asm(nop); //等待PLL稳定
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL=1;//选定锁相环时钟
}
//左对齐时PWM周期=通道时钟周期*PWMPERX 总线时钟40M PWM周期400ms 占空比50%的方波
//PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值
void PWM01_Init(void)
{
PWME_PWME1=0;//禁止PWM的全部通道输出
PWMCTL_CON01=1;//将PWM两两级联
PWMCLK_PCLK1=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL1=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE1=0; //左对齐
PWMPER01=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY01=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME1=1;//开启PWM通道
}
void PWM23_Init(void)
{
PWME_PWME3=0;//禁止PWM的全部通道输出
PWMCTL_CON23=1;//将PWM两两级联
PWMCLK_PCLK3=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKB=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL3=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE3=0; //左对齐
PWMPER23=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY23=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME3=1;//开启PWM通道
}
void PWM45_Init(void)
{
PWME_PWME5=0;//禁止PWM的全部通道输出
PWMCTL_CON45=1;//将PWM两两级联
PWMCLK_PCLK5=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128 总线时钟是40M
// 算出时钟周期1220HZ
PWMPOL_PPOL5=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE5=0; //左对齐
PWMPER45=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY45=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME5=1;//开启PWM通道
}
void PWM67_Init(void)
{
PWME_PWME7=0;//禁止PWM的全部通道输出
PWMCTL_CON67=1;//将PWM两两级联
PWMCLK_PCLK7=1;//PWM全部选择SA或SB为时钟源
PWMPRCLK_PCKB=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL7=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE7=0; //左对齐
PWMPER67=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY67=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME7=1;//开启PWM通道
}
void main(void) {
/* put your own code here */
PLL();
PWM01_Init();
PWM23_Init();
PWM45_Init();
PWM67_Init();
EnableInterrupts;
for(;;) {
PWMDTY01=244;
PWMDTY23=244;
PWMDTY45=244;
PWMDTY67=244;
} /* loop forever */
/* please make sure that you never leave main */
}
不知道哪里有问题 就是出不了波形 求大神指导
作者:
wangchuan
时间:
2013-5-21 18:37
沙发
作者:
飘o(≧v≦)o
时间:
2013-5-21 19:34
你把
PWMDTY01=244;
PWMDTY23=244;
PWMDTY45=244;
PWMDTY67=244;
放到相应的子函数里,然后在主函数中调用子函数就行了。
作者:
aihao12345
时间:
2013-5-21 19:41
飘o(≧v≦)o 发表于 2013-5-21 19:34
你把
PWMDTY01=244;
PWMDTY23=244;
void PWM01_Init(void)
{
PWME_PWME1=0;//禁止PWM的全部通道输出
PWMPRCLK_PCKA=7;//clock A,B=总线时钟/128 总线时钟是40M
PWMCTL_CON01=1;//将PWM两两级联
PWMCLK_PCLK1=1;//PWM全部选择SA或SB为时钟源
PWMSCLA=128;//clock SA=clock A/(2*PWMSCLA)
// 算出时钟周期1220HZ
PWMPOL_PPOL1=1;//开始为高电平,到达占空比计数后输出低电平
PWMCAE_CAE1=0; //左对齐
PWMCTL=0x00;
PWMPER01=488; //PWM周期=通道时钟周期*PWMPER1 400=(1000/1220)*488
PWMDTY01=244;// 设置占空比为50%,PWM初始输出高电平 PWM信号占空比=占空比寄存器值/周期寄存器值 如要设置周期400ms
PWME_PWME1=1;//开启PWM通道
PWMDTY01=244;
} 这样么?试下还是不行
作者:
飘o(≧v≦)o
时间:
2013-5-22 16:10
PWME_PWME1=1;//开启PWM通道
PWMDTY01=244;
这两个,换一下位置
作者:
wanglijie201209
时间:
2014-3-16 09:18
楼主的问题怎么解决的?
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2