这个暑假没有回家,在学校准备九月份的电子设计竞赛。今天想给大家分享一下STM32定时器控制两个步进电机按照一定速度比转动的问题。

这次做的05年的电子设计竞赛题目,运动悬挂系统。。本实验是控制两个步进电机通过一个定滑轮用线挂一个重物,并使这个重物走直线。。

首先对定时器进行配置。

void TIM_Configuration(void)
  {
 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_DeInit(TIM3);
 TIM_TimeBaseStructure.TIM_Period =  8;  //中断时间为  T = ( TIM_Period + 1 )*( TIM_Prescaler + 1 )/TIMxCLK(72MHZ) =  10(-6) s
    TIM_TimeBaseStructure.TIM_Prescaler =  7;

TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
 
 TIM_ClearFlag( TIM3, TIM_FLAG_Update);
 TIM_ITConfig( TIM3, TIM_IT_Update, ENABLE); 
 
}

然后写画直线的函数,思路如下,将起点和终点的坐标作为函数的传递参数。通过计算起点和终点到两个滑轮之间的距离差可以算出两个电机在这段时间转过的距离。。因为时间是相同的,所以令两个电机的速度比等于通过计算得到的距离比即可。。具体代码如下:

void Draw_Line(float x1, float y1, float x2, float y2)      
{
 float L1, L2;        //起始点到滑轮距离之差

float sulv;         //两个电机转速比
 
 L1 = sqrt((x1 + 15)*(x1 + 15) + (115 - y1)*(115 - y1)) - sqrt((x2 + 15)*(x2 + 15) + (115 - y2)*(115 - y2));
 L2 = sqrt((95 - x1)*(95 - x1) + (115 - y1)*(115 - y1)) - sqrt((95 - x2)*(95 - x2) + (115 - y2)*(115 - y2));

if(L1>0)         //控制电机正反转
  GPIO_SetBits(GPIOA,GPIO_Pin_6);
 else
  GPIO_ResetBits(GPIOA,GPIO_Pin_6);

if(L2>0)
  GPIO_SetBits(GPIOA,GPIO_Pin_7);
 else
  GPIO_ResetBits(GPIOA,GPIO_Pin_7);
 
 L1 = fabs(L1);
 L2 = fabs(L2);

countL = L1/0.0006;       //计算出走完L1、L2所需脉冲数,,0.0006是通过几组数据计算出来的。。
 countR = L2/0.0006;

sulv = countL*170.0 /countR;   
 suduL = sulv;
 suduR = 170;        //算出两个电机发生电平翻转产生脉冲的时间比

count = 0;
 countLR =0;
 
 TIM_Cmd(TIM3, ENABLE);    //定时器开始计时

}

中断服务程序中的内容是定时器到达两个电机规定的发生电平翻转的时间的倍数是翻转电平,产生脉冲驱动电机运动。

void TIM3_IRQHandler(void)
{

if((countLR == (countL*2)))
  TIM_Cmd(TIM3, DISABLE);    //两个电机运动完成,,关定时器

count++;                            //开始计时
 if( !(count % suduR) )
 { 
  if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_4)==0)
   GPIO_SetBits(GPIOA,GPIO_Pin_4);
  else
      GPIO_ResetBits(GPIOA,GPIO_Pin_4);

countLR++;                     //记录电平翻转次数,即脉冲数的一半
 }
   
 if( !(count % suduL) )
 { 
  if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_5)==0)
   GPIO_SetBits(GPIOA,GPIO_Pin_5);
  else
      GPIO_ResetBits(GPIOA,GPIO_Pin_5);
 }

/*防止定时器溢出*/
 if(count == suduL*suduR)
 { 
  count=0; 
 }

TIM_ClearFlag(TIM3, TIM_FLAG_Update);         //一定不要忘记清除中断位
}

以上就是我想分享给大家的,,希望对正在积极备战2013年电子设计竞赛的同学有所帮助,谢谢

