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

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

舵机电调测试器

[复制链接]
跳转到指定楼层
楼主
发表于 2009-6-24 17:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个最简单,但元件难找,我就死活找不到390nF的电容。


还是单片机最简单,手头只有M8,本来这种东西,8Pin的ATTiny足矣。
内部1M,电压3V到5V,电位器10K以及上,越大越省电。


实际测试,脉宽在1ms与2ms之间,周期21ms。
程序文件如何上传?这里只能传图片。

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

沙发
 楼主| 发表于 2009-6-24 17:49 | 只看该作者

还是自己去编译吧,这是ICCAVR的。

#include <iom8v.h>
#include <macros.h>
#include "common.h"

#define SetPlus()  PORTB |= (1<<PB0)
#define ClrPlus()  PORTB &= ~(1<<PB0)

UCHAR GetPosition()
{
  INT8 i,nRet;
  UINT nSum;
  
  UINT8 nADC,nMax,nMin,iMax,iMin,nVol[4];
  
  //pVoltage = 0;
  nMax = 0;
  nMin = 255;
  
  ADCSRA|=(1<<ADSC);      //启动ADC
  while(ADCSRA & (1<<ADSC));  //首次值抛弃
  
  //连续四次取样
  for(i=0;i<4;i++)
  {  ADCSRA|=(1<<ADSC);      //启动ADC
    while(ADCSRA & (1<<ADSC));
    nADC = ADCH;
    
    if(nADC > nMax)  
    {  nMax = nADC;
      iMax = i;
    }
    else if(nADC < nMin)
    {  nMin = nADC;
      iMin = i;
    }
    
    nVol = nADC;
  }
  
  nSum = 0;

  //去掉最大最小值,取平均数
  for(i=0;i<4;i++)
  {  if(i!=iMax && i!=iMin)
      nSum += nVol;
    
  }
  nSum >>= 2;
  return nSum > 120 ? 120 : nSum;
}

void init_devices(void)
{
  
  CLI();

  PORTB = 0x00;
  DDRB  = 0x01;
  PORTC = 0x00;
  DDRC  = 0x00;
  PORTD = 0x00;
  DDRD  = 0x00;

  TCCR0 = 0x00;
  TCNT0 = 0x83;
  TCCR0 = 0x02;
  
  ACSR  = 0x80;        //关闭模拟比较器
  ADCSR = 0B10000000;      //允许ADC
  ADMUX = 0B00100000;      //外部参考源,左对齐,0号通道
  
  MCUCR = 0x00;        
  GICR  = 0x00;
  TIMSK = 0x00;
  SEI();
  
}

void main(void)
{  
  INT8 nPos;
  
  int i,nClr;
  
  init_devices();
  
  while(1)
  {
    SetPlus();
    
    nPos = GetPosition();  //ADC过程,0.4ms
    
    for(i=0;i<65;i++);    //最少1 ms;
  
    for(i=0;i<nPos;i++);
    
    ClrPlus();
    nClr = 2400 - nPos;
    for(i=0;i<nClr;i++);
  }
}


[ 本帖最后由 root_007 于 2009-6-24 17:52 编辑 ]
3
发表于 2009-6-24 17:52 | 只看该作者
不懂编程,帮顶
4
发表于 2009-6-24 20:01 | 只看该作者
难懂,只会用:em01:
5
发表于 2009-6-24 23:18 | 只看该作者
专业:em17:
6
发表于 2009-6-25 13:01 | 只看该作者
用C语言写的
#include <iom8v.h>
#include <macros.h>
#include "common.h"


include "common.h"这个是自己做的函数吧???
7
发表于 2009-6-25 13:05 | 只看该作者
谢谢LZ编译通过的,写的不错,可以给个再小点吗?
8
发表于 2009-6-25 14:09 | 只看该作者
:em26:
9
发表于 2009-6-25 14:22 | 只看该作者
还是555简单,看我的帖
10
发表于 2009-6-26 20:12 | 只看该作者
电容可以找几个串,并联就可以了,数值可以用万用表直接测量
11
发表于 2009-7-2 07:01 | 只看该作者
common.h头文件没有,编译通不过,能贴出来吗?
12
 楼主| 发表于 2009-7-2 14:50 | 只看该作者
源代码贴上来时被吃去几个字符,

nVol =  应该改为 nVol [ i ]  =

comm.h就几个定义
#define UCHAR unsigned char
#define UINT unsigned int

[ 本帖最后由 root_007 于 2009-7-2 14:56 编辑 ]
13
发表于 2009-7-2 18:58 | 只看该作者
好不好用?
14
发表于 2009-10-7 17:53 | 只看该作者
就测试简单就好
15
发表于 2009-10-7 19:44 | 只看该作者
不懂。!! 帮顶!
16
发表于 2009-10-24 08:27 | 只看该作者
17
发表于 2012-3-25 14:55 | 只看该作者
请问楼主  为什么编译的时候一直会提示INT8   UINT8是未定义的呢?  刚接触单片机  还望楼主指点
18
发表于 2012-3-26 05:12 | 只看该作者

不懂。!! 帮顶!

不懂。!! 帮顶!
19
发表于 2012-3-26 10:21 | 只看该作者
很好的资料,标记一下,学习学习
20
发表于 2012-4-13 09:30 | 只看该作者
10楼说的最简单实用
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

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

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