生成单极性SPWM只用了一个定时器,还剩一个定时器,打算用剩下的这个定时器生成2路互补带死区的PWM波,用于替代sg3525,基本功能和SG3525类似,占空比连续可调。
打算用定时器、中断和指针来实现,用中断来保持实时性,用指针来保存工作状态,
用尽量简洁的语句实现,执行一个中断子程序看看能不能在100纳秒内完成。
尽量避免打扰SPWM波形的生成。
如仿真成功上个图。
生成单极性SPWM只用了一个定时器,还剩一个定时器,打算用剩下的这个定时器生成2路互补带死区的PWM波,用于替代sg3525,基本功能和SG3525类似,占空比连续可调。
打算用定时器、中断和指针来实现,用中断来保持实时性,用指针来保存工作状态,
用尽量简洁的语句实现,执行一个中断子程序看看能不能在100纳秒内完成。
尽量避免打扰SPWM波形的生成。
如仿真成功上个图。
从仿真的结果来看,这事靠谱,
最早编的一个实验程序,因为spwm脉宽的时间太短只有30个机器周期,所以和推挽的用的pwm脉宽产生冲突,导致两边输出的波形都不稳定,
经过多次实验把spwm的脉宽加大到60个机器周期,推挽用的两路pwm信号改成120机器周期,死区用两个机器周期,用24mhz 51仿真,结果两边的波形都很稳定,当然不能说没有一点干扰,不过能接受。
耗时最短的pwm推挽必须放在最高中断优先级别。
下一步给两路推挽加上反馈,带少许斜坡控制。
一共有两路spwm,两路工频,两路互补推挽,一个51就能跑了。
如用增强型51stc指令执行效率平均快6倍估计干扰更小,因为花在加减乘除上的时间更少。
更新:下图是仿真,软件自带的51性能有点弱,将就看,
两路推挽波形通过调节占空比来实现稳压。
图中的SPWM波是随手填的,不是按照sin生成的,直接填1.2.3.4.5.....
今天看了stc的文档仔细算了一下,35mhz的stc比老51 的12mhz快35倍,12mhz的51一个机器周期1微秒,那35mhz的sct一个机器周期就是相当于28纳秒。好像arm的机器周期也是20多纳秒,只不过32位的mcu指令执行效率要高些,一条指令是不是顶8位的几条指令。
假如stc出一款能跑100m晶振的mcu那不是赶超16位的mcu了。要定时器分频多搞几种,定时器多几个,呵呵无敌了。
改天砸个48mhz的晶振上去看看能不能跑。
不是这样算的,ARM CM3 的外设十分丰富,基本上大部分工作都是硬件实现,另外指令速度很高,例如乘法只需要一个周期。
我用 DMA 处理 SPWM 调制,电压 399 级分辨率、占空比 3600 级分辨率,平均每输出三个脉冲需要 CPU 处理一次,每处理一次大约二十个指令周期。即每秒需要占用 399 / 3 * 20 * 50 = 133000 个指令周期,而 72MHz 的 CM3 第秒可执行 75000000 个指令。可以说 CPU 完全是空转状态。
现在正在看mdk4的书和cm0的书还有一本arm电机控制的书。
dma是不是电脑里面的直接内存访问类似的含义?
cm0和cm3有多大差别?尽量从低配置做起。
对于现在单片机的主流工艺来说,内核的价钱几乎都是可以忽略的,从51到cm3差距不到1块钱的。
集成的外设和存储器才是更具有价值的,以stm32f103rct6为例
不算内核仅仅算集成的资源:
3个最大20路输入的12位ad,速度达到1msps
2个12为的da,速度1msps
10个以上的定时器,其中1和8可以出3对互补的波形,带刹车信号,2345有4路输入或输出,简单说可以输出超过20路不同频率任意占空比的pwm。或者用来捕获pwm也可以
串口应该是5个
can接口1个
硬件spi2个,速度可以达到36兆的
flash有256k,ram有20k
还有dma支持最大14路,可以实现内存到外设或者反过来的自动连续操作
这一款芯片现在零售不过是16块左右,想想单独购买能买到这些外设的1/3不?
stc 48Mhz已经跑起来了,正在测试稳定性,在ARM熟悉之前STC还要大力钻研。
SPWM和前级互补脉冲已经出来了,正在调试前级的反馈。
更新:前级脉冲40K占空比可调,脉宽调到最小后可关闭输出,但是两路最大占空比还是不够大只有80%多,真是对主频的要求越来越强烈了。
后级H桥也可调压。
48M晶振的STC对线路的要求相对严格,电路用洞洞板搭的,没什么特别,但是0插拔力插座有时候没插稳会出现不稳定现象,要重新插拔一下。
48M晶振的好处就是能把载波推高到20K,不过我觉得16K就差不多了。
弱弱的问一句,本人有 51+C 基础,以前一直使用C8051的片子。貌似外设也相当的多,据自己称呼为独立的片上系统。
不知51与CM3有何本质上的区别(除了位数X4以外),学习起来是否容易?应该从何处下手?没有C++基础使用ARM 操作系统是否会有困难?还请不吝赐教!