Merge branch 'Motor_Test' into 双柱双电机S型传感器独立分支
# Conflicts: # Project/HC32F460/MDK/HC32F460.uvoptx # Project/HC32F460/source/Module/dc_motor/dc_motor.h
This commit is contained in:
+18
-24
@@ -3,19 +3,16 @@
|
|||||||
{
|
{
|
||||||
"name": "Debug",
|
"name": "Debug",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\driver\\inc",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\mcu\\common",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\mcu\\common",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\User\\Inc",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\User\\Inc",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\User\\Src",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\Debug",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\driver\\src",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\SDCard",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\driver\\inc",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\FatFS\\source",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\CS1237",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\LIS2HH12",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\dc_motor",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\RS485",
|
|
||||||
"C:\\Keil_v5\\ARM\\ARMCC\\include",
|
"C:\\Keil_v5\\ARM\\ARMCC\\include",
|
||||||
"C:\\Keil_v5\\ARM\\ARMCC\\include\\rw",
|
"C:\\Keil_v5\\ARM\\ARMCC\\include\\rw",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\MDK",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\MDK"
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\User\\Src",
|
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\driver\\src"
|
|
||||||
],
|
],
|
||||||
"defines": [
|
"defines": [
|
||||||
"__DEBUG",
|
"__DEBUG",
|
||||||
@@ -100,21 +97,18 @@
|
|||||||
{
|
{
|
||||||
"name": "Release",
|
"name": "Release",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\mcu\\common",
|
"d:\\CUI\\SynologyDrive\\JOB\\mcu\\common",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\driver\\inc",
|
"d:\\CUI\\SynologyDrive\\JOB\\driver\\inc",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\bsp\\ev_hc32f460_lqfp100_v2",
|
"d:\\CUI\\SynologyDrive\\JOB\\bsp\\ev_hc32f460_lqfp100_v2",
|
||||||
"C:\\Keil_v5\\ARM\\ARMCC\\include",
|
"C:\\Keil_v5\\ARM\\ARMCC\\include",
|
||||||
"C:\\Keil_v5\\ARM\\ARMCC\\include\\rw",
|
"C:\\Keil_v5\\ARM\\ARMCC\\include\\rw",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\MDK",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\MDK",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\mcu\\common",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\mcu\\common",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\User\\Src",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\driver\\src",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\driver\\src",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\User\\Src",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\Debug",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\CS1237",
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\SDCard",
|
"d:\\CUI\\SynologyDrive\\JOB\\Project\\HC32F460\\Project\\HC32F460\\source\\Module\\dc_motor"
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\FatFS\\source",
|
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\LIS2HH12",
|
|
||||||
"d:\\CUI\\Electronics\\SynologyDrive\\HC32F460PRO\\HC32F460JEUA-SonarSenser_V1.5-2024-04-10\\Project\\SonarSensor\\source\\Module\\RS485"
|
|
||||||
],
|
],
|
||||||
"defines": [
|
"defines": [
|
||||||
"HC32F460",
|
"HC32F460",
|
||||||
|
|||||||
+14
@@ -20,3 +20,17 @@
|
|||||||
|
|
||||||
[info] Log at : 2024/6/12|17:35:35|GMT+0800
|
[info] Log at : 2024/6/12|17:35:35|GMT+0800
|
||||||
|
|
||||||
|
[info] Log at : 2025/9/17|09:28:29|GMT+0800
|
||||||
|
|
||||||
|
[info] Log at : 2025/9/17|09:28:37|GMT+0800
|
||||||
|
|
||||||
|
[info] Log at : 2025/9/17|11:25:21|GMT+0800
|
||||||
|
|
||||||
|
[info] Log at : 2025/9/17|11:30:43|GMT+0800
|
||||||
|
|
||||||
|
[info] Log at : 2025/9/18|09:27:20|GMT+0800
|
||||||
|
|
||||||
|
[info] project closed: HC32F460
|
||||||
|
[info] Log at : 2025/9/19|10:56:08|GMT+0800
|
||||||
|
|
||||||
|
[info] project closed: HC32F460
|
||||||
|
|||||||
@@ -153,7 +153,44 @@
|
|||||||
<Name></Name>
|
<Name></Name>
|
||||||
</SetRegEntry>
|
</SetRegEntry>
|
||||||
</TargetDriverDllRegistry>
|
</TargetDriverDllRegistry>
|
||||||
|
<<<<<<< HEAD
|
||||||
<Breakpoint/>
|
<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>
|
||||||
|
<Bp>
|
||||||
|
<Number>1</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>343</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>..\source\Module\dc_motor\dc_motor.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
</Breakpoint>
|
||||||
|
>>>>>>> Motor_Test
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>0</count>
|
<count>0</count>
|
||||||
@@ -225,6 +262,11 @@
|
|||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>App.CentreRunFalg,0x0A</ItemText>
|
<ItemText>App.CentreRunFalg,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>18</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>g_motor_data</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<MemoryWindow1>
|
<MemoryWindow1>
|
||||||
<Mm>
|
<Mm>
|
||||||
@@ -240,7 +282,11 @@
|
|||||||
<DebugFlag>
|
<DebugFlag>
|
||||||
<trace>0</trace>
|
<trace>0</trace>
|
||||||
<periodic>1</periodic>
|
<periodic>1</periodic>
|
||||||
|
<<<<<<< HEAD
|
||||||
<aLwin>1</aLwin>
|
<aLwin>1</aLwin>
|
||||||
|
=======
|
||||||
|
<aLwin>0</aLwin>
|
||||||
|
>>>>>>> Motor_Test
|
||||||
<aCover>0</aCover>
|
<aCover>0</aCover>
|
||||||
<aSer1>0</aSer1>
|
<aSer1>0</aSer1>
|
||||||
<aSer2>0</aSer2>
|
<aSer2>0</aSer2>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "dc_motor.h"
|
#include "dc_motor.h"
|
||||||
#include "hc32_ddl.h"
|
#include "hc32_ddl.h"
|
||||||
#include "Debug.h"
|
#include "Debug.h"
|
||||||
|
#include "math.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -30,8 +31,8 @@ void DCMOTORDBGOnOff(uint8_t OnOff)
|
|||||||
DBG_LOG("\r\nDcMotor Display Disable!\r\n");
|
DBG_LOG("\r\nDcMotor Display Disable!\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if(MCU == HC32F460JETA)
|
||||||
|
#if(0) //旧版本PCB
|
||||||
/* Timer4 CNT */
|
/* Timer4 CNT */
|
||||||
#define TIMER4_UNIT (M4_TMR41)
|
#define TIMER4_UNIT (M4_TMR41)
|
||||||
#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */
|
#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */
|
||||||
@@ -47,9 +48,331 @@ void DCMOTORDBGOnOff(uint8_t OnOff)
|
|||||||
#define TIMER4_PWM_H_PIN (Pin08)
|
#define TIMER4_PWM_H_PIN (Pin08)
|
||||||
#define TIMER4_PWM_L_PORT (PortB) /* TIM4_1_OUL_B:PE8 TIM4_1_OVL_B:PE10 TIM4_1_OWL_B:PE12 */
|
#define TIMER4_PWM_L_PORT (PortB) /* TIM4_1_OUL_B:PE8 TIM4_1_OVL_B:PE10 TIM4_1_OWL_B:PE12 */
|
||||||
#define TIMER4_PWM_L_PIN (Pin13)
|
#define TIMER4_PWM_L_PIN (Pin13)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if(1) //V2.1版本PCB
|
||||||
|
/* Timer4 CNT */
|
||||||
|
#define TIMER4_UNIT (M4_TMR41)
|
||||||
|
#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */
|
||||||
|
|
||||||
|
/* Timer4 OCO */
|
||||||
|
#define TIMER4_OCO_HIGH_CH (Timer4OcoOvh) /* only Timer4OcoOuh Timer4OcoOvh Timer4OcoOwh */
|
||||||
|
|
||||||
|
/* Timer4 PWM */
|
||||||
|
#define TIMER4_PWM_CH (Timer4PwmV) /* only Timer4PwmU Timer4PwmV Timer4PwmW */
|
||||||
|
|
||||||
|
#define TIMER4_PWM_H_PORT (PortA) /* TIM4_1_OUH_B:PE9 TIM4_1_OVH_B:PE11 TIM4_1_OWH_B:PE13 */
|
||||||
|
#define TIMER4_PWM_H_PIN (Pin09)
|
||||||
|
#define TIMER4_PWM_L_PORT (PortB) /* TIM4_1_OUL_B:PE8 TIM4_1_OVL_B:PE10 TIM4_1_OWL_B:PE12 */
|
||||||
|
#define TIMER4_PWM_L_PIN (Pin14)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t init_adc_val;
|
||||||
|
uint16_t AdcInitCnt = 0;
|
||||||
|
|
||||||
|
|
||||||
|
#define Adc 0.80566 //3.3/4096=0.00080566 //ADC分辨率
|
||||||
|
|
||||||
|
uint16_t g_adc_val[ADC_CH_NUM];
|
||||||
|
extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL];
|
||||||
|
|
||||||
|
/************************************* 第二部分 电压电流温度采集 **********************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Rt = Rp *exp(B*(1/T1-1/T2))
|
||||||
|
|
||||||
|
Rt 是热敏电阻在T1温度下的阻值;
|
||||||
|
Rp是热敏电阻在T2常温下的标称阻值;
|
||||||
|
exp是e的n次方,e是自然常数,就是自然对数的底数,近似等于 2.7182818;
|
||||||
|
B值是热敏电阻的重要参数,教程中用到的热敏电阻B值为3380;
|
||||||
|
这里T1和T2指的是开尔文温度,T2是常温25℃,即(273.15+25)K
|
||||||
|
T1就是所求的温度
|
||||||
|
*/
|
||||||
|
|
||||||
|
const float Rp = 10000.0f; /* 10K */
|
||||||
|
const float T2 = (273.15f + 25.0f); /* T2 */
|
||||||
|
const float Bx = 3380.0f; /* B */
|
||||||
|
const float Ka = 273.15f;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 计算温度值
|
||||||
|
* @param para: 温度采集对应ADC通道的值(已滤波)
|
||||||
|
* @note 计算温度分为两步:
|
||||||
|
1.根据ADC采集到的值计算当前对应的Rt
|
||||||
|
2.根据Rt计算对应的温度值
|
||||||
|
* @retval 温度值
|
||||||
|
*/
|
||||||
|
float get_temp(uint16_t para)
|
||||||
|
{
|
||||||
|
float Rt;
|
||||||
|
float temp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
第一步:
|
||||||
|
Rt = 3.3 * 4700 / VTEMP - 4700 ,其中VTEMP就是温度检测通道采集回来的电压值,VTEMP = ADC值* 3.3/4096
|
||||||
|
由此我们可以计算出当前Rt的值:Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f;
|
||||||
|
*/
|
||||||
|
|
||||||
|
Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; /* 根据当前ADC值计算出Rt的值 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
第二步:
|
||||||
|
根据当前Rt的值来计算对应温度值:Rt = Rp *exp(B*(1/T1-1/T2))
|
||||||
|
*/
|
||||||
|
|
||||||
|
temp = Rt / Rp; /* 解出exp(B*(1/T1-1/T2)) ,即temp = exp(B*(1/T1-1/T2)) */
|
||||||
|
temp = log(temp); /* 解出B*(1/T1-1/T2) ,即temp = B*(1/T1-1/T2) */
|
||||||
|
temp /= Bx; /* 解出1/T1-1/T2 ,即temp = 1/T1-1/T2 */
|
||||||
|
temp += (1.0f / T2); /* 解出1/T1 ,即temp = 1/T1 */
|
||||||
|
temp = 1.0f / (temp); /* 解出T1 ,即temp = T1 */
|
||||||
|
temp -= Ka; /* 计算T1对应的摄氏度 */
|
||||||
|
return temp; /* 返回温度值 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 计算ADC的平均值(滤波)
|
||||||
|
* @param * p :存放ADC值的指针地址
|
||||||
|
* @note 此函数对电压、温度、电流对应的ADC值进行滤波,
|
||||||
|
* p[0]-p[2]对应的分别是电压、温度和电流
|
||||||
|
* @retval 无
|
||||||
|
*/
|
||||||
|
void calc_adc_val(uint16_t * p)
|
||||||
|
{
|
||||||
|
uint32_t temp[3] = {0,0,0};
|
||||||
|
int i;
|
||||||
|
for(i=0;i<ADC_COLL;i++) /* 循环ADC_COLL次取值,累加 */
|
||||||
|
{
|
||||||
|
temp[0] += m_au16Adc1SaValue[0+i*ADC_CH_NUM];
|
||||||
|
temp[1] += m_au16Adc1SaValue[1+i*ADC_CH_NUM];
|
||||||
|
temp[2] += m_au16Adc1SaValue[2+i*ADC_CH_NUM];
|
||||||
|
}
|
||||||
|
temp[0] /= ADC_COLL; /* 取平均值 */
|
||||||
|
temp[1] /= ADC_COLL;
|
||||||
|
temp[2] /= ADC_COLL;
|
||||||
|
p[0] = temp[0]; /* 存入电压ADC通道平均值 */
|
||||||
|
p[1] = temp[1]; /* 存入温度ADC通道平均值 */
|
||||||
|
p[2] = temp[2]; /* 存入电流ADC通道平均值 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************* 第三部分 编码器测速 ****************************************************/
|
||||||
|
|
||||||
|
Motor_TypeDef g_motor_data; /*电机参数变量*/
|
||||||
|
ENCODE_TypeDef g_encode; /*编码器参数变量*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 电机速度计算
|
||||||
|
* @param encode_now:当前编码器总的计数值
|
||||||
|
* ms:计算速度的间隔,中断1ms进入一次,例如ms = 5即5ms计算一次速度
|
||||||
|
* @retval 无
|
||||||
|
*/
|
||||||
|
void speed_computer(int32_t encode_now, uint8_t ms)
|
||||||
|
{
|
||||||
|
uint8_t i = 0, j = 0;
|
||||||
|
float temp = 0.0;
|
||||||
|
static uint8_t sp_count = 0, k = 0;
|
||||||
|
static float speed_arr[10] = {0.0}; /* 存储速度进行滤波运算 */
|
||||||
|
|
||||||
|
if (sp_count == ms) /* 计算一次速度 */
|
||||||
|
{
|
||||||
|
/* 计算电机转速
|
||||||
|
第一步 :计算ms毫秒内计数变化量
|
||||||
|
第二步 ;计算1min内计数变化量:g_encode.speed * ((1000 / ms) * 60 ,
|
||||||
|
第三步 :除以编码器旋转一圈的计数次数(倍频倍数 * 编码器分辨率)
|
||||||
|
第四步 :除以减速比即可得出电机转速
|
||||||
|
*/
|
||||||
|
g_encode.encode_now = encode_now; /* 取出编码器当前计数值 */
|
||||||
|
g_encode.speed = (g_encode.encode_now - g_encode.encode_old); /* 计算编码器计数值的变化量 */
|
||||||
|
|
||||||
|
speed_arr[k++] = (float)(g_encode.speed * ((1000 / ms) * 60.0) / REDUCTION_RATIO / ROTO_RATIO ); /* 保存电机转速 */
|
||||||
|
|
||||||
|
g_encode.encode_old = g_encode.encode_now; /* 保存当前编码器的值 */
|
||||||
|
|
||||||
|
/* 累计10次速度值,后续进行滤波*/
|
||||||
|
if (k == 10)
|
||||||
|
{
|
||||||
|
for (i = 10; i >= 1; i--) /* 冒泡排序*/
|
||||||
|
{
|
||||||
|
for (j = 0; j < (i - 1); j++)
|
||||||
|
{
|
||||||
|
if (speed_arr[j] > speed_arr[j + 1]) /* 数值比较 */
|
||||||
|
{
|
||||||
|
temp = speed_arr[j]; /* 数值换位 */
|
||||||
|
speed_arr[j] = speed_arr[j + 1];
|
||||||
|
speed_arr[j + 1] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = 0.0;
|
||||||
|
|
||||||
|
for (i = 2; i < 8; i++) /* 去除两边高低数据 */
|
||||||
|
{
|
||||||
|
temp += speed_arr[i]; /* 将中间数值累加 */
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = (float)(temp / 6); /*求速度平均值*/
|
||||||
|
|
||||||
|
/* 一阶低通滤波
|
||||||
|
* 公式为:Y(n)= qX(n) + (1-q)Y(n-1)
|
||||||
|
* 其中X(n)为本次采样值;Y(n-1)为上次滤波输出值;Y(n)为本次滤波输出值,q为滤波系数
|
||||||
|
* q值越小则上一次输出对本次输出影响越大,整体曲线越平稳,但是对于速度变化的响应也会越慢
|
||||||
|
*/
|
||||||
|
g_motor_data.speed = (float)( ((float)0.48 * temp) + (g_motor_data.speed * (float)0.52) );
|
||||||
|
k = 0;
|
||||||
|
}
|
||||||
|
sp_count = 0;
|
||||||
|
}
|
||||||
|
sp_count ++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: get_current
|
||||||
|
* 功能描述: 获取工作电流函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 电流值
|
||||||
|
*****************************************************************************************/
|
||||||
|
float get_current(void)
|
||||||
|
{
|
||||||
|
return g_motor_data.current; /* 返回工作电流值 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: get_volatage
|
||||||
|
* 功能描述: 获取工作电压函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 电压值
|
||||||
|
*****************************************************************************************/
|
||||||
|
float get_volatage(void)
|
||||||
|
{
|
||||||
|
return g_motor_data.volatage; /* 返回工作电压值 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: get_Temperature
|
||||||
|
* 功能描述: 获取工作温度函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 温度值
|
||||||
|
*****************************************************************************************/
|
||||||
|
float get_Temperature(void)
|
||||||
|
{
|
||||||
|
return g_motor_data.current; /* 返回工作温度值 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: get_speed
|
||||||
|
* 功能描述: 获取电机实际转速值函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 电压值
|
||||||
|
*****************************************************************************************/
|
||||||
|
float get_speed(void)
|
||||||
|
{
|
||||||
|
return g_motor_data.speed; /* 返回电机实际转速值 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: get_location
|
||||||
|
* 功能描述: 获取电机实际位置函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 电压值
|
||||||
|
*****************************************************************************************/
|
||||||
|
float get_location(void)
|
||||||
|
{
|
||||||
|
return g_motor_data.speed; /* 返回电机实际位置 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: Adc1mSRoutine
|
||||||
|
* 功能描述: Adc 1毫秒服务函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 无
|
||||||
|
*****************************************************************************************/
|
||||||
|
bool AdcInitStatus = false; //ADC初始化状态标志位
|
||||||
|
volatile bool AdcInitSta = false; //ADC电流电压采集初始化标志位
|
||||||
|
uint16_t AdcDly = 0; //ADC采样定时计数
|
||||||
|
void Adc1mSRoutine(void)
|
||||||
|
{
|
||||||
|
if(AdcInitStatus == false)
|
||||||
|
AdcInitStatus = true;
|
||||||
|
if(AdcInitSta == true)
|
||||||
|
{
|
||||||
|
ADC_Start();
|
||||||
|
}
|
||||||
|
if(AdcDly > 0)
|
||||||
|
AdcDly--;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************************
|
||||||
|
* 函数名称: AdcLoopHander
|
||||||
|
* 功能描述: Adc主循环函数
|
||||||
|
* 参 数: 无
|
||||||
|
* 返 回 值: 无
|
||||||
|
*****************************************************************************************/
|
||||||
|
void AdcLoopHander(void)
|
||||||
|
{
|
||||||
|
uint32_t temp = 0;
|
||||||
|
int i;
|
||||||
|
float temp_c = 0.0;
|
||||||
|
//开机等待电流数据稳定1秒,采集稳定电流值为初始值
|
||||||
|
if((AdcInitStatus == true) && (AdcInitSta == false))
|
||||||
|
{
|
||||||
|
ADC_Start();
|
||||||
|
|
||||||
|
AdcInitCnt++;
|
||||||
|
if(AdcInitCnt < 1000)
|
||||||
|
{
|
||||||
|
AdcInitStatus = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//计算ADC采样值并滤波
|
||||||
|
if(AdcDly == 0)
|
||||||
|
{
|
||||||
|
float BatVoltage = 0;
|
||||||
|
AdcDly = 1000;
|
||||||
|
if(AdcInitSta != false)
|
||||||
|
{
|
||||||
|
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
|
||||||
|
DMA_Cmd(M4_DMA1, Disable);
|
||||||
|
calc_adc_val(g_adc_val); /* 计算ADC的平均值 */
|
||||||
|
|
||||||
|
DCMOTOR_DBG_LOG("ADC1_IN1 value %d.\t Temp:%.1fC \r\n", g_adc_val[0u], get_temp((float)g_adc_val[0]*Adc));
|
||||||
|
DCMOTOR_DBG_LOG("ADC2_IN2 value %d.\t Valtage:%.1fV \r\n", g_adc_val[1u], (float)g_adc_val[1]*ADC2VBUS);
|
||||||
|
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 (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_motor_data.current);
|
||||||
|
DMA_Cmd(M4_DMA1, Enable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -86,7 +409,7 @@ void Timer41_Init(uint8_t dir)
|
|||||||
|
|
||||||
|
|
||||||
/* Enable peripheral clock */
|
/* Enable peripheral clock */
|
||||||
PWC_Fcg2PeriphClockCmd(PWC_FCG2_PERIPH_TIM41 | PWC_FCG2_PERIPH_TIM42 | PWC_FCG2_PERIPH_TIM43, Enable);
|
PWC_Fcg2PeriphClockCmd(PWC_FCG2_PERIPH_TIM41, Enable);
|
||||||
|
|
||||||
/* Timer4 CNT : Initialize CNT configuration structure */
|
/* Timer4 CNT : Initialize CNT configuration structure */
|
||||||
stcCntInit.enBufferCmd = Disable;
|
stcCntInit.enBufferCmd = Disable;
|
||||||
@@ -178,10 +501,14 @@ void Timer41_Init(uint8_t dir)
|
|||||||
PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable);
|
PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable);
|
||||||
|
|
||||||
/* Timer4 PWM: Initialize PWM configuration structure */
|
/* Timer4 PWM: Initialize PWM configuration structure */
|
||||||
|
//重载定时器中断
|
||||||
stcPwmInit.enRtIntMaskCmd = Enable;
|
stcPwmInit.enRtIntMaskCmd = Enable;
|
||||||
stcPwmInit.enClkDiv = PwmPlckDiv1;
|
//计数时钟分频
|
||||||
|
stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/
|
||||||
|
//PWM输出极性控制
|
||||||
stcPwmInit.enOutputState = E_PWM_OS; /*输出PWMH信号不改变电平,输出PWML信号反转*/
|
stcPwmInit.enOutputState = E_PWM_OS; /*输出PWMH信号不改变电平,输出PWML信号反转*/
|
||||||
stcPwmInit.enMode = PwmThroughMode;
|
//PWM输出模式
|
||||||
|
stcPwmInit.enMode = PwmThroughMode; /*直通模式*/
|
||||||
TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */
|
TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */
|
||||||
|
|
||||||
/* Clear && Start CNT */
|
/* Clear && Start CNT */
|
||||||
@@ -355,19 +682,19 @@ void dcmotor_init(void)
|
|||||||
stcPortInit.enPinMode = Pin_Mode_Out;
|
stcPortInit.enPinMode = Pin_Mode_Out;
|
||||||
stcPortInit.enPinOType = Pin_OType_Cmos;
|
stcPortInit.enPinOType = Pin_OType_Cmos;
|
||||||
stcPortInit.enPinDrv = Pin_Drv_H;
|
stcPortInit.enPinDrv = Pin_Drv_H;
|
||||||
stcPortInit.enPullUp = Disable;
|
stcPortInit.enPullUp = Enable;
|
||||||
|
|
||||||
PORT_Init(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin, &stcPortInit);
|
PORT_Init(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin, &stcPortInit);
|
||||||
PORT_SetBits(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin);
|
PORT_SetBits(SHUTDOWN1_GPIO_Port, SHUTDOWN1_Pin);
|
||||||
|
|
||||||
PORT_Init(PortA, Pin03, &stcPortInit);
|
// PORT_Init(PortA, Pin03, &stcPortInit);
|
||||||
PORT_SetBits(PortA, Pin03);
|
// PORT_SetBits(PortA, Pin03);
|
||||||
/* SD拉低,关闭输出 */
|
// /* SD拉低,关闭输出 */
|
||||||
|
//
|
||||||
dcmotor_stop(); /* 停止电机 */
|
// dcmotor_stop(); /* 停止电机 */
|
||||||
dcmotor_dir(0); /* 设置正转 */
|
// dcmotor_dir(0); /* 设置正转 */
|
||||||
dcmotor_speed(0); /* 速度设置为0 */
|
// dcmotor_speed(0); /* 速度设置为0 */
|
||||||
dcmotor_start(); /* 开启电机 */
|
// dcmotor_start(); /* 开启电机 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -493,6 +820,8 @@ void dcmotor_speed(uint16_t para)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 电机控制
|
* @brief 电机控制
|
||||||
* @param para: pwm比较值 ,正数电机为正转,负数为反转
|
* @param para: pwm比较值 ,正数电机为正转,负数为反转
|
||||||
|
|||||||
@@ -2,19 +2,37 @@
|
|||||||
#ifndef __DCMOTOR_H
|
#ifndef __DCMOTOR_H
|
||||||
#define __DCMOTOR_H
|
#define __DCMOTOR_H
|
||||||
|
|
||||||
#include "hc32_ddl.h"
|
#define ADC_CH_NUM 3 /* 需要转换的通道数目 */
|
||||||
|
#define ADC_COLL 100 /* 单采集次数 */
|
||||||
|
#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define HC32F170 (0u) //HC32F170JATA
|
||||||
|
#define HC32L170 (1u) //HC32L170JATA
|
||||||
|
#define HC32F460JETA (2u) //HC32F460JETA
|
||||||
|
|
||||||
|
#define MCU HC32F460JETA
|
||||||
|
|
||||||
|
#if(MCU == HC32F460JETA)
|
||||||
|
#include "hc32_ddl.h"
|
||||||
|
|
||||||
#define TIMER4 0
|
#define TIMER4 0
|
||||||
#define TIMER6 1
|
#define TIMER6 1
|
||||||
|
|
||||||
#define TIMER TIMER4
|
#define TIMER TIMER4 //HC32F460单片机PWM输出控制定时器选择
|
||||||
|
#endif
|
||||||
|
|
||||||
// 电机控制参数
|
// 电机控制参数
|
||||||
#define PWM_PERIOD TIM_PERIOD // PWM周期值 (ARR)
|
#define PWM_PERIOD TIM_PERIOD // PWM周期值 (ARR)
|
||||||
#define MAX_SPEED 480 // 最大速度(PWM占空比)
|
#define MAX_SPEED 480 // 最大速度(PWM占空比)
|
||||||
#define ACCEL_STEP 10 // 加速步进值
|
#define ACCEL_STEP 10 // 加速步进值
|
||||||
#define DECEL_STEP 10 // 减速步进值
|
#define DECEL_STEP 10 // 减速步进值
|
||||||
|
<<<<<<< HEAD
|
||||||
#define ACCEL_INTERVAL 10 // 加减速间隔(ms)
|
#define ACCEL_INTERVAL 10 // 加减速间隔(ms)
|
||||||
|
=======
|
||||||
|
#define ACCEL_INTERVAL 2 // 加减速间隔(ms)
|
||||||
|
>>>>>>> Motor_Test
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -43,22 +61,80 @@ typedef enum {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************* 第一部分 电压电流温度采集 ******************************/
|
||||||
|
|
||||||
|
/* 电流计算公式:
|
||||||
|
* I=(最终输出电压-初始参考电压)/(6*0.02)A
|
||||||
|
* ADC值转换为电压值:电压=ADC值*3.3/4096,这里电压单位为V,我们换算成mV,4096/1000=4.096,后面就直接算出为mA
|
||||||
|
* 整合公式可以得出电流 I= (当前ADC值-初始参考ADC值)* (3.3 / 4.096 / 0.12)
|
||||||
|
*/
|
||||||
|
#define ADC2CURT (float)(3.3f / 4.096f / 0.12f)
|
||||||
|
|
||||||
|
/* 电压计算公式:
|
||||||
|
* V_POWER = V_BUS * 25
|
||||||
|
* ADC值转换为电压值:电压=ADC值*3.3/4096
|
||||||
|
* 整合公式可以得出电压V_POWER= ADC值 *(3.3f * 25 / 4096)
|
||||||
|
*/
|
||||||
|
#define ADC2VBUS (float)(3.3f * 25 / 4096)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* 停止引脚操作宏定义
|
/* 停止引脚操作宏定义
|
||||||
* 此引脚控制H桥是否生效以达到开启和关闭电机的效果
|
* 此引脚控制H桥是否生效以达到开启和关闭电机的效果
|
||||||
*/
|
*/
|
||||||
#define SHUTDOWN1_Pin Pin12
|
#define SHUTDOWN1_Pin Pin07
|
||||||
#define SHUTDOWN1_GPIO_Port PortB
|
#define SHUTDOWN1_GPIO_Port PortB
|
||||||
|
|
||||||
//#define SHUTDOWN2_Pin GPIO_PIN_2
|
//#define SHUTDOWN2_Pin GPIO_PIN_2
|
||||||
//#define SHUTDOWN2_GPIO_Port GPIOF
|
//#define SHUTDOWN2_GPIO_Port GPIOF
|
||||||
#define SHUTDOWN_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF口时钟使能 */
|
#define SHUTDOWN_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF口时钟使能 */
|
||||||
|
|
||||||
|
#if(MCU == HC32F460JETA)
|
||||||
/* 电机停止引脚定义 这里默认是接口1 */
|
/* 电机停止引脚定义 这里默认是接口1 */
|
||||||
#define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
|
#define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
|
||||||
#define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
|
#define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
|
||||||
|
#endif
|
||||||
/******************************************************************************************/
|
/******************************************************************************************/
|
||||||
|
|
||||||
|
/* 编码器参数结构体 */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int encode_old; /* 上一次计数值 */
|
||||||
|
int encode_now; /* 当前计数值 */
|
||||||
|
float speed; /* 编码器速度 */
|
||||||
|
} ENCODE_TypeDef;
|
||||||
|
|
||||||
|
extern ENCODE_TypeDef g_encode; /* 编码器参数变量 */
|
||||||
|
|
||||||
|
|
||||||
|
/************************************* 第三部分 编码器测速 ****************************************************/
|
||||||
|
|
||||||
|
#define ROTO_RATIO 44 /* 线数*倍频系数,即11*4=44 */
|
||||||
|
#define REDUCTION_RATIO 30 /* 减速比30:1 */
|
||||||
|
|
||||||
|
/* 电机参数结构体 */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t state; /*电机状态*/
|
||||||
|
float current; /*电机电流*/
|
||||||
|
float volatage; /*电机电压*/
|
||||||
|
float power; /*电机功率*/
|
||||||
|
float speed; /*电机实际速度*/
|
||||||
|
float location; /*电机位置*/
|
||||||
|
int32_t motor_pwm; /*设置比较值大小 */
|
||||||
|
} Motor_TypeDef;
|
||||||
|
|
||||||
|
extern Motor_TypeDef g_motor_data; /*电机参数变量*/
|
||||||
|
|
||||||
|
/*********************************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void dcmotor_init(void); /* 直流有刷电机初始化 */
|
void dcmotor_init(void); /* 直流有刷电机初始化 */
|
||||||
void dcmotor_start(void); /* 开启电机 */
|
void dcmotor_start(void); /* 开启电机 */
|
||||||
void dcmotor_stop(void); /* 关闭电机 */
|
void dcmotor_stop(void); /* 关闭电机 */
|
||||||
@@ -67,13 +143,26 @@ void dcmotor_speed(uint16_t para); /*
|
|||||||
void motor_pwm_set(float para); /* 电机控制 */
|
void motor_pwm_set(float para); /* 电机控制 */
|
||||||
|
|
||||||
|
|
||||||
|
float get_temp(uint16_t para);
|
||||||
|
void AdcLoopHander(void);
|
||||||
|
void Adc1mSRoutine(void);
|
||||||
|
void Adc_Init(void);
|
||||||
|
void calc_adc_val(uint16_t * p);
|
||||||
|
|
||||||
|
void Encoder (void);
|
||||||
|
|
||||||
|
//外部调用接口函数
|
||||||
MotorDirection Motor_GetDirection(void);/* 获取电机转动方向 */
|
MotorDirection Motor_GetDirection(void);/* 获取电机转动方向 */
|
||||||
void Motor_Control(MotorCommand cmd); /* 电机控制 */
|
void Motor_Control(MotorCommand cmd); /* 电机控制 */
|
||||||
void Dcmotor1msRoutine(void);
|
void Dcmotor1msRoutine(void);
|
||||||
void DcmotorLoopHandler(void);
|
void DcmotorLoopHandler(void);
|
||||||
|
|
||||||
|
float get_current(void); /* 获取工作电流 */
|
||||||
|
float get_volatage(void); /* 获取工作电压 */
|
||||||
|
float get_Temperature(void); /* 获取工作温度 */
|
||||||
|
float get_speed(void); /* 获取电机转速 */
|
||||||
|
float get_location(void); /* 获取电机位置 */
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,12 @@
|
|||||||
|
|
||||||
/*模块启用与关闭*/
|
/*模块启用与关闭*/
|
||||||
#define USE_DEBUG 1 //DEBUG开关,0、关闭,1、启用
|
#define USE_DEBUG 1 //DEBUG开关,0、关闭,1、启用
|
||||||
#define USE_AD 0 //AD获取选择,0、关闭,1、启用
|
#define USE_AD 1 //AD获取选择,0、关闭,1、启用
|
||||||
#define USE_WDT 0 //看门狗选择,0、关闭,1启用
|
#define USE_WDT 0 //看门狗选择,0、关闭,1启用
|
||||||
#define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用
|
#define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用
|
||||||
#define USE_RTC 0 //RTC时钟开关,0、关闭,1、开启
|
#define USE_RTC 0 //RTC时钟开关,0、关闭,1、开启
|
||||||
#define USE_LPTIM0 0 //LPTIM0开关,0、关闭,1、开启
|
#define USE_LPTIM0 0 //LPTIM0开关,0、关闭,1、开启
|
||||||
#define USE_DMA 0 //DMA开关,0、关闭,1、开启
|
#define USE_DMA 1 //DMA开关,0、关闭,1、开启
|
||||||
#define USE_RS485 0 //RS485开关,0、关闭,1、启用
|
#define USE_RS485 0 //RS485开关,0、关闭,1、启用
|
||||||
#define USE_I2C1 0 //I2C1开关,0、关闭,1、启用
|
#define USE_I2C1 0 //I2C1开关,0、关闭,1、启用
|
||||||
#define USE_SPI1 0 //SPI1开关,0、关闭,1、启用
|
#define USE_SPI1 0 //SPI1开关,0、关闭,1、启用
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "CS1237_RIGHTUP.h"
|
#include "CS1237_RIGHTUP.h"
|
||||||
#include "CS1237_RIGHTLOW.h"
|
#include "CS1237_RIGHTLOW.h"
|
||||||
|
|
||||||
|
#include "dc_motor.h"
|
||||||
|
|
||||||
#define SPI_MASTER_MODE
|
#define SPI_MASTER_MODE
|
||||||
#define SPI3_MASTER_MODE
|
#define SPI3_MASTER_MODE
|
||||||
@@ -16,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)
|
||||||
{
|
{
|
||||||
@@ -1165,15 +1166,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);
|
||||||
@@ -1212,12 +1213,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;
|
||||||
@@ -1230,7 +1231,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;
|
||||||
|
|
||||||
@@ -1362,9 +1363,9 @@ void BSP_Init(void)
|
|||||||
//SdioInit();
|
//SdioInit();
|
||||||
//Spi_Config();
|
//Spi_Config();
|
||||||
// Spi3_Config();
|
// Spi3_Config();
|
||||||
|
dcmotor_init();
|
||||||
//Adc1_Config();
|
Adc1_Config();
|
||||||
//Dma_Config();
|
Dma_Config();
|
||||||
//FeedDog();
|
//FeedDog();
|
||||||
|
|
||||||
SysTick_Init(1000u);
|
SysTick_Init(1000u);
|
||||||
|
|||||||
@@ -833,6 +833,7 @@ int main(void)
|
|||||||
#endif
|
#endif
|
||||||
ReadLoopHandler();
|
ReadLoopHandler();
|
||||||
DcmotorLoopHandler();
|
DcmotorLoopHandler();
|
||||||
|
AdcLoopHander();
|
||||||
AppLoopHandler();
|
AppLoopHandler();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -853,6 +854,7 @@ void SysTick_IrqHandler(void)
|
|||||||
RIGHTUP_CS12371mSRoutine();
|
RIGHTUP_CS12371mSRoutine();
|
||||||
RIGHTLOW_CS12371mSRoutine();
|
RIGHTLOW_CS12371mSRoutine();
|
||||||
Dcmotor1msRoutine();
|
Dcmotor1msRoutine();
|
||||||
|
Adc1mSRoutine();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************************
|
/*****************************************************************************************
|
||||||
@@ -875,5 +877,6 @@ void RtcPeriod_IrqCallback(void)
|
|||||||
|
|
||||||
void ADC_DMA_CallBack(void)
|
void ADC_DMA_CallBack(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user