小小博士

DAC8413在步进电机控制中的应用(原创)

0
阅读(5674)

DAC8413在步进电机控制中的应用

在通常的步进电机控制中,我们只是考虑到选用小步距角的步进电机来实现对整个系统的精确控制,很少考虑到对步进电机的细分控制。在我参加的某个项目中,由于客户对电机控制的精度要求特别高,我们考虑到对步进电机步距角的细分,经实践还是可行的,现将其经验总结如下,还望多提意见:

(一)步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

(二)对步进电机的控制,分为三部分,即:控制器,驱动器,步进电机;

         控制器部分,我们选用FPGA和DAC8413的结合,控制四相步进电机

驱动器部分,它是把控制系统发出的脉冲信号,加以放大以驱动步进电机。我们选用MOST管和运算放大器搭建;

步进电机:选用深圳雷赛科技的步进电机,控制起来挺好的。

(三)控制器部分是我们的核心,我们选用FPGA和DAC8413来实现,由FPGA送来的数字量电压控制信号,经D/A 转换器转换为模拟量的电压信号,再送至驱动部分,直至电机转,D/A芯片的选择关系到细分技术的方案要求。我们选用的DAC8413,是单片电路芯片上集成四个12位电压输出数模变换器(DAC)。每一DAC都有一个双重缓冲的输入锁存结构,并有回读功能。

(1)+5伏到+/-15伏工作电压;

(2)单极性或双极性输出;

(3)复位到零或复位到中点的干预;

(4)高速总线存取时间。

其结构框图如下:

我们选用DAC8413,也是考虑到步进电机的细分要求:

  • 利用数模转换器的12位并行I/O口,把四分之一的四相驱动电流周期即一个步距分成4096级,达到电压高精度的细分要求。
  • DAC8413四个完整的电压输出数模转换器,能直接输出0-10V的电压,再经1.2倍放大后达到0-12V的电压范围,以控制电机的四相绕组,减少电路复杂性。
  • “复位到零”干预,达到电机0-12V的电压控制范围,使电机在半步工作时能达到0-1.8°的步进范围。
  • 利用双重缓冲的输入锁存结构和高速总线存取时间,四路DAC能分别写入和输出数据,并能同时一次性写出,达到高速并行输入和并行输出的数模转换要求。

(四)其实DAC8413的芯片特点,也是我们FPGA芯片程序编写的依据。以DAC8413的双重缓冲输入锁存结构为例,我们这里是双四拍情况下进行的10细分,我首先给每个通道写数据,等写完后,通过load信号,将所有的数据得到输出。具体以下面部分程序为例:

3'b000:begin

                      DA_adr <=2'b00;

                      DA_data<=0;                                       

                      DA_cs_n<=0;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                 end

       3'b001:begin

                      DA_adr <=2'b00;

                      DA_cs_n<=1;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                end

    3'b010:begin

                      DA_adr <=2'b01;

                      DA_data<=DA_data_A;                                         

                      DA_cs_n<=0;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                 end

        3'b011:begin

                      DA_adr <=2'b01;

                      DA_cs_n<=1;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                 end

3'b100:begin

                      DA_adr <=2'b10;

                      DA_data<=DA_data_B;                                         

                      DA_cs_n<=0;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                 end

        3'b101:begin

                      DA_adr <=2'b10;

                      DA_cs_n<=1;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                     end

         3'b110:begin

                      DA_adr <=2'b11;

                      DA_data<=0;                                         

                      DA_cs_n<=0;

                      DA_ldac_n<=1;

                      step<=step+3'b001;

                     end

                                  3'b111:begin

                      DA_adr <=2'bzz;

                      DA_cs_n<=1;

                      DA_ldac_n<=0;

                      step<=0;

                   end

       以上是控制DAC输出的部分关键程序,但每一句都是根据DAC8413的特点编写的,比如每一拍,片选信号DA_cs_n都有效,DA要输出数据时,DA_cs_n无效,同时DA加载信号DA_ldac_n才有效,保证每一路数据输出的同时性和高效性。

(五)另外,也是FPGA程序编写的关键,细分数据的存储。我是先将10细分的数据计算好,存储成二维数组的形式,根据要求,有区别的提取细分数据,从而达到对步进电机的细分控制。具体如下:

wire   [11:0]xifen_m[10:0];     //细分数据存储

assign xifen_m[10]=12'h000;

assign xifen_m[9]=12'h261;

assign xifen_m[8]=12'h4b2;

assign xifen_m[7]=12'h6e7;

assign xifen_m[6]=12'h8ef;

assign xifen_m[5]=12'habf;

assign xifen_m[4]=12'hc4c;

assign xifen_m[3]=12'hd8b;

assign xifen_m[2]=12'he75;

assign xifen_m[1]=12'hf07;

assign xifen_m[0]=12'hf33;

(六)细分控制电路中,D/A转换器一定选用高精度参考电压源,驱动电路的电压负反馈,确保了高精度细分的实现。D/A的好换,直接影响到后端电机的性能。在我们调试时发现,由于D/A输出波形的不干净,噪声比较大,导致后端电机在控制程序没有加载,电机就已经开始尖叫,而且电源部分电流很大。最后通过加入隔离器件和滤波措施,实现了对步进电机的精确控制。

从以上几点来看,DAC8413在步进电机的控制中扮演了重要角色,其性能直接影响这个系统的好换;其结构更是影响到整个软件部分的编写,但DAC8413这样的结构,更适合我们对步进电机的控制,希望以后大家多用它。

                    如果您觉得这篇文章对您有帮助,麻烦您投我一票~  小弟在此谢谢啦