LLLM平台软件设计小结.docx

上传人:b****3 文档编号:6723885 上传时间:2023-05-10 格式:DOCX 页数:7 大小:16.48KB
下载 相关 举报
LLLM平台软件设计小结.docx_第1页
第1页 / 共7页
LLLM平台软件设计小结.docx_第2页
第2页 / 共7页
LLLM平台软件设计小结.docx_第3页
第3页 / 共7页
LLLM平台软件设计小结.docx_第4页
第4页 / 共7页
LLLM平台软件设计小结.docx_第5页
第5页 / 共7页
LLLM平台软件设计小结.docx_第6页
第6页 / 共7页
LLLM平台软件设计小结.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

LLLM平台软件设计小结.docx

《LLLM平台软件设计小结.docx》由会员分享,可在线阅读,更多相关《LLLM平台软件设计小结.docx(7页珍藏版)》请在冰点文库上搜索。

LLLM平台软件设计小结.docx

LLLM平台软件设计小结

LL、LM平台软件设计小结

在平台设计过程中我们不断学习研究,一步一步的为平台建设积累经验方法。

短短的几个星期,我们从数据手册开始,逐步开始软件平台的建设。

从头文件的定义到函数名的确定,从基本功能的实现到函数功能的优化,从底层软件的整合到各个模块功能联调,我们从中学到了知识,得到了提高,完善了平台建设的思想方法。

总结归纳失败的经验如下几点:

1.ADC函数模块

我们在ADC滤波中调用采样函数,为减少全局变量的定义和使用,我们将采样值以返回数组首地址的形式返回给指针类型的函数名以备滤波时使用。

经仿真证明该方法有效。

#ifADC

/*******************************************************

Function:

ADC_Init()

Description:

Calls:

CalledBy:

Input:

Output:

Return:

Others:

*******************************************************/

voidADC_Init(void)

{

ADCON0=0x01;//使能ADC,连接任何通道0

ADCON1=0x90;//右对齐,转换时钟Fosc/8,VREF+=VDD,VREF-=VSS

}

/*******************************************************

Function:

ADC_Sample()

Description:

实现对指定AD通道进行数据采集,将数据存于数组中

Calls:

CalledBy:

API_ADC_Filter()

Input:

AD采集通道

Output:

Return:

Others:

*******************************************************/

unsignedint*ADC_Sample(unsignedcharChannel,unsignedcharSample_Times)

