本帖最后由 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达到调试的目的。 以上就是我的分享,代码还在调试中哦,大家如果有遇到问题欢迎一起讨论哦! |