STM32F103C8+L298N_PWM直流电机调速

合集下载

【C语言学习】51单片机L298N驱动电机调速

【C语言学习】51单片机L298N驱动电机调速

【C语⾔学习】51单⽚机L298N驱动电机调速51单⽚机L298N驱动电机调速//=============L298N端⼝定义===============sbit ENA = P3^6; //左轮驱动使能sbit IN1 = P0^3; //左轮⿊线(-)sbit IN2 = P0^4; //左轮红线(+)sbit IN3 = P0^5; //右轮红线(-)sbit IN4 = P0^6; //右轮⿊线(+)sbit ENB = P3^7; //右轮驱动使能//=============PWM================#define PWM_COUST 100 //PWM细分等份uchar MOTO_speed1; //左边电机转速uchar MOTO_speed2; //右边电机转速uchar PWM_abs1; //左边电机取绝对值后占空⽐uchar PWM_abs2; //左边电机取绝对值后占空⽐uchar PWM_var1=20; //左边电机直⾛速度(不同的电机,此参数不同)uchar PWM_var2=20; //右边电机直⾛速度uchar PWMAnd = 0; //PWM⾃增变量void motor(char speed1,char speed2){//==============左边电机=============if (speed1>0){IN1 =0;IN2 =1;//正转}else if (speed1<0){IN1 =1;IN2 =0;//反转}//==============右边电机=============if (speed2>0){IN3 =1;IN4 =0;//正转}else if (speed2<0){IN3 =0;IN4 =1;//反转}}void motor_PWM (){uchar PWM_abs1;uchar PWM_abs2;PWM_abs1=MOTO_speed1;PWM_abs2=MOTO_speed2;if (PWM_abs1>PWMAnd) ENA=1; //左边电机占空⽐输出 else ENA=0;if (PWM_abs2>PWMAnd) ENB=1; //右边电机占空⽐输出 else ENB=0;if (PWMAnd>=PWM_COUST) PWMAnd=0; //PWM计数清零 else PWMAnd+=1;}void TIME_Init (){//=========定时器T2初始化 PWM================== T2CON = 0x00;T2MOD = 0x00;RCAP2H = 0xff; //定时0.1msRCAP2L = 0x47;TH2 = 0xff;TL2 = 0x47;ET2 = 1; //定时器2中断开TR2 = 1; //PWM定时器关,PWM周期为10ms}void PWM_Time2 () interrupt 5{TR2 = 0;TF2 = 0;ET2 = 0; //定时器0中断禁⽌motor_PWM();//PWM占空⽐输出ET2 = 1; //定时中断0开启TR2 = 1;}main(){TIME_Init () ;motor(50,50);//左右电机的转速都是50}。

STM32F103C8L298N_PWM直流电机调速教学内容

STM32F103C8L298N_PWM直流电机调速教学内容

STM32F103C8+L298N 速调机电流直MWP_调速直流电机调速PWM核心板STM32F103C8T6+L298N功能说明)(一STM32PWM控制。

仅用IN1,IN2可用于驱动一台直流减速电机,引脚用L298N IN2即可实现正反转、加减速等动作。

信号控制IN1,的两个端口给出PWM硬件说明:二)(最小系统;控制板:STM32F03C8T6控制板说明STM32F103C8T6型号:TM-M3 CPU Cortex内核:ARM 32位的SWD调试方式:22.86mm×53.34mm尺寸:直流电机驱动板:L298N是SGS公司的产品,比较常见的是15脚MulTIwatt封装的L298N,内部同样包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

.资源配置:三()STM32F03C8T6使用端口定义配置功能说明端口PA2 PWM功能,芯片的IN1 通用定时器的连接L298NTIM2_CH3PA3 功能,PWM芯片的IN2 通用定时器的连接L298NTIM2_CH4PC13定时中断指示灯,周期性的变通用定时器TIM3控制板带的LED化,每变化一次,电机的转运方向变化一次。

中断定时控制。

由TIM3L298N端口定义IN1 IN2 ENA电机状态0 PA2 始终是1 PA2顺时针运转,调整的频率,可高速。

PA3 0 始终是1 逆时针运转,调整PA2的频率,可高速。

始终是停止1(四)软件实现1:通用定时器TIM3的中断定时实现步骤①使能定时器时钟。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);②初始化定时器,配置【ARR自动装载值,PSC预分频系数。

】TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);③开启定时器中断,配置NVIC。

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);NVIC_Init(&NVIC_InitStructure);使能定时器。

基于stm32单片机的直流电机调速系统设计

基于stm32单片机的直流电机调速系统设计

基于stm32单片机的直流电机调速系统设计
本文介绍一种基于STM32单片机的直流电机调速系统设计,主要包括硬件电路设计和软件程序设计两部分。

硬件电路设计:
该电机调速系统的主要硬件电路包括电源模块、STM32单片机控制电路、直流电机驱动电路和反馈电路。

1. 电源模块
电源模块包括AC/DC变换模块和稳压模块,用于将输入的AC电压转换为适宜单片机和电机工作的DC电压。

2. STM32单片机控制电路
STM32单片机控制电路包括主控芯片STM32单片机、晶振、复位电路和下载程序电路等。

3. 直流电机驱动电路
直流电机驱动电路包括电机驱动芯片(如L298N)和电机,用于控制电机的转
速和方向。

4. 反馈电路
反馈电路包括编码器和光电传感器等,用于实现电机转速的反馈和闭环控制。

软件程序设计:
该电机调速系统的软件程序采用C语言编写,主要包括定时器计数、PWM输出控制、编码器读取、PID算法控制等模块。

1. 定时器计数
通过STM32单片机内部定时器计数来实现电机转速的测量和控制。

2. PWM输出控制
采用STM32单片机内部PWM输出控制模块控制电机的转速,并实现电机方向的控制。

3. 编码器读取
通过编码器读取电机的转速信息,并反馈到单片机进行控制和显示。

4. PID算法控制
采用PID(比例、积分、微分)算法控制电机的转速,实现闭环控制,提高控制精度。

总之,基于STM32单片机的直流电机调速系统设计,既可以提高电机运行的效率和精度,又可以简化电路结构和减小系统成本,具有较好的应用前景。

