项目六:定时器一产生PWM控制舵机

科技 科技 1513 人阅读 | 0 人回复

<
1、舵机事情道理
    掌握旌旗灯号由吸取机的通讲进进旌旗灯号调造芯片,得到曲流的偏偏置电压。它内乱部有一个基准电路,发生周期为20ms,宽度为1.5ms的基准旌旗灯号,将得到的曲流偏偏置电压取电位器的电压比较,得到电压好输出。最初电压好的正背输出到机电驱动芯片决议机电的正反转。当机电转速必然时,经由过程级联加速此轮动员电位器扭转,使得电压好为0,机电避免动弹。 舵机的掌握:普通需求一个20ms阁下的时基脉冲,该脉冲的下电仄部分通常是0.5ms-2.5ms范畴内乱的角度掌握脉冲部分。本次实施的采取的舵机是180度伺服,掌握干系以下:
145816gvzgc0uakdgogjje.jpg

 2、舵电机路图
145816nqkq1ttssosvvt7f.png

145817ugp0gtgs8083lxzt.jpg

3、初级按时器发生PWM波
比拟一般按时器1初初化中需求多减两句:
  1. //反复计数器的值
  2. TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
  3. //主输出使能
  4. TIM_CtrlPWMOutputs(TIM1, ENABLE);
复造代码
4、代码
main.c
  1. #include "motor.h"
  2. #include <stdio.h>
  3. #include "delay.h"
  4. #include "stm32f10x.h"
  5. #include "followline.h"
  6. #include "ultrasonic.h"
  7. #include "steeringengine.h"
  8. u8 UART3_data,UART1_data;
  9. u8 UART3_rcv[20],UART3_rcv_count;
  10. u8 UART1_rcv[50],UART1_rcv_count,Uart1_finish;
  11. int main(void)
  12. {
  13. //      motor_pwm_TIME4_init(71,999);//机电PWM初初化
  14.         delay_init();//提早初初化
  15. //      motor_GPIO_init();//机电管足初初化、觅迹管足初初化。
  16. //        uart_init1(9600);
  17. //            hwbz_gpio_init();
  18.               steer_gpio_init();
  19.         steering_pwm_TIME1_init(7199,199);
  20.         //int right_2=0,right_1=0 ,left_2=0,left_1=0;
  21.        
  22.         while(1)
  23.         {
  24.                        
  25.        TIM_SetCompare4(TIM1,jd45);
  26.        delay_ms(800);
  27.                    TIM_SetCompare4(TIM1,jd90);
  28.        delay_ms(800);
  29.        TIM_SetCompare4(TIM1,jd180);
  30.        delay_ms(800);
  31.                
  32.         }
  33. }  
复造代码
steeringengine.c 
  1. #include "steeringengine.h"
  2. void  steer_gpio_init(void )
  3. {
  4.                 GPIO_InitTypeDef GPIO_InitStruct;
  5.        
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  7. //        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  8.        
  9.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  10.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
  11.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  12.        
  13.         GPIO_Init(GPIOA, &GPIO_InitStruct);
  14. }
  15. void steering_pwm_TIME1_init(int presc,int arr)
  16. {
  17.          //界说按时器的构造体
  18.          TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  19.          //界说按时器PWM输出通讲的构造体
  20.          TIM_OCInitTypeDef TIM_OCInitStruct;
  21.          //翻开TIME1的时钟
  22.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  23.          //设置TIME1构造体的参数
  24.          TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;
  25.          TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  26.          TIM_TimeBaseInitStruct.TIM_Prescaler = presc;
  27.          TIM_TimeBaseInitStruct.TIM_Period =arr;
  28.        
  29.         //反复计数器的值
  30.    TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
  31.          TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct);
  32.        
  33.          //设置TIME1通讲构造体的参数
  34.          TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
  35.          TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
  36.          TIM_OCInitStruct.TIM_OutputState =TIM_OutputState_Enable ;
  37.          TIM_OCInitStruct.TIM_Pulse =0;
  38.          
  39.           //TIME4通讲4初初化
  40.    TIM_OC4Init(TIM1, &TIM_OCInitStruct);
  41.          
  42.          //使能TIME4通讲1的预存存放器
  43.          TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Enable);
  44.          // 主输出使能,当利用的是通用按时器时,那句没有需求
  45.    TIM_CtrlPWMOutputs(TIM1, ENABLE);
  46.          
  47. //         TIM_ARRPreloadConfig(TIM1, ENABLE);
  48.    //使能TIME4
  49.          TIM_Cmd(TIM1, ENABLE);
  50.   
  51. }
复造代码
steeringengine.h
  1. #ifndef __STEERINGENGINE_H__
  2. #define __STEERINGENGINE_H__
  3. #include "stm32f10x_gpio.h"
  4. #include "stm32f10x_tim.h"
  5. #include "stm32f10x_rcc.h"
  6. #define jd0   5
  7. #define jd45  10
  8. #define jd90  15
  9. #define jd135 20
  10. #define jd180 25
  11. void  steer_gpio_init(void );
  12. void steering_pwm_TIME1_init(int presc,int arr);
  13. #endif
复造代码
 

免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作!
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请发帖留言提供原创证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
回复

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则