STM32F103C8+L298NPWM直流电机调速.docx

上传人:b****7 文档编号:10704350 上传时间:2023-02-22 格式:DOCX 页数:11 大小:1.35MB
下载 相关 举报
STM32F103C8+L298NPWM直流电机调速.docx_第1页
第1页 / 共11页
STM32F103C8+L298NPWM直流电机调速.docx_第2页
第2页 / 共11页
STM32F103C8+L298NPWM直流电机调速.docx_第3页
第3页 / 共11页
STM32F103C8+L298NPWM直流电机调速.docx_第4页
第4页 / 共11页
STM32F103C8+L298NPWM直流电机调速.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

STM32F103C8+L298NPWM直流电机调速.docx

《STM32F103C8+L298NPWM直流电机调速.docx》由会员分享,可在线阅读,更多相关《STM32F103C8+L298NPWM直流电机调速.docx(11页珍藏版)》请在冰豆网上搜索。

STM32F103C8+L298NPWM直流电机调速.docx

STM32F103C8+L298NPWM直流电机调速

STM32F103C8T6核心板+L298N直流电机调速PWM调速

(一)功能说明

用L298N驱动一台直流减速电机,引脚IN1,IN2可用于PWM控制。

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

(二)硬件说明:

控制板:

STM32F03C8T6最小系统;

型号:

STM32F103C8T6

内核:

ARM32位的CortexTM-M3CPU

调试方式:

SWD

尺寸:

×

直流电机驱动板:

L298N是SGS公司的产品,比较常见的是15脚MulTIwatt封装的L298N,内部同样包含4通道逻辑驱动电路。

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

(三)资源配置:

STM32F03C8T6使用端口定义

端口

功能说明

配置

PA2

连接L298N芯片的IN1

通用定时器的PWM功能,

TIM2_CH3

PA3

连接L298N芯片的IN2

通用定时器的PWM功能,

TIM2_CH4

PC13

控制板带的LED指示灯,周期性的变化,每变化一次,电机的转运方向变化一次。

由TIM3中断定时控制。

通用定时器TIM3定时中断

L298N端口定义

IN1

IN2

ENA

电机状态

PA2

0

始终是1

顺时针运转,调整PA2的频率,可高速。

0

PA3

始终是1

逆时针运转,调整PA2的频率,可高速。

0

0

始终是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);

④使能定时器。

TIM_Cmd(TIM3,ENABLE);//实际是配置控制寄存器1(TIM3_CR1)

⑥编写中断服务函数。

TIMxIRQHandler();

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_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模拟软件的LogicAnalyzer功能,PA2,PA3,PC13的波形图如下所示:

(五)附录:

程序源码

1#include""

2#include""

3#include""

4

5voidGPIO_Config(void)//配置PA2,PA3

6{

7GPIO_InitTypeDefGPIO_InitStructure;

8

9/*GPIOAclockenable*/

10RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|

RCC_APB2Periph_GPIOC,ENABLE);//

11

12/*GPIOAConfiguration:

TIM3channel1and2asalternatefunction

push-pull*/

13=GPIO_Pin_2|GPIO_Pin_3;

14=GPIO_Mode_AF_PP;//

复用推挽输出

15=GPIO_Speed_50MHz;

16GPIO_Init(GPIOA,&GPIO_InitStructure);

17

18=GPIO_Pin_13;//LED0-->

端口配置

19=GPIO_Mode_Out_PP;//推挽输出

20=GPIO_Speed_50MHz;//IO口速度为50MHz

21GPIO_Init(GPIOC,&GPIO_InitStructure);

//根据设定参数初始化

22}

23

24intmain(void)

25{

26delay_init();//延时函数初始化

27NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//设置NVIC中断分组2:

2位抢占优先级,2位响应优先级

28

29//每隔5s的周期,变换电机的转向。

30//定时中断,最小单位钟频率=72MHz/36KHz=2KHz

31TIM3_Int_Init(9999,35999);

32

33GPIO_Config();//LED,PWM端口初始化,配置PC13,PA2,PA3

34TIM2_PWM_Init(47999,2);//分频。

最小单位钟频率=/(2+1)=24Mhz

35

36while

(1)

37{

38

39}

40}

