金牌会员
无
- 积分
- 1557
- 威望
- 424
- 贡献
- 913
- 兑换币
- 60
- 注册时间
- 2008-10-21
- 在线时间
- 110 小时
|
3贡献
示波器看到PWM波了,但是舵机没有动,悲剧,难道舵机坏了?
程序如下,哪位高人指点一二啊,怎么才能知道舵机是好还是坏的啊
#include <hidef.h> /* common defines and macros */
#include <mc9s12xs128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
void PLL_init(void)
{
CLKSEL=0 ;
PLLCTL_PLLON=0;
PLLCTL_PRE=1;
PLLCTL_PCE=1;
PLLCTL_SCME=1;
PLLCTL_CME=1;
PLLCTL_PLLON=1;
SYNR=8;
REFDV=0X07;
while(!CRGFLG_LOCK)
CLKSEL_PLLSEL=1;
}
void PWM_init(void)
{
PWME=0;
PWMCNT01=0;
PWMCTL_CON01=1;
PWMCTL_CON45=0;
PWMCTL_PSWAI=1;
PWMCTL_PFRZ=1;
PWMPOL=0X03;
PWMCLK=0X33; //01、45分频
PWMPRCLK=0X03; //A_CLOCK=BUS_CLOCK/8=3MHZ
PWMSCLA=15; //SA_CLOCK=A_CLOCK/2*15=100KHZ
PWMCAE=0X00; //输出波形左对齐,否则中心对齐
PWMDTY01=100;
PWMPER01=2000; //设置PWM01通道频率100KHZ/2000=50HZ
PWMPER4=20; //设置PWM4频率为5KHZ
PWMPER5=20;
PWMDTY5=100;
PWMDTY4=100; // 占空比为1:1
PWME=0X13; //使能PWM 0001 0011
}
void delayms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<3338;jj++); //40MHz--1ms
}
void main(void)
{
int a,c,d;
PLL_init();
PWM_init();
DDRB=0XFF;
PORTB=0XF0;
for(c=0;c<1000;c++)
{
for(a=0;a<2;a++)
{
PWMDTY01=120;
PORTB=0xaa;
delayms(500);
}
for(d=0;d<2;d++)
{
PWMDTY01=1200;
PORTB=0xc1;
delayms(500);
}
}
} |
最佳答案
查看完整内容
我也和你有过同样的经历,我的解决方法是,占空比应该给小一些,首先你应该知道你程序写完,你给的输出周期是多少,舵机是实际调出来的,示波器很容易看,可是舵机不是很好调,加油吧!!!
|