{

unsignedchari;

unsignedintAdc_Data[12];

GO_nDONE=1;

for(i=0;i

{

ADCON0bits.CHS=Channel;//AD采集通道选择

if(!

GO_nDONE)

{

GO_nDONE=1;

Adc_Data[i]=ADRESH;

Adc_Data[i]=Adc_Data[i]<<8|ADRESL;

}

}

GO_nDONE=0;

return&Adc_Data[0];

}

/*******************************************************

Function:

API_ADC_Filter()

Description:

Calls:

ADC_Sample()

CalledBy:

Input:

AD采集通道

Output:

Return:

AD滤波结果

Others:

*******************************************************/

unsignedintAPI_ADC_Filter(unsignedcharChannel)

{

unsignedcharFilter_Method;

unsignedint*pData;

unsignedcharSample_Times;

Filter_Method=Adc_Table[0][Channel];//滤波方式选择

Sample_Times=Adc_Table[1][Channel];//采集次数

pData=ADC_Sample(Channel,Sample_Times);

/**************滤波处理****************************/

if(Filter_Method==0)//中位值平均滤波法

{

unsignedchari;

unsignedintAdc_Max,Adc_Min,Adc_Result;

Adc_Max=0;

Adc_Min=0xffff;

Adc_Result=0;

for(i=0;i

{

if(*pData>Adc_Max)

Adc_Max=*pData;

if(*pData

Adc_Min=*pData;

Adc_Result+=*pData;

pData++;

}

Adc_Result=(Adc_Result-Adc_Max-Adc_Min)/(Sample_Times-2);

returnAdc_Result;

}

elseif(Filter_Method==1)//中位值滤波法

{

unsignedchari,j;

unsignedintAdc_Result,Buf[12];

for(i=0;i

{

Buf[i]=*(pData+i);

}

for(i=0;i

{

for(j=0;j

{

if(Buf[j]>Buf[j+1])

{

Buf[j]^=Buf[j+1];

Buf[j+1]^=Buf[j];

Buf[j]^=Buf[j+1];

}

}

}

if(Sample_Times%2)

Adc_Result=Buf[(Sample_Times-2)/2];

else

Adc_Result=Buf[(Sample_Times-1)/2];

returnAdc_Result;

}

else

return0;

/*******************滤波处理结束***********************/

}

#endif

2.CCP模块(输入捕获、输出比较、PWM输出)

之前设计的捕获和PWM函数功能不够完善,对于捕获函数我们将函数分为初始化、中断处理、有效参数返回三大块。

在配置的过程中我们在不断犯错的过程中不断研习相关数据手册,总结在改编输入捕获的模式的时候要先关闭输入捕获中断允许位,防止产生错误中断,且要先关闭该模块然后重新设置模块的工作方式(哪个调变沿产生中断)。

最终在不断仿真调试后不断修改完成相对比较完整使用的输入捕获函数底层软件的编写。

对于PWM我们,在按照数据手册设计的函数不符合实用要求,我们尝试改变设置方法,调整相关寄存器设置,将该模块分为时钟初始化函数,PWM初始化函数和占空比设置函数。

实现了占空比(0~100)%可调。

#ifCCP1==3

/*******************************************************

Function:

Pwm_Channel1_SetDuty()

Description:

设置标准型PWM通道1参数

Calls:

CalledBy:

Input:

Output:

Return:

Others:

*******************************************************/

voidPwm_Channel1_Init(void)

{

TRISC1=1;//禁止CCP1引脚输出驱动器。

CCP1CONbits.CCP1M=0x0c;//配置为标准PWM

PR2=TIM2_Period;//周期设置

T2CONbits.T2CKPS=TIM2_Prescaler;//设置timer2预分频比0,1,2,3

Pwm_Channel1_SetDuty(0);//默认占空比0%

CCPTMRS0bits.C1TSEL=0;//CCP1以Timer2为时基

TMR2IF=0;//清除定时器2中断标志位

TMR2ON=1;//使能定时器2

while(!

TMR2IF);//等待定时器2上溢中断

TRISC1=0;//使能CCP1引脚输出驱动器。

}

 

voidPwm_Channel1_SetDuty(unsignedcharDuty)

{

unsignedinttemp1;

unsignedinttemp;

temp1=((TIM2_Period+1)*4);

temp=temp1*Duty/100;

CCPR1L=(unsignedchar)(temp>>2);//占空比高八位设置

CCP1CONbits.DC1B=(unsignedchar)temp;//占空比低两位设置

 

}

/*******************************************************

Function:

Pwm_Channel1_On()

Description:

设置标准型PWM通道1参数

Calls:

CalledBy:

Input:

Output:

Return:

Others:

*******************************************************/

voidPwm_Channel1_On()

{

CCP1CONbits.CCP1M=0x0c;//使能CCP1(PWM)//使能CCP1引脚输出驱动器。

}

/*******************************************************

Function:

Pwm_Channel1_Off()

Description:

设置标准型PWM通道1参数

Calls:

CalledBy:

Input:

Output:

Return:

Others:

*******************************************************/

voidPwm_Channel1_Off()

{

CCP1CONbits.CCP1M=0x00;//禁止CCP1(PWM)//使能CCP1引脚输出驱动器。

}

#endif

其他模块函数功能我们也将在不断的调试过程中进行有效的改进和完善,为平台建设积累经验不断完善平台的同时也不断的努力提高自己的实际工作能力和水平。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2