打印
[STM32F7]

【STM32F767ZIT6测评】+CUBE配置电机控制所需外设

[复制链接]
1426|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 crystal—xqx 于 2016-8-21 21:46 编辑

收到板子好久了, 认真摸了摸各个外设。上次参加了电机库的培训,对于库里现成的东西,要理解起来真的需要花很多时间,所以打算自己将它的外设搭建起来。先抛开驱动器部分,一个基本的电机控制器包括:6路带有死区的互补PWM输出,至少3路的ADC检测,编码器的正交模式等。

如何新建CUBE工程就不再赘述,网上有大量的参考资料。我们直接开始讲所需的配置。
首先,我们需要配置PINOUT菜单

我们先配置PWM互补输出:
可以选择的互补输出的通道有TIM1和TIM8,其中在这里选择TIM1的互补模式,引脚根据菜单栏自动配置了,当然也可以手动去修改,那就要去查Datasheet里边的引脚复用功能。
接着配置ADC,这里配置ADC1模块:
这里采用:0,1,2,3 四路ADC通道。
最后配置一下正交编码模式:
(一开始我还找不着)翻了好久才发现直接在Combined Channels里面选择Encoder Mode。自动设置的引脚是PA5和PB3。其实还有一相是Z信号,可以用外部中断触发,但是,在风机类负载的时候,可以自由地进行初始位置定位,可以通入直流电去定位,加上知道编码器的线数,因此Z信号在此就不进行配置了。
配置Clock Configuration菜单:按照默认就行了。

接下来是最主要的Configuration菜单:
有以下几点是需要配置的。
首先配置ADC,PCLK的2分频,12位精度,寄存器右对齐。以上这些是默认的。使能扫描转换模式,其他三项都是disable(这个很关键,如果ADC连续转换,DMA传输也要设置为连续,如果ADC单次转换,DMA也要每次用代码去触发传输)。下面的ADC_Regular_ConversionMode中的转换个数要改成4个,每一路的通道都要选择。另外就是在我自己的学习过程中,我发现,ADC按通道顺序转换,每次转换结束的值都会存在同一个寄存器内。因此这个顺序的问题对应了上文括号里的加粗的文字。再配置DMA,
添加DMA传输对象,对象是ADC1,后面默认,下面的全部是默认(传输模式选择为普通而非连续,数据为半字(即一个字节)内存递增)。
接下来是TIM1:
对齐方式选择中心对齐,通过计算prescaler和counterperiod的值去控制10Khz,三路互补输出的死区时间共用同一个值。
这个值是时钟数,如果驱动大功率的电机,死区要在2us以上,具体可以参考IGBT或者IPM的Datasheet。
最后是TIM2:
要改的地方是极性即触发沿,如果两者都选了上下沿,那么编码器可以被四倍频。2500线的可以达到10000线。
基本的配置就好了。接下来是generate。在这之前,我遇到一个比较痛苦的问题,那就是我先保存了工程再generate。这样会生成两个ioc,其实不能先保存,或者说generate之后先前保存的那个就不需要用了。这样一个基本的电机底层驱动就搭好了。除此之外,我们也可以配置UART3或者板子上的led达到调试的目的。
以上就是我的分享,代码还在调试中哦,大家如果有遇到问题欢迎一起讨论哦!
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

55

帖子

14

粉丝