L298中文资料+PWM调速

L298中文资料+PWM调速

L298中文资料+PWM调速L298N电机驱动器使用说明书L298N是ST公司生产的一种高电压、大电流电机驱动芯片。

该芯片采用15脚封装。

主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。

内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。

使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。

简要说明:一、尺寸:80mmX45mm二、主要芯片:L298N、光电耦合器三、工作电压:控制信号直流5V;电机电压直流3V~46V(建议使用36伏以下)四、最大工作电流:2.5A五、额定功率:25W特点:1、具有信号指示。

2、转速可调3、抗干扰能力强4、具有过电压和过电流保护5、可单独控制两台直流电机6、可单独控制一台步进电机7、PWM脉宽平滑调速8、可实现正反转9、采用光电隔离六、有详细使用说明书七、提供相关软件八、提供例程及其学习资料实例一:步进电机的控制实例步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。

步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。

一、步进电机最大特点是:1、它是通过输入脉冲信号来进行控制的。

2、电机的总转动角度由输入脉冲数决定。

3、电机的转速由脉冲信号频率决定。

二、步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。

(或者其他信号源)如图:按CTRL并点击(L298N驱动器与直流电机接线图)三、基本原理作用如下:1、通电换相这一过程称为脉冲分配。

基于STM32的直流电机PWM调速控制

基于STM32的直流电机PWM调速控制

(《嵌入式系统及接口技术》课程大作业)课程名称:嵌入式系统及接口技术班级专业:姓名学号:指导老师:电动摩托车控制器中的电机PWM调速摘要:随着“低碳”社会理念的深入,新型的电动摩托车发展迅速,逐渐成为人们主要的代步工具之一,由于直流无刷电机的种种优点,在电动摩托车中也得到了广泛应用,因此,本文控制部分主要介绍一种基于STM32F103芯片的新型直流无刷电机调速控制系统,这里主要通过PWM技术来进行电机的调速控制,且运行稳定,安全可靠,成本低,具有深远的意义。

1.总体设计概述1.1 直流无刷电机及工作原理直流无刷电机(简称BLDCM),由于利用电子换向取代了传统的机械电刷和换向器,使得其电磁性能可靠,结构简单,易于维护,既保持了直流电机的优点又避免了直流电机因电刷而引起的缺陷,因此,被广泛应用。

另外,由于直流无刷电机专用控制芯片价格昂贵,本文介绍了一种基于STM32的新型直流无刷电机控制系统,既可降低直流无刷电机的应用成本,又弥补了专用处理器功能单一的缺点,具有重要的现实意义和发展前景。

工作原理:直流无刷电机是同步电机的一种,其转子为永磁体,而定子则为三个按照星形连接方式连接起来的线圈,根据同步电机的原理,如果电子线圈产生一个旋转的磁场,则永磁体的转子也会随着这个磁场转动因此,驱动直流无刷电机的根本是产生旋转的磁场,而这个旋转的磁场可以通过调整A、B、C三相的电流来实现,其需要的电流如图1所示随着我国经济和文化事业的发展,在很多场合,都要求有直流电机PWM调速系统来进行调速,诸如汽车行业中的各种风扇、刮水器、喷水泵、熄火器、反视镜、宾馆中的自动门、自动门锁、自动窗帘、自动给水系统、柔巾机、导弹、火炮、人造卫星、宇宙飞船、舰艇、飞机、坦克、火箭、雷达、战车等场合。

1.2 总体设计方案总体设计方案的硬件部分详细框图如图1所示。

图1 总体方案系统框图该方案主要运行状况如下:通过摩托车车把的转动来改变其机械位置,然后这个变量通过ADC 转换后,传送其调速信号给STM32F103,另外,霍尔传感器将其对电机速度的检测信号也传送给STM32,在STM32中,首先根据ADC 的值改变PWM 波形,并且与霍尔传感器的检测信号进行叠加,最终输出叠加后的PWM 波形给功率驱动电路,从而驱动电机并对其进行速度的控制和调节。

教大家使用L298N电机驱动模块,电机控制正反转、调速很轻松!

教大家使用L298N电机驱动模块,电机控制正反转、调速很轻松!

教大家使用L298N电机驱动模块,电机控制正反转、调速很轻松!普及数电模电知识,科教兴国。

大家好,今天和大家来学习L298N电机驱动模块。

L298N是双H 桥电机驱动芯片,可以驱动两个直流电机或者一个步进电机,能实现电机的正反转以及调速。

先来看看L298N芯片实物:上图是15脚Multiwatt封装的L298N。

L298N兼容标准的TTL逻辑,是一款高电压、高电流双全桥驱动器,能够驱动感性负载,例如继电器、电磁阀、直流电机、步进电机等。

两个独立的使能信号用于使能或禁能设备,每一个桥的下管射极相连,射极引脚可以连接相应的采样电阻,用以过流保护,芯片的逻辑供电与负载供电分离,以使芯片可以工作在更低的逻辑电压下。

这个芯片那么多引脚,对于各引脚的功能定义,我们可以通过数据手册来了解:从下往上数,按照序号,1脚和15脚是:电机电流(或叫桥驱动电流)检测引脚;2、3脚是A桥输出引脚,可接一个直流电机;4脚是负载驱动供电引脚,这个引脚和地之间必须要接一个100nF的无感电容;5脚和7脚是A桥信号输入,兼容TTL电平;6脚和11脚是使能输入,兼容TTL,低电平禁能,高电平使能;8脚是地,GND;9脚是逻辑供电,该引脚到地必须连接一个100nF的电容;10脚和12脚是B 桥信号输入,同样兼容TTL逻辑电平;13脚和14脚是B桥输出,可接一个直流电机。

在这里需要提一下,是关于1脚和15脚:当需要对电机电流进行检测时,分别在sense A、B两个引脚上串接个小电阻,当A、B两个桥的电流(电机电流)流过两个电阻时转换成电压,这个电压被送到控制L298工作的上位机(或控制电路),上位机就根椐这个电压的高低判断L298是否工作正常。

如果这个电压超过设计上限时,上位机就判L298有故障,可采取如下保护措施:1、停止步进脉冲输出,关断电机电流。

