116-基于stm32单片机直流电机PWM调速正反转控制系统Proteus仿真+程序源码

一:功能介绍

1、采用stm32单片机+L298N+电机+按键组成;

2、通过按键可以控制L298N驱动电机进行正反转;

二:仿真演示视频+程序简要讲解:(程序有中文注释,新手容易看懂)

116-基于stm32单片机直流电机PWM调速正反转控制系统Proteus仿真+程序源码+讲解视频

三:设计软件介绍

本设计使用C语言编程设计,程序代码采用keil5编写,程序有中文注释,新手容易看懂,仿真采用Proteus软件进行仿真演示视频使用的是Proteus8.9版本;资料包里有相关软件包,可自行下载安装。

四:程序打开方法

特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。

9769e09d162cd09c55494a7243437342.png

acfdb5e378e28fe27351665b7c2429d6.png

程序部分展示,有中文注释,新手容易看懂
void TIM1_PWM_Init(u16 arr,u16 psc)
{  
   GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);// 
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
                                                                         


   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  
  TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值   80K
  TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


 
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx


  TIM_CtrlPWMOutputs(TIM1,ENABLE);  //MOE 主输出使能  
  TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能     
  TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器  
  TIM_Cmd(TIM1, ENABLE);  //使能TIM1
  int main(void)
 {  
  delay_init();         //延时函数初始化    
  Motor_Init();
  TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz 
   //以下两个IO控制电机方向
  GPIO_SetBits(GPIOB,GPIO_Pin_14);             //PB.14 输出高
  GPIO_ResetBits(GPIOB,GPIO_Pin_13);  //PB.13输出低
     while(1)
  {
      delay_ms(100);                
    TIM_SetCompare1(TIM1,899);   //B13高电平,B14低电平  正转;反之反转;1-899可调,899时转速最大。100以下转动很慢,里程变化很慢
  } 
}
void Motor_Init(void)//电机GPIO初始化
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PB端口时钟


  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOB13、14
  GPIO_SetBits(GPIOB,GPIO_Pin_14);             //PB.14 输出高
  GPIO_ResetBits(GPIOB,GPIO_Pin_13);  //PB.13输出低

:仿真文件(采用Proteus打开)

47ee5100ead72a3fe67d6739fa9bf764.png

feef12873783dd322814dc729a87ed70.png

654bc6063668f3e8e8c81dfb8ff4ecb7.png

六:资料清单展示(文件中包含的关资料)

3ed22b8de4e83a2df88d509c8ab8ba98.png

百度云盘下载链接

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值