stm32f103c8t6单片机驱动台达伺服电机

在做毕业设计时,需要使用伺服电机,但在此之前完全是个伺服小白,在开发的过程中遇到了很多问题,现在毕设结束了,我想把开发的过程分享出来,欢迎大家批评指正。

一、简介

本文使用的是伺服电机的位置模式,以stm32f103c8t6单片机输出脉冲,作为伺服电机驱动器的位置脉冲输入,从而达到伺服电机位置控制的目的。

二、硬件部分

本文涉及的硬件主要为:stm32f103c8t6单片机,台达ASD-B2-0421-B伺服电机驱动器,台达ECMA-C20604RS伺服电机。

1. 单片机与伺服电机驱动器连接
这里使用的是伺服电机的位置模式,低速脉冲输入,该模式的控制只需要两路输入,一路作为位置脉冲输入,一路作为方向控制(正反转)输入。接线的时候大家可以买个db44的转接板,把下图用到的几个引脚引出来就好了。

2.伺服电机与伺服电机驱动器连接
伺服电机与伺服电机驱动器的连接涉及动力线和编码线,这两部分的连接只要把线上的标志与驱动器上的标志对应起来就好了。

三、软件部分

根据硬件部分可以知道,单片机要对伺服电机进行位置控制,需要一路脉冲(PWM波)输出,一路高低电平输出。所以软件里主要就是PWM波输出和高低电平输出的设置。

1.PWM波输出
单片机的大多数定时器都有输出PWM波的功能,每个定时器可以有四个PWM通道。PWM输出的初始化设置如下:

void TIM3_PWM_Init(u16 arr,u16 psc)
{  GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;TIM_OCInitTypeDef  TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设时钟使能                                                                    //设置该引脚为复用输出功能,输出TIM3 CH3的PWM脉冲波形GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM_CH3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值    80KTIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_timTIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMxTIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //CH1预装载使能   TIM_Cmd(TIM3, ENABLE);  //使能TIM3
}

TIM3_PWM_Init(arr,psc)函数中,arr和psc的值是我根据自己需要的电机转速及电机转动一圈所需脉冲算出来的。

初始化成功后,使用TIM_SetCompare3(TIM3,x)函数就可以进行PWM波的输出了,其中x代表数值。这里需要注意,TIM_SetCompare3()中的3是指通道号,引脚PB0对应定时器3的PWM波的第三个通道,所以是3,如果是通道1,则是TIM_SetCompare1。

PWM波涉及频率和占空比两个性质,频率根据电机转速确定,驱动伺服电机对占空比没有太大要求,不要被伺服驱动器的滤波部分滤掉就好。这里占空比设置为50%。以周期为359为例,那么TIM_SetCompare3(TIM3,180)就是输出一个占空比为50%的PWM波,TIM_SetCompare3(TIM3,0)就是输出一直为低电平,从控制效果来说就是电机停止。

2.高低电平输出

void DIR_Init(void)
{GPIO_InitTypeDef  GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    //使能PB端口时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                //PB.1端口配置GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度为50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);                     //根据设定参数初始化GPIOB.1GPIO_SetBits(GPIOB,GPIO_Pin_1);                       //PB.1 输出高
}

3.串口通信协议
为了方便调试单片机对伺服电机的控制,这里在串口通信的基础上弄了一个协议,用于PC机与单片机进行通信。

void Analysis_Ser(void)
{if(USART_RX_BUF[0]=='x')//x方向{if(USART_RX_BUF[1]=='h'){if(USART_RX_BUF[2]=='o'){TIM_SetCompare3(TIM3,180);}else if(USART_RX_BUF[2]=='c'){TIM_SetCompare3(TIM3,0);}if(USART_RX_BUF[3]=='z'){DIRx=1;}else if(USART_RX_BUF[3]=='f'){DIRx=0;}}}
}

4.main函数
主程序如下:

int main(void)
{   u8 len,t;delay_init();           //延时函数初始化    DIR_Init();                   //方向引脚初始化NVIC_Configuration();//中断分组uart_init(9600);//串口初始化TIM3_PWM_Init(359,39);//以电机转速60转/分,5000个脉冲/圈进行计算TIM_SetCompare3(TIM3,0);//开始先关闭PWM波输出while(1){if(USART_RX_STA&0x8000){len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度printf("\r\n您发送的消息为:\r\n");for(t=0;t<len;t++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//等待发送结束}printf("\r\n\r\n");//插入换行Analysis_Ser();//数据解析函数USART_RX_STA=0;//标志位清零}}
}

四、总结

1.控制效果
按照上述过程,再使用串口通信软件就可以进行伺服电机的控制了。控制效果是:在PC机上输入“xhoz”,伺服电机启动,正转;输入“xhof”,电机启动,反转;输入“xhcz”,电机关闭。

2.说明
上述的过程中,其实还涉及伺服电机驱动器参数的设置,可以按照台达B2伺服技术说明书上(台达官网上有)的来。以后有机会可以再详细写一写。

第一次写博客,写这个的初衷是因为自己在之前开发的过程中总是上网白嫖,现在也想当当种树人,有问题心得可以大家互相交流分享。

写的不妥之处请大家见谅,欢迎大家留言批评指正!

资源下载
https://download.csdn.net/download/ss123bs456/86246539

