热度 19
2014-6-17 11:07
2122 次阅读|
2 个评论
入门级的步进驱动的功能框图如下 如果降低要求,电流采样这边直接用比较器,用DAC输出参考,和采样的电流进行比较,MCU只处理斩波反馈的信号,这样,编程难度更低。 OK,从最简单的开始,正弦表。 到网上找了一通,甚至找了正弦表的发生软件,以及MTLAB来做,但是都没有找到合适的资料,好吧,与其浪费时间来做这个搜集工作,还不如自己用EXCEL计算出来。12位DAC输出,那最大4095,用EXCEL计算以后,得到的128细分正弦表如下: uc16 Sine12bit = {0,50, 100, 151, 201, 251, 301, 351, 401, 451, 501, 551, 601, 651, 700 , 750, 799, 848, 897, 946, 995,1044,1092,1141,1189,1237,1285,1332,1380,1427,1474,1521,1567 ,1613,1659,1705,1751,1796,1841,1886,1930,1975,2018,2062,2105,2148,2191,2233,2275,2317,2358,2399 ,2439,2480,2519,2559,2598,2636,2675,2713,2750,2787,2824,2860,2896,2931,2966,3000,3034,3068,3101 ,3133,3165,3197,3228,3259,3289,3319,3348,3377,3405,3433,3460,3486,3512,3538,3563,3588,3611,3635,3658 ,3680,3702,3723,3744,3764,3783,3802,3821,3838,3856,3872,3888,3904,3919,3933,3947,3960,3972,3984,3996 ,4006,4016,4026,4035,4043,4051,4058,4064,4070,4075,4080,4084,4087,4090,4092,4094,4094,4095}; 然后配置程序,一输出,完美! 第二个需要做的工作是,脉冲输入。 计划先反转和脱机功能不做,先让电机转起来再说。查找STM32的资料,发现这个很好实现。用外部中断9来触发DMA的输出。 如果你是一个单片机老手,这个做起来当然简单,但是我对DMA了解不够,但是还算是比较顺利,程序编写后,功能完全满足要求。 然后难一点的东西来了,细分的输入处理。 细分功能的实现,一开始低估了细分功能实现的难度, 根据目前市面上驱动器的特点,以及在运行中切换细分可能造成的丢步。 高细分切换到低细分时会丢掉小于一个低细分角度的旋转,比如,从128细分下的125阶梯切换到2细分时,125~128的四个阶梯会自动丢失掉 (整步和256细分,后面需要再进行添加) 设置驱动器的细分设置在上电初始化中完成。 程序的设计流程如下: 1、查询细分设置端口的电平,以确定“细分” 2、根据细分,分配DMA空间 3、计算DMA中存入的“梯度正弦值”,初始化两个DMA,并赋值DMA的基址。 4、外部脉冲触发DAC输出,DAC的数据寄存器绑定DMA1和DMA的地址,直接从DMA中取值 设计完成上面的工作,就可以开始PWM的输出了,PWM的输出如果不处理反馈,功能也很容易实现,简单的程序可以设置固定的占空比,以及加入一定的死区就OK了,程序编写完成以后,调试OK,一切进展看似很顺利。 对步进驱动技术有兴趣的朋友,可以加入 迪莫驱动技术群 :104155124,我们将每周安排时间在群内一起讨论技术问题。