1、修改ADC初始化及DMA初始化参数,调整启动时等待电流稳定采初始电流相关代码。
This commit is contained in:
@@ -153,7 +153,24 @@
|
|||||||
<Name></Name>
|
<Name></Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
<Breakpoint/>
|
<Breakpoint>
|
||||||
|
<Bp>
|
||||||
|
<Number>0</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>291</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>4146</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>1</BreakIfRCount>
|
||||||
|
<Filename>..\source\Module\dc_motor\dc_motor.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression>\\BombSensor\../source/Module/dc_motor/dc_motor.c\291</Expression>
|
||||||
|
</Bp>
|
||||||
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>0</count>
|
<count>0</count>
|
||||||
@@ -248,17 +265,7 @@
|
|||||||
<Ww>
|
<Ww>
|
||||||
<count>18</count>
|
<count>18</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>newSpeed,0x0A</ItemText>
|
<ItemText>g_motor_data</ItemText>
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>19</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>g_motorSpeed,0x0A</ItemText>
|
|
||||||
</Ww>
|
|
||||||
<Ww>
|
|
||||||
<count>20</count>
|
|
||||||
<WinNumber>1</WinNumber>
|
|
||||||
<ItemText>g_adc_val,0x0A</ItemText>
|
|
||||||
</Ww>
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<Tracepoint>
|
<Tracepoint>
|
||||||
@@ -266,8 +273,8 @@
|
|||||||
</Tracepoint>
|
</Tracepoint>
|
||||||
<DebugFlag>
|
<DebugFlag>
|
||||||
<trace>0</trace>
|
<trace>0</trace>
|
||||||
<periodic>0</periodic>
|
<periodic>1</periodic>
|
||||||
<aLwin>1</aLwin>
|
<aLwin>0</aLwin>
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
|
|||||||
@@ -3,9 +3,6 @@
|
|||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
#include "math.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
|
#endif
|
||||||
|
|
||||||
|
|
||||||
extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL];
|
|
||||||
uint16_t init_adc_val;
|
uint16_t init_adc_val;
|
||||||
uint16_t AdcInitCnt = 0;
|
uint16_t AdcInitCnt = 0;
|
||||||
|
|
||||||
|
|
||||||
#define Adc 0.80566 //3.3/4096=0.00080566 //ADC分辨率
|
#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 AdcInitStatus = false; //ADC初始化状态标志位
|
||||||
bool AdcInitSta = false; //ADC电流电压采集初始化标志位
|
volatile bool AdcInitSta = false; //ADC电流电压采集初始化标志位
|
||||||
uint16_t AdcDly = 0; //ADC采样定时计数
|
uint16_t AdcDly = 0; //ADC采样定时计数
|
||||||
void Adc1mSRoutine(void)
|
void Adc1mSRoutine(void)
|
||||||
{
|
{
|
||||||
@@ -266,16 +263,15 @@ void Adc1mSRoutine(void)
|
|||||||
*****************************************************************************************/
|
*****************************************************************************************/
|
||||||
void AdcLoopHander(void)
|
void AdcLoopHander(void)
|
||||||
{
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
int i;
|
||||||
float temp_c = 0.0;
|
float temp_c = 0.0;
|
||||||
//开机等待电流数据稳定,采集稳定电流值为初始值
|
//开机等待电流数据稳定1秒,采集稳定电流值为初始值
|
||||||
if((AdcInitStatus == true) && (AdcInitSta == false))
|
if((AdcInitStatus == true) && (AdcInitSta == false))
|
||||||
{
|
{
|
||||||
AdcInitCnt++;
|
|
||||||
|
|
||||||
ADC_Start();
|
ADC_Start();
|
||||||
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
|
||||||
init_adc_val += m_au16Adc1SaValue[2u]; /* 现在的值和上一次存储的值相加 */
|
AdcInitCnt++;
|
||||||
init_adc_val /= 2; /* 取平均值 */
|
|
||||||
if(AdcInitCnt < 1000)
|
if(AdcInitCnt < 1000)
|
||||||
{
|
{
|
||||||
AdcInitStatus = false;
|
AdcInitStatus = false;
|
||||||
@@ -283,6 +279,15 @@ void AdcLoopHander(void)
|
|||||||
}
|
}
|
||||||
else
|
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);
|
DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val);
|
||||||
AdcInitSta = true;
|
AdcInitSta = true;
|
||||||
}
|
}
|
||||||
@@ -292,7 +297,7 @@ void AdcLoopHander(void)
|
|||||||
{
|
{
|
||||||
float BatVoltage = 0;
|
float BatVoltage = 0;
|
||||||
AdcDly = 1000;
|
AdcDly = 1000;
|
||||||
if(AdcInitSta == true)
|
if(AdcInitSta != false)
|
||||||
{
|
{
|
||||||
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
||||||
DMA_Cmd(M4_DMA1, Disable);
|
DMA_Cmd(M4_DMA1, Disable);
|
||||||
@@ -303,12 +308,14 @@ void AdcLoopHander(void)
|
|||||||
temp_c = (g_adc_val[2]-init_adc_val)*ADC2CURT;
|
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);
|
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)); /* 一阶低通滤波 */
|
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;
|
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);
|
DMA_Cmd(M4_DMA1, Enable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
#ifndef __DCMOTOR_H
|
#ifndef __DCMOTOR_H
|
||||||
#define __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
|
#define HC32F170 (0u) //HC32F170JATA
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
static void SystemClockConfig(void);
|
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)
|
void FlashWrite(uint32_t *wData, uint32_t wLen)
|
||||||
{
|
{
|
||||||
@@ -1163,15 +1163,15 @@ static void AdcSetChannelPinMode(uint32_t u32Channel)
|
|||||||
static void AdcChannelConfig(void)
|
static void AdcChannelConfig(void)
|
||||||
{
|
{
|
||||||
stc_adc_ch_cfg_t stcChCfg;
|
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);
|
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.u8Sequence = ADC_SEQ_A;
|
||||||
stcChCfg.pu8SampTime = au8Adc1SaSampTime;
|
stcChCfg.pu8SampTime = au8Adc1SaSampTime;
|
||||||
|
|
||||||
AdcSetChannelPinMode(ADC1_CH0);
|
// AdcSetChannelPinMode(ADC1_CH0);
|
||||||
AdcSetChannelPinMode(ADC1_CH1);
|
AdcSetChannelPinMode(ADC1_CH1);
|
||||||
AdcSetChannelPinMode(ADC1_CH2);
|
AdcSetChannelPinMode(ADC1_CH2);
|
||||||
AdcSetChannelPinMode(ADC1_CH3);
|
AdcSetChannelPinMode(ADC1_CH3);
|
||||||
@@ -1210,12 +1210,12 @@ static void AdcDmaConfig(void)
|
|||||||
|
|
||||||
MEM_ZERO_STRUCT(stcDmaCfg);
|
MEM_ZERO_STRUCT(stcDmaCfg);
|
||||||
|
|
||||||
stcDmaCfg.u16BlockSize = 4;
|
stcDmaCfg.u16BlockSize = 3;
|
||||||
stcDmaCfg.u16TransferCnt = 0u;
|
stcDmaCfg.u16TransferCnt = 0u;
|
||||||
stcDmaCfg.u32SrcAddr = (uint32_t)(&M4_ADC1->DR0);
|
stcDmaCfg.u32SrcAddr = (uint32_t)(&M4_ADC1->DR1);
|
||||||
stcDmaCfg.u32DesAddr = (uint32_t)(m_au16Adc1SaValue);
|
stcDmaCfg.u32DesAddr = (uint32_t)(m_au16Adc1SaValue);
|
||||||
stcDmaCfg.u16DesRptSize = 4;
|
stcDmaCfg.u16DesRptSize = ADC_SUM;
|
||||||
stcDmaCfg.u16SrcRptSize = 4;
|
stcDmaCfg.u16SrcRptSize = 3;
|
||||||
stcDmaCfg.u32DmaLlp = 0u;
|
stcDmaCfg.u32DmaLlp = 0u;
|
||||||
stcDmaCfg.stcSrcNseqCfg.u16Cnt = 0u;
|
stcDmaCfg.stcSrcNseqCfg.u16Cnt = 0u;
|
||||||
stcDmaCfg.stcSrcNseqCfg.u32Offset = 0u;
|
stcDmaCfg.stcSrcNseqCfg.u32Offset = 0u;
|
||||||
@@ -1228,7 +1228,7 @@ static void AdcDmaConfig(void)
|
|||||||
stcDmaCfg.stcDmaChCfg.enSrcNseqEn = Disable;
|
stcDmaCfg.stcDmaChCfg.enSrcNseqEn = Disable;
|
||||||
stcDmaCfg.stcDmaChCfg.enDesNseqEn = Disable;
|
stcDmaCfg.stcDmaChCfg.enDesNseqEn = Disable;
|
||||||
stcDmaCfg.stcDmaChCfg.enTrnWidth = Dma16Bit;
|
stcDmaCfg.stcDmaChCfg.enTrnWidth = Dma16Bit;
|
||||||
stcDmaCfg.stcDmaChCfg.enLlpEn = Disable;
|
stcDmaCfg.stcDmaChCfg.enLlpEn = Enable;
|
||||||
/* Enable DMA interrupt. */
|
/* Enable DMA interrupt. */
|
||||||
stcDmaCfg.stcDmaChCfg.enIntEn = Enable;
|
stcDmaCfg.stcDmaChCfg.enIntEn = Enable;
|
||||||
|
|
||||||
|
|||||||
@@ -640,5 +640,6 @@ void RtcPeriod_IrqCallback(void)
|
|||||||
|
|
||||||
void ADC_DMA_CallBack(void)
|
void ADC_DMA_CallBack(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user