5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 4314|回复: 22
打印 上一主题 下一主题

自制舵机调试器

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-13 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用ATmage16开发板自制的舵机调试器

电调调速也可以用。电调设置需要改电位器为直滑的方便调节。


欢迎继续阅读楼主其他信息

主题

  • 没有相关信息
  • 没有相关信息
  • 没有相关信息
沙发
 楼主| 发表于 2014-7-13 22:31 | 只看该作者
//8MHz晶振,2014.7.7.19:21,保持舵机电压足够。单独供电。
//ADC基准电压取自+5v电源,可调电阻10K
#include"iom16v.h"
#include"macros.h"

#define uint unsigned int
#define uchar unsigned char
#pragma interrupt_handler adc_1:15
uint temp,temp_L,temp_H;
uchar num[]={0,0,0,0};
uchar table[]={ 0xC0, 0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };  //段码表
//***********************************************
void delay_ms(uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
     for(j=0;j<200;j++)
                ;
}
//***********************************************
void show(uchar data0,uchar data1,uchar data2,uchar data3)
{
      
         // PORTB=data0;
         // PORTA=0x0f;
          
         // PORTA=0x0e;
          //delay_ms(2);
          PORTB=data0|0xff;
          PORTA=0x0f;
          PORTB=0xff;
          delay_ms(1);
         
          PORTB=data1;
          PORTA=0x0d;
          delay_ms(2);
          PORTB=0xff;
          delay_ms(1);
         
          PORTB=data2;
          PORTA=0x0b;
          delay_ms(2);
          PORTB=0xff;
          delay_ms(1);
       
          PORTB=data3;
          PORTA=0x07;
          delay_ms(2);
          PORTB=0xff;
          delay_ms(1);
            
}
//***********************************************
void show_adc(uint temp)
  {
   
     num[0]=temp/1000;
         num[1]=temp%1000/100;
         num[2]=temp%1000%100/10;
         num[3]=temp%1000%100%10;
         show(table[num[0]]+0x80,table[num[1]],table[num[2]],table[num[3]]);
  }
//***********************************************
void adc()
{

ADMUX=0x47;
//64分频,中断
ADCSRA=0xce;
SREG=0x80;

}
//***********************************************
void adc_1()
{
   
   ADCSRA&=0xbf;//停ADC转换
   temp_L=ADCL;
   temp_H=ADCH;
   temp=temp_H*256+temp_L;
   OCR1A=((uint)(temp*(float)1.22)+280);//占空比0.5毫秒到2.5毫秒,OCR1A的值为250到1250,对应角度0到180.
   //280的值,实验选取,比计算值大30
   show_adc((uint)(temp*(float)0.1757));//为了显示0-180°
   ADCSRA|=BIT(6);//启动转换

}
void adc_init()
{
   uint i;

   ADMUX=0x1e;
   ADCSRA=0xc6;//ADC转换
   delay_ms(10);
   while(!((ADCSRA)&0x10));
   ADCSRA=0x96;//停ADC转换
   temp_L=ADCL;
   temp_H=ADCH;
   temp=temp_H*256+temp_L;
   
   for(i=0;i<300;i++)
   show_adc((uint)(temp*(float)4.342));
  
   
   ADMUX=0x1f;
   ADCSRA=0xc6;
   delay_ms(10);
   while(!((ADCSRA)&0x10));
   ADCSRA=0x96;//停ADC转换
   temp_L=ADCL;
   temp_H=ADCH;
   temp=temp_H*256+temp_L;
   
   for(i=0;i<500;i++)
   show_adc((uint)(temp*(float)4.342));
  
   
}
//***********************************************
void main()
{  
    uint data;
    DDRA=0x0f;
    DDRD=0x30;
    DDRB=0xff;
        adc_init();
   TCCR1A=0x80;//相位频率修正模式
   TCCR1B=0x12;//8分频,晶振8兆赫兹
   ICR1H=0x27;//周期20毫秒
   ICR1L=0x10;
   OCR1A=250;//初始值占空比0.5毫秒
   
   adc();
   
   while(1)
   {
    ;
       
   }
   
}
3
 楼主| 发表于 2014-7-13 22:33 | 只看该作者
本人初学者,程序如果有问题请指正。
4
发表于 2014-7-13 22:56 | 只看该作者
牛逼地厉害,顶楼主

5
发表于 2014-7-13 23:21 | 只看该作者
厉害啊。。程序都能自己写
6
发表于 2014-7-14 07:09 | 只看该作者
能编程的高手,学习了,
7
发表于 2014-7-14 07:22 | 只看该作者

8
发表于 2014-7-14 08:03 | 只看该作者
买一个现成的也就10元多。

9
发表于 2014-7-14 09:24 | 只看该作者
赞一个!!!请问楼主是哪里人啊?
10
发表于 2014-7-14 09:50 | 只看该作者
高手啊!自己写的程序
11
发表于 2014-7-14 10:17 | 只看该作者
应该用按键代替电位器,这样爽多了
12
发表于 2014-7-14 10:32 | 只看该作者
楼主威武,要是程序写错了会不会冒烟啊
13
发表于 2014-7-14 11:00 | 只看该作者
这要是程序有个无限BUG,是不是很壮观呢?不懂求解释
14
发表于 2014-7-14 11:29 | 只看该作者
真正的高手
15
发表于 2014-7-14 12:13 | 只看该作者
请问楼主频率是50Hz,占空比0.5ms~2.5ms  是吗
16
 楼主| 发表于 2014-7-14 13:10 | 只看该作者
炸香机 发表于 2014-7-14 12:13
请问楼主频率是50Hz,占空比0.5ms~2.5ms  是吗

请参考:http://blog.sina.com.cn/s/blog_8240cbef01018hu1.html里面有详细说明。

17
发表于 2014-7-14 13:23 | 只看该作者
直接看不懂,牛!
18
发表于 2014-7-14 13:52 | 只看该作者
高手,很不错呀,顶一个
19
发表于 2014-7-17 15:55 | 只看该作者

高手,很不错呀,顶一个
20
发表于 2015-1-27 22:41 | 只看该作者
新人学习请赐教
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表