2、给EN脚一个低电平,关闭L298。

如sense不用,就直接将sense A、B两脚接地。

基于stm32f103c8t6的pwm对直流有刷电机控制系统设计的实验报告

基于stm32f103c8t6的pwm对直流有刷电机控制系统设计的实验报告

基于stm32f103c8t6的pwm对直流有刷电机控制系统设计的实验报告实验报告:基于STM32F103C8T6的PWM对直流有刷电机控制系统设计一、实验目标本实验旨在通过STM32F103C8T6微控制器实现对直流有刷电机的高精度控制,通过PWM(脉宽调制)信号调节电机的转速和方向。

通过本实验,了解并掌握PWM的基本原理、电机控制的原理以及STM32的PWM输出功能。

二、实验原理1. PWM原理PWM,即脉宽调制,是一种广泛用于控制各种设备的信号技术。

在PWM 信号中,脉冲的宽度被调制,即脉冲持续时间被改变,以传递信息。

在电机控制中,PWM常被用于调节电机输入电压的占空比,从而改变电机的输入功率,实现电机的速度和方向控制。

2. 直流有刷电机控制原理直流有刷电机是一种常见的电机类型,其工作原理基于电磁感应。

通过改变电机的输入电压或电流,可以改变电机的转速和方向。

在本实验中,我们将使用PWM信号来调节电机的输入电压,从而实现电机的控制。

3. STM32F103C8T6的PWM输出功能STM32F103C8T6是一款常用的微控制器,具有强大的PWM输出功能。

通过STM32的PWM功能,我们可以生成PWM信号,并对其占空比进行调节,从而实现电机的精确控制。

三、实验步骤1. 搭建硬件电路首先,我们需要搭建硬件电路,包括电源、STM32F103C8T6微控制器、直流有刷电机以及必要的驱动电路。

电源应提供稳定的电压,以保证电机的正常工作。

微控制器与电机之间的连接应使用适当的驱动电路,以保护微控制器不被电机的高电流损坏。

2. 配置STM32F103C8T6的PWM输出在STM32CubeMX软件中配置STM32F103C8T6的PWM输出。

选择适当的定时器,配置其通道为PWM模式,并设置所需的频率和占空比。

3. 编写控制程序使用STM32CubeMX软件生成代码框架,并在其中编写控制程序。

程序应能根据需要调节PWM的占空比,从而改变电机的转速和方向。

基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计

基于STM32的直流电机PID调速系统设计一、引言直流电机调速系统是现代工业自动化系统中最常用的电机调速方式之一、它具有调速范围广、响应快、控制精度高等优点,被广泛应用于电力、机械、石化、轻工等领域。

本文将介绍基于STM32单片机的直流电机PID调速系统的设计。

二、系统设计直流电机PID调速系统主要由STM32单片机、直流电机、编码器、输入和输出接口电路等组成。

系统的设计流程如下:1.采集反馈信号设计中应通过编码器等方式采集到反馈信号,反应电机的转速。

采集到的脉冲信号经过处理后输入给STM32单片机。

2.设计PID算法PID调节器是一种经典的控制算法,由比例(P)、积分(I)和微分(D)三个部分组成,可以根据实际情况调整各个参数的大小。

PID算法的目标是根据反馈信号使电机达到期望的转速。

3.控制电机速度根据PID算法计算出的偏差值,通过调节电机的占空比,实现对电机速度的控制。

当偏差较大时,增大占空比以加速电机;当偏差较小时,减小占空比以减速电机。

4.界面设计与控制设计一个人机交互界面,通过该界面可以设置电机的期望转速以及其他参数。

通过输入接口电路将相应的信号输入给STM32单片机,实现对电机的远程控制。

5.系统保护在电机工作过程中,需要保护电机,防止出现过流、超速等问题。

设计一个保护系统,能够监测电机的工作状态,在出现异常情况时及时停止电机工作,避免损坏。

6.调试与优化对系统进行调试,通过实验和测试优化PID参数,以获得更好的控制效果。

三、系统实现系统实现时,首先需要进行硬件设计,包括STM32单片机的选型与外围电路设计,以及输入输出接口电路的设计。

根据实际情况选择合适的编码器和直流电机。

接着,编写相应的软件代码。

根据系统设计流程中所述,编写STM32单片机的控制程序,包括采集反馈信号、PID算法实现、控制电机速度等。

最后,进行系统调试与优化。

根据系统的实际情况,调试PID参数,通过实验和测试验证系统的性能,并进行优化,以实现较好的控制效果。

基于单片机的pid电机调速控制系统的硬件电路设计

基于单片机的pid电机调速控制系统的硬件电路设计

下面是一个基于单片机的PID电机调速控制系统的硬件电路设计示例:
电路中使用了一个STM32F103C8T6微控制器,该MCU内置了PWM输出、ADC输入、定时器计数等功能,非常适合用于电机调速控制。

电机驱动采用了L298N模块,可以
控制两个直流电机的转速和方向。

另外,根据需要,可以加入光电编码器或霍尔传感
器等来获取电机的转速反馈信号。

电路中还使用了一个LCD1602液晶屏来显示电机转速、目标速度、PWM输出等信息,方便用户进行调试和监控。

此外,还可以使用按键开关来控制电机的启停和目标速度
的调节。

在硬件电路设计完成后,需要编写单片机程序来实现PID控制算法、PWM输出、
ADC采样等功能。

通常可以使用Keil、IAR等集成开发环境来编写和调试程序,也可
以使用Arduino IDE等编程环境进行开发。

这只是一个简单的PID电机调速控制系统的硬件电路设计示例,具体的实现方式和细
节可能会因应用场景和需求的不同而有所不同。

L298N PWN电机调速

L298N PWN电机调速

