前言
由于项目需求,需要对电机进行闭环控制。采用UCOSIII作为开发平台,效率的确是要高很多呀。具体是需求如下:
上位机:通过串口向单片机发送电机转速控制指令、实时显示转速曲线;
单片机:实时发送电机转速数据帧、实时输出pwm信号、实时检测电机转速、pid控制
任务设计
AppTaskCreate_DT_Board_LED(&err); //板载led任务
AppTaskCreate_DT_Ground_Station(&err); //上位机指令接收任务
AppTaskCreate_DT_Ground_Station_TICK(&err); //定时下传参数任务
AppTaskCreate_DT_PWM_Output(&err); //电机pwm输出任务
AppTaskCreate_DT_PWM_Capture(&err); //电机转速测量任务
要点整理
整体机制
采用ucos进行开发的效率肉眼可见,不用在纠结于前后台中纷繁复杂的逻辑。整个测试程序的结构很简单,在程序的后台有一个与上位机相同的数据结构体,有种数据库的感觉,所有的数据收发、输入输出都是围绕着这个数据表实现的。这样可以每个任务对数据表负责。
任务简介
led
只是一个简单的心跳灯,优先级55
上位机指令接收任务
这里首先是对串口的底层进行配置,在中断中采用状态机的方式对指令进行解包,当确认接收到正确数据后激活接受任务,接受任务根据解包到的数据信息将数据写入数据表的相应位置;优先级30
定时下传参数任务
和led类似,通过串口周期性的提取数据