首页 > 编程知识 正文

stm32按键控制舵机,三菱plc中pwm控制舵机

时间:2023-05-04 11:28:45 阅读:48476 作者:2222

首先,请看这张图。 我们基于此图实现了基于计时器的PWM控制舵机的旋转。 这次使用STM32F1单片机控制S90舵机,可以直接在复印中使用。 经过本人实测,利用PB13计时器1PWM通道1实现本次控制,从0度控制到旋转180度改变占空比,实现不同角度的控制占空比,就可以更准确地控制舵机的角度。 这次只是实现了舵机的控制,精度测试主要注意定时器配置和IO口的复用功能。千万不要当普通IO口使用。

staticvoidfzdgb _ gpio _ config (void ) gpio _ inittypedefgpio _ init structure; //输出比较通道GPIO初始化RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpioa,ENABLE ); gpio _ init structure.gpio _ pin=gpio _ pin _ 8; gpio _ init structure.gpio _ mode=gpio _ mode _ af _ PP; gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; gpio_init(gpioa,GPIO_InitStructure ); //输出比较通道互补通道GPIO初始化RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpiob,ENABLE ); gpio _ init structure.gpio _ pin=gpio _ pin _ 13; gpio _ init structure.gpio _ mode=gpio _ mode _ af _ PP; gpio _ init structure.gpio _ speed=gpio _ speed _ 50m Hz; gpio_init(gpiob,GPIO_InitStructure ); //BKIN端子默认先输出低电平的gpio_resetbits(gpiob,GPIO_Pin_13 )。 } staticvoidadvance _ FZ dgb _ config (void ) FZ dgb _ ocinittypedeffzdgb _ ocinitstructure; FZ dgb _ timebaseinittypedeffzdgb _ time base structure; //打开计时器时钟,即内部时钟CK _ int=72m RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ FZ dgb 1,ENABLE ); //自动重新加载寄存器的值是用于驱动fzdgb_累计//CNT计数器的时钟=fck_int/(PSC1 ) FZ dgb _ time base structure.FZ dgb _ prescaler=//不使用FZ dgb _ time base structure.FZ dgb _ clock division=FZ dgb _ CKD _ div 1,以设置时钟分频因子和死区时间; //计数器计数模式,FZ dgb _ time base structure.FZ dgb _ counter mode=FZ dgb _ counter mode _ up; //不使用重复计数器的值,FZ dgb _ time base structure.FZ dgb _ repetition counter=0; //初始化计时器FZdgb_timebaseinit(FZdgb1,fzdgb_TimeBaseStructure ); //------------输出比较结构初始化--------------- -配置为PWM模式2fzdgb_ocinitstructure输出使能FZ dgb _ ocinitstruructure //互补输出为FZ dgb _ ocinitstructure.FZ dgb _ outputnstate=FZ dgb _ outputnstate _ enable; //设置占空比大小FZ dgb _ ocinitstructure.FZ dgb _ pulse=0; //输出通道电平极性配置FZ dgb _ ocinitstructure.FZ dgb _ oc polarity=FZ dgb _ oc polarity _ high; //互补输出通道电平极性配置FZ dgb _ ocinitstructure.FZ dgb _ ocn polarity=FZ dgb _ ocn polarity _ high; //输出通道空闲电平极性配置FZ dgb _ ocinitstructure.FZ dgb _ ocidlestate=FZ dgb _ ocidlestate _ set; //互补输出通道空闲电平极性配置FZ dgb _ ocinitstructure.FZ dgb _ ocnidlestate=FZ dgb _ ocnidlestate _ reset; FZdgb_OC1init(FZdgb1,fzdgb_OCInitStructure ); FZ dgb _ o C1预加载配置(FZ dgb 1,fzdgb_OCPreload_Enable ); //使能计数器FZdgb_cmd(FZdgb1,使能); //使用主输出使能、通用计时器时,这不需要FZdgb_ctrlpwmoutputs(FZdgb1,ENABLE ) }voidFZdgb_init(void ) { FZ dgb _ ggb 高级_ FZ dgb _ config (; }void main () { u16 delay_time=1000; delay_init (; //延迟函数初始化nvic _优先级组配置(nvic _优先级组_2); fzdgb_Init (; wile(1) Delay_ms ) Delay_time; FZ dgb _ set compare1(FZ dgb 1,25 ); 支持//180度Delay_ms(Delay_time ); FZ dgb _ set compare1(FZ dgb 1,5 ); 支持//0度Delay_ms(Delay_time ); }[百度云下载链接]

链接: https://pan.Baidu.com/s/1 zuegefqh0otubkqhll 7m _ q

引出导线: 1234

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。