任务4-3 直流电机转速的PWM控制_第1页
任务4-3 直流电机转速的PWM控制_第2页
任务4-3 直流电机转速的PWM控制_第3页
任务4-3 直流电机转速的PWM控制_第4页
任务4-3 直流电机转速的PWM控制_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

掌握PWM控制原理

实现电机精确调速践行绿色低碳理念绿色低碳设计理念STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用项目四

PWM输出控制电机设计与实现任务4-3直流电机转速的PWM控制CONTENTS目录01任务目标明确学习目标与能力要求,掌握PWM控制原理,实现直流电机转速精确控制理论学习能力培养02知识储备直流电机控制基础、H桥驱动电路、PWM原理、STM32定时器PWM模式电机原理PWM技术03任务实施硬件电路设计、软件程序开发、系统联调与仿真验证电路设计程序开发04任务总结核心知识点梳理、技能提升要点、绿色低碳设计理念知识梳理技能提升05提升训练与评价通过知识问答、实践操作和任务评价,巩固所学知识,提升工程实践能力知识问答实践操作任务评价CHAPTERONE01任务目标明确学习目标与能力要求掌握PWM控制原理,实现直流电机转速精确控制TASKOBJECTIVES任务目标目标一掌握PWM控制原理,实现直流电机转速精确控制。理解PWM占空比与电机转速的线性关系,能够根据需求调节电机转速。理论掌握目标二理解电机原理与驱动电路,掌握H桥驱动电路工作原理,熟悉L298N电机驱动模块的使用方法,能够设计电机驱动电路。电路设计目标三掌握STM32定时器PWM模式,能够配置TIM3输出PWM信号,编写程序实现电机转速和方向的控制。程序开发绿色低碳设计理念在设计过程中注重系统优化,培养系统设计思维与创新能力,融入绿色低碳理念,通过优化PWM占空比范围、选择合适驱动模块等方式,降低电机能耗,体现环保意识。CHAPTERTWO02知识储备直流电机控制基础与PWM原理掌握电机驱动电路和PWM技术的核心知识DCMOTORBASICS直流电机概述什么是直流电机?在电机的众多类型中,直流电机(即有刷直流电动机)是极为常用的一种。依据驱动电源的差异,电机可划分为直流电机与交流电机两大类别。直流电机分类1有刷直流电机结构简单,成本低,需要定期维护电刷2无刷直流电机寿命长,效率高,控制复杂3步进电机精确控制角度,同样归属于直流电机范畴直流电机结构示意图结构组成定子:主磁极、电刷转子:电枢绕组、换向器工作原理当直流电源接通后,电能经由电刷和换向器传输至电枢绕组,进而产生电枢电流。电枢电流所形成的磁场与主磁极产生的主磁场相互作用,由此生成电磁转矩,驱动电机旋转,最终带动负载运转。H-BRIDGECIRCUIT直流电机驱动电路-H桥原理H桥电路概述直流电机常用的驱动电路是"H桥",其电路结构形似字母"H"而得名。H桥电路能有效控制电机旋转方向,是直流电机驱动的核心电路。核心优势:通过控制4个开关管的导通组合,实现电机正转、反转、停止和制动四种状态H桥电路工作原理▶S1=H,S2=HQ2、Q3导通,Q1、Q4截止→电机两端无电压差→电机不运转▶S1=L,S2=LQ1、Q4导通,Q2、Q3截止→电机不工作▶S1=H,S2=LQ2、Q4导通→电机左侧接地,右侧连电源→电源极性左负右正→电机正转▶S1=L,S2=HQ1、Q3导通→电源极性左正右负→电机反转H桥电路示意图实际工程注意事项Q1和Q2基极不必相连,以管控死区全用NPN型晶体管时,Q1需专门驱动电路大功率电机采用MOSFET、IGBT等开关器件L298NMOTORDRIVER集成电机驱动器-L298NL298N概述L298N是一种双H桥电机驱动芯片,每个H桥可以提供2A的电流,内含4路逻辑驱动电路,是直流电机控制的常用模块。2.5-48V功率供电电压范围5V逻辑部分供电2A单H桥输出电流双路可同时驱动两个电机L298N逻辑控制使能端(ENA/ENB)使能端处于激活状态时,输入信号IN1至IN4能够有效控制输出信号OUT1至OUT4输入控制(IN1-IN4)通过合理配置IN1-IN4的电平状态,控制电机的正转、反转和停止节能优化通过合理配置驱动模块参数,可进一步提高系统效率,减少能量损耗L298逻辑框图主要特点反馈检测功能过热自断保护大电流驱动能力宽电压工作范围PWMTECHNOLOGYPWM技术概述什么是PWM?PWM(PulseWidthModulation,脉冲宽度调制)技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。核心思想:通过高速切换通断状态(ON/OFF)模拟连续信号,以脉冲有效时间占比(占空比)控制输出能量PWM占空比计算占空比计算公式D=(脉冲宽度/周期)×100%计算示例脉冲宽度6ms÷周期8ms=占空比75%PWM输出示意图PWM技术优势高效:全程采用数字信号,无需数模转换抗干扰:数字信号抗噪声能力强应用广泛:电机调速、LED调光等领域STM32TIMERPWMMODESTM32定时器PWM模式STM32定时器PWM输出能力对STM32F103而言,除TIM6和TIM7外,其余定时器均可用于产生PWM输出。每个输出通道都对应着一个CCR寄存器(TIM_CCRx)。高级定时器TIM1、TIM8多达7路PWM通用定时器TIM2、TIM3、TIM4、TIM5多达4路PWM向上计数PWM模式工作原理①计数器机制TIMx_CNT从0开始递增,每时钟周期+1,达到TIMx_ARR-1后自动归零,循环往复②电平控制逻辑•当TIMx_CNT<TIMx_CCRx时,IO输出低电平•当TIMx_CNT≥TIMx_CCRx时,IO跳变为高电平③参数作用TIMx_ARR:决定PWM周期(周期时长=ARR×时钟周期)TIMx_CCRx:控制占空比(占空比=CCRx/ARR)PWM产生示意图调参特性修改ARR:调整PWM频率修改CCRx:改变占空比二者独立配置PWMPARAMETERCONFIGURATIONPWM参数配置详解PWM频率计算频率计算公式F=TIM_CLK/(PSC+1)/(ARR+1)计算示例TIM_CLK=72MHzPSC=35(预分频值)ARR=99(自动重装值)F=72MHz/36/100=20kHz关键参数说明PSC(预分频器):对时钟进行分频ARR(自动重装值):决定PWM周期CCRx(捕获比较值):决定占空比占空比计算占空比计算公式D=(CCRx+1)/(ARR+1)×100%计算示例CCRx=49(捕获比较值)ARR=99(自动重装值)D=(49+1)/(99+1)×100%=50%调参特性独立配置:ARR和CCRx可以独立修改灵活调节:分别控制频率和占空比实时更新:修改后立即生效设计提示:在实际应用中,需要根据电机特性和控制需求选择合适的PWM频率。频率过低会导致电机抖动和噪音,频率过高会增加开关损耗。一般直流电机控制推荐频率范围为10kHz-20kHz。PWMCONFIGURATION(1/3)标准外设库函数输出PWM信号(一)步骤一:使能时钟并初始化GPIO在进行PWM配置之前,需要先开启定时器和GPIO的时钟,并将PWM输出引脚配置为复用推挽输出模式。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,

