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

2024-01-28 21:58

本文主要是介绍stm32f103c8t6单片机驱动台达伺服电机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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单片机驱动台达伺服电机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654894

相关文章

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

驱动(RK3588S)第七课时:单节点设备树

目录 需求一、设备树的概念1、设备树的后缀名:2、设备树的语法格式3、设备树的属性(重要)4、设备树格式举例 二、设备树所用函数1、如何在内核层种获取设备树节点:2、从设备树上获取 gpio 口的属性3、获取节点上的属性只针对于字符串属性的4、函数读取 np 结点中的 propname 属性的值,并将读取到的 u32 类型的值保存在 out_value 指向的内存中,函数的返回值表示读取到的

驱动安装注册表指令

HKCR: HKEY_CLASSES_ROOT HKCU: HKEY_CURRENT_USER HKLM: HKEY_LOCAL_MACHINE HKU: HEKY_USER HER: 相对根键

UMDF驱动安装

VS2013 + WDF8.1,UMDF驱动选择User Mode Driver,不要选User Mode Driver 2.0,否则Win7安装有问题,如图 另外,在驱动安装时不要忘记WUDFUpdate_<主版本号><次版本号>.dll文件,具体文件名在INF中查找。此文件可在WDF的安装目录中找到。注意:在WDF的安装目录中会有3个WUDFUpdate_xxx.dll文件,x86,x6

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

电脑驱动分类

电脑驱动程序(驱动程序)是操作系统与硬件设备之间的桥梁,用于使操作系统能够识别并与硬件设备进行通信。以下是常见的驱动分类: 1. 设备驱动程序 显示驱动程序:控制显卡和显示器的显示功能,负责图形渲染和屏幕显示。 示例:NVIDIA、AMD 显示驱动程序。打印机驱动程序:允许操作系统与打印机通信,控制打印任务。 示例:HP、Canon 打印机驱动程序。声卡驱动程序:管理音频输入和输出,与声卡硬件

麒麟系统安装GPU驱动

1.nvidia 1.1显卡驱动 本机显卡型号:nvidia rtx 3090 1.1.1下载驱动 打开 https://www.nvidia.cn/geforce/drivers/ 也可以直接使用下面这个地址下载 https://www.nvidia.com/download/driverResults.aspx/205464/en-us/ 1.1.3安装驱动 右击,