1#include""

2

3//通用定时器3中断初始化

4//这里时钟选择为APB1的2倍,而APB1为36M

5//arr:

自动重装值。

6//psc:

时钟预分频数

7//这里使用的是定时器3!

8

9#definePC13PCout(13)//PC13

10

11voidTIM3_Int_Init(u16arr,u16psc)

12{

13TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

14NVIC_InitTypeDefNVIC_InitStructure;

15

16RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//时钟使能

17//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

18//GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);

19

20=arr;

//设置在下一个更新事件装入活动的自动重装载寄存器周期的值

计数到5000为500ms

21=psc;

//设置用来作为TIMx时钟频率除数的预分频值10Khz的计数频率

22=TIM_CKD_DIV1;

//设置时钟分割:

TDTS=Tck_tim

23=TIM_CounterMode_Up;

//TIM向上计数模式

24TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);

//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

25

26TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

//使能指定的TIM3中断,允许更新中断

27

28=TIM3_IRQn;//TIM3中断

29=0;

//先占优先级0级

30=3;//从优先级3级

31=ENABLE;//IRQ通道被使能

32NVIC_Init(&NVIC_InitStructure);

//根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

33

34TIM_Cmd(TIM3,ENABLE);//使能TIMx外设

35}

36//定时器3中断服务程序

37voidTIM3_IRQHandler(void)//TIM3中断

38{

39if(TIM_GetITStatus(TIM3,TIM_IT_Update)!

=RESET)

//检查指定的TIM中断发生与否:

TIM中断源

40{

41TIM_ClearITPendingBit(TIM3,TIM_IT_Update);

//清除TIMx的中断待处理位:

TIM中断源

42PC13=!

PC13;

43

44if(PC13==1)

45{

46TIM_SetCompare3(TIM2,24000);

47TIM_SetCompare4(TIM2,0);

C:

\STM32F103C8T6核心板+L298N_PWM直流电机调速\HARDWARE\TIMER\

48}

49else

50{

51TIM_SetCompare3(TIM2,0);

52TIM_SetCompare4(TIM2,24000);

53}

54}

55}

56

57//TIM2PWM部分初始化两个PWM波形,分别控制电机的正转与反转

58//PWM输出初始化

59//arr:

自动重装值

60//psc:

时钟预分频数

61voidTIM2_PWM_Init(u16arr,u16psc)

62{

63

64TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

65TIM_OCInitTypeDefTIM_OCInitStructure;

66

67RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定时器3时钟

68

69//初始化TIM2

70=arr;

//设置在下一个更新事件装入活动的自动重装载寄存器周期的值

71=psc;

//设置用来作为TIMx时钟频率除数的预分频值

72=0;//设置时钟分割:

TDTS=

Tck_tim

73=TIM_CounterMode_Up;

//TIM向上计数模式

74TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

//根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

75

76//初始化TIM2Channel1PWM模式

77=TIM_OCMode_PWM1;

//选择定时器模式:

TIM脉冲宽度调制模式2

78=TIM_OutputState_Enable;

//比较输出使能

79=13500;

80=TIM_OCPolarity_High;

//输出极性:

TIM输出比较极性高

81TIM_OC3Init(TIM2,&TIM_OCInitStructure);

//根据T指定的参数初始化外设TIM2OC4

82TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);

//使能TIM2在CCR2上的预装载寄存器

83

84//初始化TIM2Channel2PWM模式

85=TIM_OCMode_PWM1;

//选择定时器模式:

TIM脉冲宽度调制模式2

86=TIM_OutputState_Enable;

//比较输出使能

87=0;

88=TIM_OCPolarity_High;

//输出极性:

TIM输出比较极性高

89TIM_OC4Init(TIM2,&TIM_OCInitStructure);

//根据T指定的参数初始化外设TIM2OC4

90TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);

//使能TIM2在CCR2上的预装载寄存器

C:

\STM32F103C8T6核心板+L298N_PWM直流电机调速\HARDWARE\TIMER\

91

92TIM_ARRPreloadConfig(TIM2,ENABLE);

93TIM_Cmd(TIM2,ENABLE);//使能TIM2

94

95}

96

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1