ENABLE);

//

开启TIM3时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,

ENABLE);

//

开启GPIOA时钟//

配置PA7为复用推挽输出(TIM3_CH2)GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;GPIO_Init(GPIOA,

&GPIO_InitStructure);步骤二:配置定时器时基单元配置定时器的时间基准单元,包括预分频器、计数模式、周期等参数。TIM_TimeBaseStructure.TIM_Period

=

100

-

1;

//

ARR

=

99,决定PWM周期TIM_TimeBaseStructure.TIM_Prescaler

=

36

-

1;

//

PSC

=

35,预分频TIM_TimeBaseStructure.TIM_ClockDivision

=

TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode

=

TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,

&TIM_TimeBaseStructure);PWM频率计算:72MHz÷36÷100=20kHz时基单元参数说明TIM_Period自动重装值ARR,决定PWM周期TIM_Prescaler预分频器PSC,对时钟分频TIM_CounterMode计数模式,向上/向下/中央对齐TIM_ClockDivision时钟分割因子,用于数字滤波重要提示必须先开启时钟,才能进行后续的配置操作。如果忘记开启时钟,后续的GPIO和定时器配置操作将无效!PWMCONFIGURATION(2/3)标准外设库函数输出PWM信号(二)步骤三:配置输出比较器为PWM模式使用输出比较器初始化结构体配置PWM模式、输出极性等参数。//

