找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

26万转:用最短代码,转最快电机

  [复制链接]
11#
 楼主| Angus 发表于 2015-3-30 14:12:19 | 显示全部楼层
suzhou_chen 发表于 2015-3-30 09:07
请教:我们用该方案,反复启动时,电机有少数次出现一直慢速抖动反转。哪些设置能改善此现象。 ...

你们做的是什么应用? 请直接电话芯唐咨询.
回复 支持 反对

使用道具 举报

12#
 楼主| Angus 发表于 2015-4-15 20:57:04 | 显示全部楼层
xiaoxiao2013 发表于 2015-4-15 16:28
楼主,图片是脉冲捕获函数,
Duty_Pulse = ((temp32-1000)*Period_Hundred) >> 3 ;
这句里的1000是什么, ...

PPM的标准是 1000us表示Duty=0, 2000us 表示 Duty = 100%,  这个公式把 1000~2000间的数值, 变到大约 0~ (100*Period_Hundred) 之间
回复 支持 反对

使用道具 举报

13#
 楼主| Angus 发表于 2015-4-16 17:56:40 | 显示全部楼层
xiaoxiao2013 发表于 2015-4-16 10:13
还有些不懂,为什么是1000这个数值,是不是因为计数器时钟设置哪里不一样?另外,如果temp32=2000,最后 ...


航模PPM调速信号的标准是 1ms表示0占空比停转, 2ms 最快速度,  用us表示范围刚好是2000 - 1000 = 1000.
1000us 时让 Duty=0, 2000us时, 让Duty 不小于Duty的最大值就行, 大一点点没关系, 为了简化计算. 就用了除8,而没用除10
回复 支持 反对

使用道具 举报

14#
 楼主| Angus 发表于 2015-4-16 21:11:33 | 显示全部楼层
xiaoxiao2013 发表于 2015-4-16 11:07
服了新唐,版本真多,我用的这个版本尽然是不正确的,重新在论坛里下载了一遍。
后面的理解了,只有1000这 ...

我们在不断的修正着电路和代码,争取帮大家做出性能最好的 BLDC 控制器。
回复 支持 反对

使用道具 举报

15#
 楼主| Angus 发表于 2015-4-17 13:23:31 | 显示全部楼层
xiaoxiao2013 发表于 2015-4-17 10:12
Deadline_Zero = PeriodNow SR & AcmpOutBit){ ++StepCount; break; }           // up zero        
  ...

是的, 启转后等待时间不长, 启转阶段等待时间长短不定.
回复 支持 反对

使用道具 举报

16#
 楼主| Angus 发表于 2015-4-17 16:58:30 | 显示全部楼层
xiaoxiao2013 发表于 2015-4-17 13:52
启转阶段时间不确定,还有可能会定时器1又一次中断了,这个while内循环还没执行完?这样的话启动效果是不 ...

Deadline_Zero 最长也只有几十毫秒,  定时器1下次中断要 8.38 秒以后, 不会出现你说的情况.
回复 支持 反对

使用道具 举报

17#
 楼主| Angus 发表于 2015-4-17 18:31:01 | 显示全部楼层
本帖最后由 Angus 于 2015-4-17 19:05 编辑
xiaoxiao2013 发表于 2015-4-17 18:09
我还是觉得Deadline_Zero 不一定只有几十毫秒。
程序执行是这样的:初始化时,定时器1使能,开始计数,当 ...


1>,Timer0 计数到 CMPR 时回零,TIMER1 计数等于 CMPR 时不回零,发生中断。
2>,无论 TIMER1->DR 当前等于几,  写 TIMER1->CMPR = TIMER1->DR+2000;  Timer1 都一定是2000次计数后中断。
3>,如果上次执行完 Timer1 中断的时刻点是 ZeroTick,时间过PeriodNow/4 之后 Timer0 回零,Timer1 中断里检过零超时为Timer0计数到 PeriodNow*2,那么发生超时时,Periodlast=(TIMER1->DR - ZeroTick)&0xFFFFFF 的值为 PeriodNow 的2倍再加1/4倍。  

所以,每次 Timer1 中断后控制好 PeriodNow 最大值为几十毫秒,就不会有太长等待。若不改写CMPR,Timer1一个循环8.38秒后才第二次中断,不会等到那个时候。


回复 支持 反对

使用道具 举报

18#
 楼主| Angus 发表于 2015-4-20 10:21:51 | 显示全部楼层
xiaoxiao2013 发表于 2015-4-20 09:38
你好,感谢你前面的回答。
3>,如果上次执行完 Timer1 中断的时刻点是 ZeroTick,时间过PeriodNow/4 之后 ...

过零检测超时不会等太久这个你明白了, 对吧?
再看这两句:
  PeriodNow  = (PeriodNow + PeriodLast)>>1 ;               
  if(PeriodNow > Period_Max) PeriodNow = Period_Max ;  
检到过零或者超时后, 重新计算周期, 若超过最大值, 按最大值算.   
回复 支持 反对

使用道具 举报

19#
 楼主| Angus 发表于 2015-5-5 11:41:42 | 显示全部楼层
本帖最后由 Angus 于 2015-5-5 13:31 编辑
xiaoxiao2013 发表于 2015-5-5 11:24
请问新唐有没有常规比较器方波方案的,比较器中断那种,不是新唐这样的定时器内等待过零,很常规中断来就进 ...


有些代理公司或D/H优化了这套代码,可向芯唐咨询。
回复 支持 反对

使用道具 举报

20#
 楼主| Angus 发表于 2015-5-6 10:45:09 | 显示全部楼层
本帖最后由 Angus 于 2015-5-6 10:53 编辑
xiaoxiao2013 发表于 2015-5-5 16:58
这套架构优化的也不怎么样,新唐可否有其他的。


你觉得哪里还不算太好, 或者什么功能还实现不了,  可否说出来讨论一下?
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU