比赛常用程序框架:
不管是什么单片机,需要有一个定时器,用定时器进行时间分割,实现时间轮询的效果。
//全局变量定义
//函数声明
void main()
{
其他外部设备初始化;
定时器初始化,一般是1ms进入一次中断,中断优先级最高;
打开定时器中断和定时器;
while(1)
{
Track_Deal_Loop()
}
}
u16 ms_count=0;
定时器中断服务函数
{
ms_count++;
if(ms_count>499) ms_count=0;
检测按键
if(!(ms_count%5)) 5ms时间到
{
//获取陀螺仪的数据
}
if(!(ms_count%10))
{
小车控制
读取ADC滤波数据;
获取编码器数据
检测距离
做四个轮子的PID计算,得到PWM小车速度
将PWM用小车速度进行电机控制
}
if(!(ms_count%20))
{
adc采集的数据归一化
判断黑线循迹的状态,十字,一字,什么路口等;
确定误差:
根据不同的阶段,直走,上坡,下坡等等,进行误差计算,
得到error,误差需要做差比和计算得到。
}
}
框架,gongxun第二版
于 2023-05-26 00:07:23 首次发布
文章描述了一个通用的比赛程序框架,主要利用定时器进行时间分割,实现时间轮询。定时器中断每1ms触发,用于处理不同频率的任务,如5ms的按键检测,10ms的小车控制和ADC数据读取,以及20ms的误差计算和电机控制调整。同时,还包括了数据归一化、黑线循迹状态判断等功能。
摘要由CSDN通过智能技术生成