定义输出比较器初始化结构体TIM_OCInitTypeDef

TIM_OCInitStructure;//

配置PWM模式TIM_OCInitStructure.TIM_OCMode

=

TIM_OCMode_PWM1;

//

PWM模式1TIM_OCInitStructure.TIM_OutputState

=

TIM_OutputState_Enable;

//

使能输出TIM_OCInitStructure.TIM_OCPolarity

=

TIM_OCPolarity_High;

//

高电平有效TIM_OCInitStructure.TIM_Pulse

=

0;

//

初始比较值TIM_OC2Init(TIM3,

&TIM_OCInitStructure);

//

初始化TIM3通道2TIM_OCMode可选参数TIM_OCMode_PWM1PWM模式1,常用模式TIM_OCMode_PWM2PWM模式2,极性相反TIM_OCMode_Timing定时模式,不产生输出TIM_OCMode_Toggle翻转模式,产生脉冲TIM_OCMode_Active/Inactive主动/被动电平模式PWM1模式工作原理配置条件TIM_OCPolarity=TIM_OCPolarity_High(高电平有效)输出逻辑•CNT<CCRx:输出高电平(有效)•CNT≥CCRx:输出低电平(无效)特点PWM1模式是常用的PWM输出模式,占空比与CCRx值成正比输出极性配置TIM_OCPolarity_High:高电平有效TIM_OCPolarity_Low:低电平有效PWMCONFIGURATION(3/3)标准外设库函数输出PWM信号(三)步骤四:使能预装载寄存器和定时器使能预装载寄存器可以实现PWM参数的平滑更新,然后启动定时器开始输出PWM信号。//

使能通道2预装载寄存器TIM_OC2PreloadConfig(TIM3,

TIM_OCPreload_Enable);//

使能TIM3定时器TIM_Cmd(TIM3,

ENABLE);预装载寄存器作用:修改CCRx值时,新值会先存入预装载寄存器,在当前周期结束后才生效,避免PWM波形出现毛刺步骤五:设置PWM占空比通过修改捕获比较寄存器CCRx的值来改变PWM占空比,从而控制电机转速。//

设置TIM3通道2的比较值TIM_SetCompare2(TIM3,

49);//

占空比计算//

CCR2

=

49,

ARR

=

99//

占空比

=

(49

+

1)

/

(99

+

1)

×

100%

=