/*************************使用定时中断来实现调节PWM调加减10个控位档********************************功能:PWM调速、控制10个档位速度、可随时加速减速功能。

作者:韦贤院校:广西师范大学专业:08电子信息工程********************************************************** ****************************************/#include <reg52.h>#include "LCD1602.h"sbit KEY1 = P1^0;sbit KEY2 = P1^1;sbit KEY3 = P1^2;sbit KEY4 = P1^3;sbit KEY5 = P1^4;sbit EC=P3^0; // 小车使能接口1sbit EB=P3^1; //使能接口2sbit zuo1 = P2^1;sbit zuo2 = P2^2;sbit you1 = P2^3;sbit you2 = P2^4;unsigned char CYCLE; //定义周期该数字X基准定时时间如果是10 则周期是10 x 0.1msunsigned char PWM_ON ;//定义高电平时间unsigned char PWM_Num;//定义档位#define uchar unsigned char#define uint unsigned int//==========宏定义P2口====================#define DATA_PORT P0/**********************************延时子程序*****************************************/void delay(unsigned int cnt){while(--cnt);}/********************************************************* ***************************/void qianjin() //前进{zuo1=1;zuo2=0;you1=1;you2=0;}void houtui() //后退 {zuo1=0;zuo2=1;you1=0;you2=1;}void tingzhi() //停止{zuo1=0;zuo2=0;you1=0;you2=0;}/********************************************************* ************************/void dangwei(unsigned char PWM_Num) //加速档位子程序{switch(PWM_Num){case 0:zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=9;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"0"); //显示字符串break;//高电平时长case 1: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=8;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"1"); //显示字符串break;case 2: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=7;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"2"); //显示字符串break;case 3: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=6;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"3"); //显示字符串break;case 4: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=5;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"4"); //显示字符串break;case 5: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=4;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"5"); //显示字符串break;case 6: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=3;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"6"); //显示字符串break;case 7: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=2;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"7"); //显示字符串break;case 8: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=1;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"8"); //显示字符串break;case 9: zuo1=1;zuo2=0;you1=1;you2=0;PWM_ON=0;Displaypstr(0,0,"Speed threshold"); //显示字符串Displaypstr(11,1,"9"); //显示字符串break;default:break;}if(PWM_Num==10)PWM_Num=0;}/**************************************//********************************//* 定时中断 *//********************************/void tim(void) interrupt 1 using 1{static unsigned char count;TH0=(65536-1000)/256;TL0=(65536-1000)%256;//定时1mSif (count==PWM_ON){EC=1; // 小车使能接口1EB=1; //使能接口2}count++;if(count == CYCLE){count=0;if(PWM_ON!=0) //如果左右时间是0 保持原来状态EC=0; // 小车使能接口1EB=0; //使能接口2}}/* 键位加减速主函数开始 *//**************************************/main(){Init_1602(); //初始化液晶TMOD |=0x01;//定时器设置 1ms in 12M crystalTH0=(65536-1000)/256;TL0=(65536-1000)%256;//定时0.5mSIE= 0x82; //打开中断TR0=1;CYCLE =10;// 时间可以调整这个是10步调整周期10ms 8位PWM就是256步Displaypstr(0,0," Author:WeiXian");Displaypstr(0,1," PWN ");while(1){if(!KEY1)//加速键{delay(25000);if(!KEY1){Init_1602();PWM_Num++;Displaypstr(4,1,"-->>"); //显示字符串dangwei(PWM_Num);}}if(!KEY2) //减速键{delay(25000);if(!KEY2){Init_1602();PWM_Num--;Displaypstr(5,1,"<<--"); //显示字符串 dangwei(PWM_Num);}}if(!KEY3) // 前进键{delay(25000);if(!KEY3){Init_1602();PWM_ON=0;Displaypstr(2,0," All speed"); Displaypstr(4,1," ----up");qianjin();}}if(!KEY4) //后退键{delay(25000);if(!KEY4){Init_1602();PWM_ON=0; Displaypstr(4,0," All speed");Displaypstr(3,1," ----down"); houtui();}}if(!KEY5) //停止键{delay(25000);if(!KEY5){Init_1602();PWM_ON=0;Displaypstr(4,0," speed"); Displaypstr(3,1," ----STOP"); tingzhi();}}}}。

stm32pwm电机调速原理

stm32pwm电机调速原理

stm32pwm电机调速原理STM32是一款广泛应用于嵌入式系统中的32位微控制器。

PWM (Pulse Width Modulation)是一种调制技术,通过改变信号的脉冲宽度来控制输出信号的平均值。

在电机调速中,PWM技术可以用来控制电机的转速和转矩。

电机调速是指通过改变电机的输入信号来控制电机的转速。

在传统的电机控制中,通常使用直流电压来控制电机的转速,但是直流电机的调速范围有限。

而使用PWM技术可以实现更广泛的调速范围和更精确的控制。

在STM32上实现PWM电机调速主要有以下几个步骤:1. 配置定时器:首先需要配置STM32的定时器,选择合适的时钟源和预分频系数,以及设置计数器的周期。

定时器是用来产生PWM信号的关键组件,通过调整定时器的参数可以控制PWM信号的频率和占空比。

2. 配置输出通道:接下来需要配置定时器的输出通道,将定时器的输出映射到GPIO引脚上。

可以选择不同的GPIO引脚来输出PWM信号,根据实际需要进行配置。

3. 设置PWM参数:根据具体的调速需求,需要设置PWM的频率和占空比。

频率决定了PWM信号的周期,而占空比决定了PWM信号高电平的时间占比。

通过调整这两个参数,可以控制电机的转速。

4. 编写PWM控制代码:利用STM32的开发环境,编写相应的PWM控制代码。

在代码中,需要设置定时器的工作模式和触发方式,以及PWM参数和输出通道的映射关系。

同时,还需要编写相应的控制逻辑,根据实际需求调整PWM参数,从而实现电机的调速控制。

5. 调试和优化:在编写完PWM控制代码后,需要进行调试和优化。

可以通过连接电机和相应的驱动电路,观察电机的转速和转矩变化,以及PWM信号的波形。

根据实际情况进行调整,优化PWM参数和控制逻辑,以达到更好的调速效果。

总结起来,STM32的PWM电机调速原理主要是利用定时器和输出通道来产生PWM信号,通过调整频率和占空比来控制电机的转速。

通过编写相应的PWM控制代码,可以实现电机的精确调速控制。

基于L298芯片PWM控制直流电机的闭环调速系统方案

基于L298芯片PWM控制直流电机的闭环调速系统方案