stm32f103c8t6单片机驱动台达伺服电机相关推荐

  1. 台达PLC模拟量或台达伺服电机控制模块程序案例

    台达PLC模拟量或台达伺服电机控制模块程序案例,二选一 ID:6958618562901252Anh13309639501 以下内容不属于本博内容,仅仅是相关参考: 台达PLC采用可以编制程序的存储器 ...

  2. 西门子s7 200smart与台达伺服电机 运动控制的学习,目标:用触摸屏和西门子smart 控制

    西门子s7 200smart与台达伺服电机 运动控制的学习,目标:用触摸屏和西门子smart 控制 器件:西门子s7 200 smart PLC,台达伺服电机,昆仑通态触摸屏(带以太网),中途可以加路 ...

  3. 台达触摸屏modbusRTU与51单片机通讯台达屏与郭天祥51单片机通讯程序

    台达触摸屏modbusRTU与51单片机通讯台达屏与郭天祥51单片机通讯程序亲测过好用,P1口led显示8个位的状态上传给触摸屏,d2至d7为16数据寄存器能写能读,数码管显示当前写入的数码id=60 ...

  4. ethercat主站soem开发板,stm32f407/stm32h7低成本主站方案,带台达伺服电机,ls伺服电机

    ethercat主站soem开发板,stm32f407/stm32h7低成本主站方案,带台达伺服电机,ls伺服电机,三洋伺服电机,汇川伺服电机,雷塞智能步进电机等支持ethercat的设备. 支持DC ...

  5. 【安信可NB-IoT开发板EC-01F的应用】通过STM32F103C8T6单片机驱动入网阿里云或OneNET云平台

    这里写自定义目录标题 简介 1.硬件准备以及接线 1.1.硬件准备 1.2.硬件接线 2.阿里云生活物联网平台准备工作 2.1.注册用户并登录 2.2.创建项目 2.3.创建产品 2.4.创建设备 3 ...

  6. 台达伺服电机选型手册_机械加工工艺师手册_打包下载

    如何[设为星标★],优先推送资料信息? Ta们都在看咱们:机械大佬群                                注意及时保存和下载,资料若失效请拉到本页底部留言,我们将不定时补发! ...

  7. 台达服务器显示ale02,台达伺服电机50问2012.pdf

    达伺服50 问 达伺服50 问 Q1:伺服电机与普通电机有何区别? A1 :伺服电机与普通电机最大的区别在于电机转子和反馈装置.伺服 电机转子表面贴有强力磁钢片,因此可以通过定子线圈产生的磁场精确 控 ...

  8. 中达变频器参数_台达变频器:满足未来驱动需求

    台达自1995年开启变频器事业以来,一直致力于变频器产品的创新和应用.经过20余年的发展,台达的变频器广泛应用于冶金.电梯.起重.纺织等领域,既有经典的通用变频器VFD系列.面向专业应用的C家族系列产 ...

  9. 台达ms300变频器使用手册中文_台达变频器:满足未来驱动需求

    台达自1995年开启变频器事业以来,一直致力于变频器产品的创新和应用.经过20余年的发展,台达的变频器广泛应用于冶金.电梯.起重.纺织等领域,既有经典的通用变频器VFD系列.面向专业应用的C家族系列产 ...

  10. 台达PLC与单片机的通讯

    最近由于工作需要用PLC与单片机通讯,以此用PLC来控制单片机,使单片机作为一个IO扩展模块来使用.这是第一次尝试自己写代码来使两个器件通讯,故在此做一下笔记,顺便巩固一下在这个过程中所学到的知识. ...

最新文章

  1. 多节锂电串联保护板ic_两节锂电池保护IC,芯片电路图如何设计
  2. 听安全专家讲如何黑掉黑客的故事
  3. C/C++调试:gdbserver的简单使用
  4. mysql concat键值对_MySQL中concat函数
  5. python可变对象 不可变对象_【Python】可变对象和不可变对象
  6. python判断正负的函数_Python |在计算操作的函数内将负数转换为正数?
  7. 第二课 每天努力一点点【Linux培训实录】
  8. python dataframe将字符转换为数字_python中如何将华氏温度转换为摄氏温度?
  9. 免费ppt模板在哪下载?轻松get免费ppt模板下载网站
  10. Mellanox IB卡介绍
  11. matlab取商,MATLAB-MTSP 遗传算法解决5种多旅行商问题(mtsp)的matlab程序 联合开发网 - pudn.com...
  12. arm9有多少个寄存器
  13. Ubuntu系统中各文件夹的作用
  14. Javascript——js常用的方法(一)...........
  15. Tita 绩效管理:低质量周会的7个表现
  16. MATLAB里面size什么意思,matlab中的makersize是什么意思
  17. 余额宝内幕:一个屌丝公司如何找到千亿级痛点
  18. 2019全国电赛总结
  19. P2669 金币,国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十
  20. FPGA自动售货机设计

热门文章

  1. Mac-VMware-分辨率修改
  2. php 中文地址伪静态,.htaccess实现含中文的url伪静态跳转
  3. html swf转mp4,《swf转换成mp4及高清视频的方法》.docx
  4. 《shell脚本学习指南》自学笔记——入门
  5. RS232 DB9串口设备
  6. 快节奏多人在线游戏网络入门系列教程(4):爆头!滞后补偿
  7. 网页设计作业作品成品HTML5+CSS大作业——简单的程序员个人博客(7页) 大学个人博客网页制作教程 表格布局网页模板
  8. qq2012beta2java_Wine QQ 最新解决方案:WineQQ2012 Beta2
  9. 第08课:GDB 实用调试技巧( 上)
  10. Java 学生成绩管理系统(基于GUI和数据库的建立)