50%动态调速在程序运行过程中,可以通过不断修改TIM_SetCompare2()的参数值来实现电机转速的动态调节PWM配置完整流程1使能定时器和GPIO时钟2配置GPIO为复用推挽输出3配置定时器时基单元4配置输出比较器为PWM模式5使能预装载寄存器6使能定时器,输出PWM7动态修改占空比调速配置完成初始化完成后,启动定时器,PWM即开始输出。可以通过修改TIM_SetCompare2()来动态控制占空比,实现电机调速。CHAPTERTHREE03任务实施电路设计与程序开发硬件电路搭建、软件程序编写、系统联调验证TASKREQUIREMENTS任务实现要求任务目标利用STM32F103R6的TIM3PWM输出功能,通过L298N电机驱动模块来控制直流电机的转速和方向,实现一个完整的电机控制系统。要求一PWM调速与换向通过STM32的TIM3定时器生成PWM信号,调节占空比控制直流电机的转速,支持正转和反转两种转向。PWM输出正反转控制要求二按键调速控制设置一个按键KEY1,每次按键按下提高电机的转速,占空比增加20%,当占空比达到100%后反向运转。按键检测外部中断要求三LCD实时显示使用LCD1602显示屏实时显示电机的转速和转向状态(正转或反转),提供友好的用户界面。LCD显示状态反馈系统功能框图按键输入KEY1(PB14)STM32F103PWM控制L298N驱动电机驱动直流电机转速/转向LCD1602状态显示HARDWAREDESIGN硬件电路设计-系统组成系统组成根据任务实现要求,系统主要由STM32F103微控制器、按键模块、LCD1602显示模块、电机驱动模块等组成。STM32F103R6主控制器,产生PWM信号,处理按键输入,控制LCD显示按键模块独立按键KEY1,用于调节电机转速和转向LCD1602显示实时显示电机转速和转向状态L298N驱动双H桥电机驱动,放大PWM信号驱动电机引脚分配表PA7TIM3_CH2(PWM)PA4IN1(方向)PA5IN2(方向)PB14KEY1(按键)PB0-PB7LCD数据PB8/PB9LCD控制任务仿真原理图设计说明在Proteus软件中,复位电路和晶振电路在不连接的情况下,软件默认处于已接好状态,因此仿真图中可以省略这两个电路。MOTORDRIVERMODULE电机驱动模块设计L298N连接与控制本设计采用L298N双H桥驱动芯片,通过放大STM32输出的PWM信号驱动直流电机。ENA(PA7)接收PWM信号控制转速IN1(PA4)方向控制高/低电平IN2(PA5)方向控制高/低电平ENA、IN1、IN2与电机状态关系ENAIN1IN2电机状态HLH正转HHL反转HLL停止HHH停止LXX自然停止L298N电机驱动模块控制原理PWM占空比决定输出到电机的等效电压值IN1/IN2组合控制电机的旋转方向精确调速通过调节占空比实现LCD1602DISPLAYMODULELCD1602显示模块LCD1602概述LCD1602(LiquidCrystalDisplay)是一种工业字符型液晶,能够同时显示16×2即32个字符(16列两行)。16×2显示容量5×8点阵大小8位数据接口LCD1602引脚功能定义引脚名称功能1VSS地引脚2VDD电源正(+5V)3VL对比度调节(接电位器)4RS寄存器选择(1:数据0:指令)5R/W读写控制(1:读0:写)6E使能信号(高→低执行)7-14DB0-DB78位双向数据线LCD1602液晶显示屏本任务连接方式PB0-PB7→DB0-DB7(数据)PB8→RS(寄存器选择)PB9→EN(使能信号)RW→GND(仅写操作)LCD1602OPERATIONSLCD1602模块连接与操作LCD1602基本操作微处理器对LCD模块有四种基本操作,由RS、R/W和E三个控制引脚的不同组合状态来确定。RSR/WE操作00↓写命令:初始化、清屏、光标定位等01↓读状态:读忙标志,忙=1时不能操作10↓写数据:写入要显示的内容11↓读数据:将显示存储区数据读出常用命令0x388位数据,2行显示0x01清屏0x0C开显示,关光标0x06地址指针自动+1本任务连接示意图STM32F103PB0-PB7→数据引脚D0-D7PB8→RS引脚PB9→EN引脚LCD1602DB0-DB7←数据输入RS←寄存器选择EN←使能信号RW←GND(仅写)注意事项只有写操作,RW引脚接地使能信号E由高到低跳变时执行命令初始化时需要适当的延时等待KEYMODULEDESIGN按键模块设计按键设计方案根据任务要求,设置一个独立按键KEY1,用于控制电机转速的调节和转向切换。按键连接一端→GND(地)另一端→PB14GPIO配置模式:上拉输入引脚:PB14按键检测原理未按下状态由于配置为上拉输入模式,按键未按下时,引脚被内部上拉电阻拉高,读取电平为高电平(1)按下状态按键按下时,引脚通过按键连接到GND,被拉低,读取电平为低电平(0)检测逻辑通过外部中断检测PB14引脚的下降沿(高→低),触发中断服务函数,执行速度调节操作速度调节逻辑每次按键Speed+=20(占空比增加20%)达到100%后Speed=-100(反向运转)循环调节-100→-80→-60→...→0→20→40→...→100→-100按键工作流程1按键按下(下降沿触发)2外部中断触发3执行中断服务函数4Speed变量更新5电机转速/方向改变SOFTWAREARCHITECTURE软件设计-模块架构模块化设计架构为满足任务要求,程序设计采用模块化编程思想,将不同功能封装成独立模块,便于代码复用和维护。Main.c主程序模块初始化各外设,控制主循环PWM.cPWM模块配置TIM3输出PWM信号Motor.c电机控制模块控制电机转速和方向LCD1602.c显示模块LCD初始化和显示控制Key.c按键模块按键初始化和外部中断处理模块化设计优势代码结构清晰便于复用维护分工协作开发易于调试测试模块调用关系Main.c(主程序)调用所有模块Motor.c调用PWMLCD1602.c独立模块PWM.c底层驱动Key.c中断处理头文件组织//