STM32F103控制两个步进电机按照一定转速比运动的更多相关文章

  1. iOS不得姐项目--推荐关注模块(一个控制器控制两个tableView),数据重复请求的问题,分页数据的加载,上拉下拉刷新(MJRefresh)

    一.推荐关注模块(一个控制器控制两个tableView) -- 数据的显示 刚开始加载数据值得注意的有以下几点 导航控制器会自动调整scrollView的contentInset,最好是取消系统的设置 ...

  2. Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个

    (function ($) { $.messageBox = function (message) { $.messager.show({ title:'消息框提示', msg:message, sh ...

  3. css控制两个表格的边线重合

    控制两个表格的边线重合 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  4. Python使用进程间共享变量来控制两个进程(监听键盘和相机录制)的交互

    我有个简单的应用需求: 1. 该应用随时会监听键盘的输入: 2. 当输入指定键时会控制相机录制的启动和关闭. 监听键盘是一个事件循环,相机录制也是一个循环录制的过程.我试着用 Python 启动两个进 ...

  5. stm32电机控制之控制两路直流电机

    小车使用的电机是12v供电的直流电机,带编码器反馈,这样就可以采用闭环速度控制,这里电机使用PWM驱动,速度控制框图如下: 由以上框图可知,STM32通过定时器模块输出PWM波来控制两个直流电机的转动 ...

  6. stm32电机控制之控制两路直流电机!看完你会了吗

    手头上有一个差分驱动的小车,使用两个直流电机驱动,要实现小车的在给定速度下运动,完成直线行驶,转向,加速,刹车等复杂运动. 使用的电机是12v供电的直流电机,带编码器反馈,这样就可以采用闭环速度控制, ...

  7. 使用STM32控制TMC5160驱动步进电机

    首先先来了解一下TMC5160的3种工作模式 TMC5160通过两个引脚来控制它的工作模式:SD_MODE和SPI_MODE. 1.当SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模 ...

  8. linux驱动初探之杂项设备(控制两个GPIO口)

    关键字:linux驱动.杂项设备.GPIO 此驱动程序控制了外接的两个二极管,二极管是低电平有效. 上一篇博客中已经介绍了linux驱动程序的编写流程,这篇博客算是前一篇的提高篇,也是下一篇博客(JN ...

  9. 一个鼠标键盘控制两台甚至多台主机的方法--Synergy

    在多台主机,不同系统中操作.避免了更换键鼠的麻烦.即使下面图中的功能. 鼠标同时在三台或者多台主机之间进行移动,而且是无缝滑动,鼠标直接从左滑倒右,而且支持,这台电脑复制,另一台黏贴.非常的方便实用. ...

随机推荐

  1. Ubuntu14.04LST 安装Oracle SQL Developer 4.0.2

    1:Oracle SQL Developer 4.0.2下载链接: http://www.oracle.com/technetwork/developer-tools/sql-developer/do ...

  2. 认识元数据和IL(下)<第五篇>

    书接上回: 第二十四回:认识元数据和IL(上) , 第二十五回:认识元数据和IL(中) 我们继续. 终于到了,说说元数据和IL在JIT编译时的角色了,虽然两个回合的铺垫未免铺张,但是却丝毫不为过,因为 ...

  3. [ArcGIS Engine]栅格数据处理 RasterDataset RasterLayer Raster RasterBandCollection

    原文 http://www.cnblogs.com/zoe-j/archive/2012/03/22/2412403.html 1.由RasterLayer 得到RasterDataset IRast ...

  4. bzoj1675 [Usaco2005 Feb]Rigging the Bovine Election 竞选划区

    Description It's election time. The farm is partitioned into a 5x5 grid of cow locations, each of wh ...

  5. 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.3

    /** * 百度地图使用工具类-v1.5 * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @email b ...

  6. Letter Combinations of a Phone Number 解答

    Question Given a digit string, return all possible letter combinations that the number could represe ...

  7. 1、elasticsearch简介

    1.elasticsearch简介 中文帮助文档地址:http://es.xiaoleilu.com/ • Elasticsearch是一个基于Lucene的实时的分布式搜索和分析引擎.设计用于云计算 ...

  8. Android 的权限设置大全

    android.permission.ACCESS_CHECKIN_PROPERTIES //同意读写訪问"properties"表在checkin数据库中.改值可以改动上传 an ...

  9. LR实战之Discuz开源论坛——登录场景设计

    以下是根据个人项目经验,对登录场景的设计,如下步骤: 一.打开Controller,添加登录脚本,选择“手动场景”,一般我们项目中经常使用的是“手动场景”类型设计,如图 二.在“设计”部分,设置场景的 ...

  10. 解析Xml四种方法

    关键字:Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath [引言] 目前在Java中用于解析XML的技术很多,主流的有DOM.SAX.JDOM.DOM4j,下文 ...