xzhtom 发表于 2010-7-9 22:01:35

搞飞机设计的新手求教搞四轴如何学习?

大家好,本菜鸟大学学的是飞机设计,对单片机一窍不通,昨天刚调通了一个控制舵机的小程序(不是用的定时器,纯延时产生的pwm波,效率很低,自汗一个,主要是因为那个定时器还没搞明白),俺也打算做个四轴玩玩,机架部分没问题,主要是控制这块想请教各位该如何入门,该学习些什么,请各位赐教!

xzhtom 发表于 2010-7-9 22:06:20

我写的低效程序
#include <iom16v.h>
#include <macros.h>

void main(void)
{
unsigned int t, i;
DDRB=0xFF;
PORTB=0xFF;
while(1)
{for(i=1;i<=100;i++)
{
   
       PORTB=(1<<PB5);
           delay(i*10/99+10-10/99);
           PORTB=(0<<PB5);
       delay(200-(i*10/99+10-10/99));
   }
}
}

void delay(t)
{
unsigned int j;
for(t;t>=1;t--)
    for(j=1;j<=10;j++)
   ;

}

xld007 发表于 2010-7-9 23:30:53

呵呵,建议LZ把语文学好先!

xzhtom 发表于 2010-7-10 08:56:00

ls的兄弟说的对,不过还请回答下我的问题,我是来此虚心学习的,谢谢!

xzhtom 发表于 2010-7-10 17:24:01

#include <iom16v.h>
#include <macros.h>

void delay_MS(unsigned int i)
{unsigned int j;
for (;i!=0;i--)
   {
for (j=500;j!=0;j--)
    ;
}
}


void main()
{
unsigned int i=15;


DDRD|=BIT(PD5);    //设置输出,OC1A

TCCR1A=0x82;       //10位快速PWM,且OC1A输出反向
TCCR1B=0x1B;      //设置10位快速PWM,且64分频
ICR1H=0x01;      //设置ICR1值为311,调节PWM波周期为20ms
ICR1L=0x37;


while(1)
{
             while(31-i)    //脉宽从1ms往上加 注释(1) 15/311=1/20(ms)
       {
      OCR1AH=0;
      OCR1AL=i;

delay_MS(10);
i++;
}

    while(i-15)   //脉宽从2ms往下减注释(2)
{
      OCR1AH=0;
      OCR1AL=i;

delay_MS(10);
i--;
}   
}
}

费了一天的劲,终于学会了用T/C1生成PWM波,已经测试,可以控制舵机正常运转了(本程序从前辈的程序改进而来,区别是可以调节PWM波的周期),自己摸索效率实在太低了,后悔大学没好好学习啊!
页: [1]
查看完整版本: 搞飞机设计的新手求教搞四轴如何学习?