AM32电调学习解读六:main.c文件的函数介绍
最近在学习AM32电调的2.18版本的源码,我用的硬件是AT32F421,整理了部分流程处理,内容的颗粒度是按自己的需要整理的,发出来给有需要的人参考。按自己的理解整理的,技术能力有限,可能理解有误,欢迎纠正。
注:lida2003博主是个大牛。写的无刷电调的理论和AM32相关知识点介绍的比较系统,介绍的很详细,有需要的同学可以去参考。我对电调这块是外行,只是刚入门学习。这里重点是代码理解的整理分析,他哪里写了很多原理性的知识。
https://blog.csdn.net/lida2003/category_12753961.html?spm=1001.2014.3001.5482
这是第六篇,前面分析的部分已经覆盖了电调控制的大部分路径,接下来是剩余代码的理解。简单介绍main.c文件函数的作用,部分函数前面的文章介绍,这里是个总结整理,为后面穿起来理解运行做准备。
1、doPidCalculations
pid计算函数,用于恒速、失速、限流的PID计算
2、loadEEpromSettings
配置参数读取换算。早期版本参数是一个一个赋值的,使用联合体数据结构,这只需要换算的处理了。个人认为这个函数挺重要,配置不同参数,是为了适应不同的应用场景,每个参数的作用是啥?对电调的运行理解有很大帮助。
3、saveEEpromSettings
保存配置参数
4、getSmoothedCurrent
计算平滑的电流值,这个算法可以减少计算量而且电流是最近100次的平均值
5、getBemfState
获取反电动势状态
6、commutate
相位计算、上下沿计算、同步检查标志位处理、换相、比较器管脚切换、比较器功率切换、比较器上下延中断切换
7、PeriodElapsedCallback
定时回调函数,检测到过零点后等待waitTime换相
8、interruptRoutine
比较器中断处理。
剔除无效过零点
main函数卡死判断保护
连续读取比较器输出符合预期filter_level次则判断为过零点
连续读取正确次数不符合预期,不是过零点,跳过
关闭比较器中断
更新本次换相时间
换相时间计数器清零
设置换相定时器等待时间并且使能定时器
9、startMotor
执行一次换相,设置平均换相时间,然后切换为运转状态
10、setInput
根据newinput应用油门数据
11、tenKhzRoutine
20khz 定时任务函数。
油门置低解锁
串口上报标志
启动阶段反电动势判断换相
PID调速
加速度处理
adjusted_duty_cycle生效
油门超时计数
12、processDshot
计算dshot,调用setInput生效油门数据
13、advanceincrement
正弦驱动3个相位duty值计算
14、zcfoundroutine
找到过零点例程,电机转动后才能在比较器的输出波形判断出过零点,所以这个函数的作用是找到过零点后推一下,为下次找过零点
15、runBrushedLoop
包含特定于有刷电机的循环
16、checkDeviceInfo
Uboot的尾部预留信息,用于指示配置参数信息存储位置,APP根据这个信息确认配置信息地址