步进电机转台设计

步进电机驱动设置:

STM32单片机程序:

配置STM32的定时器模式,TIM2为主定时器,TIM3为从定时器,其中PulseFrequency为TIM输出PWM的频率。其主要功能,将TIM2的输出中断TR1指定到TIM3的计数器输入中,每当TIM2输出完成,TIM3就进行一次计数,当TIM3完成计数时,向系统提出一次中断。

void TIM2_Master__TIM3_Slave_Configuration(u32 PulseFrequency)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure; 

    u16 nPDTemp ;
    //配置TIM2为输出PWM的端口,PulseFrequency为设置的PWM频率
    TIM_Cmd(TIM2, DISABLE);
    nPDTemp = 72000UL/PulseFrequency;                // 更改频率时,注意处理72000UL及TIM_Prescaler,使TIM_Period不要超过0xFFFF

    // 时基配置:配置PWM输出定时器——TIM2
    /* Time base configuration */
    TIM_TimeBaseStructure.TIM_Period = nPDTemp-1;
    TIM_TimeBaseStructure.TIM_Prescaler = 999;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 

    // 输出配置:配置PWM输出定时器——TIM2
    /* PWM1 Mode configuration: Channel1 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = nPDTemp>>1;//50%
    TIM_OC1Init(TIM2, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM2, ENABLE); 

    // 时基配置:配置脉冲计数寄存器——TIM3
    TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 

    // Output Compare Active Mode configuration: Channel1
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0xFFFF; // 这里的配置值意义不大
    TIM_OC1Init(TIM3, &TIM_OCInitStructure); 

    // 配置TIM2为主定时器
    // Select the Master Slave Mode
    TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
    // Master Mode selection
    TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update); 

    // 配置TIM3为从定时器
    // Slave Mode selection: TIM3
    TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);
    TIM_SelectInputTrigger(TIM3, TIM_TS_ITR1);
    TIM_ITRxExternalClockConfig(TIM3, TIM_TS_ITR1);
//    TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);               

    TIM_Cmd(TIM2, DISABLE);
    TIM_Cmd(TIM3, DISABLE);
} 

再添加TIM的比较数值,当计数超过该数值时产生一次中断:

void Output_Pulse(u16 Num)
{
        TIM3->CCR1 = Num;
        TIM3->CNT = 0;
        TIM_Cmd(TIM3, ENABLE);
        TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
        TIM_Cmd(TIM2, ENABLE); 

}

在TIM3的中断程序中,若发送中断后,则停止TIM2,和TIM3的定时功能,因此该程序完成了使用TIM2和TIM3完成指定个数的PWM波输出。

void TIM3_IRQHandler(void)
{
    if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)        // TIM_IT_CC1
    {
        TIM_ClearITPendingBit(TIM3, TIM_IT_CC1); // 清除中断标志位
        TIM_Cmd(TIM2, DISABLE); // 关闭定时器
        TIM_Cmd(TIM3, DISABLE); // 关闭定时器
        TIM_ITConfig(TIM3, TIM_IT_CC1, DISABLE);
        TIM2_Pulse_TIM3_Counter_OK=1;
    }
}
时间: 2024-12-10 05:41:49

步进电机转台设计的相关文章

[每日电路图] 6、看一个步进电机驱动电路【转】

          !!!come from elecfans :http://www.elecfans.com/article/88/131/194/2015/20151010385722.html [导读] 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等. 一.前言: 步进电机在控制系统中具有广泛的应用.它可以把脉冲信号转换成角位移,并且可用作电磁制动轮.电磁差分器.或角位移发生器等.有时从一些旧设备上拆下的步进电机(这种

单片机与控制实验(4)——步进电机原理及应用

一.实验目的和要求 了解步进电机的工作原理,学习用单片机的步进电机控制系统的硬件设计方法,掌握定时器和中断系统的应用,熟悉单片机应用系统的设计与调试方法. 二.实验设备 单片机测控实验系统 步进电机控制实验模块 Keil开发环境 STC-ISP程序下载工具 三.实验内容 编制MCS-51程序使步进电机按照规定的转速和方向进行旋转,并将已转动的步数显示在数码管上. 步进电机的转速分为两档,当按下S1开关时,加速旋转,速度从10转/分加速到60转/分.当松开开关时,减速旋转,速度恢复为10转/分.当

[PCB制作] 1、记录一个简单的电路板的制作过程——四线二项步进电机驱动模块(L6219)

前言 现在,很多人手上都有一两个电子设备,但是却很少有人清楚其中比较关键的部分(PCB电路板)是如何制作出来的.我虽然懂点硬件,但是之前设计的简单系统都是自己在万能板上用导线自己焊接的(如下图左),复杂的都是模块拼接的(如下图右):      工作中原理图和PCB也有专门的工程师来制作,因此我对这一块了解比较少.而最近闲来无事,又因为手头上确实少一个四线二项步进电机驱动模块.起初是在淘宝上找了很久才找到一个适合的,结果实验了一下午还是不行:又考虑自己在万能板上焊接,可是发现该模块外围需要10个左

第三次作业-实时控制软件设计

1. 阅读笔记 结合本周课堂所讲的实时操作系统知识内容,浏览如下商用和开源实时操作系统网站,写一段文字向其他同学简要介绍下某个实时操作系统的性能特点或进行操作系统间性能的比较: Vxworks: www.windriver.com/products/vxworks QNX:www.qnx.com Xenomai: xenomai.org Intime: www.tenasys.com/tenasys-products/intime-rtos-family/overview-rtos Sylixo

LCD 3D 打印的设计和制作

技术原理 根据 王成伟 公开的 LCD 3D打印原理 http://blog.sina.com.cn/s/blog_69c8f72b01017jme.html 该技术是类似使用投影仪实现的DLP 3D打印原理实现的,按我的理解,基本上就是把现在常见的LCD 投影仪中的一部分提取出来用作3d打印机的一部分, 使用405nm的紫光LED左右光源(现在常见的光敏树脂都是405nm波长的) 控制部分使用 开源的nanodlp 配合树莓派 实现,直接通过树莓派 连接 A4988步进电机驱动模块实现Z轴控制

如何为编程爱好者设计一款好玩的智能硬件(一)——即插即用、积木化、功能重组的智能硬件模块构想

一.我的构想:  世界上本来没有轮子,只是码代码的人多了,也就出现了轮子!由于至今为止咱们还没有研制出一种可以完全自主学习码代码的代码,同时需求也不断朝着复杂化的方向发展,所以造成了代码界的分工越来越细!曾几何时软硬件本为一家,码代码就得依着硬件平台来,通过代码统筹硬件资源完成具体业务需求.而如今,可能一个优秀的程序员都不会修电脑(┑( ̄Д  ̄)┍)! 哈哈哈,我正是基于这种情况想到为那些精通于某一平台上的应用开发,同时对硬件想了解一下但是又不想从0开始倒弄半天电子元件的编程爱好者,设计一款可以

伺服电机和步进电机的区别

步进电机和交流伺服电机性能比较 步进电机是一种离散运动的装置,它和现代数字控制技术有着本质的联系.在目前国内的数字控制系统中,步进电机的应用十分广泛.随着全数字式交流伺服系统的出现,交流伺服电机也越来越多地应用于数字控制系统中.为了适应数字控制的发展趋势,运动控制系统中大多采用步进电机或全数字式交流伺服电机作为执行电动机.虽然两者在控制方式上相似(脉冲串和方向信号),但在使用性能和应用场合上存在着较大的差异.现就二者的使用性能作一比较. 一.控制精度不同 两相混合式步进电机步距角一般为3.6°.

【MAX10评测】(三)参考设计

此篇开始正式对套件进行评测,先拿官方提供的参考设计练练手,在上一篇博文中给出了参考设计链接:https://cloud.altera.com/devstore/board/max-10-fpga-evaluation-kit/ 在此页面中,有如下几个设计▼ 适用于QuartusII 14.1版本的设计如下: l  ADC /LCD Controller Design Example  :ADC/LCD控制器设计 l  Custom Instruction for NIOS II Processo

闭环步进电机与伺服电机对比

市场上常见3D打印机电机选用的是开环步进电机,出于成本.体积.控制算法实现难以程度,开环步进电机可以达到acceptable的控制效果. 伺服电机是被现在的工程师们所推崇和津津乐道的,提到运动控制不谈伺服电机几乎不可想象,工程师们痴迷于伺服电机的闭环控制,沉醉于高响应和高速性及高精度的优点,真正地"三高".但是,正所谓尺有所短,寸有所长,伺服电机也有它不可避免的如下缺陷: 1. 无法静止 由于采用闭环控制,伺服电机本身结构和电机的特性决定,伺服电机在停止时无法绝对静止,在负载扰动小或者