1、修改ADC初始化及DMA初始化参数,调整启动时等待电流稳定采初始电流相关代码。
This commit is contained in:
@@ -3,9 +3,6 @@
|
||||
#include "Debug.h"
|
||||
#include "math.h"
|
||||
|
||||
#define ADC_CH_NUM 3 /* 需要转换的通道数目 */
|
||||
#define ADC_COLL 100 /* 单采集次数 */
|
||||
#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */
|
||||
|
||||
|
||||
// 全局变量
|
||||
@@ -71,15 +68,15 @@ void DCMOTORDBGOnOff(uint8_t OnOff)
|
||||
#endif
|
||||
|
||||
|
||||
extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL];
|
||||
|
||||
uint16_t init_adc_val;
|
||||
uint16_t AdcInitCnt = 0;
|
||||
|
||||
|
||||
#define Adc 0.80566 //3.3/4096=0.00080566 //ADC分辨率
|
||||
#define ADC_CH_NUM 3
|
||||
uint16_t g_adc_val[ADC_CH_NUM];
|
||||
|
||||
uint16_t g_adc_val[ADC_CH_NUM];
|
||||
extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL];
|
||||
|
||||
/************************************* 第二部分 电压电流温度采集 **********************************************/
|
||||
|
||||
@@ -241,7 +238,7 @@ void speed_computer(int32_t encode_now, uint8_t ms)
|
||||
* 返 回 值: 无
|
||||
*****************************************************************************************/
|
||||
bool AdcInitStatus = false; //ADC初始化状态标志位
|
||||
bool AdcInitSta = false; //ADC电流电压采集初始化标志位
|
||||
volatile bool AdcInitSta = false; //ADC电流电压采集初始化标志位
|
||||
uint16_t AdcDly = 0; //ADC采样定时计数
|
||||
void Adc1mSRoutine(void)
|
||||
{
|
||||
@@ -266,16 +263,15 @@ void Adc1mSRoutine(void)
|
||||
*****************************************************************************************/
|
||||
void AdcLoopHander(void)
|
||||
{
|
||||
uint32_t temp = 0;
|
||||
int i;
|
||||
float temp_c = 0.0;
|
||||
//开机等待电流数据稳定,采集稳定电流值为初始值
|
||||
//开机等待电流数据稳定1秒,采集稳定电流值为初始值
|
||||
if((AdcInitStatus == true) && (AdcInitSta == false))
|
||||
{
|
||||
AdcInitCnt++;
|
||||
|
||||
ADC_Start();
|
||||
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
||||
init_adc_val += m_au16Adc1SaValue[2u]; /* 现在的值和上一次存储的值相加 */
|
||||
init_adc_val /= 2; /* 取平均值 */
|
||||
|
||||
AdcInitCnt++;
|
||||
if(AdcInitCnt < 1000)
|
||||
{
|
||||
AdcInitStatus = false;
|
||||
@@ -283,6 +279,15 @@ void AdcLoopHander(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
||||
for(i=0;i<ADC_COLL;i++) /* 循环ADC_COLL次取值,累加 */
|
||||
{
|
||||
init_adc_val += m_au16Adc1SaValue[2+i*ADC_CH_NUM];
|
||||
if(i > 0)
|
||||
{
|
||||
init_adc_val /= 2; /* 取平均值 */
|
||||
}
|
||||
}
|
||||
DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val);
|
||||
AdcInitSta = true;
|
||||
}
|
||||
@@ -292,7 +297,7 @@ void AdcLoopHander(void)
|
||||
{
|
||||
float BatVoltage = 0;
|
||||
AdcDly = 1000;
|
||||
if(AdcInitSta == true)
|
||||
if(AdcInitSta != false)
|
||||
{
|
||||
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
||||
DMA_Cmd(M4_DMA1, Disable);
|
||||
@@ -303,12 +308,14 @@ void AdcLoopHander(void)
|
||||
temp_c = (g_adc_val[2]-init_adc_val)*ADC2CURT;
|
||||
DCMOTOR_DBG_LOG("ADC3_IN3 value %d.\t Current:%.1fmA \r\n", g_adc_val[2u], temp_c);
|
||||
|
||||
// g_motor_data.current = temp_c;
|
||||
|
||||
g_motor_data.current = (float)((g_motor_data.current * (float)0.60) + ((float)0.40 * temp_c)); /* 一阶低通滤波 */
|
||||
if (g_motor_data.current <= 20) /* 过滤掉微弱浮动电流 */
|
||||
if (abs(g_motor_data.current) <= 20) /* 过滤掉微弱浮动电流 */
|
||||
{
|
||||
g_motor_data.current = 0.0;
|
||||
}
|
||||
DCMOTOR_DBG_LOG("\t\t\t g_motor_data.current:%.1fmA \r\n", g_adc_val[2u], g_motor_data.current);
|
||||
DCMOTOR_DBG_LOG("\t\t\t g_motor_data.current:%.1fmA \r\n", g_motor_data.current);
|
||||
DMA_Cmd(M4_DMA1, Enable);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
#ifndef __DCMOTOR_H
|
||||
#define __DCMOTOR_H
|
||||
|
||||
#define ADC_CH_NUM 3 /* 需要转换的通道数目 */
|
||||
#define ADC_COLL 100 /* 单采集次数 */
|
||||
#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */
|
||||
|
||||
|
||||
|
||||
#define HC32F170 (0u) //HC32F170JATA
|
||||
|
||||
Reference in New Issue
Block a user