zoukankan      html  css  js  c++  java
  • 关于步进电机驱动板,tb6560

    参考的,淘宝上买来的步进电机S曲线驱动方法,发现

    他程序输出的PWM波形全是方波,  占空比为50%

    而且他

    修改这两个数来输出波形,所以

    我打算参考这个来写一个驱动

    TIMX_CNT中放置的是当前计数值

    即为:

    修改计数器的计数值  ARR   和CNT

    如下是修改后的  产生一个  50us高电平  100us低电平的程序

    the flowing code is the timer3's init  pro

     1 //通用定时器3中断初始化
     2 //这里时钟选择为APB1的2倍,而APB1为36M
     3 //    Tout =( (arr+1)*(psc+1) )/Ft  us
     4 //arr:自动重装值。
     5 //psc:时钟预分频数
     6 //这里使用的是定时器3!
     7 void TIM3_Int_Init(u16 arr,u16 psc)
     8 {
     9     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure  ;
    10     NVIC_InitTypeDef NVIC_InitStructure;
    11 
    12     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
    13     
    14     //定时器TIM3初始化
    15     TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值    
    16     TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
    17     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
    18     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
    19     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
    20  
    21     TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
    22 
    23     //中断优先级NVIC设置
    24     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
    25     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
    26     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
    27     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
    28     NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
    29     
    30     
    31     TIM_Cmd(TIM3, ENABLE);  //使能TIMx                     
    32 }

    the  fllowing code is the  TIM3_IRQHandler

     1 //中断服务程序
     2 void TIM3_IRQHandler(void)   //TIM3中断
     3 {
     4     if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
     5         {
     6         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志 
     7         //LED1=!LED1;
     8         //LED0=!LED0;
     9         //CLK=!CLK;
    10         //GPIO_SetBits(GPIOB,GPIO_Pin_5);
    11         
    12 //                 if(MyPwmChangeFlag==0)//  if  is  0    do  low process
    13 //                 {
    14 //                     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    15 //                     TIM3_Int_Init(MyPwmPeriod-MyPwmHigh-1,72-1);
    16 //                     TIM_Cmd(TIM3, ENABLE);  //使能TIMx    
    17 //                     MyPwmChangeFlag=1;
    18 //                 }
    19 //                 else if(MyPwmChangeFlag==1)
    20 //                 {
    21 //                     GPIO_SetBits(GPIOB,GPIO_Pin_5);
    22 //                     TIM3_Int_Init(MyPwmHigh-1,72-1);
    23 //                     TIM_Cmd(TIM3, ENABLE);  //使能TIMx                
    24 //                     MyPwmChangeFlag=0;
    25 //                 }
    26                 CLK=~CLK;
    27                 if(MyPwmChangeFlag)
    28                 {
    29                     TIM3->ARR=99;
    30                     TIM3->CNT=0;
    31                     MyPwmChangeFlag=0;
    32                 }
    33                 else
    34                 {
    35                     TIM3->ARR=49;
    36                     TIM3->CNT=0;
    37                     MyPwmChangeFlag=1;
    38                 }
    39                 
    40             
    41         }
    42 }
  • 相关阅读:
    C++Vector使用方法
    Struts2学习笔记1
    全排列算法及实现
    概率图模型(PGM)学习笔记(三)模式判断与概率图流
    SQLite的SQL语法
    马云入股恒大背后暗藏四大隐情?
    ListView的优化
    通过WriteProcessMemory改写进程的内存
    “富豪相亲大会”究竟迷失了什么?
    Java实现 蓝桥杯VIP 算法提高 密码锁
  • 原文地址:https://www.cnblogs.com/qdrs/p/7683437.html
Copyright © 2011-2022 走看看