运动控制系统课程设计题目:基于L298芯片PWM控制直流电机的闭环调速系统院系名称:电气工程学院专业班级:自动1302学生:鹏涛学号:9指导教师:毅摘要近年来,随着科技的进步,直流电机得到了越来越广泛的应用,直流具有优良的调速特性,调速平滑,方便,调速围广,过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速起动、制动和反转,为满足生产过程自动化系统各种不同的特殊要求,对直流电机调速提出了较高的要求,改变电枢回路电阻调速、改变电压调速等技术已远远不能满足实际应用的要求,通过PWM方式控制直流电机调速的方法就应运而生。

本论文主要研究了利用MC51单片机控制PWM信号从而实现对电压改变最后控制直流电机进行调速,并且通过单元模块电路分析了整个系统的工作原理。

以C语言进行软件编写,通过软件编程对PWM信号占空比进行调节,单片机根据程序进行操作,进一步控制了H桥电路的输入信号,而测速系统把电机转速反馈给单片机通过按键控制其转速,LCD把转速显示出来,从而实现电动机的调速、变向等功能,这种设计方法的电路简单,具有操作简单、非常实用前景和价值。

关键词:直流电机;MC51;PWM调速;L298;LCD1602目录引言1一、调速系统总体设计21.1系统总体设计说明21.2系统总体设计框图2二、调速系统的硬件电路的设计与原理32.1基于单片机的电机控制设计32.1.1单片机简介32.1.2单片机在电机控制方面的应用42.2电机驱动电路设计52.2.1驱动电路原理介绍52.2.2驱动电路的专用芯片选用与设计62.2.3调速系统驱动电路设计与分析72.3电机转速采集电路设计92.3.1速度采集的原理与方法92.3.2电机转速采集电路设计102.4显示模块设计102.4.1显示模块的原理与方法102.4.2显示模块电路设计122.5键盘输入模块设计132.5.1键盘输入模块的原理与方法132.5.2键盘输入模块电路设计14三、调速系统数字部分的设计与原理143.1 PID控制器143.1.1 PID控制的原理与方法143.1.2数字PID算法的实现153.2数字测速模块163.2.1数字测速模块的设计思想与算法163.2.2数字测速系统流程图173.3 128⨯64LCD显示模块173.3.1 128⨯64LCD显示器的控制方法173.4行列式键盘输入模块193.4.1行列式键盘输入模块的设计思想193.4.2 行列式键盘输入模块的程序流程图203.5.PWM调速方法设计203.5.1对PWM控制的介绍203.5.2 PWM脉冲的产生213.5.3 PWM脉冲产生模块的程序流程图22 设计心得22参考文献23附录1(完整电路图)24附录2(程序源码)25引言对直流电机转速的控制方法可分为两类:励磁控制与电枢电压控制。

直流电机PWM调速

直流电机PWM调速

直流电机转速的PWM控制测速王鹏辉姬玉燕摘要本设计采用PWM的控制原理来完成对直流电机的正转、反转以及其加速、减速过程的控制,在此过程中是通过单片机的定时器加上中断的方式产生不同时长的高低电压脉冲信号来完成。

并通过霍尔传感器对直流电机的转速进行测定,最后将实时测定的转速数值1602液晶屏上。

关键词:PWM控制直流电机霍尔传感器 1602液晶显示屏 L298驱动一、设计目的:了解直流电机工作原理,掌握用单片机来控制直流电机系统的硬件设计方法,熟悉直流电机驱动程序的设计与调试,能够熟练应用PWM方法来控制直流电机的正反转和加减速,提高单片机应用系统设计和调试水平。

1.1系统方案提出和论证转速测量的方案选择,一般要考虑传感器的结构、安装以及测速范围与环境条件等方面的适用性;再就是二次仪表的要求,除了显示以外还有控制、通讯和远传方面的要求。

本说明书中给出两种转速测量方案,经过我和伙伴查资料、构思和自己的设计,总体电路我们有两套设计方案,部分重要模块也考虑了其它设计方法,经过分析,从实现难度、熟悉程度、器件用量等方面综合考虑,我们才最终选择了一个方案。

下面就看一下我们对两套设计方案的简要说明。

1.2 方案一:霍尔传感器测量方案霍尔传感器是利用霍尔效应进行工作的?其核心元件是根据霍尔效应原理制成的霍尔元件。

本文介绍一种泵驱动轴的转速采用霍尔转速传感器测量。

霍尔转速传感器的结构原理图如图3.1, 霍尔转速传感器的接线图如图3.2 。

传感器的定子上有2 个互相垂直的绕组A 和B, 在绕组的中心线上粘有霍尔片HA 和HB ,转子为永久磁钢,霍尔元件HA 和HB 的激励电机分别与绕组A 和B 相连,它们的霍尔电极串联后作为传感器的输出。

图3.1 霍尔转速传感器的结构原理图方案霍尔转速传感器的接线图缺点:采用霍尔传感器在信号采样的时候,会出现采样不精确,因为它是靠磁性感应才采集脉冲的,使用时间长了会出现磁性变小,影响脉冲的采样精度。

基于STM32单片机的直流电机调速系统设计

基于STM32单片机的直流电机调速系统设计

基于STM32单片机的直流电机调速系统设计直流电机调速系统是电子控制技术在实际生产中的应用之一,利用数字信号处理器(DSP)和单片机(MCU)等嵌入式系统,通过变换输出电压、调整周期和频率等方式实现对电机运行状态的控制。

本文将介绍一种基于STM32单片机的直流电机调速系统设计方案。

1. 系统设计方案系统设计主要分为硬件方案和软件方案两部分。

1.1 硬件方案设计:硬件主要包括STM32单片机模块、电机模块、电源模块、继电器模块。

STM32单片机模块采用STM32F103C8T6芯片,拥有高性能、低功耗、低成本和丰富的外设资源,为系统开发提供了最佳解决方案。

电机模块采用直流电机,电源模块采用可调电源模块,可以输出0-36V的电压。

继电器模块用于控制电机正反转。

1.2 软件方案设计:软件设计主要涉及编程语言和控制算法的选择。

控制算法采用PID控制算法,以实现对电流、转速、转矩等参数的调节。

