代码拉取完成,页面将自动刷新
这个工程修改自 https://gitee.com/qaprompt/foc-tutorial/tree/main/FOC-407-Demo fork from: https://gitee.com/wojialaomuzhu/foc-tutorial 环境: 使用HAL库编程,硬件平台使用Simple Driver SE 芯片资源使用: PWM: 中央对齐模式2 计数器交替地向上和向下计数。输出比较中断标志位,只在计数器向上计数时被设置 使用PWM模式1,向上计数 CNT<CCR为有效电平,有效电平为高。 编码器: 采用ABZ正交增量编码器 每次上电需要做电气角度校准 利用Z轴每圈做一次清零 电流采样: 电流采样使用单次采样,DMA+中断 在定时器1通道4中断中触发ADC采样 控制流程: 定时器1通道4触发比较中断,此时所有桥臂的下MOS管打开,进行一次ADC采样. ADC采样完成触发DMA中断,在DMA中完成FOC控制 FOC控制流程:(FOC.c) 1.获取BC两相电流,求出A相电流 2.获取当前电气角度。 3.通过Clarke变换和Park变换求出实际电流 IQ和ID 4.通过与目标IQ ID对比和PID计算,得出要输出的UQ UD 5.将UQ UD做Park反变化得出Uα和Uβ 6.将U阿尔法和Uβ送入SVPWM生成模块。 SVPWM控制流程:(Svpwm.c.c) 1.获取Uα和Uβ 2.通过U阿尔法和Uβ计算当前所在扇区 4.使用7段式PWM计算每个矢量的作用时常 5.通过矢量作用时长计算出定时器的高电平时间 6.通过定时器每个高电平时间计算出每个通道的CCR值 7.挑选出CCR最大值送给通道4,准备下一次定时器中断 定时器比较中断: 打开ADC进行一次AD采样 DMA中断: 读取AD数据进行FOC控制 编码器Z轴中断: 校准角度值 文件介绍: 所有文件均放置在User目录下 APP:应用程序总入口,实现初始化流程管理,循环执行管理。 Function:放置功能程序,目前没有实现,如放置T型加减速。 MCUDriver :放置芯片外设代码,如SPI,GPIO,TIM,ADC Framework:放置代码库,将驱动代码和硬件平台剥离出来。 PeripheralsDriver:放置驱动程序,将硬件平台代码和代码库结合起来,实现具体功能,即(MCUDriver + Framework) RTT :使用Segger RTT打印调试。 已知BUG 1.电流放大倍数计算值与实际值不符,因此程序中设置目标电流10,实际只有0.5A左右,但不影响调试。 2.无法通过SPI与DRV8301通讯,看了数据手册也没有调试通过,哪位老哥有经验望分享。 3.没有做刹车处理 声明: 1.受硬件平台影响,代码可能不能直接运行,但可以参考。 2.先调试SVPWM再调试电流采样,再闭环,SVPWM即可实现电机旋转。 3.闭环先调电流环再调速度环 4.电流环先调试ID再调试IQ 6.有疑问的地方欢迎骚扰,有错误的地方欢迎批评。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。