139 lines
2.8 KiB
C
139 lines
2.8 KiB
C
/*
|
||
* Copyright (c) 2011 ITE Tech. Inc. All Rights Reserved.
|
||
*/
|
||
/**
|
||
* @author Jim Tan
|
||
* @version 1.0
|
||
*/
|
||
|
||
#include "H/Function_Init.H"
|
||
|
||
#define STANDAED_K 0.069849
|
||
#define Maxsize 3
|
||
/**************************************************************
|
||
传感器相关参数输入
|
||
#define Max_Weight 300000 //最大工作重量单位 g
|
||
#define Sensitivity 2 //灵敏度 mv/v
|
||
#define Ex_U 5 //激励电压,adc默认选择内部vcc为激励 v
|
||
#define ADC_PGA 128 //ADC芯片运放倍数
|
||
#define ADC_MAX_NUM 7FFFFF //ADC输出范围
|
||
STANDAED_K = (Ex_U/2/ADC_PGA/ADC_MAX_NUM) /(Sensitivity*Ex_U)*Max_Weight //为了避免精度丢失,请用计算器计算再手动输入
|
||
***************************************************************/
|
||
|
||
bit Key0_flag = 0;//全局变量,定义在Function_Init.H,这里赋初值
|
||
bit Key1_flag = 0;
|
||
|
||
/////////////中值滤波3
|
||
long Bubble_Sort_3(long* Data)
|
||
{
|
||
uchar i,j;
|
||
long temp;
|
||
for(i=0;i<2;i++)
|
||
{
|
||
for(j=0;j<2-i;j++)
|
||
{
|
||
if(Data[j]>Data[j+1])
|
||
{
|
||
temp = Data[j];
|
||
Data[j] = Data[j+1];
|
||
Data[j+1] = temp;
|
||
}
|
||
}
|
||
}
|
||
return Data[1];
|
||
}
|
||
|
||
void main(void)
|
||
{
|
||
//////////////该部分代码为采集ADC读数初始值 原始数据
|
||
// long read_buff[4];
|
||
//
|
||
// IO_Init();
|
||
// Uart_Test();
|
||
//
|
||
// CS1237_Init_all();//ADC初始化
|
||
// Delay_ms(300);//等待ADC芯片复位
|
||
// CS1237_Config_all();//ADC配置
|
||
//
|
||
// while(1)
|
||
// {
|
||
// for(i=0;i<4;i++)
|
||
// {
|
||
// send_buff[i] = zero_buff[i];
|
||
// }
|
||
// UART_SendAll(send_buff);
|
||
// }
|
||
|
||
//////////////该部分代码为采集并观察4路传感器的读数
|
||
long send_buff[4];
|
||
long zero_buff[4];
|
||
long data_buff[4];
|
||
long queue[4][3];
|
||
int queue_p;
|
||
float k = STANDAED_K; //传感器系数
|
||
long uart_buff[4]=0;
|
||
// uchar function_ret = 0;
|
||
// long zero_sort[9];
|
||
uchar i,j;
|
||
uchar a = 20; //一阶滤波系数,(1-100)越小越平滑,灵敏度越低 设置为50 1s就可以接近到千分之999 设置为20需要等待3s左右才能接近千分之999
|
||
|
||
IO_Init(); //IO初始化,先将默认的所有未使用引脚到设置成强推挽输出,
|
||
Uart_Test(); //串口初始化
|
||
Timer_Test(); //定时器初始化
|
||
|
||
CS1237_Init_all();//ADC初始化
|
||
|
||
Delay_ms(300);//等待ADC芯片建立时间
|
||
|
||
CS1237_Config_all();//ADC配置
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
zero_buff[i] = Read_CS1237_all(i);
|
||
send_buff[i] = zero_buff[i];
|
||
}
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
for(j=0;j<Maxsize;j++)
|
||
{
|
||
queue[i][j] = Read_CS1237_all(i);
|
||
}
|
||
}
|
||
|
||
while(1)
|
||
{
|
||
for(i=0;i<4;i++)
|
||
{
|
||
queue[i][queue_p] = Read_CS1237_all(i);
|
||
data_buff[i] = Bubble_Sort_3(queue[i]);
|
||
}
|
||
queue_p = (queue_p+1)%3;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
send_buff[i] = ((100-a)*send_buff[i] + a*data_buff[i])/100; //一阶滤波
|
||
}
|
||
|
||
if(Key0_flag)//去皮,长按3s
|
||
{
|
||
Key0_flag=0;
|
||
for(i=0;i<4;i++)
|
||
{
|
||
zero_buff[i] = send_buff[i];
|
||
}
|
||
}
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
uart_buff[i] =(send_buff[i]-zero_buff[i])*k;
|
||
UART_Send_VOFA(uart_buff[i]);
|
||
if(i<3)
|
||
UART_SendByte(44);//','逗号分隔
|
||
}
|
||
UART_SendByte(10);//'\r'加回车符
|
||
UART_SendByte(13);//'\n'加换行符
|
||
}
|
||
}
|
||
|
||
|