📄 main.c
字号:
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#include"crg.h"
#include"pid.h"
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#define DC_Limit 500
#define MID 5500
#define MAXTURN 800
#define AD_LEVEL 170
#define SPEED 70 //170,97 168,96 160,95
#define DEG 950/12 // 500/13=38.46; 600/13=46.15
volatile unsigned int stop_flag=0;
volatile unsigned int timer_overflow=0;
volatile int NowSpeed;
volatile unsigned int IC0Counter=0; //2.083ms one int
volatile unsigned int IC0Counter_1=0; //
volatile unsigned int GearWidth[4]={0} ;
volatile unsigned int GearIndex=0;
unsigned long GearWidthSum;
unsigned long AveGearWidth ;
unsigned long AveSpeed ;
unsigned int pulse_counter=0; //计数
int Sensor;
sCaiXinBoPID SpdPID;
int DCDuty;
int Object_Speed=SPEED; //100cm/s
int time_up=0;
int atd_value[14]; //量化为0-9的数组
unsigned int AD_Value[14];
void ATD_Init(void)
{ ATD0CTL2=0xc0;//不开中断2; ////上电,标志位快速清零 ... ATD队列转换完成中断使能
ATD0CTL3=0x00;//sequence length:8 0; //转换队列长度8,非FIFO存储模式,
ATD0CTL4=0x85; //8位精度,AD时钟为bus_clk/(2*(5+1))
//ATD0CTL5=0x91; //右对齐,无符号数,单次转换队列模式,ch 1 begin,6 channels;多通道8路,从通道0开始
ATD1CTL2=0xc0;//ADPU,fast flag clear
ATD1CTL3=0x30;//sequence length:6,not fifo mode,
ATD1CTL4=0x85;//8 bit decision,ATD clock:bus_clk/(2*(5+1))
}
//***************Servo_Init()***************
void Servo_Init(void) //舵机 16位PWM控制
{
PWME_PWME1=0; //disable PWM1 servo
PWMPRCLK|= 0x03; //CLKA:8分频
PWMCLK=0x00 ; //这就是默认值//通道1用clock A时钟源
//24MHZ/8=3M
PWMPOL_PPOL1 = 1; //先高电平
PWMCAE=0X00; //对齐方式默认 左对齐
PWMCTL_CON01 = 1; //通道1:16BIT 连接
PWMPER01 = 60000;//60000:20ms;;;20000//舵机的频率是150Hz 1/3M * x=1/150Hz
//1ms 脉冲 到2ms 脉冲
//1.5ms脉冲对应0度
PWMDTY01 =4500;//4500:1.5ms; //控制3500左极限 5500右极限 4500正中央
PWMCNT01 = 0; //写计数寄存器,会使PWMDTYx,PWMPERx进入锁存器,同时使能通道时会从此值
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -