diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx
index 2ee0cb8..29df438 100644
--- a/Project/HC32F460/MDK/HC32F460.uvoptx
+++ b/Project/HC32F460/MDK/HC32F460.uvoptx
@@ -153,7 +153,24 @@
-
+
+
+ 0
+ 0
+ 291
+ 1
+ 4146
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\source\Module\dc_motor\dc_motor.c
+
+ \\BombSensor\../source/Module/dc_motor/dc_motor.c\291
+
+
0
@@ -248,17 +265,7 @@
18
1
- newSpeed,0x0A
-
-
- 19
- 1
- g_motorSpeed,0x0A
-
-
- 20
- 1
- g_adc_val,0x0A
+ g_motor_data
@@ -266,8 +273,8 @@
0
- 0
- 1
+ 1
+ 0
0
0
0
diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c
index 1b5fee1..84d81f1 100644
--- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c
+++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c
@@ -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 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);
}
}
diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h
index 356fc81..5e749a8 100644
--- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h
+++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h
@@ -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
diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c
index ba80f24..69237cc 100644
--- a/Project/HC32F460/source/User/Src/bsp.c
+++ b/Project/HC32F460/source/User/Src/bsp.c
@@ -17,7 +17,7 @@
static void SystemClockConfig(void);
-uint16_t m_au16Adc1SaValue[4];
+uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL];
void FlashWrite(uint32_t *wData, uint32_t wLen)
{
@@ -1163,15 +1163,15 @@ static void AdcSetChannelPinMode(uint32_t u32Channel)
static void AdcChannelConfig(void)
{
stc_adc_ch_cfg_t stcChCfg;
- uint8_t au8Adc1SaSampTime[4] = {255, 255, 255, 255};
+ uint8_t au8Adc1SaSampTime[3] = {2255, 255, 255};
MEM_ZERO_STRUCT(stcChCfg);
- stcChCfg.u32Channel = ADC1_CH0 | ADC1_CH1 | ADC1_CH2 | ADC1_CH3;
+ stcChCfg.u32Channel = ADC1_CH1 | ADC1_CH2 | ADC1_CH3;
stcChCfg.u8Sequence = ADC_SEQ_A;
stcChCfg.pu8SampTime = au8Adc1SaSampTime;
- AdcSetChannelPinMode(ADC1_CH0);
+// AdcSetChannelPinMode(ADC1_CH0);
AdcSetChannelPinMode(ADC1_CH1);
AdcSetChannelPinMode(ADC1_CH2);
AdcSetChannelPinMode(ADC1_CH3);
@@ -1210,12 +1210,12 @@ static void AdcDmaConfig(void)
MEM_ZERO_STRUCT(stcDmaCfg);
- stcDmaCfg.u16BlockSize = 4;
+ stcDmaCfg.u16BlockSize = 3;
stcDmaCfg.u16TransferCnt = 0u;
- stcDmaCfg.u32SrcAddr = (uint32_t)(&M4_ADC1->DR0);
+ stcDmaCfg.u32SrcAddr = (uint32_t)(&M4_ADC1->DR1);
stcDmaCfg.u32DesAddr = (uint32_t)(m_au16Adc1SaValue);
- stcDmaCfg.u16DesRptSize = 4;
- stcDmaCfg.u16SrcRptSize = 4;
+ stcDmaCfg.u16DesRptSize = ADC_SUM;
+ stcDmaCfg.u16SrcRptSize = 3;
stcDmaCfg.u32DmaLlp = 0u;
stcDmaCfg.stcSrcNseqCfg.u16Cnt = 0u;
stcDmaCfg.stcSrcNseqCfg.u32Offset = 0u;
@@ -1228,7 +1228,7 @@ static void AdcDmaConfig(void)
stcDmaCfg.stcDmaChCfg.enSrcNseqEn = Disable;
stcDmaCfg.stcDmaChCfg.enDesNseqEn = Disable;
stcDmaCfg.stcDmaChCfg.enTrnWidth = Dma16Bit;
- stcDmaCfg.stcDmaChCfg.enLlpEn = Disable;
+ stcDmaCfg.stcDmaChCfg.enLlpEn = Enable;
/* Enable DMA interrupt. */
stcDmaCfg.stcDmaChCfg.enIntEn = Enable;
diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c
index b88fe35..256a9db 100644
--- a/Project/HC32F460/source/User/Src/main.c
+++ b/Project/HC32F460/source/User/Src/main.c
@@ -640,5 +640,6 @@ void RtcPeriod_IrqCallback(void)
void ADC_DMA_CallBack(void)
{
+
}