newPtz/drivers/drv_adc.c

92 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "drv_adc.h"
#include "stdlib.h"
#include "string.h"
#include "gd32f4xx.h"
#include "rtthread.h"
#define ADC_BASIC 3300
void ADC_Init()
{
//配置引脚时钟
rcu_periph_clock_enable(RCU_GPIOC);
//引脚复用PC2——电压ADC1-CH12PC3——电流ADC1-CH13
gpio_mode_set(GPIOC,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_2);
gpio_mode_set(GPIOC,GPIO_MODE_ANALOG,GPIO_PUPD_NONE,GPIO_PIN_3);
rcu_periph_clock_enable(RCU_ADC1);
//总线时钟20分频=6MHZ
adc_clock_config(ADC_ADCCK_PCLK2_DIV4);
/***********************************************/
//对齐方式 ADC_INSERTED_CHANNEL
adc_data_alignment_config(ADC1,ADC_DATAALIGN_RIGHT);
//扫描模式
adc_special_function_config(ADC1,ADC_SCAN_MODE,ENABLE);
//外部触发关闭
adc_external_trigger_config(ADC1,ADC_INSERTED_CHANNEL,DISABLE);
//采集通道数
adc_channel_length_config(ADC1,ADC_INSERTED_CHANNEL,2);
//通道注入顺序
adc_inserted_channel_config(ADC1,0,ADC_CHANNEL_13,ADC_SAMPLETIME_480);//电流
adc_inserted_channel_config(ADC1,1,ADC_CHANNEL_12,ADC_SAMPLETIME_480);//电压
adc_enable(ADC1);
adc_calibration_enable(ADC1);
}
//电压采集
float ptz_Voltage_collect_adc1_task()
{
static float adc1_v[5];
static unsigned char adc1_num;
int j,k;
float tem;
float curadc1;
uint16_t value_V;
//软件触发使能
adc_software_trigger_enable(ADC1,ADC_INSERTED_CHANNEL);
value_V = ADC_IDATA1(ADC1);
adc1_v[adc1_num] = (float)value_V / 4096.0 * 11 *3.3;//(float)value_V;//
adc1_num++;
if(adc1_num >= 5)
{
adc1_num = 0;
for(j = 0; j < 5-1; j++)//采样值由小到大排列
{
for(k = 0; k < 5-j-1; k++)
{
if(adc1_v[k] > adc1_v[k+1])
{
tem = adc1_v[k];
adc1_v[k] = adc1_v[k+1];
adc1_v[k+1] = tem;
}
}
}
for(uint8_t i = 1; i < 5 - 1; i++)
{
curadc1 = curadc1 + adc1_v[i];
}
curadc1 = curadc1 /((float)(5 - 2));//去掉一个最大值和一个最小值求平均值
// g_ptz.Voltage = curadc1;
memset(adc1_v,0,sizeof(adc1_v));
return curadc1;
// rt_kprintf("ADC Channel value: %f\n", curadc1);
// pdebug(DEBUG_LEVEL_INFO,"get ptz Voltage: %.3fV",g_ptz.Voltage);
}
}
void init_data_collect_module(void)
{
ADC_Init();//AD采集引脚初始化
// temp75_gpio_init();//温度传感器初始化
// creat_task_data_collect();
}