#include /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define TSL_SI PORTA_PA0 //定义线性传感器的端口 SI
#define TSL_CLK PORTA_PA1 //定义线性传感器的端口 CLK
#define led PORTA_PA2
#define PWM1 PTP_PTP0 //定义线性传感器的端口 CLK
#define PWM2 PTP_PTP1
uchar ADV[128];
uchar table[128];
void PWM_Init()
{
PWME=0X00;
PWMCTL=0Xf0;//级联
PWMPOL=0XFF;//极性
PWMCAE=0X00;//0为左对齐方式
PWMCLK=0XFF;//时钟选择寄存器
PWMPRCLK=0X44;////// 64MHZ/16=4MHZ;
PWMSCLA=200;// 4MHZ/(2*200) =10000HZ 4MHZ=4*10的6次方4 000 000HZ
PWMSCLB=200;
PWMPER01=500; //调周期长短A1 10HZ
PWMPER23=500;
PWMPER45=500;
PWMDTY01=200; // 电机占空比
PWMDTY23=300;
PWMDTY45=15; //控制舵机
}
void PLL_Init(void)
{
CLKSEL=0X00;
//disengage PLL to system
PLLCTL_PLLON=1;
//turn on PLL
SYNR =0xc0 | 0x07;
REFDV=0x80 | 0x01;
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;
_asm(nop); //BUS CLOCK=64M
_asm(nop);
while(!(CRGFLG_LOCK==1));
//when pll is steady ,then use it;
CLKSEL_PLLSEL =1;
//engage PLL to system;
}
void Dly_us(void)
{
int ii;
//for(ii=0;ii<20;ii++); //32M
for(ii=0;ii<400;ii++); //64M
}
void SetBusCLK_32M(void)
{
CLKSEL=0X00;
// disengage PLL to system
PLLCTL_PLLON=1;
// turn on PLL
SYNR =0x40 | 0x03; // pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz;
REFDV=0x80 | 0x01;
POSTDIV=0x00;
_asm(nop); // BUS CLOCK=32M
_asm(nop);
while(!(CRGFLG_LOCK==1));
//when pll is steady ,then use it;
CLKSEL_PLLSEL =1;
//engage PLL to system;
}
/*void Dly_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii0;i--)
for(j=110;j>0;j--);
}
void AD_Init(void)
{
ATD0CTL1=0x00; //7:1-外部触发,65:00-10位精度,4:放电,3210:ch
ATD0CTL2=0x40; //禁止外部触发, 中断禁止
ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转
ATD0CTL4=0x01; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1]
ATD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
ATD0DIEN=0x00; //禁止数字输入
}
void init_AD12()
{
ATD0CTL1=0X20; //10位精度
ATD0CTL2=0XC0; //自动清除标志位
ATD0CTL3=0X98; //转换序列5
ATD0CTL4=0x0F; //采样时间4周期,AD时钟8MHz
ATD0CTL5=0X30; //连续,多通道转换
ATD0DIEN=0X00; //禁止数字输入
}
void RD_TSL(void)
{
byte i=0,tslp=0;
TSL_CLK=1;//起始电平高
TSL_SI=0; //起始电平低
Dly_us(); //合理的延时
TSL_CLK=0;//下降沿
TSL_SI=1; //上升沿
Dly_us(); //合理延时
TSL_CLK=1;//上升沿
TSL_SI=0; //下降沿
Dly_us(); //合理延时
for(i=0;i<128;i++)
{
TSL_CLK=0;//下降沿
Dly_us(); //合理延时
while(!ATD0STAT0_SCF);//等待转换结束
ADV[tslp]=ATD0DR0L; //AD采集
++tslp;
TSL_CLK=1;//上升沿
Dly_us(); //合理延时
}
}
void main(void)
{
int i,j,k,D_value1,D_value2;
PLL_Init();
//SetBusCLK_32M();
AD_Init();
//init_AD12();
PWM_Init();
DDRA_DDRA0=1;
DDRA_DDRA1=1;
DDRP=0XFF;
PWME=0XFF;
EnableInterrupts;
for(;;)
{
//_FEED_COP(); /* feeds the dog */
RD_TSL();
for(i=0;i<128;i++)
{
if(ADV[i]<9) table[i]=0;
else table[i]=1;
}
for(j=64;j>0;j--)
{
if(table[j]==0) break;
}
D_value1=64-j;
for(k=128;k>0;k--)
{
if(table[k]==0) break;
}
D_value2=k-64;
if(D_value1D_value2) //右偏
{
if(D_value2<=40);
}
}
}
本文档为【线性CCD控制舵机巡线程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。