您好,欢迎访问三七文档
STM32驱动舵机/45STM32驱动舵机STM32驱动舵机实例4舵机的控制方法32软件环境安装1硬件连接方法2/451MDK集成开发环境1.1首先安装J-Link驱动开发软件\Setup_JLinkARM_V468,双击要安装的“Setup_JLinkARM_V468.exe”,安装过程全选“next”直到安装成功,将JLINK插接到电脑的USB口,即可在我的电脑\管理\设备管理器\通用串行总线控制器中看到一个J-Linkdriver。安装程序来源:/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,点击Next。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,把勾勾上,点击Next。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,选择安装目录C:\keil,点击Next。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,在用户名中填入名字(可随便写或者空格),在邮件地址那里填入邮件地址(可随便写或者可空格),点击Next。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,正在安装,请耐心等待。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,点击Finish,安装完成。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,点击Finish,安装完成。/451MDK集成开发环境1.2安装MDK05-开发软件\2-MDK运行“MDK472_a.exe”,点击Finish,安装完成。/451MDK集成开发环境1.2安装MDK破解MDK安装完MDK开发环境后,在编译程序的时候会有40K的代码限制开发软件\MDK找到KEIL_Lic.exe。/451MDK集成开发环境1.2安装MDK破解MDK点击KEIL_Lic.exe,在弹出的界面中的CID选项框中填入MDK的CID。/451MDK集成开发环境1.2安装MDK破解MDK以管理员身份运行“KeiluVision4”,在MDK开发环境中的菜单栏File\LicenseManagemant中获取到CID/451MDK集成开发环境1.2安装MDK破解MDK在Target下拉框中选择ARM/451MDK集成开发环境1.2安装MDK破解MDK然后点击Generate按钮,复制产生的CIDCode/451MDK集成开发环境1.2安装MDK破解MDKMDK环境菜单栏File\LicenseManagemant,把刚刚在注册机复制到的CIDCode粘贴到NewLicenseIDCode(LIC):框中,然后点击AddLIC,点击close/451MDK集成开发环境1.3编译、下载Translate:编译修改过的文件,只检查语法错误,不链接库也不生成可执行文件Build:编译修改过的工程,检查语法、链接动态库文件、生成可执行文件Rebuild:重新编译整个工程的所有文件,耗时较长Load:程序下载/452硬件连接方法2.1电源及下载线连接/452硬件连接方法2.1电源及下载线连接/452硬件连接方法2.1电源及下载线连接/452硬件连接方法2.1电源及下载线连接/452硬件连接方法2.2舵机线连接s+-s+-s+-/452硬件连接方法2.2舵机线连接多功能支架6个短U支架2个长U支架4个L型支架8个大脚板2个U型梁1个杯士轴承6个/453.1什么是舵机舵机是一种位置(角度)伺服的驱动器,适用于需要角度不断变化并可以保持的控制系统。舵机是一种俗称,其实是一种伺服马达。3舵机的控制方法25/453.2舵机工作原理控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。3舵机的控制方法26/453.3舵机控制舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系:0.5ms-----------0度1.0ms-----------45度1.5ms-----------90度2.0ms-----------135度2.5ms-----------180度。3舵机的控制方法27/45舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系:283舵机的控制方法/45小型舵机的工作电压一般为4.8V或6V,转速也不是很快,一般为0.22/60度或0.18/60度,所以假如更改角度控制脉冲的宽度太快时,舵机可能反应不过来。如果需要更快速的反应,就需要更高的转速。舵机上有三根线,分别为VCC、GND、信号线,不需要另外接驱动模块,直接用单片机的管脚控制,控制信号一般要求周期为20ms的PWM信号。如果要更为精确的控制舵机(转动角度差=1度),则需要控制输出PWM信号的占空比,例如:可以把0~180分为1024份(可以任取,决定于定时器的时钟频率),范围为0.5ms~2.5ms则可以得到0.09度/us,因此可以由PWM=0.5+N/0.09(N是角度)控制舵机转动0~180度间的任意角度。293舵机的控制方法/454.1实验描述及工程文件清单实验描述:通用定时器TIM2、TIM3、TIM4产生6路PWM舵机控制信号。硬件连接:TIM3_CH1-4:PA6/PA7/PB0/PB1(控制板P11-13)TIM4_CH1-4:PB6-9(控制板P4、5、6、14)TIM5_CH1-4:PA.0-3(控制板P7、8、9、15)库文件:startup/start_stm32f10x_hd.sCMSIS/core_cm3.cCMSIS/system_stm32f10x.cFWlib/stm32f10x_gpio.cFWlib/stm32f10x_rcc.cFWlib/stm32f10x_tim.c30用户文件:USER/main.cUSER/stm32f10x_it.cUSER/pwm.c4STM32驱动舵机实例/454.2配置工程环境本定时器PWM输出实验中用到GPIO、RCC、TIM外设,没有使用中断,所以先把以下库文件添加到工程stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_tim.c。新建pwm.c及文件,并在stm32f10x_conf.h中把使用到的ST库的头文件注释去掉。3112.4STM32驱动舵机实例/454.3main文件调用用户函数TIM_PWM_Init()把TIM初始化成50Hz的PWM输出模式。While循环中根据角度改变相应定时器通道的占空比,产生舵机控制信号,驱动舵机转动到相应的角度。32#includestm32f10x.hintmain(void){//delay_init();//延时函数初始化intangle;TIM_PWM_Init(9999,143);//不分频,PWM频率=72*10^6/(9999+1)/(143+1)=50Hzwhile(1){//调节占空比pwmval1/(9999+1)for(angle=1;angle=180;angle++){SetJointAngle(4,angle);SetJointAngle(5,angle);SetJointAngle(6,angle);SetJointAngle(7,angle);SetJointAngle(8,angle);SetJointAngle(9,angle);SetJointAngle(10,angle);SetJointAngle(11,angle);SetJointAngle(12,angle);SetJointAngle(13,angle);SetJointAngle(14,angle);SetJointAngle(15,angle);Delay(0x000FFFF);}12.4STM32驱动舵机实例/454.3main文件调用用户函数TIM_PWM_Init()把TIM初始化成50Hz的PWM输出模式。While循环中根据角度改变相应定时器通道的占空比,产生舵机控制信号,驱动舵机转动到相应的角度。33for(angle=180;angle=1;angle--){SetJointAngle(4,angle);SetJointAngle(5,angle);SetJointAngle(6,angle);SetJointAngle(7,angle);SetJointAngle(8,angle);SetJointAngle(9,angle);SetJointAngle(10,angle);SetJointAngle(11,angle);SetJointAngle(12,angle);SetJointAngle(13,angle);SetJointAngle(14,angle);SetJointAngle(15,angle);Delay(0x000FFFF);}}}12.4STM32驱动舵机实例/454.4定时器初始化pwm.c中函数TIM_PWM_Init()配置TIM:voidTIM_PWM_Init(u16arr,u16psc){//定义初始化结构体GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;TIM_OCInitTypeDefTIM_OCInitStructure;//使能定时器时钟TIM3/TIM4/TIM5RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3|RCC_APB1Periph_TIM4|RCC_APB1Periph_TIM5,ENABLE);//使能GPIOA/GPIOB外设时钟使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);3412.4STM32驱动舵机实例/454.4定时器初始化pwm.c中函数TIM_PWM_Init()配置TIM:voidTIM_PWM_Init(u16arr,u16psc){//初始化GPIO//设置复用输出功能,TIM3、TIM5GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_6|GPIO_Pin_7;//TIM3_CH1-2(PA6、PA7),TIM5(PA0-3)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8|GPIO_Pin_9;//TIM3的3、4通道(PB0,PB1),TIM4的1-4通道(PB6-9)GPIO_Ini
本文标题:STM32驱动舵机
链接地址:https://www.777doc.com/doc-5229944 .html