2. 系统实现过程2.1 电机驱动设计:电机驱动采用PWM调制技术,控制电机转速。

具体过程为:由程序控制产生一个PWM波,通过适当调整占空比,使电机输出电压和电机转速成正比关系。

2.2 PID控制算法设计:PID控制器通过测量实际变量值及其与期望值之间的误差,并将其输入到控制系统中进行计算,以调节输出信号。

在本系统中,设置了三个参数Kp、Ki、Kd分别对应比例、积分和微分系数。

根据实际情况,分别调整这三个参数,可以让电机达到稳定的运行状态。

2.3 系统运行流程:启动系统后,首先进行硬件模块的初始化,然后进入主函数,通过读取控制输入参数,比如速度、电流等参数,交由PID控制器计算得出PWM输出信号,送给电机驱动模块,以产生不同的控制效果。

同时,还可以通过设置按钮来切换电机正反转方向,以便实现更精确的控制效果。

3. 总结本系统设计基于STM32单片机,采用PWM驱动技术和PID 控制算法,实现了对直流电机转速、转矩、电流等运行状态参数的精确调节。

STM32F103C8+L298N_PWM直流电机调速

STM32F103C8+L298N_PWM直流电机调速

STM32F103C8T6核心板+L298N直流电机调速PWM调速(一)功能说明用L298N驱动一台直流减速电机,引脚IN1,IN2可用于PWM控制。

仅用STM32的两个端口给出PWM信号控制IN1,IN2即可实现正反转、加减速等动作。

(二)硬件说明:控制板:STM32F03C8T6最小系统;直流电机驱动板:L298N是SGS公司的产品,比拟常见的是15脚MulTIwatt封装的L298N,内部同样包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

(三)资源配置:(四)软件实现1:通用定时器TIM3的中断定时实现步骤①使能定时器时钟。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);②初始化定时器,配置【ARR自动装载值,PSC预分频系数。

】TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);③开启定时器中断,配置NVIC。

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);NVIC_Init(&NVIC_InitStructure);④使能定时器。

TIM_Cmd(TIM3, ENABLE); //实际是配置控制存放器1 (TIM3_CR1)⑥编写中断效劳函数。

TIM* IRQHandler();2:通用定时器TIM2的Channel1、Channel2的PWM实现步骤①使能定时器2和相关IO口时钟。

使能定时器2时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);使能GPIOB时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);②初始化IO口为复用功能输出。

函数:GPIO_Init();GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;③初始化定时器:ARR,PSC等:TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);④初始化输出比拟参数:TIM_OC3Init(TIM2, &TIM_OCInitStructure);TIM_OC4Init(TIM2, &TIM_OCInitStructure);⑤使能预装载存放器: TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);⑥使能定时器。

STM32F103+L298N驱动直流电机

STM32F103+L298N驱动直流电机

STM32F103+L298N驱动直流电机#ifndef __MOTOR_H#define __MOTOR_H#include ”stm32f10x。

h"#define A1_On GPIO_SetBits(GPIOE,GPIO_Pin_0)#define A1_Off GPIO_ResetBits(GPIOE,GPIO_Pin_0)#define A2_On GPIO_SetBits(GPIOE,GPIO_Pin_2)#define A2_Off GPIO_ResetBits(GPIOE,GPIO_Pin_2)#define B1_On GPIO_SetBits(GPIOE,GPIO_Pin_4)#define B1_Off GPIO_ResetBits(GPIOE,GPIO_Pin_4)#define B2_On GPIO_SetBits(GPIOE,GPIO_Pin_6)#define B2_Off GPIO_ResetBits(GPIOE,GPIO_Pin_6)void Motor_Init(void); //控制引脚设置void Motor_Forward(void); //前进void Motor_Back(void); //后退void Motor_Stop(void); //暂停void Motor_TurnRight(void); //右转弯void Motor_TurnLeft(void); //左转弯#endif#include "Motor。

h”void Motor_Init(void){GPIO_InitTypeDef GPIO_Initstructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_Initstructure。

GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_6; GPIO_Initstructure。

基于stm32单片机的直流电机调速系统设计

基于stm32单片机的直流电机调速系统设计
I I 技术探讨I
基 于 stm3 2 单片机的直流电机调速系统设计
文/ 黑龙江农垦科技职业学院刘彦铭
摘 要 :直 流 电 机 调 速 系 统 的 发 展 ,对 单 片 机 在 系 统 设 计 中的运用提出更高的要求。如果使用传统的单片机,会导致 直 流 电 动 机 的 运 行 流 程 更 加 复 杂 ,难 以 充 分 满 足 数 字 化 调 节的需求。在此背景下,笔 者 以 stm3 2 单片机为例,通过应用 stm3 2 单片机为直流电机调速系统提供充足的保障,并研究 可 以 充 分 发 挥 性 能 的 方 式 ,让 电 机 调 速 系 统 设 计 工 作 得 到 有效保障,同时展开对电子调速器设计方案和stm3 2 单片机 应 用 背 景 下 ,电 路 及 软 件 设 计 的 探 讨 。
(上接第3 0 页)播则可以获得音浪。目 前 U) 个 音 浪 等 于 1 元 人 民 币 ,主 播 所 获 音 浪 与 抖 音 平 台 按 照 5 : 5 进 行 分 成 。
(2) CPS佣金。自抖音直播间开通购物车后,直播带货成 为 抖 音 变 现 的 主 要 手 段 。新 人 主 播 没 有 自 己 的 商 品 ,通过网 上分销平台或者线下合作的形式,根据 产 品 销 4 获得一定 比 例 的 佣 金 。对 于 头 部 主 播 或 者 比 较 有 名 气 的 主 播 ,则需要 另 外 支 付 一 定 的 合 作 费 ,在 佣 金 比 例 上 也 相 对 较 高 。
关键词:Stm3 2 单 片 机 直 流 电 机 调 速 系 统
直 流 电 机 通 常 表 现 出 良 好 的 启 动 性 和 可 控 性 ,因此在 轻 工 、机械制造和冶金等多个现代工业部门中得到广泛应 用 ,但是 对 于 直 流 电 机 调 速 的 问 题 却 一 直 存 在 争 议 。电动 机自动调速系统通常是使用P L C 和 D C S 等控制系统进行 调 节 ,也 可 以 通 过 智 能 式 或 通 用 式 P 1D 调节器仪表来实 现 ,尽 管 这 些 技 术 已 经 较 为 成 熟 ,且 运 行 可 靠 ,但是由于该 技 术 成 本 较 高 ,且硬件设施通常较为复杂,还是对直流电机 控制技术的推广和使用造成一定限制。为 此 ,笔者设计了一 款 以 s m 3 2 单片机为核心的直流电机调速系统,希望可以通 过 PW M 信号实现对直流电机速度的有效控制。 一 、直流电机调速系统设计方案

