前段时间听了一个ST的电机库培训,作了些笔记,也写了些心得。今天整理了下发出来和大家一起看看。这些完全都是我自己的一些体会,如果有哪位童鞋有不同看法,欢迎跟帖提出。
一共分三个部分:外设部分,电流采样部分,FOC理论部分。先发第一部分。
下面的附件是讲稿,网上也能找到
基于STM32的+PMSM+FOC软件库培训_1
ourdev_581360XKDZMY.pdf(文件大小:739K) (原文件名:基于STM32的+PMSM+FOC软件库培训_1[1].pdf).pdf)
基于STM32的+PMSM+FOC软件库培训_2
ourdev_581361V25N5A.pdf(文件大小:1.69M) (原文件名:基于STM32的+PMSM+FOC软件库培训_2.pdf)
基于STM32的+PMSM+FOC软件库培训_3
ourdev_581362E4KA29.pdf(文件大小:925K) (原文件名:基于STM32的+PMSM+FOC软件库培训_3.pdf)
基于STM32的+PMSM+FOC软件库培训_4
ourdev_581363R2H9FZ.pdf(文件大小:220K) (原文件名:基于STM32的+PMSM+FOC软件库培训_4.pdf)
ST电机控制培训(STM32外设部分)
一、Cortex-M3部分
1、Thumb-2指令不是全部都是16位的,包括了16位和32位的指令,代码密度更高
2、总线是哈佛结构,而不是改进型的哈佛结构。也就是只是分开了指令和数据总线,而没有把数据总线的读写分开。
3、硬件乘法。单周期乘法,单周期乘累加。不管是16b*16b还是32b*16b或者是32b*32b只要结果是32b,都只需要一个周期
4、硬件除法。指令时间不是单周期的,而是2到12周期,由除数和被除数决定。
5、中断NVIC
a 异常工作在特权模式下
b 处理器自动保存和恢复现场
c 主要的两个比较先进的机制是末尾连锁和迟来,保证了中断嵌套的实时高效性
d 进入中断。处理器自动保存现场PC, xPSR, R0-R3, R12, LR,同时ISR预取,应该是在保存现场的时候开启流水线,对ISR进行预取址,这样在保存完毕之后马上就可以执行ISR程序。
e 迟来。迟来请客就是在处理器响应了一个中断正在自动保存现场的时候又来了一个优先级更高的中断,那么就会原先的那个ISR会被挂起,而转而去执行优先级高的那个ISR。这样不用再去保存一次现场,只需要对新的ISR进行预取。
f 末尾连锁(咬尾机制)。当一个中断ISR在被执行的时候,来了另外一个优先级一样的中断。如果是ARM7的话,那会先等这个ISR执行完毕,然后进行现场恢复,退出异常,接着再进入中断,保存现场,执行ISR,完了之后再恢复再退出。咬尾机制的作用就体现在这里,在第一个ISR执行完毕之后,不进行现场恢复而是做一些处理之后马上执行第二个ISR,全部执行完成之后再退出恢复现场。
NVIC中每个中断都要配置两个中断优先级,抢占优先级和非抢占优先级,系统在判断优先级高低会先看抢占式优先级哪个高,如果一样再去判断非抢占式。
g Cortex在设计的时候留了8个优先级位,所以理论上可以有256级中断,STM32用了其中的4位,所以STM32的优先级是16个。在这4位中,你又可以分配几个抢占几个非抢占优先级位。比如配置抢占为1位,非抢占为3位。那么抢占优先级可以分配两个0、1。非抢占则可以分配8个从000-111
二、高级定时器
基本每个STM32都带有至少一个高级定时器,低端的是一个TIM1,大容量的则两个TIM1和TIM8。以前看到这个定时器就头大,模式那么多。现在发现是一个好东西,简直就专门为了电机控制而设计的。
1 基本特性。其时钟是APB低速总线的2倍,也就是36M*2=72MHZ。最小分辨率为13.8ns,最多输出3组互补的PWM,也就是6路。另外还有一路普通的PWM波,好像一般用来触发AD。这在采集电流的时候比较有用。
2 DMA。定时器可以触发DMA进行连续数据传输。一般的DMA一次只能传输一个数据,高级定时器可以让它一次传多个数据。这个可以用来更新定时器的寄存器,可以把预存在RAM中的数据直接搬到寄存器中。据说,如果要实现PWM波形的相位控制,可以用DMA来实现。这个还没仔细研究过。
3 紧急关闭。在有些紧急的情况下可以直接关闭PWM输出,保护电路。而且这种关闭是异步的也就是能马上关闭,而不用等时钟过来。这种保护在紧急情况下市必不可少的,可以保证最短时间内关闭PWM输出。
4 保护。寄存器可以被锁住而防止在意外情况发生时PWM输出异常。比如当程序跑飞的时候
三、正交编码器
正交编码器对码盘的解码主要是产生一个递增或者递减的计数。
1 电机方向确定:当编码器输出的计数是递增时,说明是正转,如果是递减,说明是反转。
2 电机速度确定:电机的速度可以通过检测计数值的时间来判断,比如现在计数值是N,码盘再来一个边沿的话计数会变成N+1,通过测量N到N+1花了多少时间,就可以测出电机的当前速度。
3 圈数判断。编码器输出的计数器可以设定来重装载。当到达一个值的时候清零。所以可以根据码盘,把重装载值设置为刚好一圈的脉冲。比如一个码盘1000线的,如果A/B每个边沿都会让计数器计数,那么转一圈就会产生4000个脉冲。我把重装载值设置为4000,当计数到4000的时候,计数器产生一个溢出中断,此时我就知道已经转了一圈了。
四、定时器的同步
STM32有很多定时器,有些时候需要由不同定时器产生的PWM波型能在相位上同步,所以同步机制非常重要。
每个定时器都有触发机制,可以被其他定时器或者信号触发,也可以输出触发信号。同步就是用触发来实现。比如几个定时器可以级联,定时器1触发定时器2,再定时器2触发定时器3,依次下去。除了这种级联,还能配置成主从模式,就是定时器1直接触发定时器2和定时器3
五、AD
STM32基本每个型号都带有至少1个AD模块,AD的位数是12位。
1 AD的速率:AD采样保持时间是1.5-239.5个周期可配,转化时间是固定的12.5个周期。所以完成一个AD采样最少需要14个周期,如果把AD的始终配置成14M的话,刚好是1M的采样率。主要这里的1M是完成了一次采样,而是转化速度,像TI的2812标出的速度是12M其实只是指转化速度而不包括采样保持时间。但是STM32的AD的时钟是不能刚好配到14M的,一般最大只能配到12M,所以算起来还是不能到1M的速率。
2 AD的采样保持时间:采样保持时间是1.5-239.5个周期可以配置。但是到底要怎么配呐?要看些什么参数?其实这个和外部电路的输入阻抗有关系。我私下分析了下。STM32的AD也是电容式的,采样保持时间的本质就是让采样点给电容充电,这里需要一段充电时间。输入阻抗不同直接影响到充电时间,也就是采样保持时间。Rin<1.2K是1.5个周期,Rin<350K时,239.5个周期。
3 AD看门狗:这个可以监控采集到的电压,一旦超过最低值或者最高值,就能触发中断。它可针对单个通道,所有的常规通道或者所有的注入通道。
4 两种转换方式:常规转换和注入转换。常规转换有16个,注入有4个。注入转换可以打断常规转换,所以注入可以放一些比较紧急的AD采样。平时的时候可以执行常规转换。
5 触发源。AD有比较完善的触发机制,触发源一共有6个。在电流采样的时候可以通过TIM1的CH4产生PWM波来采样。这样能很好的控制采样频率,和采样点。
6 中断。AD可以产生3中中断:窗口看门狗中断AWD,常规转换中断EOC,注入转换中断JEOC,其中注入和常规转换都会产生EOC中断,所以当产生了一个EOC中断,要检测标志位来判断到底是产生了哪种中断。
7 双AD,有些器件拥有两个AD模块。在以下几种场合比较有用。
电机控制的时候,要获取三相上的电流,这个时候要同时采集两相上的电压,再计算出第三相。
功率计算。有时要检测交流功率,所以要同时采集电压和电流信号。
8 快速隔行扫描。在有两个AD的器件有快速隔行扫描模式。通过这个可以实现双倍的速率,也就是可以最快达到2M的速度。隔行扫描一般由AD2开始,然后再是AD1,接着AD1去触发DMA一起传送32位数据到RAM中,注意这32位里面包括了高16位AD2的结果和低16位AD1的结果。AD2不能触发DMA。
六、DAC
DAC有一个很大的作用就是监视一些变量,让其输出,然后在示波器上可以很直观的看到。这个在调试一些算法参数的时候非常有用。
七、DMA
DMA主要作用是传输数据,具体的用法可以有这些
1 把AD的结果传输到RAM中
2 更新定时器的寄存器,比如更新占空比,只要事先在RAM中存放一张表格,在特定的时刻把数据直接传输寄存器中就可以。
3 更新DAC的值,在特定的时刻把数据传输到DAC寄存器中,可以实时监视变量的值。
要注意的是这些都是不需要用户来干预的,可以事先设置成触发方式。
楼主好伟大!
一周热门 更多>