ODrive移植keil(四)—— PWM触发ADC采样



ODrive、VESC和SimpleFOC 教程链接汇总:请点击

说明

电机驱动器中,通过PWM触发ADC,保证在下臂MOS打开的时候采样电流,这本是个难度极高的技术活。随着各芯片厂家的技术迭代,现在几乎所有单片机都有这个功能,可以说已经烂大街了。即便如此,在具体的电机驱动器程序中,PWM触发ADC采样仍然很容易出问题,主要是配置复杂。

一、PWM

  • 官方代码中,高级定时器TIM1和TIM8分别输出互补PWM信号,驱动两路电机,本次移植,只移植了M0,所以我们只讲TIM1的配置。
  • 电流采样,需要事先校准,一般在上电初始化的时候。
  • ODrive的校准就与众不同,它设置在了下臂PWM为低电平(MOS关闭)时。

1.1、基本配置

在这里插入图片描述


上面的配置,
1、PWM频率是24KHz,
2、更新中断频率是48KHz,但是RepetitionCounter = 2,所以进入更新中断的频率是48/(1+2)=16KHz,


PWM波形如下图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.2、观察中断

在中断函数中设置一个脉冲,由GPIO8输出,下图:
在这里插入图片描述
在这里插入图片描述

1.3、电流变换频率

进入中断,其中一半的次数是电流变换,另一半的次数是校准,所以电流变换频率是8KHz,下图:

在这里插入图片描述

在这里插入图片描述

1.4、校准频率

8KH在,下图:

在这里插入图片描述

在这里插入图片描述



TIM_CounterMode_CenterAligned3,TIM_OCMode_PWM2,有没有想过为什么会这样配置,
正常我们会使用 TIM_CounterMode_CenterAligned1,TIM_OCMode_PWM1,但是这样的配置会在下臂关闭的时候更新中断,
而CenterAligned3/PWM2的配置刚好可以在下臂打开的时候更新中断,
通过这个地方,可以想象最初的ODrive很可能在更新中断中只做电流变换,没有校准,不是现在的样子。

1.5、control_loop_cb()

官方代码中,进入电流变换所属的中断后触发软件中断,然后在软件中断中执行大部分功能,下图:

在这里插入图片描述

本次移植,没有使用软件中断,用control_loop_cb()函数 代替软件中断后执行的函数,
当前例程不涉及到这部分,所以不再细说。

二、ADC采样

ODrive同时使用了ADC1/ADC2/ADC3,
在官方代码中:
ADC1的规则组采样ADC0----ADC16,上电初始化时软件触发后一直DMA后台转换,
ADC1的注入组采样电源电压,由TIM1更新触发
ADC2的规则组采样M1的B相,由TIM8更新触发
ADC2的注入组采样M0的B相,由TIM1更新触发
ADC3的规则组采样M1的C相,由TIM8更新触发
ADC3的注入组采样M0的C相,由TIM1更新触发

2.1、AD值错位问题

ADC1多通道规则转换时,如果使用DMA方式,经常会发生AD值错位的现象,比如第一个AD值的高字节放入的是低字节的数据,而低字节是第二个AD值的高字节数据,以此类推,转换值全部失效。

《SimpleFOC移植STM32F405RGT6》的时候,ADC_SoftwareStartConv 方式会发生了AD值错位现象,用DMA中断的方式解决了。

这次移植和上次一样的方法,但又发生了错位。最终用TIM2更新触发的方式解决了。
在这里插入图片描述

- ADC以DMA的方式转换,代码单独执行这个操作是没问题,但在初始化阶段随着片内外设配置的增加,或者代码执行顺序的变换,就会发生错位。这个问题十年前我就遇到了,当时只是很不解,见得多了也就习惯了。网上找到过很多解释错位原因以及改正办法,但从来都没有彻底解决过这个问题,此次移植又遇到了这个问题,曾经的解决办法测试一遍后都失效了,最后发现用TIM2更新触发的方式不再错位。 - 看ODrive官方代码,就是用最基本的上电后软件触发转换,这正是我想要的方案,但是无论我怎么调整配置都会错位。我觉得老外肯定知道这个问题,并且也知道怎么避免这个问题。 - 如果单片机是我们国产的,直接问厂家,是不是就很容易解决了。

2.2、规则组转换

ADC1规则组移植时只转换了这4个通道,下图:
在这里插入图片描述
假如电源电压12V,经过分压后是0.64V,对应的AD值是794(0x31A),
在这里插入图片描述

ADC1的注入组也转换电源电压,此处主要验证ADC1规则组的转换值。

2.3、注入组转换

ADC1的注入组采样电源电压,
ADC2的注入组采样M0的B相,
ADC3的注入组采样M0的C相,
刚上电时,或者下臂MOS关闭时,Vo的理论输出值=1.65V,
在这里插入图片描述

2.4、观察AD转换值

发送指令“A”,读取ADC1规则组 四个通道的转换结果,
发送指令“B”,读取注入组 三个通道的转换结果,下图:
在这里插入图片描述




驱动板购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技



欢迎加入技术交流群:923734429 (入群申请写:CSDN)


(完)

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值