智能车制作
标题:
ad采集(4个,中间竖立,左右水平),为什么左转弯第二个电感值变小第一个则不变小?
[打印本页]
作者:
古鉄
时间:
2014-5-21 23:48
标题:
ad采集(4个,中间竖立,左右水平),为什么左转弯第二个电感值变小第一个则不变小?
#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);
}
}
作者:
世界领袖2013
时间:
2014-5-22 08:39
作者:
532902675
时间:
2014-5-22 08:44
我被禁言了?
作者:
古鉄
时间:
2014-5-22 12:30
给个解答
作者:
luhan2014
时间:
2014-11-1 15:07
作者:
244880113
时间:
2015-2-19 23:24
这代码的注释和数值根本对不上号啊,
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2