STM32电机控制【重量级库函数】解析

更新时间:2023-06-15 15:41:15 阅读: 评论:0

STM32电机控制重量级库函数解析
Foc_svpwm.c
归属组:arithmetic
描述:PWM配置和SVPWM计算
函数:
函数
功能描述
输入参数
输出参数
调用函数
在何处被调用
SvpwmLMotorConfig(void)
对左电机用到外设进行配置
foc_port.c/
FOCPortPeripheralConfig()
SvpwmRMotorConfig(void)
对右电机用到外设进行配置
foc_port.c/
FOCPortPeripheralConfig()
SvpwmTimerSynchConfig(void)
双电机pwm控制时钟源Timer1我慢8同步,配置TIM1TIM8TIM5进行时钟同步
foc_port.c/
FOCPortInit()
SvpwmCalcDutyCycles(STATOR_VOLTAGE,u8)
ValphaVbeta输入生成SVPWM波形
typedef struct  //Valpha  Vbeta
{
    s16 Valfa;
    s16 Vbeta;       
}STATOR_VOLTAGE;
U8 mc_ch //电机通道,左电机 or 右电机
foc_encoder.c/
FOCEncoderStartUp(u8 mc_ch)
foc_port.c/
FOCPortArithmeticModel(u8 mc_ch)
Foc_port.c
归属组:arithmetic
描述:FOC配置和算法接口模块
函数:
pxo
函数
功能描述
输入参数
输出参数
调用函数
在何处被调用
FOCPortPeripheralConfig(void)
对电机用到外设进行配置(定时器、ADC)
SvpwmLMotorConfig()
SvpwmRMotorConfig()
InjectADCConfig()
InjectADCRegularDMAConfig()
Foc_port.c/
FOCPortInit()
FOCPortInit(void)
电机控制配置,外设和变量的初始化
FOCCurrentPIDInit()
FOCPortPeripheralConfig()
InjectADCReadEn()
SvpwmTimerSynchConfig()
InjectADCPhaCaliPend()
SysDetectErrLED()
App_main.c/
App_TaskStart()
FOCPortSwitchMotorCtrlChannel(void)
切换电机控制通道,T1溢出中断中被调用,切换FOC电机控制通道
InjectADCSwitchADCTriSource()
InjectADCSwitchADCSampleCH()
Stm32f10x_it.c/
TIM1_UP_IRQHandler
FOCPort_CalcCurrentDerr(u8 mc_ch)
计算电流矢量Iq的加速度,其实就是计算在一定间隔时间内的差值
U8 mc_ch //电机通道,左电机 or 右电机
Foc_port.c/
FOCPortArithmeticModel(u8 mc_ch)
FOCPortArithmeticModel(u8 mc_ch)
FOC模型函数的调用,clark--park--Id/Iq控制--park--svpwm
U8 mc_ch //电机通道,左电机 or 右电机
InjectADCGetPhaCurrValues()
FOCCoordTransClark()
FOCCoordTransPark()
FOCCurrentPIDArithmetic()
FOCCoordTransRevParkCircleLimitation()
FOCCoordTransRevPark()
CALC_SVPWM()
FOCPort_CalcCurrentDerr()
Stm32f10x_it.c/
ADC1_2_IRQHandler()
ADC转换结束中被调用
2013考研复试分数线
Foc_inject_adc.c
归属组:arithmetic
描述:三相电流采样ADC配置和注入式触发采样等的处理函数
函数:
tour de france迪亚哥下载
函数
功能描述
输入参数
输出参数
调用函数
整理英文
在何处被调用
InjectADC_PhaCurrentCaliEn(void)
关闭pwm输出,使能相电流校准开关
Foc_inject_adc.c/
InjectADCPhaCaliPend()
InjectADCReadEn(FunctionalState cmd)
使能三相注入式采样电流读取
Cmd ENABLE or DISALBE
Foc_port.c/
FOCPortInit()
Bool InjectADCPhaCaliPend(u8 sw)
相电流ADC初始值校准
U8 sw
bool
InjectADC_PhaCurrentCaliEn()
Foc_port.c/
FOCPortInit()
InjectADC_ConvConfig(void)
三相注入式ADC配置,配置注入式ADC的寄存器
Foc_inject_adc.c/
InjectADC_PhaCurrReadCali()
InjectADC_PhaCurrReadCali()
三相ADC读取值校准
InjectADC_ConvConfig(void)
Foc_inject_adc.c/
InjectADCConfig()
InjectADCRegularDMAConfig()
常规ADC通道DMA配置,DMA寄存器的配置
Foc_port.c/
FOCPortPeripheralConfig()
InjectADCConfig()
注入式ADc的配置
InjectADC_PhaCurrReadCali()
Foc_port.c/
FOCPortPeripheralConfig()
InjectADCSwitchADCTriSource(u8 mc_ch)
切换左右电机ADC注入式采样的时钟源
u8 mc_ch //电机通道,左电机 or 右电机
foc_port.c/
FOCPortSwitchMotorCtrlChannel()
InjectADCSwitchADCSampleCH(u8 mc_ch)
切换左右电机ADC注入式采用通道
u8 mc_ch //电机通道,左电机 or 右电机
foc_port.c/
FOCPortSwitchMotorCtrlChannel()
InjectADCGetPhaZeroOfft
(u8 mc_ch , PHASE_OFFSET *pha_zero)
获取相电流初始值
u8 mc_ch //电机通道
typedef struct  //相电流
{
    s32 a;
    s32 b;
    s32 c;
}PHASE_OFFSET;
stm32f10x_it.c/
ADC1_2_IRQHandler()
ADC转换结束中断中被调用,并且是电机状态:MotorCtrlState = CALICURR
PHASE_CURRENT InjectADCGetPhaCurrValues(u8 mc_ch)
三相电流值计算出矢量电流IaIb
u8 mc_ch //电机通道,左电机 or 右电机
typedef struct  //相电流
{
    s32 a;
    s32 b;
    s32 c;
}PHASE_OFFSET;
foc_port.c/
FOCPortArithmeticModel(u8 mc_ch)
foc_encoder.c/
FOCEncoderStartUp (u8 mc_ch)
stm32f10x_it.c/
ADC1_2_IRQHandler (u8 mc_ch)
ADC转换结束中断中被调用,而且是在电机状态处于IDLE时被调用
InjectADCEnableADCTri(void)
注入式ADC采样使能
stm32f10x_it.c/
TIM1_UP_IRQHandler()
T1上溢中断
InjectADCDisableADCTri(void)
关闭ADC触发源出发采样
stm32f10x_it.c/
ADC1_2_IRQHandler ()
ADC转换结束中断
foc_coord_transform.c
归属组:arithmetic
描述:FOC坐标变换,该文件内包含正弦表、最大调制表
    #define  SIN_COS_TABLE  {……}
    static const s16  CoordSinCosTable[256] = SIN_COS_TABLE;
