STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx

上传人:b****3 文档编号:7828278 上传时间:2023-05-09 格式:DOCX 页数:11 大小:1.35MB
下载 相关 举报
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第1页
第1页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第2页
第2页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第3页
第3页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第4页
第4页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第5页
第5页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第6页
第6页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第7页
第7页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第8页
第8页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第9页
第9页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第10页
第10页 / 共11页
STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx

《STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx(11页珍藏版)》请在冰点文库上搜索。

STM32F103C8+L298NPWM直流电机调速Word文档下载推荐.docx

TIM2_CH3

PA3

连接L298N芯片的IN2

通用定时器的PWM功能,

TIM2_CH4

PC13

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

由TIM3中断定时控制。

通用定时器TIM3定时中断

L298N端口定义

IN1

IN2

ENA

电机状态

始终是1

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

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

停止

(四)软件实现

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_OC3Init(TIM2,&

TIM_OCInitStructure);

TIM_OC4Init(TIM2,&

⑤使能预装载寄存器:

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,&

//根据设定参数初始化

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}

2

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

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

5//arr:

自动重装值。

6//psc:

时钟预分频数

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

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_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_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的中断待处理位:

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;

74TIM_TimeBaseInit(TIM2,&

75

76//初始化TIM2Channel1PWM模式

77=TIM_OCMode_PWM1;

//选择定时器模式:

TIM脉冲宽度调制模式2

78=TIM_OutputState_Enable;

//比较输出使能

79=13500;

80=TIM_OCPolarity_High;

//输出极性:

TIM输出比较极性高

81TIM_OC3Init(TIM2,&

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

82TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Enable);

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

83

84//初始化TIM2Channel2PWM模式

85=TIM_OCMode_PWM1;

86=TIM_OutputState_Enable;

87=0;

88=TIM_OCPolarity_High;

89TIM_OC4Init(TIM2,&

90TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Enable);

91

92TIM_ARRPreloadConfig(TIM2,ENABLE);

93TIM_Cmd(TIM2,ENABLE);

//使能TIM2

94

95}

96

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

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2