
照着官方的例程写的,一摸一样的就是转不起来

电机启动匹配启动b值给了200,这部分和例程一样
强制启动后开启比较器

比较器中测量60度电角度,我这里用的PWMB定时器测量,这里我没有采集8次,
而是每采集一次就做一次平均,>>2相当于除以4,正好是30度电角度
我这测了下每中断一次做平均值和取8次做平均值差不了多少,而且是允许有较大波动
值低了会自动往上拉,高了会逼近中性值
那里的4,5行代码忽略,我测试用的
比较器每有效中断一次PWMB定时器停止计数,把PWMB的计数器清零后开启PWMB向上开始计数
电角度延时用的定时器2,用0减去计算得到的30度电角度时间装载到定时器2计数器中
启动定时器2开始延时计时,XiaoCi是一个bit位,XiaoCi=0等待消磁完成

30度电角度延时过后定时器2中断,首先先换相,换相需要消磁,给定时器2装载上80个消磁时间
等定时器再次中断消磁结束,XiaoCi=1比较器开启下一次循环
现在的现象是电机只转一圈就不转了,测得的也就是被计算后的30度电角度值100左右
代码逻辑和官方的一模一样,同时定时器2和PWMB定时器设置的频率是一样的
为什么不原搬例程,我这用的单片机硬件功能受限,没有定时器3和4
定时器0用来测PWM,定时器1用来做波特率发生器
官方的例程测量电角度时间是60度,也就是测量两次比较器中断时间
为什么不能只测30度电角度,从换相中断(也就是定时器2中断开始测)到比较器中断计数
测得的这30度电角度时间给后面30度延时用,我觉得是挺合理的,还能少用一个定时器
附件:方波无刷电机驱动.zip
求帮我改下代码吧,我快坚持不下去了,打算放弃了