资源简介
有一些基本的控制电机舵机等的引用
自己加入引用了三个串口分别 控制了GPS IMU ZigBee三个模块的测量
还在继续改
代码片段和文件信息
#include “adc_battery.h“
#include “delay.h“
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3
/*********************************电量查询表*********************************/
float m_li_v[13]={8.48.168.07.867.747.647.587.547.467.47.367.05.0};
int m_li_c[13]={1009080706050403020151050};
void Adc_Init(void)//PA2
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1 ENABLE ); //使能ADC1通道时钟
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC分频因子6 72M/6=12ADC最大时间不能超过14M
//PA2 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入引脚
GPIO_Init(GPIOA &GPIO_InitStructure);
ADC_DeInit(ADC1); //复位ADC1将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure.ADC_ScanConvMode = DISABLE; //模数转换工作在单通道模式
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //模数转换工作在单次转换模式
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //转换由软件而不是外部触发启动
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐
ADC_InitStructure.ADC_NbrOfChannel = 1; //顺序进行规则转换的ADC通道的数目
ADC_Init(ADC1 &ADC_InitStructure); //根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd(ADC1 ENABLE); //使能指定的ADC1
ADC_ResetCalibration(ADC1); //使能复位校准
while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位校准结束
ADC_StartCalibration(ADC1); //开启AD校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准结束
// ADC_SoftwareStartConvCmd(ADC1 ENABLE); //使能指定的ADC1的软件转换启动功能
}
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1 ch 1 ADC_SampleTime_239Cycles5 ); //ADC1ADC通道采样时间为239.5周期
ADC_SoftwareStartConvCmd(ADC1 ENABLE); //使能指定的ADC1的软件转换启动功能
while(!ADC_GetFlagStatus(ADC1 ADC_FLAG_EOC ));//等待转换结束
return ADC_GetConversionValue(ADC1); //返回最近一次ADC1规则组的转换结果
}
//获取times次ADC值,并取平均
u16 Get_Adc_Average(u8 chu8 times)
{
u32 temp_val=0;
u8 t=0;
for(t=0;t {
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}
//获取电量信息
u8 Get_battery_result(void)
{
int i=0;
double voltage=0.0;
double capacity=0.0;
voltage=(Get_Adc_Average(ADC_Channel_210))*9.9/4096;
if(voltage>m_li_v[0])
{
capacity=100.0;
}
else
{
for(i=0;i<12;i++)
{
if(voltage>m_li_v[i+1])
{
capacity=m_li_c[i+1]+(voltage-m_li_v[i+1])*(m_li_c[i]-m_li_c[i+1])/(m_li_v[i]-m_li_v[i+1]);
break;
}
}
}
capacity+=0.5; //修正方案 四舍五入
return ((u8)capacity);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 195 2017-05-25 12:29 MY_LIB\inc\adc_battery.h
文件 225 2017-05-12 16:10 MY_LIB\inc\control.h
文件 216 2017-05-17 16:44 MY_LIB\inc\encoderfun.h
文件 100 2014-08-05 10:14 MY_LIB\inc\exti.h
文件 165 2017-05-26 16:58 MY_LIB\inc\GPIO_Motor.h
文件 6149 2018-04-02 16:26 MY_LIB\inc\gps.h
文件 968 2018-04-12 15:32 MY_LIB\inc\hc05.h
文件 40483 2018-04-08 16:51 MY_LIB\inc\ioCC2530.h
文件 40321 2018-04-08 15:27 MY_LIB\inc\ioCC2530.h~RF502dd4.TMP
文件 2235 2018-04-16 20:28 MY_LIB\inc\JY901.h
文件 391 2017-05-31 16:10 MY_LIB\inc\PWM_Out.h
文件 857 2014-05-31 17:37 MY_LIB\inc\Step_Motor.h
文件 29607 2018-04-02 16:41 MY_LIB\inc\stm32f10x_dma.h
文件 161 2017-05-25 12:23 MY_LIB\inc\timer.h
文件 756 2018-04-12 16:56 MY_LIB\inc\usart.h
文件 1214 2018-04-02 16:26 MY_LIB\inc\usart2.h
文件 745 2018-04-16 20:42 MY_LIB\inc\usart4.h
文件 246 2014-08-11 13:24 MY_LIB\inc\watch_dog.h
文件 2989 2018-04-19 20:59 MY_LIB\src\adc_battery.c
文件 1919 2018-04-16 20:28 MY_LIB\src\control.c
文件 1489 2018-03-25 20:14 MY_LIB\src\encoderfun.c
文件 1098 2018-04-01 17:04 MY_LIB\src\GPIO_Motor.c
文件 13079 2018-04-17 17:16 MY_LIB\src\gps.c
文件 4176 2018-04-16 20:27 MY_LIB\src\JY901.c
文件 4336 2018-04-19 20:58 MY_LIB\src\PWM_Out.c
文件 4537 2014-05-31 09:33 MY_LIB\src\Step_Motor.c
文件 2857 2018-04-17 21:51 MY_LIB\src\timer.c
文件 7175 2018-04-17 21:14 MY_LIB\src\usart.c
文件 8026 2018-04-02 16:58 MY_LIB\src\usart2.c
文件 3181 2018-04-19 20:58 MY_LIB\src\usart4.c
............此处省略39个文件信息
- 上一篇:软件开发计划书.rar
- 下一篇:新巴巴运动网page包
评论
共有 条评论