智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1600|回复: 5
打印 上一主题 下一主题

ad采集(4个,中间竖立,左右水平),为什么左转弯第二个电感值变小第一个则不变小?

[复制链接]

20

主题

57

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1247
威望
673
贡献
318
兑换币
402
注册时间
2013-11-3
在线时间
128 小时
跳转到指定楼层
1#
发表于 2014-5-21 23:48:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "derivative.h"
#include <stdio.h>
#include <string.h>
#include"OLED12864.h"   //液晶
int AD_wValue[4];//AD转换结果
word AD[4]={0,0,0,0};
word AD_erro[4]={0,0,0,0};
int i;
void delay(int n)
{
   int i,j;
   for(i=0;i<n;i++)
       for(j=0;j<2670;j++);
}

//-----时钟初始化程序--------//
void PLL_Init(void)      
{                    
  REFDV=1;           
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;
}

//---------------------------------------------------------------------
// 函数功能:配置单片机锁相环,使其工作在40Mhz
// 形式参数:  无
// 函数返回值:无   
//---------------------------------------------------------------------
void BusCLK_40M(void)
{   
    CLKSEL=0X00;                                //disengage PLL to system
    PLLCTL_PLLON=1;                        //turn on PLL
    SYNR =0xc0 | 0x04;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
    _asm(nop);          //BUS CLOCK=40M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));          //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;                        //engage PLL to system;
}


//--------------总线时钟=48/2=24MHz------------//
//-----ATD初始化程序--------//
void AD_Init(void)     
{
  ATD0CTL1=0x00; //00000000  选择AD0通道为外部触发,8 位精度,采样前不放电
  ATD0CTL2=0x40; //01000000  标志位自动清零,禁止外部触发, 禁止中断
  ATD0CTL3=0xa0; //10001000  右对齐无符号,每次转换1 个序列, No FIFO, Freeze 模式下继续转
  ATD0CTL4=0x03; //00000001  采样时间为4 个AD 时钟周期,PRS=1,ATDClock=24/(2*(1+1))=6MHz
  ATD0CTL5=0x30; //00100000  特殊通道禁止,连续转换,单通道转换,输入通道为0
  ATD0DIEN=0x00; //00000000  禁止数字输入
}
//-----读取AD转换结果--------//
void AD_GetValue()
{
  AD_wValue[0]=ATD0DR0;  //读取结果寄存器的值
  AD_wValue[1]=ATD0DR1;  //读取结果寄存器的值
  AD_wValue[2]=ATD0DR2;  //读取结果寄存器的值
  AD_wValue[3]=ATD0DR3;  //读取结果寄存器的值

}

void remember_ADvalue()
{
     AD[0]=AD_wValue[0];
     AD[1]=AD_wValue[1];
     AD[2]=AD_wValue[2];
     AD[3]=AD_wValue[3];
}

void xiuzhen_ADvalue()
{
   for(i=0;i<=3;i++)
   AD_erro[i]=AD_wValue[i]-AD[i];
   if(AD_erro[i]>10)
   AD_wValue[i]=AD[i];
   else
   AD_wValue[i]=AD_wValue[i];  
}


//-----主函数--------//
void main(void)
{
  char e[20] ;
  //PLL_Init();
  BusCLK_40M();
  AD_Init();
  DDRB=0XFF;
  PORTB=0XFF;
  LCD_Init();
  EnableInterrupts;

  for(;;)
  {
   while(!ATD0STAT2_CCF0);    // 等待转换结束while(ATDOSTAT2_CCF0==1)
   AD_GetValue();   
   remember_ADvalue();
   AD_GetValue();
   xiuzhen_ADvalue();   
/******************液晶显示*************************/
  sprintf (e, "%3d", AD_wValue[0]);
  LCD_Print(0,0,e);
  sprintf (e, "%3d", AD_wValue[1]);
  LCD_Print(0,2,e);
  sprintf (e, "%3d", AD_wValue[2]);
  LCD_Print(0,4,e);
  sprintf (e, "%3d", AD_wValue[3]);
  LCD_Print(0,6,e);  
/******************************************/
  delay(1000);
  }
}

回复

使用道具 举报

3

主题

180

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2074
威望
976
贡献
536
兑换币
648
注册时间
2013-12-7
在线时间
281 小时
2#
发表于 2014-5-22 08:39:38 | 只看该作者
回复 支持 反对

使用道具 举报

27

主题

277

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4406

优秀会员奖章活跃会员奖章

威望
1922
贡献
1544
兑换币
1217
注册时间
2013-1-9
在线时间
470 小时
3#
发表于 2014-5-22 08:44:07 | 只看该作者
我被禁言了?
回复 支持 反对

使用道具 举报

20

主题

57

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1247
威望
673
贡献
318
兑换币
402
注册时间
2013-11-3
在线时间
128 小时
4#
 楼主| 发表于 2014-5-22 12:30:37 | 只看该作者
给个解答
回复 支持 反对

使用道具 举报

2

主题

350

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2298
威望
1172
贡献
736
兑换币
772
注册时间
2014-7-8
在线时间
195 小时
5#
发表于 2014-11-1 15:07:08 | 只看该作者
回复 支持 反对

使用道具 举报

5

主题

52

帖子

0

精华

高级会员

Rank: 4

积分
939
威望
431
贡献
316
兑换币
252
注册时间
2014-5-12
在线时间
96 小时
毕业学校
河海大学
6#
发表于 2015-2-19 23:24:59 | 只看该作者
这代码的注释和数值根本对不上号啊,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 22:24 , Processed in 0.043618 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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