完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
编程思路及步骤
以输出一路pwm为例:
void STEP_MOTO_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; /*开启GPIOB和GPIOC的外设时钟*/ RCC_APB2PeriphClockCmd(Moto_RCC1 | Moto_RCC2, ENABLE); /*选择要控制的GPIOB引脚*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13; /*设置引脚模式为通用推挽输出*/ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚速率为50MHz */ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*调用库函数,初始化GPIOB*/ GPIO_Init(Moto_Port1, &GPIO_InitStructure); /* 高电平 */ GPIO_SetBits(Moto_Port1, GPIO_Pin_12 | GPIO_Pin_13); } 2.初始化定时器以及输出pwm的io口PB9: void TIM4_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟 //初始化TIM4 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 //PWMB PB9 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //使能定时器4时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟 //设置该引脚为复用输出功能,输出TIM4 CH4的PWM脉冲波形 GPIOB.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TIM4_CH4 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO //初始化TIM4 Channel4 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OCInitStructure.TIM_Pulse = 0; TIM_OC4Init(TIM4, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM4 OC2 TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR2上的预装载寄存器 TIM_Cmd(TIM4, ENABLE); //使能TIM4 }
#include "moto.h" #include "step_moto.h" #define Updown_Moto_Left_UP() {GPIO_SetBits(Moto_Port1, Updown_Moto_Left_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Left_ENA);} #define Updown_Moto_Left_DOWM() {GPIO_ResetBits(Moto_Port1, Updown_Moto_Left_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Left_ENA);} #define Updown_Moto_Left_STOP() {GPIO_SetBits(Moto_Port1, Updown_Moto_Left_ENA);} #define Updown_Moto_Right_UP() {GPIO_SetBits(Moto_Port1, Updown_Moto_Right_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Right_ENA);} #define Updown_Moto_Right_DOWM() {GPIO_ResetBits(Moto_Port1, Updown_Moto_Right_DIR); GPIO_ResetBits(Moto_Port1, Updown_Moto_Right_ENA);} #define Updown_Moto_Rightt_STOP() {GPIO_SetBits(Moto_Port1, Updown_Moto_Right_ENA);} #define Moto_PWM_SET_Updown_Moto_LEFT() {TIM_SetCompare4(TIM4,5000);} #define Moto_PWM_SET_Updown_Moto_RIGHT() {TIM_SetCompare2(TIM2, 5000);} #define Moto_PWM_REMOVE() {TIM_SetCompare4(TIM4, 0);TIM_SetCompare2(TIM2, 0);TIM_SetCompare3(TIM2, 0);TIM_SetCompare4(TIM2, 0);} /*左右同步电机的运动*/ void Updown_Moto_UP(void) { Updown_Moto_Left_UP(); Updown_Moto_Right_UP(); Moto_PWM_SET_Updown_Moto_LEFT(); Moto_PWM_SET_Updown_Moto_RIGHT(); } void Updown_Moto_DOWN(void) { Updown_Moto_Left_DOWM(); Updown_Moto_Right_DOWM(); Moto_PWM_SET_Updown_Moto_LEFT(); Moto_PWM_SET_Updown_Moto_RIGHT(); } void Updown_Moto_STOP(void) { Updown_Moto_Left_STOP(); Updown_Moto_Rightt_STOP(); Moto_PWM_REMOVE(); } 通过调节在下一个更新事件装入活动的自动重装载寄存器周期的值来设置步进电机的转速: void pwm_init(void) { delay_init(); STEP_MOTO_GPIO_Init(); TIM2_PWM_Init(15000,0);//不分频。PWM频率为7200000000/15000=4800hz //一秒转6圈 TIM4_PWM_Init(5625,0);//不分频。PWM频率为7200000000/5625=12800hz //一秒转16圈 } int main(void) { pwm_init(); while(1) { //Updown_Moto_UP();//丝杆往上 Updown_Moto_DOWN();//丝杆往下 //Updown_Moto_STOP();//丝杆停止 } return 0; } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1947浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
753浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
568浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 17:24 , Processed in 0.758895 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号