专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

XS128单片机程序:智能小车舵机的控制

作者:韩冰   来源:本站原创   点击数:  更新时间:2013年11月29日   【字体:

/***********************************************/
//This is our control of the steering gear(舵机)
//Next we will use it by PI control;
//Date :2013/5/15
/***********************************************/
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

/*2.************所有的延时程序**********************/
 /******************N倍0.75us 延时**********
   函    数:delay_us()
   功    能:约0.75 us延迟
   参    数:n_us
   说    明:本函数的总线时钟为16 MHz
  ******************************************/
   void delay_us(uint n_us)
     {
        uint loop_i;
       for (loop_i=0; loop_i< n_us; loop_i++)
       {;}
     }
  /****************************************
    函    数:delay_ms()
    功    能:约1 ms延迟
    说    明:本函数的总线时钟为16 MHz.
 *****************************************/
  void delay_ms(uint n_ms)
    {
      uint loop_i;
      for (loop_i=0; loop_i< n_ms; loop_i++)
      {
       delay_us(1335);
      }//总线时钟为16 MHz时     
   }   // 延迟1335×12个机器周期 1 ms
  /***************************************
     函    数:delay_s()
     功    能:约1 s延迟
     说    明:本函数的总线时钟为16MHz。
  ***************************************/
   void delay_s(uint n_s)
    {
      uint loop_i;
      for (loop_i=0; loop_i< n_s; loop_i++)
      {  delay_ms(1000);  }
    }

/************************************/
//函数:PWM 波初始化程序
//功能:PWM 波初始化程序完成了电动机和舵机的控制
//        所有通道均采用级联的方式  
//        0-1通道级联控制舵机
//        2-3通道级联控制电机前进
//        6-7通道级联控制电机后退
//说明; 舵机控制的
//时间:2013、5、15
/************************************/
void PWM_init (void) {
   PWME      =0x00;       //禁止PWM模块
   PWMCLK    =0xFF;       //时钟选择寄存器SA SB
   PWMPRCLK  =0x33;       //选择时钟A预分频因子8/1000000Hz
   PWMSCLA   =5;          //SA比例因子  2.5  /100,000Hz
   PWMSCLB   =250;        //SB比例因子  250 /2000 Hz
   PWMCTL    =0xF0;       //所有的都级联
   PWMPOL    =0xFF;       //极性控制
   PWMCAE    =0x00;       //对齐方式
   PWMPER01  =2000;       //周期寄存器  定时20ms
   PWMPER23  = 
   PWMDTY01  = 0;      // 设置PWM通道初始化占空比
   PWME      =0xFF;       //使能
  
}
void main(void) {
 
    PWM_init ();
   while(1){
     PWMDTY01=150;
     delay_ms(500);
     PWMDTY01=155;
     delay_ms(500);
     PWMDTY01=160;
     delay_ms(500);
     PWMDTY01=165;
     delay_ms(500);
     PWMDTY01=170;
     delay_ms(500);
     PWMDTY01=175;
     delay_ms(500);
     PWMDTY01=180;
     delay_ms(500);
     PWMDTY01=185;
     delay_ms(500);
     PWMDTY01=190;
     delay_ms(500);
     PWMDTY01=150;
     delay_ms(500);
     PWMDTY01=145;
     delay_ms(500);
      PWMDTY01=140;
     delay_ms(500);
     PWMDTY01=135;
     delay_ms(500);
     PWMDTY01=130;
     delay_ms(500);
     PWMDTY01=125;
     delay_ms(500);
     PWMDTY01=120;
     delay_ms(500);
     PWMDTY01=115;
     delay_ms(500);
     PWMDTY01=110;
     delay_ms(500);
     delay_ms(500);
    }
 
}
 

关闭窗口

相关文章