智能车制作

标题: PWM续~~~~~急~~郁闷中 [打印本页]

作者: xyz11478    时间: 2008-12-25 19:17
标题: PWM续~~~~~急~~郁闷中
<>感谢回帖的兄弟们!最近做一个用SCI调试PWM的占空比程序,但出现了点问题,还请大家帮忙, 以下是SCI的中断,这个程序在PWM没弄成级联的时候还能用 比如PWMDTY45改成PWMDTY5当然相应的PWM.C程序里也做改动,就可以实现!但是已改成PWMDTY45用级联的占空比就一直不变~~看了一下中断进去了,PWMDTY45的值也改变了,但是输出的波形却一点也没变华!</P><P>/*--------中断程序-----------------------*/<BR>void interrupt 20 Serv_int(void)<BR>{<BR>&nbsp;unsigned char data;<BR>&nbsp;DisableInterrupts;<BR>&nbsp;data=SciRx();<BR>&nbsp;SciTx(data);<BR>&nbsp;switch(data) <BR>&nbsp;{<BR>&nbsp;&nbsp;case &#39;+&#39;WMDTY45+=5;SciTx(&#39;a&#39;);break;<BR>&nbsp;&nbsp;case &#39;-&#39;:PWMDTY45-=5;SciTx(&#39;c&#39;);break;<BR>//&nbsp;&nbsp; case &#39;1&#39;:PTP_PTP3=1;break;<BR>//&nbsp;&nbsp; case &#39;2&#39;:PTP_PTP3=0;break;<BR>&nbsp;&nbsp; case &#39;3&#39;:PWMDTY5 =0;break;<BR>&nbsp;&nbsp;default: break;<BR>&nbsp;}<BR>&nbsp;SciTx(&#39;&#92;n&#39;);<BR>&nbsp;SciTx(&#39;&#92;r&#39;);<BR>&nbsp;EnableInterrupts;<BR>}</P><P>主程序</P><P>void main(void) {<BR>&nbsp; /* put your own code here */<BR>&nbsp; EnableInterrupts;<BR>&nbsp; PLL_Init();<BR>&nbsp; Start_PLL();</P><P>&nbsp; <BR>&nbsp; PWM_Init();<BR>&nbsp; SciInit();<BR>&nbsp;SciTx(&#39;b&#39;);<BR>&nbsp;</P><P><BR>&nbsp;<BR>&nbsp; for(;;) {<BR>&nbsp; } /* wait forever */<BR>&nbsp; /* please make sure that you never leave this function */<BR>}<BR></P>
作者: xyz11478    时间: 2008-12-25 19:57
标题: Re:PWM续~~~~~急~~郁闷中
刚把PWMDTY45改成PWMDTY4,PWM.C的程序还是级联的,程序可以用了,我想所谓的级联就把PWMDTY4、5的寄存器连在一起,一个高8位,一个低8位,我现在的做法就是只改变了低8位的值来改变整个占空比,但是改变值的话用PWMDTY45应该也没问题但是为啥还动不了呢?这个还是有疑问的
作者: whut_wj    时间: 2008-12-25 20:56
标题: Re:PWM续~~~~~急~~郁闷中
<>void vPWMInit(void)&nbsp; <BR>{<BR>&nbsp; PWME=0x00;<BR>&nbsp; PWMPRCLK=0x22;//clockB=24M/4=6M;clockA=24M/4=6M<BR>&nbsp; PWMSCLB=12; <BR>&nbsp; PWMCTL_CON01=1;<BR>&nbsp; PWMCTL_CON23=1;<BR>&nbsp; PWMCLK=0X08;<BR>&nbsp;&nbsp; <BR>&nbsp; PWMPOL=0xff;//polarity=1,duty=high<BR>&nbsp; PWMCAE=0x00;//left aligned<BR>&nbsp; <BR>&nbsp; PWMPER01=600;<BR>&nbsp; PWMDTY01=100;<BR>&nbsp; <BR>&nbsp; PWMPER45=640;<BR>&nbsp; PWMDTY45=0;</P><P>&nbsp; <BR>&nbsp; PWMPER23=5000;</P><P>&nbsp; PWME=0xff;<BR>&nbsp; <BR>}</P><P>1、检查你级联的代码。</P><P>2、改变PWMDTY45的值是可以的。</P>
作者: xyz11478    时间: 2008-12-25 22:03
标题: Re:Re:PWM续~~~~~急~~郁闷中
<>恩,级联的代码没错,因为之前用过的!我试了下面几种情况</P><P>&nbsp;&nbsp;case &#39;1&#39;WMDTY45+=70;printp("&#92;n 1 : %%X PWMDTY45++ is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;2&#39;:PWMDTY45-=70;printp("&#92;n 1 : %%X PWMDTY45-- is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;3&#39;:PWMDTY4+=1;printp("&#92;n 1 : %%X PWMDTY4++ is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;4&#39;:PWMDTY4-=1;printp("&#92;n 1 : %%X PWMDTY4-- is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;5&#39;:PWMDTY5+=200;printp("&#92;n 1 : %%X PWMDTY5++ is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;6&#39;:PWMDTY5-=200;printp("&#92;n 1 : %%X PWMDTY5-- is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;7&#39;:PWMDTY45++;printp("&#92;n 1 : %%X PWMDTY5++ is: %X",PWMDTY45);break;<BR>&nbsp;&nbsp;case &#39;8&#39;:PWMDTY45--;printp("&#92;n 1 : %%X PWMDTY5-- is: %X",PWMDTY45);break;</P><P>发现都可以改变PWMDTY45的值,但是PWMDTY4、5分别改变的是高8位、低8位的值,主要原因是PWM的输出并不是想我想象的哪样PWMDTY45+1就跳变0.0几%,而是只能当PWMDTY45加到一定的值,占空比才改变比如PWMDTY45+512才跳变0.2%,这样的话,有什么办法可以提高PWM占空比的跳变精度呢?</P>
作者: xyz11478    时间: 2008-12-26 05:05
标题: Re:Re:PWM续~~~~~急~~郁闷中
我觉得还有一种可能就是它占空比变了,但示波器上没办法这么精确的显示!
作者: xyz11478    时间: 2008-12-26 05:37
标题: Re:PWM续~~~~~急~~郁闷中
还有一个问题就是PWM的最小调整精度是不是在输出频率为50HZ,PWMDTY45为40000的时候精度已经是达到极限了呢?我算了一下,PWMDTY45不能超过65500而频率又固定在50HZ那时钟只能是2MHZ。
作者: dreamprosper    时间: 2008-12-30 08:09
标题: Re:PWM续~~~~~急~~郁闷中
我想问问一下级联问题 原来没级联的时候 还能实现电机反转 ,但是级联后就不能反转了 这是为什么呢》<br>还有我也用的是SCI改变PWM45&nbsp; 该怎么解决呢&nbsp; 谢谢<br>(我认为不是代码问题 ,难道跟33886有关?)




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2