Main.c

包含的头文件#include

"stm32f10x.h"#include

"Key.h"#include

"LCD1602.h"#include

"PWM.h"#include

"motor.h"#include

"delay.h"MAINPROGRAM主程序模块(Main.c)主程序代码#include"stm32f10x.h“#include"Key.h“#include"LCD1602.h“#include"PWM.h“#include"motor.h“#include"delay.h"//

全局变量:电机速度,初始为-40int8_t

Speed

=

-40;int

main(void){

delay_init();

LCD_Init();

Motor_Init();

Key_Init();

LCD_Write_String(0,

1,

"Speed:");

while(1){

Motor_SetSpeed(Speed);

LCD_ShowSignedNum(0,

7,

Speed,

3);

if(Speed

<

0)

LCD_Write_String(1,

1,

"fan

zhuan

");

else

LCD_Write_String(1,

1,

"zheng

zhuan

");

}}程序执行流程①初始化阶段delay_init()-延时函数LCD_Init()-LCD显示屏Motor_Init()-直流电机Key_Init()-按键中断②显示初始界面LCD_Write_String(0,1,"Speed:")③主循环Motor_SetSpeed(Speed)-设置速度LCD_ShowSignedNum()-显示速度值判断转向并显示全局变量int8_tSpeed=-40电机速度变量,初始化为-40,表示初始为反转状态PWMMODULEPWM模块(PWM.c)PWM初始化代码void

PWM_Init(void){

GPIO_InitTypeDef

GPIO_InitStructure;

TIM_TimeBaseInitTypeDef

TIM_TimeBaseInitStructure;

TIM_OCInitTypeDef

TIM_OCInitStructure;

//

1.

开启时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,

ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,

ENABLE);

//

2.

配置GPIO

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_Init(GPIOA,

&GPIO_InitStructure);

//

3.

配置时基单元

TIM_TimeBaseInitStructure.TIM_ClockDivision

=

TIM_CKD_DIV1;

TIM_TimeBaseInitStructure.TIM_CounterMode

=

TIM_CounterMode_Up;

TIM_TimeBaseInitStructure.TIM_Period

=

100

-

1;

TIM_TimeBaseInitStructure.TIM_Prescaler

=

36

-

1;

TIM_TimeBaseInit(TIM3,

&TIM_TimeBaseInitStructure);

//

4.

配置输出比较器

TIM_OCInitStructure.TIM_OCMode

=

TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OCPolarity

=

TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OutputState

=

TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_Pulse

=

0;

TIM_OC2Init(TIM3,

&TIM_OCInitStructure);

//

5.

使能预装载和定时器

TIM_OC2PreloadConfig(TIM3,

TIM_OCPreload_Enable);

TIM_Cmd(TIM3,

ENABLE);}PWM配置步骤1开启TIM3和GPIOA时钟2配置PA7为复用推挽输出3配置时基单元(ARR=99,PSC=35)4配置PWM1模式,高电平有效5使能预装载寄存器6启动定时器,输出PWM设置占空比函数void

PWM_SetCompare2(uint16_t

Compare){

TIM_SetCompare2(TIM3,

Compare);}MOTORCONTROLMODULE电机控制模块(Motor.c)电机控制代码void

Motor_Init(void){

GPIO_InitTypeDef

GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,

ENABLE);

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_4

|

GPIO_Pin_5;

GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_Init(GPIOA,

&GPIO_InitStructure);

PWM_Init();

//

调用PWM初始化}void

