STM32电机控制重量级库函数解析
更新时间:2023-10-21 08:20:01 阅读量: 综合文库 文档下载
STM32电机控制重量级库函数解析
Foc_svpwm.c
归属组:arithmetic
描述:PWM配置和SVPWM计算 函数: 函数 SvpwmLMotorConfig(void) SvpwmRMotorConfig(void) SvpwmTimerSynchConfig(void) 功能描述 对左电机用到外设进行配置 对右电机用到外设进行配置 双电机pwm控制时钟源Timer1、8同步,配置TIM1、TIM8、TIM5进行时钟同步 又Valpha、Vbeta输入生成SVPWM波形 输入参数 无 无 无 输出参数 无 无 无 调用函数 无 无 无 在何处被调用 foc_port.c/ FOCPortPeripheralConfig() foc_port.c/ FOCPortPeripheralConfig() foc_port.c/ FOCPortInit() foc_encoder.c/ FOCEncoderStartUp(u8 mc_ch) foc_port.c/ FOCPortArithmeticModel(u8 mc_ch) SvpwmCalcDutyCycles(STATOR_VOLTAGE,u8) typedef struct //Valpha Vbeta { s16 Valfa; s16 Vbeta; }STATOR_VOLTAGE; U8 mc_ch //电机通道,左电机 or 右电机 无 无 Foc_port.c
归属组:arithmetic
描述:FOC配置和算法接口模块 函数: 函数 FOCPortPeripheralConfig(void) 功能描述 对电机用到外设进行配置(定时器、ADC) 输入参数 无 输出参数 无 调用函数 SvpwmLMotorConfig() SvpwmRMotorConfig() InjectADCConfig() InjectADCRegularDMAConfig() FOCCurrentPIDInit() FOCPortPeripheralConfig() InjectADCReadEn() SvpwmTimerSynchConfig() InjectADCPhaseCaliPend() 在何处被调用 Foc_port.c/ FOCPortInit() FOCPortInit(void) 电机控制配置,外设和变量的初始化 无 无 App_main.c/ App_TaskStart() SysDetectErrLED() FOCPortSwitchMotorCtrlChannel(void) 切换电机控制通道,在T1溢出中断中被调用,切换FOC电机控制通道 计算电流矢量Iq的加速度,其实就是计算在一定间隔时间内的差值 FOC模型函数的调用,clark--park--Id/Iq控制--逆park--svpwm 无 无 InjectADCSwitchADCTriSource() InjectADCSwitchADCSampleCH() 无 Stm32f10x_it.c/ TIM1_UP_IRQHandler Foc_port.c/ FOCPortArithmeticModel(u8 mc_ch) Stm32f10x_it.c/ ADC1_2_IRQHandler() 在ADC转换结束中被调用 FOCPort_CalcCurrentDerr(u8 mc_ch) U8 mc_ch //电机通道,左电机 or 右电机 无 FOCPortArithmeticModel(u8 mc_ch) U8 mc_ch //电机通道,左电机 or 右电机 无 InjectADCGetPhaseCurrValues() FOCCoordTransClark() FOCCoordTransPark() FOCCurrentPIDArithmetic() FOCCoordTransRevParkCircleLimitation() FOCCoordTransRevPark() CALC_SVPWM() FOCPort_CalcCurrentDerr() Foc_inject_adc.c 归属组:arithmetic
描述:三相电流采样ADC配置和注入式触发采样等的处理函数 函数: 函数 InjectADC_PhaseCurrentCaliEn(void) InjectADCReadEn(FunctionalState cmd) Bool InjectADCPhaseCaliPend(u8 sw) InjectADC_ConvConfig(void) InjectADC_PhaseCurrReadCali() InjectADCRegularDMAConfig() InjectADCConfig() InjectADCSwitchADCTriSource(u8 mc_ch) InjectADCSwitchADCSampleCH(u8 mc_ch) 功能描述 关闭pwm输出,使能相电流校准开关 使能三相注入式采样电流读取 相电流ADC初始值校准 三相注入式ADC配置,配置注入式ADC的寄存器 三相ADC读取值校准 常规ADC通道DMA配置,DMA寄存器的配置 注入式ADc的配置 切换左右电机ADC注入式采样的时钟源 切换左右电机ADC注入式采用通道 输入参数 无 Cmd (ENABLE or DISALBE) U8 sw 无 无 无 无 u8 mc_ch //电机通道,左电机 or 右电机 u8 mc_ch //电机通道,左电机 or 右电机 输出参数 无 无 bool 无 无 无 无 无 无 调用函数 无 无 InjectADC_PhaseCurrentCaliEn() 无 InjectADC_ConvConfig(void) 无 InjectADC_PhaseCurrReadCali() 无 无 在何处被调用 Foc_inject_adc.c/ InjectADCPhaseCaliPend() Foc_port.c/ FOCPortInit() Foc_port.c/ FOCPortInit() Foc_inject_adc.c/ InjectADC_PhaseCurrReadCali() Foc_inject_adc.c/ InjectADCConfig() Foc_port.c/ FOCPortPeripheralConfig() Foc_port.c/ FOCPortPeripheralConfig() foc_port.c/ FOCPortSwitchMotorCtrlChannel() foc_port.c/ FOCPortSwitchMotorCtrlChannel() InjectADCGetPhaseZeroOffset (u8 mc_ch , PHASE_OFFSET *phase_zero) 获取相电流初始值 PHASE_CURRENT InjectADCGetPhaseCurrValues(u8 mc_ch) 三相电流值计算出矢量电流Ia、Ib u8 mc_ch //电机通道 typedef struct //相电流 { s32 a; s32 b; s32 c; }PHASE_OFFSET; u8 mc_ch //电机通道,左电机 or 右电机 无 无 stm32f10x_it.c/ ADC1_2_IRQHandler() 在ADC转换结束中断中被调用,并且是电机状态:MotorCtrlState = CALICURR时 typedef struct //相电流 { s32 a; s32 b; s32 c; }PHASE_OFFSET; 无 InjectADCEnableADCTri(void) 注入式ADC采样使能 无 无 无 InjectADCDisableADCTri(void) 关闭ADC触发源出发采样 无 无 无 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时被调用 stm32f10x_it.c/ TIM1_UP_IRQHandler() T1上溢中断 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变换,定子电流Ia、Ib转换成Ialpha和Iβ 输入参数 typedef struct//定子相电流 { s16 Ia; s16 Ib; }PHASE_CURRENT; 输出参数 typedef struct //α、β电流 { s16 Ialfa; s16 Ibeta; }STATOR_CURRENT; typedef struct { s16 Iq; 调用函数 无 Foc_port.c/ FOCPortArithmeticModel () (在ADC转换完成被调用) Foc_encoder.c/ FOCEncoderStartUp () (在电机启动对准时被调用) 在何处被调用 ROTOR_CURRENT FOCCoordTransPark(STATOR_CURRENT Curr_Input, s16 Theta) Park变换,Iα和Iβ变换成Id和Iq s16 Theta //转子角度 typedef struct { 无 FOCCoordTransRevParkCircleLimitation (u8 mc_ch) STATOR_VOLTAGE FOCCoordTransRevPark (ROTOR_VOLTAGE Volt_Input) 输出调制比限幅的函数 逆park变换,该函数理应有电机角度作为输入参数,但由于该函数在调用时处在正park变换之后,正park变换已经将转子角度计算在结构体中,所以在这个函数中就不用计算了。 s16 Ialfa; s16 Ibeta; }STATOR_CURRENT; u8 mc_ch //电机通道 typedef struct { s16 Vq; s16 Vd; }ROTOR_ VOLTAGE; s16 hAngle s16 Id; }ROTOR_CURRENT; 无 typedef struct { s16 Valfa; s16 Vbeta; }STATOR_ VOLTAGE; typedef struct { s16 tcos; s16 tsin; }TRIANGLE_COMPONENTS; 无 无 TRIANGLE_COMPONENTS CoordTransTrigFunctions(s16 hAngle) 角度Theta转换为正余弦函数 无 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) s16 FOCCurrentPIDArithmetic (s16 hReference, s16 hPresentFeedback, PID_Struct_t *PID_Struct) 功能描述 初始化矢量电流力矩和磁通的PID初始值 矢量电流力矩和磁通的PID计算 输入参数 PID_Struct_t *PID_Torque PID_Struct_t *PID_Flux PID力矩和励磁参数结构体 s16 hReference //参考值 s16 hPresentFeedback //实际值 PID_Struct_t *PID_Struct//PID参数结构体 输出参数 无 调用函数 无 在何处被调用 foc_port.c/ FOCPortInit () Foc_port.c/ FOCPortArithmeticModel () (在ADC转换完成被调用) Foc_encoder.c/ FOCEncoderStartUp () (在电机启动对准时被调用) PID输出值 无 foc_encoder.c
归属组:arithmetic
描述:正交编码器的配置 函数: 函数 功能描述 输入参数 输出参数 调用函数 在何处被调用 FOCEncoderConfig (void) 编码器配置,涉及到的GPIO、定时器等配置 返回电机电角度 无 无 无 s16 FOCEncoderGetElectricalAngle(u8 mc_ch) u8 mc_ch //电机通道 MotorGetInitABSPos(u8 mc_ch) FOCEncoderReset(u8 mc_ch) 获取电机初始绝对值 在对准后写入对应的编码器初始线数 速度检测函数 计算转子平均机械速度,其实就是一个取平均的函数,用上一个函数取和求平均 电机初始对准,也就是在启动时才会调用,还包含一个FOC算法。 u8 mc_ch //电机通道 u8 mc_ch //电机通道 电机电角度: 0 -> 0 degrees, *S16_MAX-> 180 degrees, *S16_MIN-> -180 degrees 无 无 无 无 无 app_main.c/ App_TaskStart(void *p_arg) 开始任务,环境初始化 Foc_port.c/ FOCPortArithmeticModel () (在ADC转换完成被调用) 无 foc_encoder.c/ FOCEncoderStartUp(u8 mc_ch) 电机启动时调用的 foc_encoder.c/ FOCEncoderCalcAverSpeed(u8 mc_ch) motor_control.c/ MotorCtrl_ManageSpeedPID(u8 mc_ch) 在速度环中调用 stm32f10x_it.c/ ADC1_2_IRQHandler() ADC转换结束中断,当电机状态MotorCtrlState=START时才会调用 FOCEncoderStartUp(u8 mc_ch) s32 FOCEncoder_CalcRotSpeed(u8 mc_ch) s32 FOCEncoderCalcAverSpeed(u8 mc_ch) u8 mc_ch //电机通道 u8 mc_ch //电机通道 返回当前转子速度 返回转子机械角速度 无 FOCEncoder_CalcRotSpeed(mc_ch) 该函数返回转子速度 无 FOCEncoderStartUp(u8 mc_ch) u8 mc_ch //电机通道 无 void TIM2_IRQHandler(void) void TIM4_IRQHandler(void) 左右电机编码器转满一圈的溢出中断,编码器用到的定时器是TIMER2和TIMER4。 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}};
正在阅读:
STM32电机控制重量级库函数解析10-21
大学心理健康教育12年试题12-08
《除数是两位数的除法》整理复习03-11
为母爱唱赞歌作文400字07-10
ANSYS 经典培训第二章04-21
《数学发展简史》10-26
好久不见作文800字06-24
遗憾是一种淡淡的美丽02-14
医院2016年度内部控制工作方案07-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 重量级
- 函数
- 电机
- 解析
- 控制
- STM32
- 2015年四升五暑假考级班讲义
- 物业管理英语口语教学大纲
- 2017年干部选拔任用工作报告
- 毕业论文模版 - 图文
- 理论课教学大纲-药学导论
- 2:8灰土回填方案
- 外研版英语七年级下册M11--12练习题
- 关于大学生贫困问题调查报告 - 图文
- 基本礼仪站姿
- unit9 public health
- 单片机原理及应用 - 第二版课后习题完整答案
- 新视野大学英语网络测试题Unit 6 test6
- 生物统计学作业和练习答案
- 2018新疆自治区斋月期间维稳工作总结
- 人力资源部部长竞聘演讲稿
- EViews 计量经济学实验报告
- 福建省招标信息发布管理办法(闽发改政策1147号)
- 20110920民事诉讼法案例题 练习
- 通风设施管理考核办法
- 海洋生态学考试复习资料(可打印) - 图文