L298N在直流电机PWM调速系统中的应用

L298N在直流电机PWM调速系统中的应用

L298N在直流电机PWM调速系统中的应用驱动46V、2A 以下的电图2P WM 控制原理图机。

由L298N 构成的设电机始终接通电源时, 电机转速最大为V max , PWM 功率放大器的工作V d = V max # D ( 1 )式中: V d表示电机的平均速度; V max表示电机使能端, 控制电机的停转。

这些特性使得L298N 到不同的电机平均速度, 从而达到调速的目的。

第9 卷第4 期2009 年7 月潍坊学院学报Journal of Weifang Univer sityVol. 9 No. 4Jul. 2009L298N 在直流电机PWM 调速系统中的应用孙绪才*( 潍坊学院, 山东潍坊261061)摘要: 介绍了L298N 芯片的特点和工作原理, 提出了基于L298N 芯片设计电机PWM 控制系统的方法, 设计出了电机调速系统电路图, 重点研究了基于MCS- 51 单片机用软件产生P WM 信号的途径, 并讨论了一种独特的通过采用计数法加软件延时法实现P WM 信号占空比调节的方法。

运行试验表明,系统工作稳定可靠, 满足直流电动机的调速要求。

关键词: L298N; 电机; 调速; 控制系统中图分类号: T P273 文献标识码: A 文章编号: 1671- 4288( 2009) 04- 0019- 03电子技术的高度发展, 促使直流电机调速逐步t ion) , 它是指将输出信号的基本周期固定, 通过调从模拟化向数字化转变, 特别是单片机技术的应用, 使直流电机调速技术又进入到一个新的阶段, 智能化、高可靠性已成为它发展的趋势。

本文在研究直整基本周期内工作周期的大小来控制输出功率的方法。

在PWM 驱动控制的调整系统中, 按一个固定的频率来接通和断开电源, 并根据需要改变一个周流电机驱动技术和P WM 方法的基础上, 设计了基期内/ 接通0和/ 断开0 时间的长短[ 3] 。

因此, PWM于L298N 芯片的直流电机调速系统硬件电路, 并提供一种用单片机软件实现PWM 调速的方法。

基于 STM32的直流电机 PWM调速系统

基于 STM32的直流电机 PWM调速系统

基于 STM32的直流电机 PWM调速系统刘松斌;王海星;李硕恒【摘要】In order to control PMDC(permanent magnet DC)motor’s speed accurately and rapidly and stab-ly,a control algorithm which integrating integral separation PID with variable parameter PID was proposed and a PWM speed control system for the DC motor was designed.The working principle of this DC motor speed control system was elaborated,including the newly-proposed control algorithm and the design of the system’s hardware and software.Establishing a STM32 chip-cored control platformto verify speed control system’s per-formance shows that as compared to the classical PID,this speed control system has faster response speed and better stability.%为实现对永磁直流电机转速准确、快速、稳定地控制,提出积分分离 PID 与变参数 PID 相结合的控制算法,设计并实现了直流电机 PWM调速系统。

详细阐述了直流电机调速的工作原理、积分分离PID 与变参数 PID 控制算法和系统的软硬件设计。

以STM32为主控芯片搭建控制平台验证调速系统的性能,实验结果表明:该系统达到了优良的调速性能,与经典 PID 控制算法相比有更快的响应速度和更好的稳定性。

L298N驱动详解与PWM调频

L298N驱动详解与PWM调频

• 我们所使用的电机一般为直流电机,主要 用到永磁直流电机、伺服电机及步进电机 三种。直流电机的控制很简单,性能出众, 直流电源也容易实现。 • 这种直流电机的驱动及控制需要电机驱动 芯片进行驱动。常用的电机驱动芯片有 L297/298,MC33886,ML4428等。
• 下面我们主要对L298进行详细的讲解。
主函数
• • • • • • • • • • • • • ********************************************************* */ main() { while(1) { Go(); Delay(20); Back(); Delay(20); Turn_left(); Delay(20); Turn_right(); Delay(20); }
开关驱动方式是使半导体功率器件工作 在开关状态,通过脉调制(PWM)来控制 电动机的电压,从而实现电动机转速的控 制。 当开关管的驱动信号为高电平时,开关 管导通,直流电动机电枢绕组两端有电压U。 t1秒后,驱动信号变为低电平,开关管 截止,电动机电枢两端电压为0。 t2秒后,驱动信号重新变为高电平,开 关管的动作重复前面的过程。
谢谢大家!!!
三英卓越电子协会 2009年10月30日
电机驱动模块
L298的典型应用
电动小车的组成
• 一个电动小车整体的运行性能,首先 取决于它的电源模块和电机驱动模块。 • 电机驱动模块主要功能:驱动小车轮子 转动,使小车行进。 • 电源模块:顾名思义,就是为整个系统 提供动力支持的部分。
电机部分
• 电动小车的驱动系统一般由控制器、功率 变换器及电动机三个主要部分组成。 • 电动小车的驱动不但要求电机驱动系统具 有高转矩重量比、宽调速范围、高可靠性, 而且电机的转矩-转速特性受电源功率的影 响,这就要求驱动具有尽可能宽的高效率 区。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32F103C8T6核心板+L298N直流电机调速PWM调速(一)功能说明用L298N驱动一台直流减速电机,引脚IN1,IN2可用于PWM控制。

仅用STM32的两个端口给出PWM 信号控制IN1,IN2即可实现正反转、加减速等动作。

(二)硬件说明:控制板:STM32F03C8T6最小系统;15脚MulTIwatt封装的L298N,内部同样包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

(三)资源配置:(四)软件实现1:通用定时器TIM3的中断定时实现步骤①使能定时器时钟。

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);②初始化定时器,配置【ARR自动装载值,PSC预分频系数。

】TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);③开启定时器中断,配置NVIC。

TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);NVIC_Init(&NVIC_InitStructure);④使能定时器。

TIM_Cmd(TIM3, ENABLE); //实际是配置控制寄存器1 (TIM3_CR1)⑥编写中断服务函数。

TIMx IRQHandler();2:通用定时器TIM2的Channel1、Channel2的PWM实现步骤①使能定时器2和相关IO口时钟。

使能定时器2时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);使能GPIOB时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);②初始化IO口为复用功能输出。

函数:GPIO_Init();GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;③初始化定时器:ARR,PSC等:TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);④初始化输出比较参数:TIM_OC3Init(TIM2, &TIM_OCInitStructure);TIM_OC4Init(TIM2, &TIM_OCInitStructure);⑤使能预装载寄存器:TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);⑥使能定时器。

TIM_Cmd();⑦不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare3() ; TIM_SetCompare4() ; 使用Keil5 模拟软件的Logic Analyzer功能,PA2,PA3,PC13的波形图如下所示:(五)附录:程序源码1 #include "delay.h"2 #include "sys.h"3 #include "timer.h"45 void GPIO_Config(void) //配置PA2, PA36 {7 GPIO_InitTypeDef GPIO_InitStructure;89 /* GPIOA clock enable */10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOC,ENABLE); //1112 /*GPIOA Configuration: TIM3 channel 1 and 2 as alternate functionpush-pull */13 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;14 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出15 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;16 GPIO_Init(GPIOA, &GPIO_InitStructure);1718 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //LED0-->PC.13端口配置19 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出20 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz21 GPIO_Init(GPIOC, &GPIO_InitStructure);//根据设定参数初始化GPIOC.1322 }2324 int main(void)25 {26 delay_init(); //延时函数初始化27 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级2829 //每隔5s的周期,变换电机的转向。

30 //定时中断,最小单位钟频率=72MHz/36KHz=2KHz31 TIM3_Int_Init(9999,35999) ;3233 GPIO_Config(); //LED,PWM端口初始化,配置PC13,PA2,PA334 TIM2_PWM_Init(47999,2 ); //分频。

最小单位钟频率=/(2+1)=24Mhz3536 while(1)37 {3839 }40 }1 #include "timer.h"23 //通用定时器3中断初始化4 //这里时钟选择为APB1的2倍,而APB1为36M5 //arr:自动重装值。

6 //psc:时钟预分频数7 //这里使用的是定时器3!89 #define PC13 PCout(13)// PC131011 void TIM3_Int_Init(u16 arr,u16 psc)12 {13 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;14 NVIC_InitTypeDef NVIC_InitStructure;1516 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能17 // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE );18 // GPIO_PinRemapConfig(GPIO_FullRemap_TIM3 ,ENABLE);1920 TIM_TimeBaseStructure.TIM_Period = arr;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值计数到5000为500ms21 TIM_TimeBaseStructure.TIM_Prescaler = psc;//设置用来作为TIMx时钟频率除数的预分频值10Khz的计数频率22 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//设置时钟分割:TDTS = Tck_tim23 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式24 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位2526 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );//使能指定的TIM3中断,允许更新中断2728 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断29 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级30 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级31 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能32 NVIC_Init(&NVIC_InitStructure);//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器3334 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设35 }36 //定时器3中断服务程序37 void TIM3_IRQHandler(void) //TIM3中断38 {39 if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//检查指定的TIM中断发生与否:TIM 中断源40 {41 TIM_ClearITPendingBit(TIM3, TIM_IT_Update );//清除TIMx的中断待处理位:TIM 中断源42 PC13=!PC13;4344 if (PC13 ==1)45 {46 TIM_SetCompare3(TIM2,24000);47 TIM_SetCompare4(TIM2,0);C:\STM32F103C8T6核心板+L298N_PWM直流电机调速\HARDWARE\TIMER\timer.c48 }49 else50 {51 TIM_SetCompare3(TIM2,0);52 TIM_SetCompare4(TIM2,24000);53 }54 }55 }5657 //TIM2 PWM部分初始化两个PWM波形,分别控制电机的正转与反转58 //PWM输出初始化59 //arr:自动重装值60 //psc:时钟预分频数61 void TIM2_PWM_Init(u16 arr,u16 psc)62 {6364 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;65 TIM_OCInitTypeDef TIM_OCInitStructure;6667 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能定时器3时钟6869 //初始化TIM270 TIM_TimeBaseStructure.TIM_Period = arr;//设置在下一个更新事件装入活动的自动重装载寄存器周期的值71 TIM_TimeBaseStructure.TIM_Prescaler =psc;//设置用来作为TIMx时钟频率除数的预分频值72 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS =Tck_tim73 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上计数模式74 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位7576 //初始化TIM2 Channel1 PWM模式77 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择定时器模式:TIM脉冲宽度调制模式278 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能79 TIM_OCInitStructure.TIM_Pulse = 13500 ;80 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性:TIM输出比较极性高81 TIM_OC3Init(TIM2, &TIM_OCInitStructure);//根据T指定的参数初始化外设TIM2 OC482 TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能TIM2在CCR2上的预装载寄存器8384 //初始化TIM2 Channel2 PWM模式85 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//选择定时器模式:TIM脉冲宽度调制模式286 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能87 TIM_OCInitStructure.TIM_Pulse = 0;88 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性:TIM输出比较极性高89 TIM_OC4Init(TIM2, &TIM_OCInitStructure);//根据T指定的参数初始化外设TIM2 OC490 TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能TIM2在CCR2上的预装载寄存器C:\STM32F103C8T6核心板+L298N_PWM直流电机调速\HARDWARE\TIMER\timer.c9192 TIM_ARRPreloadConfig(TIM2, ENABLE);93 TIM_Cmd(TIM2, ENABLE); //使能TIM29495 }96。

相关文档
最新文档