Motor_SetSpeed(int8_t

Speed){

if

(Speed

>=

0)

{

//

正转:PA4=1,

PA5=0

GPIO_SetBits(GPIOA,

GPIO_Pin_4);

GPIO_ResetBits(GPIOA,

GPIO_Pin_5);

PWM_SetCompare2(Speed);

}

else

{

//

反转:PA4=0,

PA5=1

GPIO_ResetBits(GPIOA,

GPIO_Pin_4);

GPIO_SetBits(GPIOA,

GPIO_Pin_5);

PWM_SetCompare2(-Speed);

}}控制逻辑分析正转(Speed≥0)PA4=1(高电平)PA5=0(低电平)PWM占空比=Speed反转(Speed<0)PA4=0(低电平)PA5=1(高电平)PWM占空比=-Speed关键说明PA4和PA5的高低电平组合决定电机转向,PWM占空比决定电机速度。速度为负时,取反后设置占空比。与L298N连接PA4→IN1PA5→IN2PA7→ENA(PWM)LCD1602MODULELCD1602显示模块(LCD1602.c)LCD初始化代码void

LCD_Init(void){

GPIO_InitTypeDef

MyGPIO;

//

开启GPIOB和AFIO时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB

|

RCC_APB2Periph_AFIO,

ENABLE);

//

禁用JTAG,释放PB3、PB4、PA15

GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,

ENABLE);

//

配置PB0-PB9为推挽输出

MyGPIO.GPIO_Pin

=

GPIO_Pin_0

|

GPIO_Pin_1

|

...

|

GPIO_Pin_9;

MyGPIO.GPIO_Speed

=

GPIO_Speed_10MHz;

MyGPIO.GPIO_Mode

=

GPIO_Mode_Out_PP;

GPIO_Init(GPIOB,

&MyGPIO);

//

发送初始化命令序列

LCD_Write_Com(0x38);

//

8位数据,2行显示

LCD_Write_Com(0x08);

//

关闭显示

LCD_Write_Com(0x01);

//

清屏for(i

=

0;

i

<

100000;

i++);

//

延时

LCD_Write_Com(0x06);

//

地址指针自动+1

LCD_Write_Com(0x0C);

//

开显示,关光标}显示函数LCD_Write_String(x,y,*p)在指定位置(x,y)显示字符串LCD_ShowSignedNum(Line,Column,Number,Length)显示带符号的整数,自动处理正负号使用示例LCD_Write_String(0,

1,

"Speed:");LCD_ShowSignedNum(0,

7,

Speed,

3);显示效果第0行:Speed:-040第1行:fanzhuanKEYMODULE按键模块(Key.c)按键初始化代码void