函数:
函数
功能描述
输入参数
输出参数
调用函数
在何处被调用
STATOR_CURRENT FOCCoordTransClark(PHASE_CURRENT Curr_Input)
Clark变换,定子电流IaIb转换成IalphaIβ
typedef struct//定子相电流
{
    s16 Ia;
    s16 Ib;       
}PHASE_CURRENT;
typedef struct
史东鹏//α、β电流
{
    s16 Ialfa;
    s16 Ibeta;       
}STATOR_CURRENT;
Foc_port.c/
FOCPortArithmeticModel () (ADC转换完成被调用)
Foc_encoder.c/
FOCEncoderStartUp () (在电机启动对准时被调用)
ROTOR_CURRENT FOCCoordTransPark(STATOR_CURRENT Curr_Input, s16 Theta)
Park变换,Iα和Iβ变换成IdIq
s16 Theta //转子角度
typedef struct
{
bitch是什么意思    s16 Ialfa;
    s16 Ibeta;       
}STATOR_CURRENT;
typedef struct
{
    s16 Iq;
    s16 Id;       
}ROTOR_CURRENT;
FOCCoordTransRevParkCircleLimitation
(u8 mc_ch)
输出调制比限幅的函数
u8 mc_ch //电机通道
STATOR_VOLTAGE FOCCoordTransRevPark
(ROTOR_VOLTAGE Volt_Input)
park变换,该函数理应有电机角度作为输入参数,但由于该函数在调用时处在正park变换之后,正park变换已经将转子角度计算在结构体中,所以在这个函数中就不用计算了。
typedef struct
{
    s16 Vq;
    s16 Vd;       
}ROTOR_ VOLTAGE;
typedef struct
{
    s16 Valfa;
    s16 Vbeta;       
}STATOR_ VOLTAGE;
TRIANGLE_COMPONENTS CoordTransTrigFunctions(s16 hAngle)
角度Theta转换为正余弦函数
s16 hAngle
typedef struct
{
    s16 tcos;
    s16 tsin;
}TRIANGLE_COMPONENTS;
foc_coord_transform.c/
FOCCoordTransPark()
在正park变换中计算sin(theta)cos(theta)
foc_pid_regulators.c
归属组:arithmetic
描述:力矩和磁通的PID函数
函数:
函数皇家少儿英语
功能描述
输入参数
输出参数
调用函数
在何处被调用
FOCCurrentPIDInit
(PID_Struct_t *PID_Torque,
PID_Struct_t *PID_Flux)
初始化矢量电流力矩和磁通的PID初始值
PID_Struct_t *PID_Torque
PID_Struct_t *PID_Flux
PID力矩和励磁参数结构体
foc_port.c/
FOCPortInit ()
s16
FOCCurrentPIDArithmetic
(s16 hReference,
s16 hPrentFeedback,
PID_Struct_t *PID_Struct)
矢量电流力矩和磁通的PID计算
s16 hReference //参考值
s16 hPrentFeedback //实际值
PID_Struct_t *PID_Struct//PID参数结构体
PID输出值
Foc_port.c/
帕龙
FOCPortArithmeticModel () (ADC转换完成被调用)
Foc_encoder.c/
FOCEncoderStartUp () (在电机启动对准时被调用)
foc_encoder.c
归属组:arithmetic
描述:正交编码器的配置
函数:
函数
功能描述
输入参数
输出参数
调用函数
在何处被调用
FOCEncoderConfig (void)
编码器配置,涉及到的GPIO、定时器等配置
app_main.c/
App_TaskStart(void *p_arg)
开始任务,环境初始化
s16 FOCEncoderGetElectricalAngle(u8 mc_ch)
返回电机电角度
u8 mc_ch //电机通道
电机电角度:
0 -> 0 degrees,              *S16_MAX-> 180 degrees,          *S16_MIN-> -180 degrees
Foc_port.c/
FOCPortArithmeticModel ()
(ADC转换完成被调用)
MotorGetInitABSPos(u8 mc_ch)
获取电机初始绝对值
u8 mc_ch //电机通道
FOCEncoderRet(u8 mc_ch)
在对准后写入对应的编码器初始线数
u8 mc_ch //电机通道
foc_encoder.c/
FOCEncoderStartUp(u8 mc_ch)
电机启动时调用的
s32 FOCEncoder_CalcRotSpeed(u8 mc_ch)
速度检测函数
u8 mc_ch //电机通道
返回当前转子速度
foc_encoder.c/
FOCEncoderCalcAverSpeed(u8 mc_ch)
s32 FOCEncoderCalcAverSpeed(u8 mc_ch)
计算转子平均机械速度,其实就是一个取平均的函数,用上一个函数取和求平均
u8 mc_ch //电机通道
返回转子机械角速度
FOCEncoder_CalcRotSpeed(mc_ch)
该函数返回转子速度
motor_control.c/
MotorCtrl_ManageSpeedPID(u8 mc_ch)
在速度环中调用
FOCEncoderStartUp(u8 mc_ch)
电机初始对准,也就是在启动时才会调用,还包含一个FOC算法。
u8 mc_ch //电机通道
stm32f10x_it.c/
ADC1_2_IRQHandler()
ADC转换结束中断,当电机状态MotorCtrlState=START时才会调用
FOCEncoderStartUp(u8 mc_ch)
void TIM2_IRQHandler(void)
void TIM4_IRQHandler(void)
左右电机编码器转满一圈的溢出中断,编码器用到的定时器是TIMER2TIMER4
typedef struct
{
    u8 ch;                    //電機通道
    s8 dir;                    //電機轉向
    MC_STYLE mode;    //電機狀態typedef enum {CURRENT_STYLE=1,SPEED_STYLE , FREE_STYLE , BREAK_STYLE}MC_STYLE
    TIM_TypeDef *timer;            //計時器定義
    TIM_TypeDef *encoder_timer;
    u16 pwmmode;                //PWM模式
    u16 cc4pwmmode;   
}MC_INFO;
MC_INFO  MotorCtrlInfo[2] = {{L_MOTOR , 1 , FREE_STYLE , TIM1 , TIM4 , TIM_OCMode_PWM1 , TIM_OCMode_PWM2}, 
                        {R_MOTOR , -1, FREE_STYLE , TIM8 , TIM2 , TIM_OCMode_PWM1 , TIM_OCMode_PWM2}};

本文发布于:2023-06-15 15:41:15,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/961239.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:PPTC参数
标签:电机   配置   调用
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图