基于STM32的步进电机、直流电机和舵机的PWM驱动(实用型有代码)_百度文 ...

基于STM32的步进电机、直流电机和舵机的PWM驱动(实⽤型有代码)
STBY⼝接单⽚机的IO⼝清零电机全部停⽌,
置1通过AIN1 AIN2,BIN1,BIN2 来控制正反转
VM 接12V以内电源
VCC 接5V电源
GND 接电源负极
驱动1路
PWMA 接单⽚机的PWM⼝
真值表:
AIN1 0 0 1
AIN2 0 1 0
停⽌ 正传 反转
A01
A02 接电机1的两个脚
驱动2路
PWMB 接单⽚机的PWM⼝
真值表:
BIN1 0 0 1
BIN2 0 1 0
停⽌ 正传 反转
2、速度改变
通过改变PWM的占空⽐实现调速 。
三、舵机
舵机⽆驱动,⽅向通过改变PWM的占空⽐来实现,没有速度变化
舵机⾓度与PWM占空⽐关系图:
代码模块
PWM的配置
#include "pwm.h"
#include "stm32f4xx.h"
void pwm_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);谱图
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
pclGPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_Init(GPIOF, &GPIO_InitStructure);
TIM_TimeBaseInitStruct.TIM_Period=arr;
TIM_TimeBaseInitStruct.TIM_Prescaler=psc;
TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct);
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC1Init(TIM14,&TIM_OCInitStruct);
TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM14,ENABLE);
TIM_Cmd(TIM14, ENABLE);
/********** F2和F3的端⼝初始化    **********/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
/**********  初始化PF5      **********/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_5);
}
主函数部分:
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "pwm.h"
#include "key.h"
//#include "led.h"
int main()
{
u16 key,cout;
delay_init(168);
KEY_Init();
/******************************* 舵机部分  ***********************************
***********  0.5ms(0),1ms(45),1.5ms(90),2ms(135),2.5ms(180)  *************/ /*
pwm_Init(199,8399);  //50hz,20ms
while(1)
{
key=KEY_Scan(0);
key=KEY_Scan(0);
if(key)
{
switch(key)
{
灯光王愿坚case KEY1_PRES:
TIM_SetCompare1(TIM14,180);    //1.5ms,12点⽅向
break;
case KEY2_PRES:
TIM_SetCompare1(TIM14,185);
break;
}
}
}
*/
/*******************************  直流电机  *******************************/    pwm_Init(419,2-1);//50khz
cout = 100;
while(1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_3); //正转
GPIO_ResetBits(GPIOF,GPIO_Pin_2);
TIM_SetCompare1(TIM14,50);
key=KEY_Scan(0);
if(key == 3)
{
cout+=100;
if(cout == 400)
{
cout=100;
}
}
if(key == 2)
{
while(1)
{
key=KEY_Scan(0);
if(key == 3)
第一次熬夜
{
cout+=50;
if(cout == 420)遗传学三大定律
{
cout=50;
}
}
delay_ms(100);
GPIO_ResetBits(GPIOF,GPIO_Pin_2); //stop
GPIO_ResetBits(GPIOF,GPIO_Pin_3);
delay_ms(100);
GPIO_ResetBits(GPIOF,GPIO_Pin_3); //反转
GPIO_SetBits(GPIOF,GPIO_Pin_2);
TIM_SetCompare1(TIM14,cout);
if(key == 2)
break;
}
}
}
}
/******************************* 步进电机 *******************************/ /*
GPIO_ResetBits(GPIOF,GPIO_Pin_2);
//  1400-300hz  840-500hz(pefect)  600-700hz
cout = 1000;
while(1)
{
delay_ms(50);
GPIO_SetBits(GPIOF,GPIO_Pin_3);//˳ʱÕë
key=KEY_Scan(0);
if(key == 3)
{
cout-=400;
if(cout == 200)
{
cout =1000;
}
}
pwm_Init(199,cout);//hz=420k/cout+1
TIM_SetCompare1(TIM14,100);
if(key == 2)
{
连云港 核废料while(1)
{
key=KEY_Scan(0);
if(key == 3)
{
cout-=400;
if(cout == 200)
{
cout =1000;
}
}
delay_ms(50);
GPIO_ResetBits(GPIOF,GPIO_Pin_3);//ÄæʱÕë
TIM_SetCompare1(TIM14,100);
if(key == 2)
break;
}
}
}
*/
}

本文发布于:2024-09-20 14:40:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/651373.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:舵机   电机   速度   实现   反转   没有   变化
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议