Key_Init(void){

GPIO_InitTypeDef

GPIO_InitStructure;

EXTI_InitTypeDef

EXTI_InitStructure;

NVIC_InitTypeDef

NVIC_InitStructure;

//

1.

开启GPIOB和AFIO时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,

ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,

ENABLE);

//

2.

配置PB14为上拉输入

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_14;

GPIO_Init(GPIOB,

&GPIO_InitStructure);

//

3.

配置外部中断

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,

GPIO_PinSource14);

EXTI_InitStructure.EXTI_Line

=

EXTI_Line14;

EXTI_InitStructure.EXTI_LineCmd

=

ENABLE;

EXTI_InitStructure.EXTI_Mode

=

EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger

=

EXTI_Trigger_Falling;

EXTI_Init(&EXTI_InitStructure);

//

4.

配置NVIC中断优先级

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

NVIC_InitStructure.NVIC_IRQChannel

=

EXTI15_10_IRQn;

NVIC_InitStructure.NVIC_IRQChannelCmd

=

ENABLE;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority

=

1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority

=

1;

NVIC_Init(&NVIC_InitStructure);}外部中断服务函数void

EXTI15_10_IRQHandler(void){

if

(EXTI_GetITStatus(EXTI_Line14)

==

SET)

{

if

(GPIO_ReadInputDataBit(GPIOB,

GPIO_Pin_14)

==

0)

{

Speed

+=

20;

//

速度加20if

(Speed

>

100)

Speed

=

-100;

//

反向

}

EXTI_ClearITPendingBit(EXTI_Line14);

}}速度变化流程-100→-80→-60→-40→-20→0→20→40→60→80→100→-100(循环)中断配置说明触发方式:下降沿触发优先级组:Group2抢占优先级:1响应优先级:1SYSTEMDEBUGGING系统联调与仿真验证联调验证内容在软件工程编译完成后,将生成的hex目标代码文件加载到STM32F103芯片中。在调试工具中点击"运行"按钮启动程序,需要进行以下三项功能验证:1电机控制测试通过按键调整电机转速,观察电机转速变化和转向是否正确。验证PWM占空比调节是否正常,正转/反转切换是否准确。2LCD显示测试观察LCD1602是否实时显示电机的转速和转向状态。验证速度值显示是否准确,转向文字是否正确切换。3PWM输出测试使用示波器测量PA7引脚输出的PWM信号,验证占空比是否正确。观察占空比随按键调节的变化情况。仿真效果图调试技巧记录异常现象和错误提示分析问题原因并定位修改代码并重新编译重复调试直到功能正常CHAPTERFOUR04任务总结核心知识点梳理总结技能提升要点,强化绿色低碳设计理念KEYKNOWLEDGESUMMARY核心知识点总结H桥电机驱动电路理解H桥电路的工作原理和四种工作状态掌握L298N驱动模块的使用方法和引脚功能能够通过控制信号实现电机的正转、反转和停止PWM技术理解PWM占空比与电机转速的线性关系掌握占空比计算公式:D=(CCRx+1)/(ARR+1)×100%了解PWM在电机调速、LED调光等领域的应用STM32定时器PWM模式掌握TIM3PWM输出的配置流程和库函数使用理解ARR和CCRx参数的作用和配置方法能够通过修改CCRx值动态调节PWM占空比模块化编程理解模块化编程思想的优势和应用场景掌握程序模块的划分原则和接口设计能够独立设计各功能模块并实现模块间调用SKILLIMPROVEMENT技能提升要点电路设计能力能够设计直流电机驱动电路(含H桥模块),理解电路原理图,正确连接各模块引脚,通过PWM信号控制电机正反转及转速。电路原理引脚连接程序开发能力能够编写程序实现按键实时调节转速,并通过LCD显示反馈。掌握模块化编程、中断处理、PWM配置等核心技能。模块化编程中断处理调试测试能力掌握系统联调方法和调试技巧,能够使用示波器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论