介绍:
1.第2版资料 REV2.0
2.STM32 V3.5版本的库 标准库。
3.FSMC 和 M1 M2 可同时工作 多线程概念。
4.主要功能还是电机的控制
a.当然如果一点步进电机基础都没有的 建议看一下基础 比较好入手。
b.涉及步进电机细分控制理论,速度控制理论。这里我要说的是 我当前在程序中使用的。 当然这方面的理论很多。
c.矢量控制算法,如果不需要就使用最精简版。程序里面有注释 这样更容易入门。
d.最高细分16细分 轻量级 (质量)为Basic版本 PRO版本未发行 重量级 可以到128细分 或是256细分。
基于SVPWM控制原理 步进电机细分控制 低噪音 低速高力矩
http://yonyon.taobao.com
关键性矢量算法
/*****************************************************************************************
*
* 步进电机根据当前位置 控制 速度 达到指定位置 驱动函数
*
*****************************************************************************************/
static void Motor1PostionControlSpeed(void) // LOOP IN T0
{
//---------------------------------------------------------------------------------------
if (CheckValChange3(Motor1_dynamic_postion_gap))
{
if (((Motor1_user_postion_gap-step_startstop*MaxStep) < Motor1_dynamic_postion_gap) && (Motor1_dynamic_postion_gap <= Motor1_user_postion_gap))
LineFlag = 1; //1 加速 0 减速 2 匀速 (停止)
}
Motor1_drive(Motor1_speed_postion_dir,MotorXSpeedPos);
//MicroStep and MaxStep Motor1_postion_Current Motor1_dynamic_postion_gap
//-------- CheckValChange --------
if (CheckValChange2(Motor1_dynamic_postion_gap/MaxStep))
{
if (Motor1WillBackFlag==0)
{ //-----------------------------------------------------------------
if ((0 < Motor1_dynamic_postion_gap) && (Motor1_dynamic_postion_gap <= MotorXSpeedPos*MaxStep)) //loop 20*256/x (256-32) 20为20步
{
if (MotorXSpeedPos)
{
MotorXSpeedPos--; //减速制动
LineFlag = 0;
}
}//-----------------------------------------------------------------
else if ((step_startstop*MaxStep < Motor1_dynamic_postion_gap) && (Motor1_dynamic_postion_gap <= (Motor1_user_postion_gap-step_startstop*MaxStep)))
{
LineFlag = 2;
}//-----------------------------------------------------------------
else if (((Motor1_user_postion_gap-step_startstop*MaxStep) < Motor1_dynamic_postion_gap) && (Motor1_dynamic_postion_gap <= Motor1_user_postion_gap))
{
if (MotorXSpeedPos { MotorXSpeedPos++; //加速启动 LineFlag = 1; } }//----------------------------------------------------------------- else if (Motor1_dynamic_postion_gap > Motor1_user_postion_gap) { Motor1WillBackFlag = 1; //减速制动 } } //---------------------------------------------------------------------------------------- else if ((Motor1WillBackFlag==1)) { if (MotorXSpeedPos) { MotorXSpeedPos--; LineFlag = 0; } else { Motor1WillBackFlag = 0; } } } //---------------------------------------------------------------------------------------------------------------------------------------------- }